diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7eec7629a5ba75b00e1dd9a1ef40c9da33ea42f8..cf00d248a0e1f49fcd9cbef1613783d749d3ee56 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -335,8 +335,8 @@ package-and-qa: - ./scripts/trigger-build omnibus when: manual only: - - //@gitlab-org/gitlab-ce - - //@gitlab-org/gitlab-ee + - /.+/@gitlab-org/gitlab-ce + - /.+/@gitlab-org/gitlab-ee # Review docs base .review-docs: &review-docs @@ -406,7 +406,7 @@ cloud-native-image: variables: GIT_DEPTH: "1" cache: {} - when: always + when: manual script: - gem install gitlab --no-document - CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng @@ -846,10 +846,10 @@ gitlab:assets:compile: - public/assets/ <<: *assets-compile-cache only: - - //@gitlab-org/gitlab-ce - - //@gitlab-org/gitlab-ee - - //@gitlab/gitlabhq - - //@gitlab/gitlab-ee + - /.+/@gitlab-org/gitlab-ce + - /.+/@gitlab-org/gitlab-ee + - /.+/@gitlab/gitlabhq + - /.+/@gitlab/gitlab-ee tags: - docker - gitlab-org @@ -859,6 +859,7 @@ gitlab:ui:visual: tags: - gitlab-org before_script: [] + allow_failure: true dependencies: - compile-assets script: @@ -1167,7 +1168,7 @@ no_ee_check: script: - scripts/no-ee-check only: - - //@gitlab-org/gitlab-ce + - /.+/@gitlab-org/gitlab-ce # GitLab Review apps .review-build-cng-base: &review-build-cng-base diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 97e39ce99cb8e33f0abaffd2d56abeee7253b4e9..77ad4753c84e2cb9bbff0a1beedabc885d13fde8 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -268,6 +268,7 @@ Rails/Presence: - 'app/models/clusters/platforms/kubernetes.rb' - 'app/models/concerns/mentionable.rb' - 'app/models/concerns/token_authenticatable.rb' + - 'app/models/project_services/hipchat_service.rb' - 'app/models/project_services/irker_service.rb' - 'app/models/project_services/jira_service.rb' - 'app/models/project_services/kubernetes_service.rb' diff --git a/.stylelintrc b/.stylelintrc index 04784a0a11a772fc0661b6e868328cd6f5e58565..c0f21aed2926e7c48791d14fd5a83f24c0deb4dd 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -102,6 +102,6 @@ "selector-pseudo-element-no-unknown":true, "shorthand-property-no-redundant-values":true, "string-quotes":"single", - "value-no-vendor-prefix":true + "value-no-vendor-prefix":[true, { ignoreValues: ["sticky"] }] } } diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md index 54cc849f69a5c39a0b703e7c8a93d7aa2abf2cb6..ac39489de1be4085e4d91da9303f2f09d2b36b8f 100644 --- a/CHANGELOG-EE.md +++ b/CHANGELOG-EE.md @@ -1,5 +1,181 @@ Please view this file on the master branch, on stable branches it's out of date. +## 11.9.12 (2019-05-30) + +### Security (3 changes, 1 of them is from the community) + +- Filter relative links in wiki for XSS. (kerrizor) +- Fix XSS in Ancestor tooltip title. +- Ignore out of range epic IDs. + + +## 11.9.11 (2019-04-30) + +- No changes. + +## 11.9.10 (2019-04-26) + +### Security (1 change) + +- Handle race condition when creating an MR approval. + +### Fixed (1 change, 1 of them is from the community) + +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !11312 (wdmcheng) + + +## 11.9.9 (2019-04-23) + +### Fixed (1 change) + +- Fix approval rules when used with relative url root. !10819 + + +## 11.9.8 (2019-04-11) + +### Fixed (1 change) + +- Fix sorting by priority with filtering by approvers. !10446 + + +## 11.9.7 (2019-04-09) + +### Security (1 change) + +- Expose only basic group attributes in boards API. + + +## 11.9.6 (2019-04-04) + +### Fixed (3 changes) + +- Fix project approval rule with only private group being considered as approved when override is allowed. !10356 +- Fix approval rule sourcing from forked MR. !10474 +- Guard against ldap_sync_last_sync_at being nil. !10505 + +### Added (1 change) + +- Add Insights frontend to retrieve and render chart. !9856 + + +## 11.9.5 (2019-04-03) + +- Unreleased due to QA failure + +## 11.9.4 (2019-03-28) + +### Security (1 change) + +- Check label_ids parent when updating issue board. + + +## 11.9.2 (2019-03-26) + +### Security (2 changes) + +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Check label_ids parent when updating issue board. + + +## 11.9.1 (2019-03-25) + +### Fixed (1 change) + +- Fix date save for Epic to reflect on UI immediately after save. !10321 + + +## 11.9.0 (2019-03-22) + +### Security (4 changes) + +- Prevent Group SAML authorizing sign in without prior user approval. +- Respect group membership lock when importing a member from another group. +- Remove the possibility to share a project with a group that a user is not a member of. +- Prevent SAML access when disabled by group admin on GitLab.com. + +### Fixed (22 changes) + +- Allow assigning Prometheus alerts to multiple environments. !7361 +- Fix repo pushes while initial Elasticsearch indexing not permitting initial indexing to complete. !9478 +- Fix vulnerability occurrence scope to trailing 30 days. !9494 +- Skip whitelisted vulnerabilities in Container Scanning reports. !9528 +- Fix npm registry for yarn. !9599 +- Renders inline downstream & upstream pipelines. !9627 +- Prunes whole Geo event when there's only a primary. !9630 +- Fix alert notifications for non-public projects. !9636 +- Fix 500 error when visiting merged merge request. !9648 +- Allow plus symbol in maven package version. !9657 +- Show commands applied message when promoting issues to epics. !9669 +- Ensure comments from merge request review is displayed in the same order as user commenting order. !9684 +- Geo - Fix selective sync by namespace. !9732 +- Fix bridge jobs than can be hidden keys too. !9796 +- Fix approval-related UI showing up in free plan. !9819 +- Add 'No approvals required' view to approval rules (behind feature flag). !9899 +- Fix npm package install with a dot in the name. !9900 +- GroupSAML for GitLab.com prevents blank NameID. !9907 +- Fix protected environment initializer. !10150 +- Fix SSH pull mirrors not working. !10272 +- Fix HTML spew in Locked Files page. +- Fixes Broken new/edit feature flag form. + +### Changed (9 changes, 1 of them is from the community) + +- Remove authorization from /managed_licenses. !8541 +- Consider dismissed items in security reports summary. !9275 +- Add backend for cross-project pipeline dashboard MVC. !9396 +- Create merge request approval rule for each code owner entry. !9455 +- Split severity and confidence values for vulnerabilities. !9495 +- Enforce Geo JWT tokens scope for file uploads and Geo API. !9502 +- Update cluster health empty state. !9540 (George Tsiolis) +- Add extra graph spacing on the Security Dashboard Group Vulnerability Chart. !9780 +- Add Kerberos URL back to clone panel. !9840 + +### Performance (1 change) + +- Eliminate N+1 queries in Epics API. !9897 + +### Added (23 changes, 1 of them is from the community) + +- Enabled setting the Security Dashboard as a default view for groups. !7889 +- Add reordering of child epics. !9283 +- Create MR from Vulnerability Solution. !9326 +- Create pool repositories on Geo secondaries. !9428 +- Add date range for security dashboard graph. !9446 +- Add filtering merge requests by approvers. !9468 +- Add audit log for managing feature flags. !9487 +- Add DELETE package API endpoint. !9623 +- Enrich container scanning report. !9641 +- Adapt feedback for Container Scanning vulnerabilities. !9655 +- Enforce merge request approvals from code owners. !9656 +- Added vendored CI/CD template for Dependency Scanning job. !9660 +- Add Insights config behind the "group_insights" feature flag. !9665 +- Add single package API endpoint. !9667 +- Added GET /licenses and DELETE /license/:id endpoints. !9733 +- Add container scanning results to group security dashboard. !9736 +- Add an incident management settings form and create issues from alertmanager alerts. !9773 +- Add API for reordering child epics. !9781 +- Allow guests to comment on epics. !9783 +- Display Recent Boards in Board switcher. !9808 +- Add Ancestors in Epic Sidebar. !9817 +- Add vendored templates for SAST, DAST, Container Scanning and License Management job definitions. !9921 +- Add realtime validation for user fullname and username on validation. !25017 (Ehsan Abdulqader @EhsanZ) + +### Other (12 changes, 1 of them is from the community) + +- Use export-import svg from gitlab-svgs. !9453 +- Renames 'revert dismissal' to 'undo dismiss' on the Group security dashboard. !9500 +- Using positional arguments in request specs have been deprecated. !9506 (Jasper Maes) +- Splits the severity and confidence constants in the group security dashboard frontend. !9535 +- Add Gitlab.com gold trial callout to /billings. !9611 +- Update project settings section titles and info. !9614 +- Improve visual consistency of values in vulnerability modal. !9616 +- Limit Group Security Dashboard to selected types of report. !9626 +- Make related issues components reusable. !9730 +- sidekiq-cluster: put each sidekiq in a new pgroup. !9775 +- License Management: Load up to a 100 licenses per default. !9913 +- Adds documentation for autoremediation. !10054 + + ## 11.8.0 (2019-02-22) ### Security (2 changes) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f2a1dc7de3d44d906a37a8e5b6e9d4968cd5995..2b6d2a399456848d84c34595cc3a73ab63536e66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,385 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.9.12 (2019-05-30) + +### Security (12 changes, 1 of them is from the community) + +- Protect Gitlab::HTTP against DNS rebinding attack. +- Fix project visibility level validation. (Peter Marko) +- Update Knative version. +- Add DNS rebinding protection settings. +- Prevent XSS injection in note imports. +- Prevent invalid branch for merge request. +- Filter relative links in wiki for XSS. +- Fix confidential issue label disclosure on milestone view. +- Fix url redaction for issue links. +- Resolve: Milestones leaked via search API. +- Prevent bypass of restriction disabling web password sign in. +- Hide confidential issue title on unsubscribe for anonymous users. + + +## 11.9.11 (2019-04-30) + +### Security (1 change) + +- Allow to see project events only with api scope token. + + +## 11.9.10 (2019-04-26) + +### Security (5 changes) + +- Loosen regex for exception sanitization. !3077 +- Resolve: moving an issue to private repo leaks namespace and project name. +- Escape path in new merge request mail. +- Stop sending emails to users who can't read commit. +- Upgrade Rails to 5.0.7.2. + + +## 11.9.9 (2019-04-23) + +### Performance (1 change) + +- Bring back Rugged implementation of ListCommitsByOid. !27441 + + +## 11.9.8 (2019-04-11) + +### Deprecated (1 change) + +- Allow to use untrusted Regexp via feature flag. !26905 + +### Performance (2 changes) + +- Improve performance of PR import. !27121 +- Disable method instrumentation for diffs. !27235 + +### Other (1 change) + +- Restore HipChat project service. !27172 + + +## 11.9.7 (2019-04-09) + +- No changes. + +## 11.9.6 (2019-04-04) + +### Fixed (3 changes) + +- Force to recreate all MR diffs on import. !26480 +- Fix API /project/:id/branches not returning correct merge status. !26785 +- Avoid excessive recursive calls with Rugged TreeEntries. !26813 + +### Performance (1 change) + +- Force a full GC after importing a project. !26803 + + +## 11.9.5 (2019-04-03) + +- Unreleased due to QA failure + +## 11.9.4 (2019-03-28) + +### Security (8 changes) + +- Disallow guest users from accessing Releases. +- Fix PDF.js vulnerability. +- Hide "related branches" when user does not have permission. +- Fix XSS in resolve conflicts form. +- Added rake task for removing EXIF data from existing uploads. +- Return cached languages if they've been detected before. +- Disallow updating namespace when updating a project. +- Use UntrustedRegexp for matching refs policy. + + +## 11.9.3 (2019-03-27) + +- Unreleased due to QA failure. + +## 11.9.2 (2019-03-26) + +- Unreleased due to QA failure. + +## 11.9.1 (2019-03-25) + +### Fixed (7 changes) + +- Fix issue that caused the "Show all activity" button to appear on top of the mini pipeline status dropdown on the merge request page. !26274 +- Fix duplicated bottom match line on merge request parallel diff view. !26402 +- Allow users who can push to protected branches to create protected branches via CLI. !26413 +- Add missing .gitlab-ci.yml to Android template. !26415 +- Refresh commit count after repository head changes. !26473 +- Set proper default-branch for repository on GitHub Import. !26476 +- GitHub importer: Use the project creator to create branches from forks. !26510 + +### Changed (1 change) + +- Upgrade to Gitaly v1.27.1. !26533 + + +## 11.9.0 (2019-03-22) + +### Security (24 changes) + +- Use encrypted runner tokens. !25532 +- Stop linking to unrecognized package sources. !55518 +- Disable issue boards API when issues are disabled. +- Forbid creating discussions for users with restricted access. +- Fix leaking private repository information in API. +- Fixed ability to see private groups by users not belonging to given group. +- Prevent releases links API to leak tag existance. +- Display the correct number of MRs a user has access to. +- Block local URLs for Kubernetes integration. +- Fix arbitrary file read via diffs during import. +- Check if desired milestone for an issue is available. +- Don't allow non-members to see private related MRs. +- Check snippet attached file to be moved is within designated directory. +- Fix blind SSRF in Prometheus integration by checking URL before querying. +- Fix git clone revealing private repo's presence. +- Remove project serialization in quick actions response. +- Don't show new issue link after move when a user does not have permissions. +- Limit mermaid rendering to 5K characters. +- Show only merge requests visible to user on milestone detail page. +- Display only information visible to current user on the Milestone page. +- Do not display impersonated sessions under active sessions and remove ability to revoke session. +- Validate session key when authorizing with GCP to create a cluster. +- Do not disclose milestone titles for unauthorized users. +- Remove the possibility to share a project with a group that a user is not a member of. + +### Removed (1 change) + +- Remove HipChat integration from GitLab. !22223 + +### Fixed (86 changes, 21 of them are from the community) + +- Fixes issue with AWS V4 signatures not working with some S3 providers. !21788 +- Validate 'include' keywords in gitlab-ci.yml configuration files. !24098 (Paul Bonaud) +- Close More Actions tooltip when menu opens. !24285 +- API: Support Jira transition ID as string. !24400 (Robert Schilling) +- Fixed navigation sidebar flashing open on page load. !24555 +- Fix username escaping when using assign to me for issues. !24673 +- commit page info-well overflow fix #56436. !24799 (Gokhan Apaydin) +- Fix error tracking list page. !24806 +- Fix overlapping empty-header logo. !24868 (Jonas L.) +- Resolve Jobs tab border top in pipeline's page is 1px off. !24878 +- Require maintainer access to show pages domain settings. !24926 +- Display error message when API call to list Sentry issues fails. !24936 +- Fix rollout status for statefulsets and daemonsets. !24972 (Sergej Nikolaev ) +- Display job names consistently on pipelines and environments list. !24984 +- Update new password breadcrumb. !25037 (George Tsiolis) +- Fixes functions finder for upgraded Knative app. !25067 +- Provide expires_in in LFS authentication payload. !25082 +- Fix validation of certain ed25519 keys. !25115 (Merlijn B. W. Wajer) +- Timer and action name aligned vertically for delayed jobs in pipeline actions. !25117 (Gokhan Apaydin) +- Fix the border style of CONTRIBUTING button when it exists. !25124 (Takuya Noguchi) +- Change badges.svg example to pipeline.svg. !25157 (Aviad Levy) +- API: Fix docs and parameters for hangouts-chat service. !25180 (Robert Schilling) +- API: Expose full commit title. !25189 (Robert Schilling) +- API: Require only one parameter when updating a wiki. !25191 (Robert Schilling) +- Hide pipeline status when pipelines are disabled on project. !25204 +- Fix alignment of dropdown icon on issuable on mobile. !25205 (Takuya Noguchi) +- Add left margin to 1st time contributor badge. !25216 (Gokhan Apaydin) +- Use limited counter for runner build count in admin page. !25220 +- API: Ensure that related merge requests are referenced cross-project. !25222 (Robert Schilling) +- Ensure the base pipeline of a Merge Request belongs to its target branch. !25226 +- Fix import_jid error on project import. !25239 +- Fix commenting on commits having SHA1 starting with a large number. !25278 +- Allow empty values such as [] to be stored in reactive cache. !25283 +- Remove vertical connecting line placeholder from diff discussion notes. !25292 +- Fix hover and active state colors of award emoji button. !25295 +- Fix author layouts in issuable meta line UIs on mobile. !25332 (Takuya Noguchi) +- Fix bug where project topics truncate. !25398 +- Fix ETag caching not being used for AJAX requests. !25400 +- Doc - fix the url of pipeline status badge. !25404 (Aviad Levy) +- Fix pipeline status icon mismatch. !25407 +- Allow users to compare branches on a read-only instance. !25414 +- Fix 404s when C++ .gitignore template selected. !25416 +- Always fetch MR latest version when creating suggestions. !25441 +- Only show borders for markdown images in notes. !25448 +- Bring back Rugged implementation of find_commit. !25477 +- Remove duplicate units from metrics graph. !25485 +- Fix project import error importing releases. !25495 +- Remove duplicate XHR request when requesting new pipeline page. !25506 +- Properly handle multiple X-Forwarded-For addresses in runner IP. !25511 +- Fix weekday shift in issue board cards for UTC+X timezones by removing local timezone to UTC conversion. !25512 (Elias Werberich) +- Fix large table horizontal scroll and prevent side-by-side tables. !25520 (Dany Jupille) +- Fix error when viewing group issue boards when user doesn't have explicit group permissions. !25524 +- Respect the should_remove_source_branch parameter to the merge API. !25525 +- Externalize markdown toolbar buttons tooltips. !25529 +- Fix method to mark a project repository as writable. !25546 +- fix group without owner after transfer. !25573 (Peter Marko) +- Fix pagination and duplicate requests in environments page. !25582 +- Improve the JS pagination to handle the case when the `X-Total` and `X-Total-Pages` headers aren't present. !25601 +- Add right padding to the repository mirror action buttons. !25606 +- Use 'folder-open' from sprite icons for Browse Files button in Tag page. !25635 +- Make merge to refs/merge-requests/:iid/merge not raise when FF-only enabled. !25653 +- Fixed "Copying comment with ordered list includes extraneous newlines". !25695 +- Fix bridge jobs only/except variables policy. !25710 +- Allow GraphQL requests without CSRF token. !25719 +- Skip Project validation during Hashed Storage migration or rollback. !25753 +- Resolve showing squash commit edit issue when only single commit is present. !25807 +- Fix the last-ditch memory killer pgroup SIGKILL. !25940 +- Disable timeout on merge request merging poll. !25988 +- Allow modifying squash commit message for fast-forward only merge method. !26017 +- Fix bug in BitBucket imports with SHA shorter than 40 chars. !26050 +- Fix health checks not working behind load balancers. !26055 +- Fix 500 error caused by CODEOWNERS with no matches. !26072 +- Fix notes being marked as edited after resolving. !26143 +- Fix error creating a merge request when diff includes a null byte. !26190 +- Fix undefined variable error on json project views. !26297 +- GitHub import: Create new branches as project owner. !26335 +- Gracefully handles excluded fields from attributes during serialization on JsonCache. !26368 +- Admin section finds users case-insensitively. +- Fixes not working dropdowns in pipelines page. +- Do not show file templates when creating a new directory in WebIDE. +- Allow project members to see private group if the project is in the group namespace. +- Allow maintainers to remove pages. +- Fix inconsistent pagination styles. +- Fixed blob editor deleting file content for certain file paths. +- Fix upcoming milestone when there are milestones with far-future due dates. +- Fixed alignment of changed icon in Web IDE. + +### Changed (31 changes, 10 of them are from the community) + +- Improve snippets empty state. !18348 (George Tsiolis) +- Remove second primary button on wiki edit. !19959 (George Tsiolis) +- Allow raw `tls_options` to be passed in LDAP configuration. !20678 +- Remove undigested token column from personal_access_tokens table from the database. !22743 +- Update activity filter for issues. !23423 (George Tsiolis) +- Use auto-build-image for build job in Auto-DevOps.gitlab-ci.yml. !24279 +- Error tracking configuration - add a Sentry project selection dropdown. !24701 +- Move ChatOps to Core. !24780 +- Implement new arguments `state`, `closed_before` and `closed_after` for `IssuesResolver` in GraphQL. !24910 +- Validate kubernetes cluster CA certificate. !24990 +- Review App Link to Changed Page if Only One Change Present. !25048 +- Show pipeline ID, commit, and branch name on modal while stopping pipeline. !25059 +- Improve empty state for starred projects. !25138 +- Capture due date when importing milestones from Github. !25182 (dstanley) +- Add a spinner icon which is rendered using pure css. !25186 +- Make emoji picker bigger. !25187 (Jacopo Beschi @jacopo-beschi) +- API: Sort tie breaker with id DESC. !25311 (Nermin Vehabovic) +- Add iOS-fastlane template for .gitlab-ci.yml. !25395 +- Move language setting to preferences. !25427 (Fabian Schneider @fabsrc) +- Resolve Create Project Template for Netlify. !25453 +- Sort labels alphabetically on issues and merge requests list. !25470 +- Add Project template for .NET Core. !25486 +- Update operations settings breadcrumb trail. !25539 (George Tsiolis) +- Add Project template for go-micro. !25553 +- Jira: make issue links title compact. !25609 (Elan Ruusamäe @glensc) +- Project level filtering for JupyterHub. !25684 (Amit Rathi (amit1rrr)) +- Clean up vendored templates. !25794 +- Mask all TOKEN and PASSWORD CI variables. !25868 +- Add project template for Android. !25870 +- Add iOS project template. !25872 +- Upgrade to Gitaly v1.26.0. !25890 + +### Performance (11 changes) + +- Improve performance for diverging commit counts. !24287 +- Optimize Redis usage in User::ActivityService. !25005 +- Only load syntax highlight CSS of selected theme. !25232 +- Improve label select rendering. !25281 +- Enable persisted pipeline stages by default. !25347 +- Speed up group issue search counts. !25411 +- Load repository language from the database if detected before. !25518 +- Remove N+1 query for tags in /admin/runners page. !25572 +- Eliminate most N+1 queries loading UserController#calendar_activities. !25697 +- Improve Web IDE launch performance. !25700 +- Significantly reduce N+1 queries in /api/v4/todos endpoint. !25711 + +### Added (55 changes, 18 of them are from the community) + +- Add a tag filter to the admin runners view. !19740 (Alexis Reigel) +- Add project fetch statistics. !23596 (Jacopo Beschi @jacopo-beschi) +- Hashed Storage rollback mechanism. !23955 +- Allow to recursively expand includes. !24356 +- Allow expanding a diff to display full file. !24406 +- Support `only: changes:` on MR pipelines. !24490 (Hiroyuki Sato) +- Expose additional merge request pipeline variables. !24595 (Hiroyuki Sato) +- Add metadata about the GitLab server to GraphQL. !24636 +- Support merge ref writing (without merging to target branch). !24692 +- Add field mergeRequests for project in GraphQL. !24805 +- API support for MR merge to temporary merge ref path. !24918 +- Ability to filter confidential issues. !24960 (Robert Schilling) +- Allow creation of branches that match a wildcard protection, except directly through git. !24969 +- Add related merge request count to api response. !24974 +- Add realtime validation for user fullname and username on validation. !25017 (Ehsan Abdulqader @EhsanZ) +- Allow setting feature flags per GitLab group through the API. !25022 +- Add API endpoint to get a commit's GPG signature. !25032 +- Add support for FTP assets for releases. !25071 (Robert Schilling) +- Add Confirmation Modal to Rollback on Environment. !25110 +- add title attribute to display file name. !25154 (Satoshi Nakamatsu @satoshicano) +- API: Expose text_color for project and group labels. !25172 (Robert Schilling) +- Added support for ingress hostnames. !25181 (walkafwalka) +- API: Promote project milestone to a group milestone. !25203 (Nermin Vehabovic) +- API: Expose if the current user can merge a MR. !25207 (Robert Schilling) +- add readme to changelogs directory. !25209 (@glensc) +- API: Indicate if label is a project label. !25219 (Robert Schilling) +- Expose refspecs and depth to runner. !25233 +- Port System Header and Footer feature to Core. !25241 +- Sort Environments by Last Updated. !25260 +- Accept force option to overwrite branch on commit via API. !25286 +- Add support for masking CI variables. !25293 +- Add Link from Closed (moved) Issues to Moved Issue. !25300 +- Next/previous navigation between files in MR review. !25355 +- Add YouTrack integration service. !25361 (Yauhen Kotau @bessorion) +- Add ability to set path and name for project on fork using API. !25363 +- Add project level config for merge pipelines. !25385 +- Edit Knative domain after it has been deployed. !25386 +- Add zoom and scroll to metrics dashboard. !25388 +- Persist source sha and target sha for merge pipelines. !25417 +- Add support for toggling discussion filter from notes section. !25426 +- Resolve Move files in the Web IDE. !25431 +- Show header and footer system messages in email. !25474 +- Allow configuring POSTGRES_VERSION in Auto DevOps. !25500 +- Add Saturday to Localization first day of the week. !25509 (Ahmad Haghighi) +- Extend the Gitlab API for deletion of job_artifacts of a single job. !25522 (rroger) +- Simplify CI/CD configuration on serverless projects. !25523 +- Add button to start discussion from single comment. !25575 +- sidekiq: terminate child processes at shutdown. !25669 +- Expose merge request entity for pipelines. !25679 +- Link to most recent MR from a branch. !25689 +- Adds Auto DevOps build job for tags. !25718 (walkafwalka) +- Allow all snippets to be accessed by API. !25772 +- Make file tree in merge requests resizable. +- Make the Web IDE the default editor. +- File uploads are deleted asynchronously when deleting a project or group. + +### Other (28 changes, 6 of them are from the community) + +- Improve GitHub and Gitea project import table UI. !24606 +- Externalize strings from `/app/views/projects/commit`. !24668 (George Tsiolis) +- Correct non-standard unicode spaces to regular unicode. !24795 (Marcel Amirault) +- Provide a performance bar link to the Jaeger UI. !24902 +- Remove BATCH_SIZE from WikiFileFinder. !24933 +- Use export-import svgs from gitlab-svgs. !24954 +- Fix N+1 query in Issues and MergeRequest API when issuable_metadata is present. !25042 (Alex Koval) +- Directly inheriting from ActiveRecord::Migration is deprecated. !25066 (Jasper Maes) +- Bump Helm and kubectl in Auto DevOps to 2.12.3 and 1.11.7 respectively. !25072 +- Log queue duration in production_json.log. !25075 +- Extracted ResolveWithIssueButton to its own component. !25093 (Martin Hobert) +- Add rectangular project and group avatars. !25098 +- Include note in the Rails filter_parameters configuration. !25238 +- Bump Helm and kubectl used in Kubernetes integration to 2.12.3 and 1.11.7 respectively. !25268 +- Include gl_project_path in API /internal/allowed response. !25314 +- Fix incorrect Pages Domains checkbox description. !25392 (Anton Melser) +- Update GitLab Runner Helm Chart to 0.2.0. !25493 +- Add suffix (`_event`) to merge request source. !25508 +- Creates a helper function to check if repo is EE. !25647 +- If chpst is available, make fron-source installations run sidekiq as a process group leader. !25654 +- Bring back Rugged implementation of GetTreeEntries. !25674 +- Moves EE util into the CE file. !25680 +- Bring back Rugged implementation of CommitIsAncestor. !25702 +- Bring back Rugged implementation of TreeEntry. !25706 +- Enable syntax highlighting to other supported markups. !25761 +- Update GitLab Shell to v8.7.1. !25801 +- Bring back Rugged implementation of commit_tree_entry. !25896 +- Removes EE differences for jobs/getters.js. + + ## 11.8.0 (2019-02-22) ### Security (7 changes, 1 of them is from the community) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 5ff8c4f5d2ad2fab0f675c329d99cc618ac3e74c..457f0385465cbbb74e48be3c882ccbf7b806ba90 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.26.0 +1.27.2 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 56b6be4ebb2fbc0d9e24985c7879698c94d1ba3f..d127a0ff9f199f05b8c074da7c00698f7324117e 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.3.1 +8.3.3 diff --git a/Gemfile b/Gemfile index b6ecd99bca30f95a89556659cc330c4fa844b090..894832dac17136734f6440ce1fe84ebf06e065e2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rails', '5.0.7.1' +gem 'rails', '5.0.7.2' gem 'rails-deprecated_sanitizer', '~> 1.0.3' # Improves copy-on-write performance for MRI @@ -18,7 +18,7 @@ gem 'gitlab-default_value_for', '~> 3.1.1', require: 'default_value_for' gem 'mysql2', '~> 0.4.10', group: :mysql gem 'pg', '~> 1.1', group: :postgres -gem 'rugged', '~> 0.27' +gem 'rugged', '~> 0.28' gem 'grape-path-helpers', '~> 1.0' gem 'faraday', '~> 0.12' @@ -214,6 +214,9 @@ gem 'connection_pool', '~> 2.0' # Discord integration gem 'discordrb-webhooks-blackst0ne', '~> 3.3', require: false +# HipChat integration +gem 'hipchat', '~> 1.5.0' + # JIRA integration gem 'jira-ruby', '~> 1.4' @@ -277,6 +280,7 @@ gem 'gemojione', '~> 3.3' gem 'gon', '~> 6.2' gem 'jquery-atwho-rails', '~> 1.3.2' gem 'request_store', '~> 1.3' +gem 'select2-rails', '~> 3.5.9' gem 'virtus', '~> 1.0.1' gem 'base32', '~> 0.3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 925bcfb0989879d70e6ab0fb04f93902a0983217..16be6ab2d663fb6db1074141098b988ed3ae078a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,41 +4,41 @@ GEM RedCloth (4.3.2) abstract_type (0.0.7) ace-rails-ap (4.1.2) - actioncable (5.0.7.1) - actionpack (= 5.0.7.1) + actioncable (5.0.7.2) + actionpack (= 5.0.7.2) nio4r (>= 1.2, < 3.0) websocket-driver (~> 0.6.1) - actionmailer (5.0.7.1) - actionpack (= 5.0.7.1) - actionview (= 5.0.7.1) - activejob (= 5.0.7.1) + actionmailer (5.0.7.2) + actionpack (= 5.0.7.2) + actionview (= 5.0.7.2) + activejob (= 5.0.7.2) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.0.7.1) - actionview (= 5.0.7.1) - activesupport (= 5.0.7.1) + actionpack (5.0.7.2) + actionview (= 5.0.7.2) + activesupport (= 5.0.7.2) rack (~> 2.0) rack-test (~> 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.0.7.1) - activesupport (= 5.0.7.1) + actionview (5.0.7.2) + activesupport (= 5.0.7.2) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.0.7.1) - activesupport (= 5.0.7.1) + activejob (5.0.7.2) + activesupport (= 5.0.7.2) globalid (>= 0.3.6) - activemodel (5.0.7.1) - activesupport (= 5.0.7.1) - activerecord (5.0.7.1) - activemodel (= 5.0.7.1) - activesupport (= 5.0.7.1) + activemodel (5.0.7.2) + activesupport (= 5.0.7.2) + activerecord (5.0.7.2) + activemodel (= 5.0.7.2) + activesupport (= 5.0.7.2) arel (~> 7.0) activerecord_sane_schema_dumper (1.0) rails (>= 5, < 6) - activesupport (5.0.7.1) + activesupport (5.0.7.2) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -321,7 +321,7 @@ GEM omniauth (~> 1.3) pyu-ruby-sasl (>= 0.0.3.3, < 0.1) rubyntlm (~> 0.5) - globalid (0.4.1) + globalid (0.4.2) activesupport (>= 4.2.0) gon (6.2.0) actionpack (>= 3.0) @@ -391,6 +391,9 @@ GEM hashie (>= 3.0) health_check (2.6.0) rails (>= 4.0) + hipchat (1.5.2) + httparty + mimemagic html-pipeline (2.8.4) activesupport (>= 2) nokogiri (>= 1.4) @@ -410,7 +413,7 @@ GEM json (~> 1.8) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.2.0) + i18n (1.6.0) concurrent-ruby (~> 1.0) icalendar (2.4.1) ice_nine (0.11.2) @@ -664,17 +667,17 @@ GEM rack rack-test (0.6.3) rack (>= 1.0) - rails (5.0.7.1) - actioncable (= 5.0.7.1) - actionmailer (= 5.0.7.1) - actionpack (= 5.0.7.1) - actionview (= 5.0.7.1) - activejob (= 5.0.7.1) - activemodel (= 5.0.7.1) - activerecord (= 5.0.7.1) - activesupport (= 5.0.7.1) + rails (5.0.7.2) + actioncable (= 5.0.7.2) + actionmailer (= 5.0.7.2) + actionpack (= 5.0.7.2) + actionview (= 5.0.7.2) + activejob (= 5.0.7.2) + activemodel (= 5.0.7.2) + activerecord (= 5.0.7.2) + activesupport (= 5.0.7.2) bundler (>= 1.3.0) - railties (= 5.0.7.1) + railties (= 5.0.7.2) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.2) actionpack (~> 5.x, >= 5.0.1) @@ -690,9 +693,9 @@ GEM rails-i18n (5.1.1) i18n (>= 0.7, < 2) railties (>= 5.0, < 6) - railties (5.0.7.1) - actionpack (= 5.0.7.1) - activesupport (= 5.0.7.1) + railties (5.0.7.2) + actionpack (= 5.0.7.2) + activesupport (= 5.0.7.2) method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) @@ -815,7 +818,7 @@ GEM rubyntlm (0.6.2) rubypants (0.2.0) rubyzip (1.2.2) - rugged (0.27.5) + rugged (0.28.0) safe_yaml (1.0.4) sanitize (4.6.6) crass (~> 1.0.2) @@ -841,6 +844,8 @@ GEM seed-fu (2.3.7) activerecord (>= 3.1) activesupport (>= 3.1) + select2-rails (3.5.9.3) + thor (~> 0.14) selenium-webdriver (3.12.0) childprocess (~> 0.5) rubyzip (~> 1.2) @@ -1076,6 +1081,7 @@ DEPENDENCIES hangouts-chat (~> 0.0.5) hashie-forbidden_attributes health_check (~> 2.6.0) + hipchat (~> 1.5.0) html-pipeline (~> 2.8) html2text httparty (~> 0.13.3) @@ -1144,7 +1150,7 @@ DEPENDENCIES rack-cors (~> 1.0.0) rack-oauth2 (~> 1.2.1) rack-proxy (~> 0.6.0) - rails (= 5.0.7.1) + rails (= 5.0.7.2) rails-controller-testing rails-deprecated_sanitizer (~> 1.0.3) rails-i18n (~> 5.1) @@ -1175,7 +1181,7 @@ DEPENDENCIES ruby-progressbar ruby_parser (~> 3.8) rubyzip (~> 1.2.2) - rugged (~> 0.27) + rugged (~> 0.28) sanitize (~> 4.6) sass (~> 3.5) sass-rails (~> 5.0.6) diff --git a/VERSION b/VERSION index 00a946e3be3da51e45bed75e7c227a2d4fe496a7..af8743c35fca8611c1efc06b0ab354a1d2d45e5d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.9.0-pre +11.9.12-ee diff --git a/public/-/emojis/1/100.png b/app/assets/images/emoji/100.png similarity index 100% rename from public/-/emojis/1/100.png rename to app/assets/images/emoji/100.png diff --git a/public/-/emojis/1/1234.png b/app/assets/images/emoji/1234.png similarity index 100% rename from public/-/emojis/1/1234.png rename to app/assets/images/emoji/1234.png diff --git a/public/-/emojis/1/1F627.png b/app/assets/images/emoji/1F627.png similarity index 100% rename from public/-/emojis/1/1F627.png rename to app/assets/images/emoji/1F627.png diff --git a/public/-/emojis/1/8ball.png b/app/assets/images/emoji/8ball.png similarity index 100% rename from public/-/emojis/1/8ball.png rename to app/assets/images/emoji/8ball.png diff --git a/public/-/emojis/1/a.png b/app/assets/images/emoji/a.png similarity index 100% rename from public/-/emojis/1/a.png rename to app/assets/images/emoji/a.png diff --git a/public/-/emojis/1/ab.png b/app/assets/images/emoji/ab.png similarity index 100% rename from public/-/emojis/1/ab.png rename to app/assets/images/emoji/ab.png diff --git a/public/-/emojis/1/abc.png b/app/assets/images/emoji/abc.png similarity index 100% rename from public/-/emojis/1/abc.png rename to app/assets/images/emoji/abc.png diff --git a/public/-/emojis/1/abcd.png b/app/assets/images/emoji/abcd.png similarity index 100% rename from public/-/emojis/1/abcd.png rename to app/assets/images/emoji/abcd.png diff --git a/public/-/emojis/1/accept.png b/app/assets/images/emoji/accept.png similarity index 100% rename from public/-/emojis/1/accept.png rename to app/assets/images/emoji/accept.png diff --git a/public/-/emojis/1/aerial_tramway.png b/app/assets/images/emoji/aerial_tramway.png similarity index 100% rename from public/-/emojis/1/aerial_tramway.png rename to app/assets/images/emoji/aerial_tramway.png diff --git a/public/-/emojis/1/airplane.png b/app/assets/images/emoji/airplane.png similarity index 100% rename from public/-/emojis/1/airplane.png rename to app/assets/images/emoji/airplane.png diff --git a/public/-/emojis/1/airplane_arriving.png b/app/assets/images/emoji/airplane_arriving.png similarity index 100% rename from public/-/emojis/1/airplane_arriving.png rename to app/assets/images/emoji/airplane_arriving.png diff --git a/public/-/emojis/1/airplane_departure.png b/app/assets/images/emoji/airplane_departure.png similarity index 100% rename from public/-/emojis/1/airplane_departure.png rename to app/assets/images/emoji/airplane_departure.png diff --git a/public/-/emojis/1/airplane_small.png b/app/assets/images/emoji/airplane_small.png similarity index 100% rename from public/-/emojis/1/airplane_small.png rename to app/assets/images/emoji/airplane_small.png diff --git a/public/-/emojis/1/alarm_clock.png b/app/assets/images/emoji/alarm_clock.png similarity index 100% rename from public/-/emojis/1/alarm_clock.png rename to app/assets/images/emoji/alarm_clock.png diff --git a/public/-/emojis/1/alembic.png b/app/assets/images/emoji/alembic.png similarity index 100% rename from public/-/emojis/1/alembic.png rename to app/assets/images/emoji/alembic.png diff --git a/public/-/emojis/1/alien.png b/app/assets/images/emoji/alien.png similarity index 100% rename from public/-/emojis/1/alien.png rename to app/assets/images/emoji/alien.png diff --git a/public/-/emojis/1/ambulance.png b/app/assets/images/emoji/ambulance.png similarity index 100% rename from public/-/emojis/1/ambulance.png rename to app/assets/images/emoji/ambulance.png diff --git a/public/-/emojis/1/amphora.png b/app/assets/images/emoji/amphora.png similarity index 100% rename from public/-/emojis/1/amphora.png rename to app/assets/images/emoji/amphora.png diff --git a/public/-/emojis/1/anchor.png b/app/assets/images/emoji/anchor.png similarity index 100% rename from public/-/emojis/1/anchor.png rename to app/assets/images/emoji/anchor.png diff --git a/public/-/emojis/1/angel.png b/app/assets/images/emoji/angel.png similarity index 100% rename from public/-/emojis/1/angel.png rename to app/assets/images/emoji/angel.png diff --git a/public/-/emojis/1/angel_tone1.png b/app/assets/images/emoji/angel_tone1.png similarity index 100% rename from public/-/emojis/1/angel_tone1.png rename to app/assets/images/emoji/angel_tone1.png diff --git a/public/-/emojis/1/angel_tone2.png b/app/assets/images/emoji/angel_tone2.png similarity index 100% rename from public/-/emojis/1/angel_tone2.png rename to app/assets/images/emoji/angel_tone2.png diff --git a/public/-/emojis/1/angel_tone3.png b/app/assets/images/emoji/angel_tone3.png similarity index 100% rename from public/-/emojis/1/angel_tone3.png rename to app/assets/images/emoji/angel_tone3.png diff --git a/public/-/emojis/1/angel_tone4.png b/app/assets/images/emoji/angel_tone4.png similarity index 100% rename from public/-/emojis/1/angel_tone4.png rename to app/assets/images/emoji/angel_tone4.png diff --git a/public/-/emojis/1/angel_tone5.png b/app/assets/images/emoji/angel_tone5.png similarity index 100% rename from public/-/emojis/1/angel_tone5.png rename to app/assets/images/emoji/angel_tone5.png diff --git a/public/-/emojis/1/anger.png b/app/assets/images/emoji/anger.png similarity index 100% rename from public/-/emojis/1/anger.png rename to app/assets/images/emoji/anger.png diff --git a/public/-/emojis/1/anger_right.png b/app/assets/images/emoji/anger_right.png similarity index 100% rename from public/-/emojis/1/anger_right.png rename to app/assets/images/emoji/anger_right.png diff --git a/public/-/emojis/1/angry.png b/app/assets/images/emoji/angry.png similarity index 100% rename from public/-/emojis/1/angry.png rename to app/assets/images/emoji/angry.png diff --git a/public/-/emojis/1/ant.png b/app/assets/images/emoji/ant.png similarity index 100% rename from public/-/emojis/1/ant.png rename to app/assets/images/emoji/ant.png diff --git a/public/-/emojis/1/apple.png b/app/assets/images/emoji/apple.png similarity index 100% rename from public/-/emojis/1/apple.png rename to app/assets/images/emoji/apple.png diff --git a/public/-/emojis/1/aquarius.png b/app/assets/images/emoji/aquarius.png similarity index 100% rename from public/-/emojis/1/aquarius.png rename to app/assets/images/emoji/aquarius.png diff --git a/public/-/emojis/1/aries.png b/app/assets/images/emoji/aries.png similarity index 100% rename from public/-/emojis/1/aries.png rename to app/assets/images/emoji/aries.png diff --git a/public/-/emojis/1/arrow_backward.png b/app/assets/images/emoji/arrow_backward.png similarity index 100% rename from public/-/emojis/1/arrow_backward.png rename to app/assets/images/emoji/arrow_backward.png diff --git a/public/-/emojis/1/arrow_double_down.png b/app/assets/images/emoji/arrow_double_down.png similarity index 100% rename from public/-/emojis/1/arrow_double_down.png rename to app/assets/images/emoji/arrow_double_down.png diff --git a/public/-/emojis/1/arrow_double_up.png b/app/assets/images/emoji/arrow_double_up.png similarity index 100% rename from public/-/emojis/1/arrow_double_up.png rename to app/assets/images/emoji/arrow_double_up.png diff --git a/public/-/emojis/1/arrow_down.png b/app/assets/images/emoji/arrow_down.png similarity index 100% rename from public/-/emojis/1/arrow_down.png rename to app/assets/images/emoji/arrow_down.png diff --git a/public/-/emojis/1/arrow_down_small.png b/app/assets/images/emoji/arrow_down_small.png similarity index 100% rename from public/-/emojis/1/arrow_down_small.png rename to app/assets/images/emoji/arrow_down_small.png diff --git a/public/-/emojis/1/arrow_forward.png b/app/assets/images/emoji/arrow_forward.png similarity index 100% rename from public/-/emojis/1/arrow_forward.png rename to app/assets/images/emoji/arrow_forward.png diff --git a/public/-/emojis/1/arrow_heading_down.png b/app/assets/images/emoji/arrow_heading_down.png similarity index 100% rename from public/-/emojis/1/arrow_heading_down.png rename to app/assets/images/emoji/arrow_heading_down.png diff --git a/public/-/emojis/1/arrow_heading_up.png b/app/assets/images/emoji/arrow_heading_up.png similarity index 100% rename from public/-/emojis/1/arrow_heading_up.png rename to app/assets/images/emoji/arrow_heading_up.png diff --git a/public/-/emojis/1/arrow_left.png b/app/assets/images/emoji/arrow_left.png similarity index 100% rename from public/-/emojis/1/arrow_left.png rename to app/assets/images/emoji/arrow_left.png diff --git a/public/-/emojis/1/arrow_lower_left.png b/app/assets/images/emoji/arrow_lower_left.png similarity index 100% rename from public/-/emojis/1/arrow_lower_left.png rename to app/assets/images/emoji/arrow_lower_left.png diff --git a/public/-/emojis/1/arrow_lower_right.png b/app/assets/images/emoji/arrow_lower_right.png similarity index 100% rename from public/-/emojis/1/arrow_lower_right.png rename to app/assets/images/emoji/arrow_lower_right.png diff --git a/public/-/emojis/1/arrow_right.png b/app/assets/images/emoji/arrow_right.png similarity index 100% rename from public/-/emojis/1/arrow_right.png rename to app/assets/images/emoji/arrow_right.png diff --git a/public/-/emojis/1/arrow_right_hook.png b/app/assets/images/emoji/arrow_right_hook.png similarity index 100% rename from public/-/emojis/1/arrow_right_hook.png rename to app/assets/images/emoji/arrow_right_hook.png diff --git a/public/-/emojis/1/arrow_up.png b/app/assets/images/emoji/arrow_up.png similarity index 100% rename from public/-/emojis/1/arrow_up.png rename to app/assets/images/emoji/arrow_up.png diff --git a/public/-/emojis/1/arrow_up_down.png b/app/assets/images/emoji/arrow_up_down.png similarity index 100% rename from public/-/emojis/1/arrow_up_down.png rename to app/assets/images/emoji/arrow_up_down.png diff --git a/public/-/emojis/1/arrow_up_small.png b/app/assets/images/emoji/arrow_up_small.png similarity index 100% rename from public/-/emojis/1/arrow_up_small.png rename to app/assets/images/emoji/arrow_up_small.png diff --git a/public/-/emojis/1/arrow_upper_left.png b/app/assets/images/emoji/arrow_upper_left.png similarity index 100% rename from public/-/emojis/1/arrow_upper_left.png rename to app/assets/images/emoji/arrow_upper_left.png diff --git a/public/-/emojis/1/arrow_upper_right.png b/app/assets/images/emoji/arrow_upper_right.png similarity index 100% rename from public/-/emojis/1/arrow_upper_right.png rename to app/assets/images/emoji/arrow_upper_right.png diff --git a/public/-/emojis/1/arrows_clockwise.png b/app/assets/images/emoji/arrows_clockwise.png similarity index 100% rename from public/-/emojis/1/arrows_clockwise.png rename to app/assets/images/emoji/arrows_clockwise.png diff --git a/public/-/emojis/1/arrows_counterclockwise.png b/app/assets/images/emoji/arrows_counterclockwise.png similarity index 100% rename from public/-/emojis/1/arrows_counterclockwise.png rename to app/assets/images/emoji/arrows_counterclockwise.png diff --git a/public/-/emojis/1/art.png b/app/assets/images/emoji/art.png similarity index 100% rename from public/-/emojis/1/art.png rename to app/assets/images/emoji/art.png diff --git a/public/-/emojis/1/articulated_lorry.png b/app/assets/images/emoji/articulated_lorry.png similarity index 100% rename from public/-/emojis/1/articulated_lorry.png rename to app/assets/images/emoji/articulated_lorry.png diff --git a/public/-/emojis/1/asterisk.png b/app/assets/images/emoji/asterisk.png similarity index 100% rename from public/-/emojis/1/asterisk.png rename to app/assets/images/emoji/asterisk.png diff --git a/public/-/emojis/1/astonished.png b/app/assets/images/emoji/astonished.png similarity index 100% rename from public/-/emojis/1/astonished.png rename to app/assets/images/emoji/astonished.png diff --git a/public/-/emojis/1/athletic_shoe.png b/app/assets/images/emoji/athletic_shoe.png similarity index 100% rename from public/-/emojis/1/athletic_shoe.png rename to app/assets/images/emoji/athletic_shoe.png diff --git a/public/-/emojis/1/atm.png b/app/assets/images/emoji/atm.png similarity index 100% rename from public/-/emojis/1/atm.png rename to app/assets/images/emoji/atm.png diff --git a/public/-/emojis/1/atom.png b/app/assets/images/emoji/atom.png similarity index 100% rename from public/-/emojis/1/atom.png rename to app/assets/images/emoji/atom.png diff --git a/public/-/emojis/1/avocado.png b/app/assets/images/emoji/avocado.png similarity index 100% rename from public/-/emojis/1/avocado.png rename to app/assets/images/emoji/avocado.png diff --git a/public/-/emojis/1/b.png b/app/assets/images/emoji/b.png similarity index 100% rename from public/-/emojis/1/b.png rename to app/assets/images/emoji/b.png diff --git a/public/-/emojis/1/baby.png b/app/assets/images/emoji/baby.png similarity index 100% rename from public/-/emojis/1/baby.png rename to app/assets/images/emoji/baby.png diff --git a/public/-/emojis/1/baby_bottle.png b/app/assets/images/emoji/baby_bottle.png similarity index 100% rename from public/-/emojis/1/baby_bottle.png rename to app/assets/images/emoji/baby_bottle.png diff --git a/public/-/emojis/1/baby_chick.png b/app/assets/images/emoji/baby_chick.png similarity index 100% rename from public/-/emojis/1/baby_chick.png rename to app/assets/images/emoji/baby_chick.png diff --git a/public/-/emojis/1/baby_symbol.png b/app/assets/images/emoji/baby_symbol.png similarity index 100% rename from public/-/emojis/1/baby_symbol.png rename to app/assets/images/emoji/baby_symbol.png diff --git a/public/-/emojis/1/baby_tone1.png b/app/assets/images/emoji/baby_tone1.png similarity index 100% rename from public/-/emojis/1/baby_tone1.png rename to app/assets/images/emoji/baby_tone1.png diff --git a/public/-/emojis/1/baby_tone2.png b/app/assets/images/emoji/baby_tone2.png similarity index 100% rename from public/-/emojis/1/baby_tone2.png rename to app/assets/images/emoji/baby_tone2.png diff --git a/public/-/emojis/1/baby_tone3.png b/app/assets/images/emoji/baby_tone3.png similarity index 100% rename from public/-/emojis/1/baby_tone3.png rename to app/assets/images/emoji/baby_tone3.png diff --git a/public/-/emojis/1/baby_tone4.png b/app/assets/images/emoji/baby_tone4.png similarity index 100% rename from public/-/emojis/1/baby_tone4.png rename to app/assets/images/emoji/baby_tone4.png diff --git a/public/-/emojis/1/baby_tone5.png b/app/assets/images/emoji/baby_tone5.png similarity index 100% rename from public/-/emojis/1/baby_tone5.png rename to app/assets/images/emoji/baby_tone5.png diff --git a/public/-/emojis/1/back.png b/app/assets/images/emoji/back.png similarity index 100% rename from public/-/emojis/1/back.png rename to app/assets/images/emoji/back.png diff --git a/public/-/emojis/1/bacon.png b/app/assets/images/emoji/bacon.png similarity index 100% rename from public/-/emojis/1/bacon.png rename to app/assets/images/emoji/bacon.png diff --git a/public/-/emojis/1/badminton.png b/app/assets/images/emoji/badminton.png similarity index 100% rename from public/-/emojis/1/badminton.png rename to app/assets/images/emoji/badminton.png diff --git a/public/-/emojis/1/baggage_claim.png b/app/assets/images/emoji/baggage_claim.png similarity index 100% rename from public/-/emojis/1/baggage_claim.png rename to app/assets/images/emoji/baggage_claim.png diff --git a/public/-/emojis/1/balloon.png b/app/assets/images/emoji/balloon.png similarity index 100% rename from public/-/emojis/1/balloon.png rename to app/assets/images/emoji/balloon.png diff --git a/public/-/emojis/1/ballot_box.png b/app/assets/images/emoji/ballot_box.png similarity index 100% rename from public/-/emojis/1/ballot_box.png rename to app/assets/images/emoji/ballot_box.png diff --git a/public/-/emojis/1/ballot_box_with_check.png b/app/assets/images/emoji/ballot_box_with_check.png similarity index 100% rename from public/-/emojis/1/ballot_box_with_check.png rename to app/assets/images/emoji/ballot_box_with_check.png diff --git a/public/-/emojis/1/bamboo.png b/app/assets/images/emoji/bamboo.png similarity index 100% rename from public/-/emojis/1/bamboo.png rename to app/assets/images/emoji/bamboo.png diff --git a/public/-/emojis/1/banana.png b/app/assets/images/emoji/banana.png similarity index 100% rename from public/-/emojis/1/banana.png rename to app/assets/images/emoji/banana.png diff --git a/public/-/emojis/1/bangbang.png b/app/assets/images/emoji/bangbang.png similarity index 100% rename from public/-/emojis/1/bangbang.png rename to app/assets/images/emoji/bangbang.png diff --git a/public/-/emojis/1/bank.png b/app/assets/images/emoji/bank.png similarity index 100% rename from public/-/emojis/1/bank.png rename to app/assets/images/emoji/bank.png diff --git a/public/-/emojis/1/bar_chart.png b/app/assets/images/emoji/bar_chart.png similarity index 100% rename from public/-/emojis/1/bar_chart.png rename to app/assets/images/emoji/bar_chart.png diff --git a/public/-/emojis/1/barber.png b/app/assets/images/emoji/barber.png similarity index 100% rename from public/-/emojis/1/barber.png rename to app/assets/images/emoji/barber.png diff --git a/public/-/emojis/1/baseball.png b/app/assets/images/emoji/baseball.png similarity index 100% rename from public/-/emojis/1/baseball.png rename to app/assets/images/emoji/baseball.png diff --git a/public/-/emojis/1/basketball.png b/app/assets/images/emoji/basketball.png similarity index 100% rename from public/-/emojis/1/basketball.png rename to app/assets/images/emoji/basketball.png diff --git a/public/-/emojis/1/basketball_player.png b/app/assets/images/emoji/basketball_player.png similarity index 100% rename from public/-/emojis/1/basketball_player.png rename to app/assets/images/emoji/basketball_player.png diff --git a/public/-/emojis/1/basketball_player_tone1.png b/app/assets/images/emoji/basketball_player_tone1.png similarity index 100% rename from public/-/emojis/1/basketball_player_tone1.png rename to app/assets/images/emoji/basketball_player_tone1.png diff --git a/public/-/emojis/1/basketball_player_tone2.png b/app/assets/images/emoji/basketball_player_tone2.png similarity index 100% rename from public/-/emojis/1/basketball_player_tone2.png rename to app/assets/images/emoji/basketball_player_tone2.png diff --git a/public/-/emojis/1/basketball_player_tone3.png b/app/assets/images/emoji/basketball_player_tone3.png similarity index 100% rename from public/-/emojis/1/basketball_player_tone3.png rename to app/assets/images/emoji/basketball_player_tone3.png diff --git a/public/-/emojis/1/basketball_player_tone4.png b/app/assets/images/emoji/basketball_player_tone4.png similarity index 100% rename from public/-/emojis/1/basketball_player_tone4.png rename to app/assets/images/emoji/basketball_player_tone4.png diff --git a/public/-/emojis/1/basketball_player_tone5.png b/app/assets/images/emoji/basketball_player_tone5.png similarity index 100% rename from public/-/emojis/1/basketball_player_tone5.png rename to app/assets/images/emoji/basketball_player_tone5.png diff --git a/public/-/emojis/1/bat.png b/app/assets/images/emoji/bat.png similarity index 100% rename from public/-/emojis/1/bat.png rename to app/assets/images/emoji/bat.png diff --git a/public/-/emojis/1/bath.png b/app/assets/images/emoji/bath.png similarity index 100% rename from public/-/emojis/1/bath.png rename to app/assets/images/emoji/bath.png diff --git a/public/-/emojis/1/bath_tone1.png b/app/assets/images/emoji/bath_tone1.png similarity index 100% rename from public/-/emojis/1/bath_tone1.png rename to app/assets/images/emoji/bath_tone1.png diff --git a/public/-/emojis/1/bath_tone2.png b/app/assets/images/emoji/bath_tone2.png similarity index 100% rename from public/-/emojis/1/bath_tone2.png rename to app/assets/images/emoji/bath_tone2.png diff --git a/public/-/emojis/1/bath_tone3.png b/app/assets/images/emoji/bath_tone3.png similarity index 100% rename from public/-/emojis/1/bath_tone3.png rename to app/assets/images/emoji/bath_tone3.png diff --git a/public/-/emojis/1/bath_tone4.png b/app/assets/images/emoji/bath_tone4.png similarity index 100% rename from public/-/emojis/1/bath_tone4.png rename to app/assets/images/emoji/bath_tone4.png diff --git a/public/-/emojis/1/bath_tone5.png b/app/assets/images/emoji/bath_tone5.png similarity index 100% rename from public/-/emojis/1/bath_tone5.png rename to app/assets/images/emoji/bath_tone5.png diff --git a/public/-/emojis/1/bathtub.png b/app/assets/images/emoji/bathtub.png similarity index 100% rename from public/-/emojis/1/bathtub.png rename to app/assets/images/emoji/bathtub.png diff --git a/public/-/emojis/1/battery.png b/app/assets/images/emoji/battery.png similarity index 100% rename from public/-/emojis/1/battery.png rename to app/assets/images/emoji/battery.png diff --git a/public/-/emojis/1/beach.png b/app/assets/images/emoji/beach.png similarity index 100% rename from public/-/emojis/1/beach.png rename to app/assets/images/emoji/beach.png diff --git a/public/-/emojis/1/beach_umbrella.png b/app/assets/images/emoji/beach_umbrella.png similarity index 100% rename from public/-/emojis/1/beach_umbrella.png rename to app/assets/images/emoji/beach_umbrella.png diff --git a/public/-/emojis/1/bear.png b/app/assets/images/emoji/bear.png similarity index 100% rename from public/-/emojis/1/bear.png rename to app/assets/images/emoji/bear.png diff --git a/public/-/emojis/1/bed.png b/app/assets/images/emoji/bed.png similarity index 100% rename from public/-/emojis/1/bed.png rename to app/assets/images/emoji/bed.png diff --git a/public/-/emojis/1/bee.png b/app/assets/images/emoji/bee.png similarity index 100% rename from public/-/emojis/1/bee.png rename to app/assets/images/emoji/bee.png diff --git a/public/-/emojis/1/beer.png b/app/assets/images/emoji/beer.png similarity index 100% rename from public/-/emojis/1/beer.png rename to app/assets/images/emoji/beer.png diff --git a/public/-/emojis/1/beers.png b/app/assets/images/emoji/beers.png similarity index 100% rename from public/-/emojis/1/beers.png rename to app/assets/images/emoji/beers.png diff --git a/public/-/emojis/1/beetle.png b/app/assets/images/emoji/beetle.png similarity index 100% rename from public/-/emojis/1/beetle.png rename to app/assets/images/emoji/beetle.png diff --git a/public/-/emojis/1/beginner.png b/app/assets/images/emoji/beginner.png similarity index 100% rename from public/-/emojis/1/beginner.png rename to app/assets/images/emoji/beginner.png diff --git a/public/-/emojis/1/bell.png b/app/assets/images/emoji/bell.png similarity index 100% rename from public/-/emojis/1/bell.png rename to app/assets/images/emoji/bell.png diff --git a/public/-/emojis/1/bellhop.png b/app/assets/images/emoji/bellhop.png similarity index 100% rename from public/-/emojis/1/bellhop.png rename to app/assets/images/emoji/bellhop.png diff --git a/public/-/emojis/1/bento.png b/app/assets/images/emoji/bento.png similarity index 100% rename from public/-/emojis/1/bento.png rename to app/assets/images/emoji/bento.png diff --git a/public/-/emojis/1/bicyclist.png b/app/assets/images/emoji/bicyclist.png similarity index 100% rename from public/-/emojis/1/bicyclist.png rename to app/assets/images/emoji/bicyclist.png diff --git a/public/-/emojis/1/bicyclist_tone1.png b/app/assets/images/emoji/bicyclist_tone1.png similarity index 100% rename from public/-/emojis/1/bicyclist_tone1.png rename to app/assets/images/emoji/bicyclist_tone1.png diff --git a/public/-/emojis/1/bicyclist_tone2.png b/app/assets/images/emoji/bicyclist_tone2.png similarity index 100% rename from public/-/emojis/1/bicyclist_tone2.png rename to app/assets/images/emoji/bicyclist_tone2.png diff --git a/public/-/emojis/1/bicyclist_tone3.png b/app/assets/images/emoji/bicyclist_tone3.png similarity index 100% rename from public/-/emojis/1/bicyclist_tone3.png rename to app/assets/images/emoji/bicyclist_tone3.png diff --git a/public/-/emojis/1/bicyclist_tone4.png b/app/assets/images/emoji/bicyclist_tone4.png similarity index 100% rename from public/-/emojis/1/bicyclist_tone4.png rename to app/assets/images/emoji/bicyclist_tone4.png diff --git a/public/-/emojis/1/bicyclist_tone5.png b/app/assets/images/emoji/bicyclist_tone5.png similarity index 100% rename from public/-/emojis/1/bicyclist_tone5.png rename to app/assets/images/emoji/bicyclist_tone5.png diff --git a/public/-/emojis/1/bike.png b/app/assets/images/emoji/bike.png similarity index 100% rename from public/-/emojis/1/bike.png rename to app/assets/images/emoji/bike.png diff --git a/public/-/emojis/1/bikini.png b/app/assets/images/emoji/bikini.png similarity index 100% rename from public/-/emojis/1/bikini.png rename to app/assets/images/emoji/bikini.png diff --git a/public/-/emojis/1/biohazard.png b/app/assets/images/emoji/biohazard.png similarity index 100% rename from public/-/emojis/1/biohazard.png rename to app/assets/images/emoji/biohazard.png diff --git a/public/-/emojis/1/bird.png b/app/assets/images/emoji/bird.png similarity index 100% rename from public/-/emojis/1/bird.png rename to app/assets/images/emoji/bird.png diff --git a/public/-/emojis/1/birthday.png b/app/assets/images/emoji/birthday.png similarity index 100% rename from public/-/emojis/1/birthday.png rename to app/assets/images/emoji/birthday.png diff --git a/public/-/emojis/1/black_circle.png b/app/assets/images/emoji/black_circle.png similarity index 100% rename from public/-/emojis/1/black_circle.png rename to app/assets/images/emoji/black_circle.png diff --git a/public/-/emojis/1/black_heart.png b/app/assets/images/emoji/black_heart.png similarity index 100% rename from public/-/emojis/1/black_heart.png rename to app/assets/images/emoji/black_heart.png diff --git a/public/-/emojis/1/black_joker.png b/app/assets/images/emoji/black_joker.png similarity index 100% rename from public/-/emojis/1/black_joker.png rename to app/assets/images/emoji/black_joker.png diff --git a/public/-/emojis/1/black_large_square.png b/app/assets/images/emoji/black_large_square.png similarity index 100% rename from public/-/emojis/1/black_large_square.png rename to app/assets/images/emoji/black_large_square.png diff --git a/public/-/emojis/1/black_medium_small_square.png b/app/assets/images/emoji/black_medium_small_square.png similarity index 100% rename from public/-/emojis/1/black_medium_small_square.png rename to app/assets/images/emoji/black_medium_small_square.png diff --git a/public/-/emojis/1/black_medium_square.png b/app/assets/images/emoji/black_medium_square.png similarity index 100% rename from public/-/emojis/1/black_medium_square.png rename to app/assets/images/emoji/black_medium_square.png diff --git a/public/-/emojis/1/black_nib.png b/app/assets/images/emoji/black_nib.png similarity index 100% rename from public/-/emojis/1/black_nib.png rename to app/assets/images/emoji/black_nib.png diff --git a/public/-/emojis/1/black_small_square.png b/app/assets/images/emoji/black_small_square.png similarity index 100% rename from public/-/emojis/1/black_small_square.png rename to app/assets/images/emoji/black_small_square.png diff --git a/public/-/emojis/1/black_square_button.png b/app/assets/images/emoji/black_square_button.png similarity index 100% rename from public/-/emojis/1/black_square_button.png rename to app/assets/images/emoji/black_square_button.png diff --git a/public/-/emojis/1/blossom.png b/app/assets/images/emoji/blossom.png similarity index 100% rename from public/-/emojis/1/blossom.png rename to app/assets/images/emoji/blossom.png diff --git a/public/-/emojis/1/blowfish.png b/app/assets/images/emoji/blowfish.png similarity index 100% rename from public/-/emojis/1/blowfish.png rename to app/assets/images/emoji/blowfish.png diff --git a/public/-/emojis/1/blue_book.png b/app/assets/images/emoji/blue_book.png similarity index 100% rename from public/-/emojis/1/blue_book.png rename to app/assets/images/emoji/blue_book.png diff --git a/public/-/emojis/1/blue_car.png b/app/assets/images/emoji/blue_car.png similarity index 100% rename from public/-/emojis/1/blue_car.png rename to app/assets/images/emoji/blue_car.png diff --git a/public/-/emojis/1/blue_heart.png b/app/assets/images/emoji/blue_heart.png similarity index 100% rename from public/-/emojis/1/blue_heart.png rename to app/assets/images/emoji/blue_heart.png diff --git a/public/-/emojis/1/blush.png b/app/assets/images/emoji/blush.png similarity index 100% rename from public/-/emojis/1/blush.png rename to app/assets/images/emoji/blush.png diff --git a/public/-/emojis/1/boar.png b/app/assets/images/emoji/boar.png similarity index 100% rename from public/-/emojis/1/boar.png rename to app/assets/images/emoji/boar.png diff --git a/public/-/emojis/1/bomb.png b/app/assets/images/emoji/bomb.png similarity index 100% rename from public/-/emojis/1/bomb.png rename to app/assets/images/emoji/bomb.png diff --git a/public/-/emojis/1/book.png b/app/assets/images/emoji/book.png similarity index 100% rename from public/-/emojis/1/book.png rename to app/assets/images/emoji/book.png diff --git a/public/-/emojis/1/bookmark.png b/app/assets/images/emoji/bookmark.png similarity index 100% rename from public/-/emojis/1/bookmark.png rename to app/assets/images/emoji/bookmark.png diff --git a/public/-/emojis/1/bookmark_tabs.png b/app/assets/images/emoji/bookmark_tabs.png similarity index 100% rename from public/-/emojis/1/bookmark_tabs.png rename to app/assets/images/emoji/bookmark_tabs.png diff --git a/public/-/emojis/1/books.png b/app/assets/images/emoji/books.png similarity index 100% rename from public/-/emojis/1/books.png rename to app/assets/images/emoji/books.png diff --git a/public/-/emojis/1/boom.png b/app/assets/images/emoji/boom.png similarity index 100% rename from public/-/emojis/1/boom.png rename to app/assets/images/emoji/boom.png diff --git a/public/-/emojis/1/boot.png b/app/assets/images/emoji/boot.png similarity index 100% rename from public/-/emojis/1/boot.png rename to app/assets/images/emoji/boot.png diff --git a/public/-/emojis/1/bouquet.png b/app/assets/images/emoji/bouquet.png similarity index 100% rename from public/-/emojis/1/bouquet.png rename to app/assets/images/emoji/bouquet.png diff --git a/public/-/emojis/1/bow.png b/app/assets/images/emoji/bow.png similarity index 100% rename from public/-/emojis/1/bow.png rename to app/assets/images/emoji/bow.png diff --git a/public/-/emojis/1/bow_and_arrow.png b/app/assets/images/emoji/bow_and_arrow.png similarity index 100% rename from public/-/emojis/1/bow_and_arrow.png rename to app/assets/images/emoji/bow_and_arrow.png diff --git a/public/-/emojis/1/bow_tone1.png b/app/assets/images/emoji/bow_tone1.png similarity index 100% rename from public/-/emojis/1/bow_tone1.png rename to app/assets/images/emoji/bow_tone1.png diff --git a/public/-/emojis/1/bow_tone2.png b/app/assets/images/emoji/bow_tone2.png similarity index 100% rename from public/-/emojis/1/bow_tone2.png rename to app/assets/images/emoji/bow_tone2.png diff --git a/public/-/emojis/1/bow_tone3.png b/app/assets/images/emoji/bow_tone3.png similarity index 100% rename from public/-/emojis/1/bow_tone3.png rename to app/assets/images/emoji/bow_tone3.png diff --git a/public/-/emojis/1/bow_tone4.png b/app/assets/images/emoji/bow_tone4.png similarity index 100% rename from public/-/emojis/1/bow_tone4.png rename to app/assets/images/emoji/bow_tone4.png diff --git a/public/-/emojis/1/bow_tone5.png b/app/assets/images/emoji/bow_tone5.png similarity index 100% rename from public/-/emojis/1/bow_tone5.png rename to app/assets/images/emoji/bow_tone5.png diff --git a/public/-/emojis/1/bowling.png b/app/assets/images/emoji/bowling.png similarity index 100% rename from public/-/emojis/1/bowling.png rename to app/assets/images/emoji/bowling.png diff --git a/public/-/emojis/1/boxing_glove.png b/app/assets/images/emoji/boxing_glove.png similarity index 100% rename from public/-/emojis/1/boxing_glove.png rename to app/assets/images/emoji/boxing_glove.png diff --git a/public/-/emojis/1/boy.png b/app/assets/images/emoji/boy.png similarity index 100% rename from public/-/emojis/1/boy.png rename to app/assets/images/emoji/boy.png diff --git a/public/-/emojis/1/boy_tone1.png b/app/assets/images/emoji/boy_tone1.png similarity index 100% rename from public/-/emojis/1/boy_tone1.png rename to app/assets/images/emoji/boy_tone1.png diff --git a/public/-/emojis/1/boy_tone2.png b/app/assets/images/emoji/boy_tone2.png similarity index 100% rename from public/-/emojis/1/boy_tone2.png rename to app/assets/images/emoji/boy_tone2.png diff --git a/public/-/emojis/1/boy_tone3.png b/app/assets/images/emoji/boy_tone3.png similarity index 100% rename from public/-/emojis/1/boy_tone3.png rename to app/assets/images/emoji/boy_tone3.png diff --git a/public/-/emojis/1/boy_tone4.png b/app/assets/images/emoji/boy_tone4.png similarity index 100% rename from public/-/emojis/1/boy_tone4.png rename to app/assets/images/emoji/boy_tone4.png diff --git a/public/-/emojis/1/boy_tone5.png b/app/assets/images/emoji/boy_tone5.png similarity index 100% rename from public/-/emojis/1/boy_tone5.png rename to app/assets/images/emoji/boy_tone5.png diff --git a/public/-/emojis/1/bread.png b/app/assets/images/emoji/bread.png similarity index 100% rename from public/-/emojis/1/bread.png rename to app/assets/images/emoji/bread.png diff --git a/public/-/emojis/1/bride_with_veil.png b/app/assets/images/emoji/bride_with_veil.png similarity index 100% rename from public/-/emojis/1/bride_with_veil.png rename to app/assets/images/emoji/bride_with_veil.png diff --git a/public/-/emojis/1/bride_with_veil_tone1.png b/app/assets/images/emoji/bride_with_veil_tone1.png similarity index 100% rename from public/-/emojis/1/bride_with_veil_tone1.png rename to app/assets/images/emoji/bride_with_veil_tone1.png diff --git a/public/-/emojis/1/bride_with_veil_tone2.png b/app/assets/images/emoji/bride_with_veil_tone2.png similarity index 100% rename from public/-/emojis/1/bride_with_veil_tone2.png rename to app/assets/images/emoji/bride_with_veil_tone2.png diff --git a/public/-/emojis/1/bride_with_veil_tone3.png b/app/assets/images/emoji/bride_with_veil_tone3.png similarity index 100% rename from public/-/emojis/1/bride_with_veil_tone3.png rename to app/assets/images/emoji/bride_with_veil_tone3.png diff --git a/public/-/emojis/1/bride_with_veil_tone4.png b/app/assets/images/emoji/bride_with_veil_tone4.png similarity index 100% rename from public/-/emojis/1/bride_with_veil_tone4.png rename to app/assets/images/emoji/bride_with_veil_tone4.png diff --git a/public/-/emojis/1/bride_with_veil_tone5.png b/app/assets/images/emoji/bride_with_veil_tone5.png similarity index 100% rename from public/-/emojis/1/bride_with_veil_tone5.png rename to app/assets/images/emoji/bride_with_veil_tone5.png diff --git a/public/-/emojis/1/bridge_at_night.png b/app/assets/images/emoji/bridge_at_night.png similarity index 100% rename from public/-/emojis/1/bridge_at_night.png rename to app/assets/images/emoji/bridge_at_night.png diff --git a/public/-/emojis/1/briefcase.png b/app/assets/images/emoji/briefcase.png similarity index 100% rename from public/-/emojis/1/briefcase.png rename to app/assets/images/emoji/briefcase.png diff --git a/public/-/emojis/1/broken_heart.png b/app/assets/images/emoji/broken_heart.png similarity index 100% rename from public/-/emojis/1/broken_heart.png rename to app/assets/images/emoji/broken_heart.png diff --git a/public/-/emojis/1/bug.png b/app/assets/images/emoji/bug.png similarity index 100% rename from public/-/emojis/1/bug.png rename to app/assets/images/emoji/bug.png diff --git a/public/-/emojis/1/bulb.png b/app/assets/images/emoji/bulb.png similarity index 100% rename from public/-/emojis/1/bulb.png rename to app/assets/images/emoji/bulb.png diff --git a/public/-/emojis/1/bullettrain_front.png b/app/assets/images/emoji/bullettrain_front.png similarity index 100% rename from public/-/emojis/1/bullettrain_front.png rename to app/assets/images/emoji/bullettrain_front.png diff --git a/public/-/emojis/1/bullettrain_side.png b/app/assets/images/emoji/bullettrain_side.png similarity index 100% rename from public/-/emojis/1/bullettrain_side.png rename to app/assets/images/emoji/bullettrain_side.png diff --git a/public/-/emojis/1/burrito.png b/app/assets/images/emoji/burrito.png similarity index 100% rename from public/-/emojis/1/burrito.png rename to app/assets/images/emoji/burrito.png diff --git a/public/-/emojis/1/bus.png b/app/assets/images/emoji/bus.png similarity index 100% rename from public/-/emojis/1/bus.png rename to app/assets/images/emoji/bus.png diff --git a/public/-/emojis/1/busstop.png b/app/assets/images/emoji/busstop.png similarity index 100% rename from public/-/emojis/1/busstop.png rename to app/assets/images/emoji/busstop.png diff --git a/public/-/emojis/1/bust_in_silhouette.png b/app/assets/images/emoji/bust_in_silhouette.png similarity index 100% rename from public/-/emojis/1/bust_in_silhouette.png rename to app/assets/images/emoji/bust_in_silhouette.png diff --git a/public/-/emojis/1/busts_in_silhouette.png b/app/assets/images/emoji/busts_in_silhouette.png similarity index 100% rename from public/-/emojis/1/busts_in_silhouette.png rename to app/assets/images/emoji/busts_in_silhouette.png diff --git a/public/-/emojis/1/butterfly.png b/app/assets/images/emoji/butterfly.png similarity index 100% rename from public/-/emojis/1/butterfly.png rename to app/assets/images/emoji/butterfly.png diff --git a/public/-/emojis/1/cactus.png b/app/assets/images/emoji/cactus.png similarity index 100% rename from public/-/emojis/1/cactus.png rename to app/assets/images/emoji/cactus.png diff --git a/public/-/emojis/1/cake.png b/app/assets/images/emoji/cake.png similarity index 100% rename from public/-/emojis/1/cake.png rename to app/assets/images/emoji/cake.png diff --git a/public/-/emojis/1/calendar.png b/app/assets/images/emoji/calendar.png similarity index 100% rename from public/-/emojis/1/calendar.png rename to app/assets/images/emoji/calendar.png diff --git a/public/-/emojis/1/calendar_spiral.png b/app/assets/images/emoji/calendar_spiral.png similarity index 100% rename from public/-/emojis/1/calendar_spiral.png rename to app/assets/images/emoji/calendar_spiral.png diff --git a/public/-/emojis/1/call_me.png b/app/assets/images/emoji/call_me.png similarity index 100% rename from public/-/emojis/1/call_me.png rename to app/assets/images/emoji/call_me.png diff --git a/public/-/emojis/1/call_me_tone1.png b/app/assets/images/emoji/call_me_tone1.png similarity index 100% rename from public/-/emojis/1/call_me_tone1.png rename to app/assets/images/emoji/call_me_tone1.png diff --git a/public/-/emojis/1/call_me_tone2.png b/app/assets/images/emoji/call_me_tone2.png similarity index 100% rename from public/-/emojis/1/call_me_tone2.png rename to app/assets/images/emoji/call_me_tone2.png diff --git a/public/-/emojis/1/call_me_tone3.png b/app/assets/images/emoji/call_me_tone3.png similarity index 100% rename from public/-/emojis/1/call_me_tone3.png rename to app/assets/images/emoji/call_me_tone3.png diff --git a/public/-/emojis/1/call_me_tone4.png b/app/assets/images/emoji/call_me_tone4.png similarity index 100% rename from public/-/emojis/1/call_me_tone4.png rename to app/assets/images/emoji/call_me_tone4.png diff --git a/public/-/emojis/1/call_me_tone5.png b/app/assets/images/emoji/call_me_tone5.png similarity index 100% rename from public/-/emojis/1/call_me_tone5.png rename to app/assets/images/emoji/call_me_tone5.png diff --git a/public/-/emojis/1/calling.png b/app/assets/images/emoji/calling.png similarity index 100% rename from public/-/emojis/1/calling.png rename to app/assets/images/emoji/calling.png diff --git a/public/-/emojis/1/camel.png b/app/assets/images/emoji/camel.png similarity index 100% rename from public/-/emojis/1/camel.png rename to app/assets/images/emoji/camel.png diff --git a/public/-/emojis/1/camera.png b/app/assets/images/emoji/camera.png similarity index 100% rename from public/-/emojis/1/camera.png rename to app/assets/images/emoji/camera.png diff --git a/public/-/emojis/1/camera_with_flash.png b/app/assets/images/emoji/camera_with_flash.png similarity index 100% rename from public/-/emojis/1/camera_with_flash.png rename to app/assets/images/emoji/camera_with_flash.png diff --git a/public/-/emojis/1/camping.png b/app/assets/images/emoji/camping.png similarity index 100% rename from public/-/emojis/1/camping.png rename to app/assets/images/emoji/camping.png diff --git a/public/-/emojis/1/cancer.png b/app/assets/images/emoji/cancer.png similarity index 100% rename from public/-/emojis/1/cancer.png rename to app/assets/images/emoji/cancer.png diff --git a/public/-/emojis/1/candle.png b/app/assets/images/emoji/candle.png similarity index 100% rename from public/-/emojis/1/candle.png rename to app/assets/images/emoji/candle.png diff --git a/public/-/emojis/1/candy.png b/app/assets/images/emoji/candy.png similarity index 100% rename from public/-/emojis/1/candy.png rename to app/assets/images/emoji/candy.png diff --git a/public/-/emojis/1/canoe.png b/app/assets/images/emoji/canoe.png similarity index 100% rename from public/-/emojis/1/canoe.png rename to app/assets/images/emoji/canoe.png diff --git a/public/-/emojis/1/capital_abcd.png b/app/assets/images/emoji/capital_abcd.png similarity index 100% rename from public/-/emojis/1/capital_abcd.png rename to app/assets/images/emoji/capital_abcd.png diff --git a/public/-/emojis/1/capricorn.png b/app/assets/images/emoji/capricorn.png similarity index 100% rename from public/-/emojis/1/capricorn.png rename to app/assets/images/emoji/capricorn.png diff --git a/public/-/emojis/1/card_box.png b/app/assets/images/emoji/card_box.png similarity index 100% rename from public/-/emojis/1/card_box.png rename to app/assets/images/emoji/card_box.png diff --git a/public/-/emojis/1/card_index.png b/app/assets/images/emoji/card_index.png similarity index 100% rename from public/-/emojis/1/card_index.png rename to app/assets/images/emoji/card_index.png diff --git a/public/-/emojis/1/carousel_horse.png b/app/assets/images/emoji/carousel_horse.png similarity index 100% rename from public/-/emojis/1/carousel_horse.png rename to app/assets/images/emoji/carousel_horse.png diff --git a/public/-/emojis/1/carrot.png b/app/assets/images/emoji/carrot.png similarity index 100% rename from public/-/emojis/1/carrot.png rename to app/assets/images/emoji/carrot.png diff --git a/public/-/emojis/1/cartwheel.png b/app/assets/images/emoji/cartwheel.png similarity index 100% rename from public/-/emojis/1/cartwheel.png rename to app/assets/images/emoji/cartwheel.png diff --git a/public/-/emojis/1/cartwheel_tone1.png b/app/assets/images/emoji/cartwheel_tone1.png similarity index 100% rename from public/-/emojis/1/cartwheel_tone1.png rename to app/assets/images/emoji/cartwheel_tone1.png diff --git a/public/-/emojis/1/cartwheel_tone2.png b/app/assets/images/emoji/cartwheel_tone2.png similarity index 100% rename from public/-/emojis/1/cartwheel_tone2.png rename to app/assets/images/emoji/cartwheel_tone2.png diff --git a/public/-/emojis/1/cartwheel_tone3.png b/app/assets/images/emoji/cartwheel_tone3.png similarity index 100% rename from public/-/emojis/1/cartwheel_tone3.png rename to app/assets/images/emoji/cartwheel_tone3.png diff --git a/public/-/emojis/1/cartwheel_tone4.png b/app/assets/images/emoji/cartwheel_tone4.png similarity index 100% rename from public/-/emojis/1/cartwheel_tone4.png rename to app/assets/images/emoji/cartwheel_tone4.png diff --git a/public/-/emojis/1/cartwheel_tone5.png b/app/assets/images/emoji/cartwheel_tone5.png similarity index 100% rename from public/-/emojis/1/cartwheel_tone5.png rename to app/assets/images/emoji/cartwheel_tone5.png diff --git a/public/-/emojis/1/cat.png b/app/assets/images/emoji/cat.png similarity index 100% rename from public/-/emojis/1/cat.png rename to app/assets/images/emoji/cat.png diff --git a/public/-/emojis/1/cat2.png b/app/assets/images/emoji/cat2.png similarity index 100% rename from public/-/emojis/1/cat2.png rename to app/assets/images/emoji/cat2.png diff --git a/public/-/emojis/1/cd.png b/app/assets/images/emoji/cd.png similarity index 100% rename from public/-/emojis/1/cd.png rename to app/assets/images/emoji/cd.png diff --git a/public/-/emojis/1/chains.png b/app/assets/images/emoji/chains.png similarity index 100% rename from public/-/emojis/1/chains.png rename to app/assets/images/emoji/chains.png diff --git a/public/-/emojis/1/champagne.png b/app/assets/images/emoji/champagne.png similarity index 100% rename from public/-/emojis/1/champagne.png rename to app/assets/images/emoji/champagne.png diff --git a/public/-/emojis/1/champagne_glass.png b/app/assets/images/emoji/champagne_glass.png similarity index 100% rename from public/-/emojis/1/champagne_glass.png rename to app/assets/images/emoji/champagne_glass.png diff --git a/public/-/emojis/1/chart.png b/app/assets/images/emoji/chart.png similarity index 100% rename from public/-/emojis/1/chart.png rename to app/assets/images/emoji/chart.png diff --git a/public/-/emojis/1/chart_with_downwards_trend.png b/app/assets/images/emoji/chart_with_downwards_trend.png similarity index 100% rename from public/-/emojis/1/chart_with_downwards_trend.png rename to app/assets/images/emoji/chart_with_downwards_trend.png diff --git a/public/-/emojis/1/chart_with_upwards_trend.png b/app/assets/images/emoji/chart_with_upwards_trend.png similarity index 100% rename from public/-/emojis/1/chart_with_upwards_trend.png rename to app/assets/images/emoji/chart_with_upwards_trend.png diff --git a/public/-/emojis/1/checkered_flag.png b/app/assets/images/emoji/checkered_flag.png similarity index 100% rename from public/-/emojis/1/checkered_flag.png rename to app/assets/images/emoji/checkered_flag.png diff --git a/public/-/emojis/1/cheese.png b/app/assets/images/emoji/cheese.png similarity index 100% rename from public/-/emojis/1/cheese.png rename to app/assets/images/emoji/cheese.png diff --git a/public/-/emojis/1/cherries.png b/app/assets/images/emoji/cherries.png similarity index 100% rename from public/-/emojis/1/cherries.png rename to app/assets/images/emoji/cherries.png diff --git a/public/-/emojis/1/cherry_blossom.png b/app/assets/images/emoji/cherry_blossom.png similarity index 100% rename from public/-/emojis/1/cherry_blossom.png rename to app/assets/images/emoji/cherry_blossom.png diff --git a/public/-/emojis/1/chestnut.png b/app/assets/images/emoji/chestnut.png similarity index 100% rename from public/-/emojis/1/chestnut.png rename to app/assets/images/emoji/chestnut.png diff --git a/public/-/emojis/1/chicken.png b/app/assets/images/emoji/chicken.png similarity index 100% rename from public/-/emojis/1/chicken.png rename to app/assets/images/emoji/chicken.png diff --git a/public/-/emojis/1/children_crossing.png b/app/assets/images/emoji/children_crossing.png similarity index 100% rename from public/-/emojis/1/children_crossing.png rename to app/assets/images/emoji/children_crossing.png diff --git a/public/-/emojis/1/chipmunk.png b/app/assets/images/emoji/chipmunk.png similarity index 100% rename from public/-/emojis/1/chipmunk.png rename to app/assets/images/emoji/chipmunk.png diff --git a/public/-/emojis/1/chocolate_bar.png b/app/assets/images/emoji/chocolate_bar.png similarity index 100% rename from public/-/emojis/1/chocolate_bar.png rename to app/assets/images/emoji/chocolate_bar.png diff --git a/public/-/emojis/1/christmas_tree.png b/app/assets/images/emoji/christmas_tree.png similarity index 100% rename from public/-/emojis/1/christmas_tree.png rename to app/assets/images/emoji/christmas_tree.png diff --git a/public/-/emojis/1/church.png b/app/assets/images/emoji/church.png similarity index 100% rename from public/-/emojis/1/church.png rename to app/assets/images/emoji/church.png diff --git a/public/-/emojis/1/cinema.png b/app/assets/images/emoji/cinema.png similarity index 100% rename from public/-/emojis/1/cinema.png rename to app/assets/images/emoji/cinema.png diff --git a/public/-/emojis/1/circus_tent.png b/app/assets/images/emoji/circus_tent.png similarity index 100% rename from public/-/emojis/1/circus_tent.png rename to app/assets/images/emoji/circus_tent.png diff --git a/public/-/emojis/1/city_dusk.png b/app/assets/images/emoji/city_dusk.png similarity index 100% rename from public/-/emojis/1/city_dusk.png rename to app/assets/images/emoji/city_dusk.png diff --git a/public/-/emojis/1/city_sunset.png b/app/assets/images/emoji/city_sunset.png similarity index 100% rename from public/-/emojis/1/city_sunset.png rename to app/assets/images/emoji/city_sunset.png diff --git a/public/-/emojis/1/cityscape.png b/app/assets/images/emoji/cityscape.png similarity index 100% rename from public/-/emojis/1/cityscape.png rename to app/assets/images/emoji/cityscape.png diff --git a/public/-/emojis/1/cl.png b/app/assets/images/emoji/cl.png similarity index 100% rename from public/-/emojis/1/cl.png rename to app/assets/images/emoji/cl.png diff --git a/public/-/emojis/1/clap.png b/app/assets/images/emoji/clap.png similarity index 100% rename from public/-/emojis/1/clap.png rename to app/assets/images/emoji/clap.png diff --git a/public/-/emojis/1/clap_tone1.png b/app/assets/images/emoji/clap_tone1.png similarity index 100% rename from public/-/emojis/1/clap_tone1.png rename to app/assets/images/emoji/clap_tone1.png diff --git a/public/-/emojis/1/clap_tone2.png b/app/assets/images/emoji/clap_tone2.png similarity index 100% rename from public/-/emojis/1/clap_tone2.png rename to app/assets/images/emoji/clap_tone2.png diff --git a/public/-/emojis/1/clap_tone3.png b/app/assets/images/emoji/clap_tone3.png similarity index 100% rename from public/-/emojis/1/clap_tone3.png rename to app/assets/images/emoji/clap_tone3.png diff --git a/public/-/emojis/1/clap_tone4.png b/app/assets/images/emoji/clap_tone4.png similarity index 100% rename from public/-/emojis/1/clap_tone4.png rename to app/assets/images/emoji/clap_tone4.png diff --git a/public/-/emojis/1/clap_tone5.png b/app/assets/images/emoji/clap_tone5.png similarity index 100% rename from public/-/emojis/1/clap_tone5.png rename to app/assets/images/emoji/clap_tone5.png diff --git a/public/-/emojis/1/clapper.png b/app/assets/images/emoji/clapper.png similarity index 100% rename from public/-/emojis/1/clapper.png rename to app/assets/images/emoji/clapper.png diff --git a/public/-/emojis/1/classical_building.png b/app/assets/images/emoji/classical_building.png similarity index 100% rename from public/-/emojis/1/classical_building.png rename to app/assets/images/emoji/classical_building.png diff --git a/public/-/emojis/1/clipboard.png b/app/assets/images/emoji/clipboard.png similarity index 100% rename from public/-/emojis/1/clipboard.png rename to app/assets/images/emoji/clipboard.png diff --git a/public/-/emojis/1/clock.png b/app/assets/images/emoji/clock.png similarity index 100% rename from public/-/emojis/1/clock.png rename to app/assets/images/emoji/clock.png diff --git a/public/-/emojis/1/clock1.png b/app/assets/images/emoji/clock1.png similarity index 100% rename from public/-/emojis/1/clock1.png rename to app/assets/images/emoji/clock1.png diff --git a/public/-/emojis/1/clock10.png b/app/assets/images/emoji/clock10.png similarity index 100% rename from public/-/emojis/1/clock10.png rename to app/assets/images/emoji/clock10.png diff --git a/public/-/emojis/1/clock1030.png b/app/assets/images/emoji/clock1030.png similarity index 100% rename from public/-/emojis/1/clock1030.png rename to app/assets/images/emoji/clock1030.png diff --git a/public/-/emojis/1/clock11.png b/app/assets/images/emoji/clock11.png similarity index 100% rename from public/-/emojis/1/clock11.png rename to app/assets/images/emoji/clock11.png diff --git a/public/-/emojis/1/clock1130.png b/app/assets/images/emoji/clock1130.png similarity index 100% rename from public/-/emojis/1/clock1130.png rename to app/assets/images/emoji/clock1130.png diff --git a/public/-/emojis/1/clock12.png b/app/assets/images/emoji/clock12.png similarity index 100% rename from public/-/emojis/1/clock12.png rename to app/assets/images/emoji/clock12.png diff --git a/public/-/emojis/1/clock1230.png b/app/assets/images/emoji/clock1230.png similarity index 100% rename from public/-/emojis/1/clock1230.png rename to app/assets/images/emoji/clock1230.png diff --git a/public/-/emojis/1/clock130.png b/app/assets/images/emoji/clock130.png similarity index 100% rename from public/-/emojis/1/clock130.png rename to app/assets/images/emoji/clock130.png diff --git a/public/-/emojis/1/clock2.png b/app/assets/images/emoji/clock2.png similarity index 100% rename from public/-/emojis/1/clock2.png rename to app/assets/images/emoji/clock2.png diff --git a/public/-/emojis/1/clock230.png b/app/assets/images/emoji/clock230.png similarity index 100% rename from public/-/emojis/1/clock230.png rename to app/assets/images/emoji/clock230.png diff --git a/public/-/emojis/1/clock3.png b/app/assets/images/emoji/clock3.png similarity index 100% rename from public/-/emojis/1/clock3.png rename to app/assets/images/emoji/clock3.png diff --git a/public/-/emojis/1/clock330.png b/app/assets/images/emoji/clock330.png similarity index 100% rename from public/-/emojis/1/clock330.png rename to app/assets/images/emoji/clock330.png diff --git a/public/-/emojis/1/clock4.png b/app/assets/images/emoji/clock4.png similarity index 100% rename from public/-/emojis/1/clock4.png rename to app/assets/images/emoji/clock4.png diff --git a/public/-/emojis/1/clock430.png b/app/assets/images/emoji/clock430.png similarity index 100% rename from public/-/emojis/1/clock430.png rename to app/assets/images/emoji/clock430.png diff --git a/public/-/emojis/1/clock5.png b/app/assets/images/emoji/clock5.png similarity index 100% rename from public/-/emojis/1/clock5.png rename to app/assets/images/emoji/clock5.png diff --git a/public/-/emojis/1/clock530.png b/app/assets/images/emoji/clock530.png similarity index 100% rename from public/-/emojis/1/clock530.png rename to app/assets/images/emoji/clock530.png diff --git a/public/-/emojis/1/clock6.png b/app/assets/images/emoji/clock6.png similarity index 100% rename from public/-/emojis/1/clock6.png rename to app/assets/images/emoji/clock6.png diff --git a/public/-/emojis/1/clock630.png b/app/assets/images/emoji/clock630.png similarity index 100% rename from public/-/emojis/1/clock630.png rename to app/assets/images/emoji/clock630.png diff --git a/public/-/emojis/1/clock7.png b/app/assets/images/emoji/clock7.png similarity index 100% rename from public/-/emojis/1/clock7.png rename to app/assets/images/emoji/clock7.png diff --git a/public/-/emojis/1/clock730.png b/app/assets/images/emoji/clock730.png similarity index 100% rename from public/-/emojis/1/clock730.png rename to app/assets/images/emoji/clock730.png diff --git a/public/-/emojis/1/clock8.png b/app/assets/images/emoji/clock8.png similarity index 100% rename from public/-/emojis/1/clock8.png rename to app/assets/images/emoji/clock8.png diff --git a/public/-/emojis/1/clock830.png b/app/assets/images/emoji/clock830.png similarity index 100% rename from public/-/emojis/1/clock830.png rename to app/assets/images/emoji/clock830.png diff --git a/public/-/emojis/1/clock9.png b/app/assets/images/emoji/clock9.png similarity index 100% rename from public/-/emojis/1/clock9.png rename to app/assets/images/emoji/clock9.png diff --git a/public/-/emojis/1/clock930.png b/app/assets/images/emoji/clock930.png similarity index 100% rename from public/-/emojis/1/clock930.png rename to app/assets/images/emoji/clock930.png diff --git a/public/-/emojis/1/closed_book.png b/app/assets/images/emoji/closed_book.png similarity index 100% rename from public/-/emojis/1/closed_book.png rename to app/assets/images/emoji/closed_book.png diff --git a/public/-/emojis/1/closed_lock_with_key.png b/app/assets/images/emoji/closed_lock_with_key.png similarity index 100% rename from public/-/emojis/1/closed_lock_with_key.png rename to app/assets/images/emoji/closed_lock_with_key.png diff --git a/public/-/emojis/1/closed_umbrella.png b/app/assets/images/emoji/closed_umbrella.png similarity index 100% rename from public/-/emojis/1/closed_umbrella.png rename to app/assets/images/emoji/closed_umbrella.png diff --git a/public/-/emojis/1/cloud.png b/app/assets/images/emoji/cloud.png similarity index 100% rename from public/-/emojis/1/cloud.png rename to app/assets/images/emoji/cloud.png diff --git a/public/-/emojis/1/cloud_lightning.png b/app/assets/images/emoji/cloud_lightning.png similarity index 100% rename from public/-/emojis/1/cloud_lightning.png rename to app/assets/images/emoji/cloud_lightning.png diff --git a/public/-/emojis/1/cloud_rain.png b/app/assets/images/emoji/cloud_rain.png similarity index 100% rename from public/-/emojis/1/cloud_rain.png rename to app/assets/images/emoji/cloud_rain.png diff --git a/public/-/emojis/1/cloud_snow.png b/app/assets/images/emoji/cloud_snow.png similarity index 100% rename from public/-/emojis/1/cloud_snow.png rename to app/assets/images/emoji/cloud_snow.png diff --git a/public/-/emojis/1/cloud_tornado.png b/app/assets/images/emoji/cloud_tornado.png similarity index 100% rename from public/-/emojis/1/cloud_tornado.png rename to app/assets/images/emoji/cloud_tornado.png diff --git a/public/-/emojis/1/clown.png b/app/assets/images/emoji/clown.png similarity index 100% rename from public/-/emojis/1/clown.png rename to app/assets/images/emoji/clown.png diff --git a/public/-/emojis/1/clubs.png b/app/assets/images/emoji/clubs.png similarity index 100% rename from public/-/emojis/1/clubs.png rename to app/assets/images/emoji/clubs.png diff --git a/public/-/emojis/1/cocktail.png b/app/assets/images/emoji/cocktail.png similarity index 100% rename from public/-/emojis/1/cocktail.png rename to app/assets/images/emoji/cocktail.png diff --git a/public/-/emojis/1/coffee.png b/app/assets/images/emoji/coffee.png similarity index 100% rename from public/-/emojis/1/coffee.png rename to app/assets/images/emoji/coffee.png diff --git a/public/-/emojis/1/coffin.png b/app/assets/images/emoji/coffin.png similarity index 100% rename from public/-/emojis/1/coffin.png rename to app/assets/images/emoji/coffin.png diff --git a/public/-/emojis/1/cold_sweat.png b/app/assets/images/emoji/cold_sweat.png similarity index 100% rename from public/-/emojis/1/cold_sweat.png rename to app/assets/images/emoji/cold_sweat.png diff --git a/public/-/emojis/1/comet.png b/app/assets/images/emoji/comet.png similarity index 100% rename from public/-/emojis/1/comet.png rename to app/assets/images/emoji/comet.png diff --git a/public/-/emojis/1/compression.png b/app/assets/images/emoji/compression.png similarity index 100% rename from public/-/emojis/1/compression.png rename to app/assets/images/emoji/compression.png diff --git a/public/-/emojis/1/computer.png b/app/assets/images/emoji/computer.png similarity index 100% rename from public/-/emojis/1/computer.png rename to app/assets/images/emoji/computer.png diff --git a/public/-/emojis/1/confetti_ball.png b/app/assets/images/emoji/confetti_ball.png similarity index 100% rename from public/-/emojis/1/confetti_ball.png rename to app/assets/images/emoji/confetti_ball.png diff --git a/public/-/emojis/1/confounded.png b/app/assets/images/emoji/confounded.png similarity index 100% rename from public/-/emojis/1/confounded.png rename to app/assets/images/emoji/confounded.png diff --git a/public/-/emojis/1/confused.png b/app/assets/images/emoji/confused.png similarity index 100% rename from public/-/emojis/1/confused.png rename to app/assets/images/emoji/confused.png diff --git a/public/-/emojis/1/congratulations.png b/app/assets/images/emoji/congratulations.png similarity index 100% rename from public/-/emojis/1/congratulations.png rename to app/assets/images/emoji/congratulations.png diff --git a/public/-/emojis/1/construction.png b/app/assets/images/emoji/construction.png similarity index 100% rename from public/-/emojis/1/construction.png rename to app/assets/images/emoji/construction.png diff --git a/public/-/emojis/1/construction_site.png b/app/assets/images/emoji/construction_site.png similarity index 100% rename from public/-/emojis/1/construction_site.png rename to app/assets/images/emoji/construction_site.png diff --git a/public/-/emojis/1/construction_worker.png b/app/assets/images/emoji/construction_worker.png similarity index 100% rename from public/-/emojis/1/construction_worker.png rename to app/assets/images/emoji/construction_worker.png diff --git a/public/-/emojis/1/construction_worker_tone1.png b/app/assets/images/emoji/construction_worker_tone1.png similarity index 100% rename from public/-/emojis/1/construction_worker_tone1.png rename to app/assets/images/emoji/construction_worker_tone1.png diff --git a/public/-/emojis/1/construction_worker_tone2.png b/app/assets/images/emoji/construction_worker_tone2.png similarity index 100% rename from public/-/emojis/1/construction_worker_tone2.png rename to app/assets/images/emoji/construction_worker_tone2.png diff --git a/public/-/emojis/1/construction_worker_tone3.png b/app/assets/images/emoji/construction_worker_tone3.png similarity index 100% rename from public/-/emojis/1/construction_worker_tone3.png rename to app/assets/images/emoji/construction_worker_tone3.png diff --git a/public/-/emojis/1/construction_worker_tone4.png b/app/assets/images/emoji/construction_worker_tone4.png similarity index 100% rename from public/-/emojis/1/construction_worker_tone4.png rename to app/assets/images/emoji/construction_worker_tone4.png diff --git a/public/-/emojis/1/construction_worker_tone5.png b/app/assets/images/emoji/construction_worker_tone5.png similarity index 100% rename from public/-/emojis/1/construction_worker_tone5.png rename to app/assets/images/emoji/construction_worker_tone5.png diff --git a/public/-/emojis/1/control_knobs.png b/app/assets/images/emoji/control_knobs.png similarity index 100% rename from public/-/emojis/1/control_knobs.png rename to app/assets/images/emoji/control_knobs.png diff --git a/public/-/emojis/1/convenience_store.png b/app/assets/images/emoji/convenience_store.png similarity index 100% rename from public/-/emojis/1/convenience_store.png rename to app/assets/images/emoji/convenience_store.png diff --git a/public/-/emojis/1/cookie.png b/app/assets/images/emoji/cookie.png similarity index 100% rename from public/-/emojis/1/cookie.png rename to app/assets/images/emoji/cookie.png diff --git a/public/-/emojis/1/cooking.png b/app/assets/images/emoji/cooking.png similarity index 100% rename from public/-/emojis/1/cooking.png rename to app/assets/images/emoji/cooking.png diff --git a/public/-/emojis/1/cool.png b/app/assets/images/emoji/cool.png similarity index 100% rename from public/-/emojis/1/cool.png rename to app/assets/images/emoji/cool.png diff --git a/public/-/emojis/1/cop.png b/app/assets/images/emoji/cop.png similarity index 100% rename from public/-/emojis/1/cop.png rename to app/assets/images/emoji/cop.png diff --git a/public/-/emojis/1/cop_tone1.png b/app/assets/images/emoji/cop_tone1.png similarity index 100% rename from public/-/emojis/1/cop_tone1.png rename to app/assets/images/emoji/cop_tone1.png diff --git a/public/-/emojis/1/cop_tone2.png b/app/assets/images/emoji/cop_tone2.png similarity index 100% rename from public/-/emojis/1/cop_tone2.png rename to app/assets/images/emoji/cop_tone2.png diff --git a/public/-/emojis/1/cop_tone3.png b/app/assets/images/emoji/cop_tone3.png similarity index 100% rename from public/-/emojis/1/cop_tone3.png rename to app/assets/images/emoji/cop_tone3.png diff --git a/public/-/emojis/1/cop_tone4.png b/app/assets/images/emoji/cop_tone4.png similarity index 100% rename from public/-/emojis/1/cop_tone4.png rename to app/assets/images/emoji/cop_tone4.png diff --git a/public/-/emojis/1/cop_tone5.png b/app/assets/images/emoji/cop_tone5.png similarity index 100% rename from public/-/emojis/1/cop_tone5.png rename to app/assets/images/emoji/cop_tone5.png diff --git a/public/-/emojis/1/copyright.png b/app/assets/images/emoji/copyright.png similarity index 100% rename from public/-/emojis/1/copyright.png rename to app/assets/images/emoji/copyright.png diff --git a/public/-/emojis/1/corn.png b/app/assets/images/emoji/corn.png similarity index 100% rename from public/-/emojis/1/corn.png rename to app/assets/images/emoji/corn.png diff --git a/public/-/emojis/1/couch.png b/app/assets/images/emoji/couch.png similarity index 100% rename from public/-/emojis/1/couch.png rename to app/assets/images/emoji/couch.png diff --git a/public/-/emojis/1/couple.png b/app/assets/images/emoji/couple.png similarity index 100% rename from public/-/emojis/1/couple.png rename to app/assets/images/emoji/couple.png diff --git a/public/-/emojis/1/couple_mm.png b/app/assets/images/emoji/couple_mm.png similarity index 100% rename from public/-/emojis/1/couple_mm.png rename to app/assets/images/emoji/couple_mm.png diff --git a/public/-/emojis/1/couple_with_heart.png b/app/assets/images/emoji/couple_with_heart.png similarity index 100% rename from public/-/emojis/1/couple_with_heart.png rename to app/assets/images/emoji/couple_with_heart.png diff --git a/public/-/emojis/1/couple_ww.png b/app/assets/images/emoji/couple_ww.png similarity index 100% rename from public/-/emojis/1/couple_ww.png rename to app/assets/images/emoji/couple_ww.png diff --git a/public/-/emojis/1/couplekiss.png b/app/assets/images/emoji/couplekiss.png similarity index 100% rename from public/-/emojis/1/couplekiss.png rename to app/assets/images/emoji/couplekiss.png diff --git a/public/-/emojis/1/cow.png b/app/assets/images/emoji/cow.png similarity index 100% rename from public/-/emojis/1/cow.png rename to app/assets/images/emoji/cow.png diff --git a/public/-/emojis/1/cow2.png b/app/assets/images/emoji/cow2.png similarity index 100% rename from public/-/emojis/1/cow2.png rename to app/assets/images/emoji/cow2.png diff --git a/public/-/emojis/1/cowboy.png b/app/assets/images/emoji/cowboy.png similarity index 100% rename from public/-/emojis/1/cowboy.png rename to app/assets/images/emoji/cowboy.png diff --git a/public/-/emojis/1/crab.png b/app/assets/images/emoji/crab.png similarity index 100% rename from public/-/emojis/1/crab.png rename to app/assets/images/emoji/crab.png diff --git a/public/-/emojis/1/crayon.png b/app/assets/images/emoji/crayon.png similarity index 100% rename from public/-/emojis/1/crayon.png rename to app/assets/images/emoji/crayon.png diff --git a/public/-/emojis/1/credit_card.png b/app/assets/images/emoji/credit_card.png similarity index 100% rename from public/-/emojis/1/credit_card.png rename to app/assets/images/emoji/credit_card.png diff --git a/public/-/emojis/1/crescent_moon.png b/app/assets/images/emoji/crescent_moon.png similarity index 100% rename from public/-/emojis/1/crescent_moon.png rename to app/assets/images/emoji/crescent_moon.png diff --git a/public/-/emojis/1/cricket.png b/app/assets/images/emoji/cricket.png similarity index 100% rename from public/-/emojis/1/cricket.png rename to app/assets/images/emoji/cricket.png diff --git a/public/-/emojis/1/crocodile.png b/app/assets/images/emoji/crocodile.png similarity index 100% rename from public/-/emojis/1/crocodile.png rename to app/assets/images/emoji/crocodile.png diff --git a/public/-/emojis/1/croissant.png b/app/assets/images/emoji/croissant.png similarity index 100% rename from public/-/emojis/1/croissant.png rename to app/assets/images/emoji/croissant.png diff --git a/public/-/emojis/1/cross.png b/app/assets/images/emoji/cross.png similarity index 100% rename from public/-/emojis/1/cross.png rename to app/assets/images/emoji/cross.png diff --git a/public/-/emojis/1/crossed_flags.png b/app/assets/images/emoji/crossed_flags.png similarity index 100% rename from public/-/emojis/1/crossed_flags.png rename to app/assets/images/emoji/crossed_flags.png diff --git a/public/-/emojis/1/crossed_swords.png b/app/assets/images/emoji/crossed_swords.png similarity index 100% rename from public/-/emojis/1/crossed_swords.png rename to app/assets/images/emoji/crossed_swords.png diff --git a/public/-/emojis/1/crown.png b/app/assets/images/emoji/crown.png similarity index 100% rename from public/-/emojis/1/crown.png rename to app/assets/images/emoji/crown.png diff --git a/public/-/emojis/1/cruise_ship.png b/app/assets/images/emoji/cruise_ship.png similarity index 100% rename from public/-/emojis/1/cruise_ship.png rename to app/assets/images/emoji/cruise_ship.png diff --git a/public/-/emojis/1/cry.png b/app/assets/images/emoji/cry.png similarity index 100% rename from public/-/emojis/1/cry.png rename to app/assets/images/emoji/cry.png diff --git a/public/-/emojis/1/crying_cat_face.png b/app/assets/images/emoji/crying_cat_face.png similarity index 100% rename from public/-/emojis/1/crying_cat_face.png rename to app/assets/images/emoji/crying_cat_face.png diff --git a/public/-/emojis/1/crystal_ball.png b/app/assets/images/emoji/crystal_ball.png similarity index 100% rename from public/-/emojis/1/crystal_ball.png rename to app/assets/images/emoji/crystal_ball.png diff --git a/public/-/emojis/1/cucumber.png b/app/assets/images/emoji/cucumber.png similarity index 100% rename from public/-/emojis/1/cucumber.png rename to app/assets/images/emoji/cucumber.png diff --git a/public/-/emojis/1/cupid.png b/app/assets/images/emoji/cupid.png similarity index 100% rename from public/-/emojis/1/cupid.png rename to app/assets/images/emoji/cupid.png diff --git a/public/-/emojis/1/curly_loop.png b/app/assets/images/emoji/curly_loop.png similarity index 100% rename from public/-/emojis/1/curly_loop.png rename to app/assets/images/emoji/curly_loop.png diff --git a/public/-/emojis/1/currency_exchange.png b/app/assets/images/emoji/currency_exchange.png similarity index 100% rename from public/-/emojis/1/currency_exchange.png rename to app/assets/images/emoji/currency_exchange.png diff --git a/public/-/emojis/1/curry.png b/app/assets/images/emoji/curry.png similarity index 100% rename from public/-/emojis/1/curry.png rename to app/assets/images/emoji/curry.png diff --git a/public/-/emojis/1/custard.png b/app/assets/images/emoji/custard.png similarity index 100% rename from public/-/emojis/1/custard.png rename to app/assets/images/emoji/custard.png diff --git a/public/-/emojis/1/customs.png b/app/assets/images/emoji/customs.png similarity index 100% rename from public/-/emojis/1/customs.png rename to app/assets/images/emoji/customs.png diff --git a/public/-/emojis/1/cyclone.png b/app/assets/images/emoji/cyclone.png similarity index 100% rename from public/-/emojis/1/cyclone.png rename to app/assets/images/emoji/cyclone.png diff --git a/public/-/emojis/1/dagger.png b/app/assets/images/emoji/dagger.png similarity index 100% rename from public/-/emojis/1/dagger.png rename to app/assets/images/emoji/dagger.png diff --git a/public/-/emojis/1/dancer.png b/app/assets/images/emoji/dancer.png similarity index 100% rename from public/-/emojis/1/dancer.png rename to app/assets/images/emoji/dancer.png diff --git a/public/-/emojis/1/dancer_tone1.png b/app/assets/images/emoji/dancer_tone1.png similarity index 100% rename from public/-/emojis/1/dancer_tone1.png rename to app/assets/images/emoji/dancer_tone1.png diff --git a/public/-/emojis/1/dancer_tone2.png b/app/assets/images/emoji/dancer_tone2.png similarity index 100% rename from public/-/emojis/1/dancer_tone2.png rename to app/assets/images/emoji/dancer_tone2.png diff --git a/public/-/emojis/1/dancer_tone3.png b/app/assets/images/emoji/dancer_tone3.png similarity index 100% rename from public/-/emojis/1/dancer_tone3.png rename to app/assets/images/emoji/dancer_tone3.png diff --git a/public/-/emojis/1/dancer_tone4.png b/app/assets/images/emoji/dancer_tone4.png similarity index 100% rename from public/-/emojis/1/dancer_tone4.png rename to app/assets/images/emoji/dancer_tone4.png diff --git a/public/-/emojis/1/dancer_tone5.png b/app/assets/images/emoji/dancer_tone5.png similarity index 100% rename from public/-/emojis/1/dancer_tone5.png rename to app/assets/images/emoji/dancer_tone5.png diff --git a/public/-/emojis/1/dancers.png b/app/assets/images/emoji/dancers.png similarity index 100% rename from public/-/emojis/1/dancers.png rename to app/assets/images/emoji/dancers.png diff --git a/public/-/emojis/1/dango.png b/app/assets/images/emoji/dango.png similarity index 100% rename from public/-/emojis/1/dango.png rename to app/assets/images/emoji/dango.png diff --git a/public/-/emojis/1/dark_sunglasses.png b/app/assets/images/emoji/dark_sunglasses.png similarity index 100% rename from public/-/emojis/1/dark_sunglasses.png rename to app/assets/images/emoji/dark_sunglasses.png diff --git a/public/-/emojis/1/dart.png b/app/assets/images/emoji/dart.png similarity index 100% rename from public/-/emojis/1/dart.png rename to app/assets/images/emoji/dart.png diff --git a/public/-/emojis/1/dash.png b/app/assets/images/emoji/dash.png similarity index 100% rename from public/-/emojis/1/dash.png rename to app/assets/images/emoji/dash.png diff --git a/public/-/emojis/1/date.png b/app/assets/images/emoji/date.png similarity index 100% rename from public/-/emojis/1/date.png rename to app/assets/images/emoji/date.png diff --git a/public/-/emojis/1/deciduous_tree.png b/app/assets/images/emoji/deciduous_tree.png similarity index 100% rename from public/-/emojis/1/deciduous_tree.png rename to app/assets/images/emoji/deciduous_tree.png diff --git a/public/-/emojis/1/deer.png b/app/assets/images/emoji/deer.png similarity index 100% rename from public/-/emojis/1/deer.png rename to app/assets/images/emoji/deer.png diff --git a/public/-/emojis/1/department_store.png b/app/assets/images/emoji/department_store.png similarity index 100% rename from public/-/emojis/1/department_store.png rename to app/assets/images/emoji/department_store.png diff --git a/public/-/emojis/1/desert.png b/app/assets/images/emoji/desert.png similarity index 100% rename from public/-/emojis/1/desert.png rename to app/assets/images/emoji/desert.png diff --git a/public/-/emojis/1/desktop.png b/app/assets/images/emoji/desktop.png similarity index 100% rename from public/-/emojis/1/desktop.png rename to app/assets/images/emoji/desktop.png diff --git a/public/-/emojis/1/diamond_shape_with_a_dot_inside.png b/app/assets/images/emoji/diamond_shape_with_a_dot_inside.png similarity index 100% rename from public/-/emojis/1/diamond_shape_with_a_dot_inside.png rename to app/assets/images/emoji/diamond_shape_with_a_dot_inside.png diff --git a/public/-/emojis/1/diamonds.png b/app/assets/images/emoji/diamonds.png similarity index 100% rename from public/-/emojis/1/diamonds.png rename to app/assets/images/emoji/diamonds.png diff --git a/public/-/emojis/1/disappointed.png b/app/assets/images/emoji/disappointed.png similarity index 100% rename from public/-/emojis/1/disappointed.png rename to app/assets/images/emoji/disappointed.png diff --git a/public/-/emojis/1/disappointed_relieved.png b/app/assets/images/emoji/disappointed_relieved.png similarity index 100% rename from public/-/emojis/1/disappointed_relieved.png rename to app/assets/images/emoji/disappointed_relieved.png diff --git a/public/-/emojis/1/dividers.png b/app/assets/images/emoji/dividers.png similarity index 100% rename from public/-/emojis/1/dividers.png rename to app/assets/images/emoji/dividers.png diff --git a/public/-/emojis/1/dizzy.png b/app/assets/images/emoji/dizzy.png similarity index 100% rename from public/-/emojis/1/dizzy.png rename to app/assets/images/emoji/dizzy.png diff --git a/public/-/emojis/1/dizzy_face.png b/app/assets/images/emoji/dizzy_face.png similarity index 100% rename from public/-/emojis/1/dizzy_face.png rename to app/assets/images/emoji/dizzy_face.png diff --git a/public/-/emojis/1/do_not_litter.png b/app/assets/images/emoji/do_not_litter.png similarity index 100% rename from public/-/emojis/1/do_not_litter.png rename to app/assets/images/emoji/do_not_litter.png diff --git a/public/-/emojis/1/dog.png b/app/assets/images/emoji/dog.png similarity index 100% rename from public/-/emojis/1/dog.png rename to app/assets/images/emoji/dog.png diff --git a/public/-/emojis/1/dog2.png b/app/assets/images/emoji/dog2.png similarity index 100% rename from public/-/emojis/1/dog2.png rename to app/assets/images/emoji/dog2.png diff --git a/public/-/emojis/1/dollar.png b/app/assets/images/emoji/dollar.png similarity index 100% rename from public/-/emojis/1/dollar.png rename to app/assets/images/emoji/dollar.png diff --git a/public/-/emojis/1/dolls.png b/app/assets/images/emoji/dolls.png similarity index 100% rename from public/-/emojis/1/dolls.png rename to app/assets/images/emoji/dolls.png diff --git a/public/-/emojis/1/dolphin.png b/app/assets/images/emoji/dolphin.png similarity index 100% rename from public/-/emojis/1/dolphin.png rename to app/assets/images/emoji/dolphin.png diff --git a/public/-/emojis/1/door.png b/app/assets/images/emoji/door.png similarity index 100% rename from public/-/emojis/1/door.png rename to app/assets/images/emoji/door.png diff --git a/public/-/emojis/1/doughnut.png b/app/assets/images/emoji/doughnut.png similarity index 100% rename from public/-/emojis/1/doughnut.png rename to app/assets/images/emoji/doughnut.png diff --git a/public/-/emojis/1/dove.png b/app/assets/images/emoji/dove.png similarity index 100% rename from public/-/emojis/1/dove.png rename to app/assets/images/emoji/dove.png diff --git a/public/-/emojis/1/dragon.png b/app/assets/images/emoji/dragon.png similarity index 100% rename from public/-/emojis/1/dragon.png rename to app/assets/images/emoji/dragon.png diff --git a/public/-/emojis/1/dragon_face.png b/app/assets/images/emoji/dragon_face.png similarity index 100% rename from public/-/emojis/1/dragon_face.png rename to app/assets/images/emoji/dragon_face.png diff --git a/public/-/emojis/1/dress.png b/app/assets/images/emoji/dress.png similarity index 100% rename from public/-/emojis/1/dress.png rename to app/assets/images/emoji/dress.png diff --git a/public/-/emojis/1/dromedary_camel.png b/app/assets/images/emoji/dromedary_camel.png similarity index 100% rename from public/-/emojis/1/dromedary_camel.png rename to app/assets/images/emoji/dromedary_camel.png diff --git a/public/-/emojis/1/drooling_face.png b/app/assets/images/emoji/drooling_face.png similarity index 100% rename from public/-/emojis/1/drooling_face.png rename to app/assets/images/emoji/drooling_face.png diff --git a/public/-/emojis/1/droplet.png b/app/assets/images/emoji/droplet.png similarity index 100% rename from public/-/emojis/1/droplet.png rename to app/assets/images/emoji/droplet.png diff --git a/public/-/emojis/1/drum.png b/app/assets/images/emoji/drum.png similarity index 100% rename from public/-/emojis/1/drum.png rename to app/assets/images/emoji/drum.png diff --git a/public/-/emojis/1/duck.png b/app/assets/images/emoji/duck.png similarity index 100% rename from public/-/emojis/1/duck.png rename to app/assets/images/emoji/duck.png diff --git a/public/-/emojis/1/dvd.png b/app/assets/images/emoji/dvd.png similarity index 100% rename from public/-/emojis/1/dvd.png rename to app/assets/images/emoji/dvd.png diff --git a/public/-/emojis/1/e-mail.png b/app/assets/images/emoji/e-mail.png similarity index 100% rename from public/-/emojis/1/e-mail.png rename to app/assets/images/emoji/e-mail.png diff --git a/public/-/emojis/1/eagle.png b/app/assets/images/emoji/eagle.png similarity index 100% rename from public/-/emojis/1/eagle.png rename to app/assets/images/emoji/eagle.png diff --git a/public/-/emojis/1/ear.png b/app/assets/images/emoji/ear.png similarity index 100% rename from public/-/emojis/1/ear.png rename to app/assets/images/emoji/ear.png diff --git a/public/-/emojis/1/ear_of_rice.png b/app/assets/images/emoji/ear_of_rice.png similarity index 100% rename from public/-/emojis/1/ear_of_rice.png rename to app/assets/images/emoji/ear_of_rice.png diff --git a/public/-/emojis/1/ear_tone1.png b/app/assets/images/emoji/ear_tone1.png similarity index 100% rename from public/-/emojis/1/ear_tone1.png rename to app/assets/images/emoji/ear_tone1.png diff --git a/public/-/emojis/1/ear_tone2.png b/app/assets/images/emoji/ear_tone2.png similarity index 100% rename from public/-/emojis/1/ear_tone2.png rename to app/assets/images/emoji/ear_tone2.png diff --git a/public/-/emojis/1/ear_tone3.png b/app/assets/images/emoji/ear_tone3.png similarity index 100% rename from public/-/emojis/1/ear_tone3.png rename to app/assets/images/emoji/ear_tone3.png diff --git a/public/-/emojis/1/ear_tone4.png b/app/assets/images/emoji/ear_tone4.png similarity index 100% rename from public/-/emojis/1/ear_tone4.png rename to app/assets/images/emoji/ear_tone4.png diff --git a/public/-/emojis/1/ear_tone5.png b/app/assets/images/emoji/ear_tone5.png similarity index 100% rename from public/-/emojis/1/ear_tone5.png rename to app/assets/images/emoji/ear_tone5.png diff --git a/public/-/emojis/1/earth_africa.png b/app/assets/images/emoji/earth_africa.png similarity index 100% rename from public/-/emojis/1/earth_africa.png rename to app/assets/images/emoji/earth_africa.png diff --git a/public/-/emojis/1/earth_americas.png b/app/assets/images/emoji/earth_americas.png similarity index 100% rename from public/-/emojis/1/earth_americas.png rename to app/assets/images/emoji/earth_americas.png diff --git a/public/-/emojis/1/earth_asia.png b/app/assets/images/emoji/earth_asia.png similarity index 100% rename from public/-/emojis/1/earth_asia.png rename to app/assets/images/emoji/earth_asia.png diff --git a/public/-/emojis/1/egg.png b/app/assets/images/emoji/egg.png similarity index 100% rename from public/-/emojis/1/egg.png rename to app/assets/images/emoji/egg.png diff --git a/public/-/emojis/1/eggplant.png b/app/assets/images/emoji/eggplant.png similarity index 100% rename from public/-/emojis/1/eggplant.png rename to app/assets/images/emoji/eggplant.png diff --git a/public/-/emojis/1/eight.png b/app/assets/images/emoji/eight.png similarity index 100% rename from public/-/emojis/1/eight.png rename to app/assets/images/emoji/eight.png diff --git a/public/-/emojis/1/eight_pointed_black_star.png b/app/assets/images/emoji/eight_pointed_black_star.png similarity index 100% rename from public/-/emojis/1/eight_pointed_black_star.png rename to app/assets/images/emoji/eight_pointed_black_star.png diff --git a/public/-/emojis/1/eight_spoked_asterisk.png b/app/assets/images/emoji/eight_spoked_asterisk.png similarity index 100% rename from public/-/emojis/1/eight_spoked_asterisk.png rename to app/assets/images/emoji/eight_spoked_asterisk.png diff --git a/public/-/emojis/1/eject.png b/app/assets/images/emoji/eject.png similarity index 100% rename from public/-/emojis/1/eject.png rename to app/assets/images/emoji/eject.png diff --git a/public/-/emojis/1/electric_plug.png b/app/assets/images/emoji/electric_plug.png similarity index 100% rename from public/-/emojis/1/electric_plug.png rename to app/assets/images/emoji/electric_plug.png diff --git a/public/-/emojis/1/elephant.png b/app/assets/images/emoji/elephant.png similarity index 100% rename from public/-/emojis/1/elephant.png rename to app/assets/images/emoji/elephant.png diff --git a/public/-/emojis/1/end.png b/app/assets/images/emoji/end.png similarity index 100% rename from public/-/emojis/1/end.png rename to app/assets/images/emoji/end.png diff --git a/public/-/emojis/1/envelope.png b/app/assets/images/emoji/envelope.png similarity index 100% rename from public/-/emojis/1/envelope.png rename to app/assets/images/emoji/envelope.png diff --git a/public/-/emojis/1/envelope_with_arrow.png b/app/assets/images/emoji/envelope_with_arrow.png similarity index 100% rename from public/-/emojis/1/envelope_with_arrow.png rename to app/assets/images/emoji/envelope_with_arrow.png diff --git a/public/-/emojis/1/euro.png b/app/assets/images/emoji/euro.png similarity index 100% rename from public/-/emojis/1/euro.png rename to app/assets/images/emoji/euro.png diff --git a/public/-/emojis/1/european_castle.png b/app/assets/images/emoji/european_castle.png similarity index 100% rename from public/-/emojis/1/european_castle.png rename to app/assets/images/emoji/european_castle.png diff --git a/public/-/emojis/1/european_post_office.png b/app/assets/images/emoji/european_post_office.png similarity index 100% rename from public/-/emojis/1/european_post_office.png rename to app/assets/images/emoji/european_post_office.png diff --git a/public/-/emojis/1/evergreen_tree.png b/app/assets/images/emoji/evergreen_tree.png similarity index 100% rename from public/-/emojis/1/evergreen_tree.png rename to app/assets/images/emoji/evergreen_tree.png diff --git a/public/-/emojis/1/exclamation.png b/app/assets/images/emoji/exclamation.png similarity index 100% rename from public/-/emojis/1/exclamation.png rename to app/assets/images/emoji/exclamation.png diff --git a/public/-/emojis/1/expressionless.png b/app/assets/images/emoji/expressionless.png similarity index 100% rename from public/-/emojis/1/expressionless.png rename to app/assets/images/emoji/expressionless.png diff --git a/public/-/emojis/1/eye.png b/app/assets/images/emoji/eye.png similarity index 100% rename from public/-/emojis/1/eye.png rename to app/assets/images/emoji/eye.png diff --git a/public/-/emojis/1/eye_in_speech_bubble.png b/app/assets/images/emoji/eye_in_speech_bubble.png similarity index 100% rename from public/-/emojis/1/eye_in_speech_bubble.png rename to app/assets/images/emoji/eye_in_speech_bubble.png diff --git a/public/-/emojis/1/eyeglasses.png b/app/assets/images/emoji/eyeglasses.png similarity index 100% rename from public/-/emojis/1/eyeglasses.png rename to app/assets/images/emoji/eyeglasses.png diff --git a/public/-/emojis/1/eyes.png b/app/assets/images/emoji/eyes.png similarity index 100% rename from public/-/emojis/1/eyes.png rename to app/assets/images/emoji/eyes.png diff --git a/public/-/emojis/1/face_palm.png b/app/assets/images/emoji/face_palm.png similarity index 100% rename from public/-/emojis/1/face_palm.png rename to app/assets/images/emoji/face_palm.png diff --git a/public/-/emojis/1/face_palm_tone1.png b/app/assets/images/emoji/face_palm_tone1.png similarity index 100% rename from public/-/emojis/1/face_palm_tone1.png rename to app/assets/images/emoji/face_palm_tone1.png diff --git a/public/-/emojis/1/face_palm_tone2.png b/app/assets/images/emoji/face_palm_tone2.png similarity index 100% rename from public/-/emojis/1/face_palm_tone2.png rename to app/assets/images/emoji/face_palm_tone2.png diff --git a/public/-/emojis/1/face_palm_tone3.png b/app/assets/images/emoji/face_palm_tone3.png similarity index 100% rename from public/-/emojis/1/face_palm_tone3.png rename to app/assets/images/emoji/face_palm_tone3.png diff --git a/public/-/emojis/1/face_palm_tone4.png b/app/assets/images/emoji/face_palm_tone4.png similarity index 100% rename from public/-/emojis/1/face_palm_tone4.png rename to app/assets/images/emoji/face_palm_tone4.png diff --git a/public/-/emojis/1/face_palm_tone5.png b/app/assets/images/emoji/face_palm_tone5.png similarity index 100% rename from public/-/emojis/1/face_palm_tone5.png rename to app/assets/images/emoji/face_palm_tone5.png diff --git a/public/-/emojis/1/factory.png b/app/assets/images/emoji/factory.png similarity index 100% rename from public/-/emojis/1/factory.png rename to app/assets/images/emoji/factory.png diff --git a/public/-/emojis/1/fallen_leaf.png b/app/assets/images/emoji/fallen_leaf.png similarity index 100% rename from public/-/emojis/1/fallen_leaf.png rename to app/assets/images/emoji/fallen_leaf.png diff --git a/public/-/emojis/1/family.png b/app/assets/images/emoji/family.png similarity index 100% rename from public/-/emojis/1/family.png rename to app/assets/images/emoji/family.png diff --git a/public/-/emojis/1/family_mmb.png b/app/assets/images/emoji/family_mmb.png similarity index 100% rename from public/-/emojis/1/family_mmb.png rename to app/assets/images/emoji/family_mmb.png diff --git a/public/-/emojis/1/family_mmbb.png b/app/assets/images/emoji/family_mmbb.png similarity index 100% rename from public/-/emojis/1/family_mmbb.png rename to app/assets/images/emoji/family_mmbb.png diff --git a/public/-/emojis/1/family_mmg.png b/app/assets/images/emoji/family_mmg.png similarity index 100% rename from public/-/emojis/1/family_mmg.png rename to app/assets/images/emoji/family_mmg.png diff --git a/public/-/emojis/1/family_mmgb.png b/app/assets/images/emoji/family_mmgb.png similarity index 100% rename from public/-/emojis/1/family_mmgb.png rename to app/assets/images/emoji/family_mmgb.png diff --git a/public/-/emojis/1/family_mmgg.png b/app/assets/images/emoji/family_mmgg.png similarity index 100% rename from public/-/emojis/1/family_mmgg.png rename to app/assets/images/emoji/family_mmgg.png diff --git a/public/-/emojis/1/family_mwbb.png b/app/assets/images/emoji/family_mwbb.png similarity index 100% rename from public/-/emojis/1/family_mwbb.png rename to app/assets/images/emoji/family_mwbb.png diff --git a/public/-/emojis/1/family_mwg.png b/app/assets/images/emoji/family_mwg.png similarity index 100% rename from public/-/emojis/1/family_mwg.png rename to app/assets/images/emoji/family_mwg.png diff --git a/public/-/emojis/1/family_mwgb.png b/app/assets/images/emoji/family_mwgb.png similarity index 100% rename from public/-/emojis/1/family_mwgb.png rename to app/assets/images/emoji/family_mwgb.png diff --git a/public/-/emojis/1/family_mwgg.png b/app/assets/images/emoji/family_mwgg.png similarity index 100% rename from public/-/emojis/1/family_mwgg.png rename to app/assets/images/emoji/family_mwgg.png diff --git a/public/-/emojis/1/family_wwb.png b/app/assets/images/emoji/family_wwb.png similarity index 100% rename from public/-/emojis/1/family_wwb.png rename to app/assets/images/emoji/family_wwb.png diff --git a/public/-/emojis/1/family_wwbb.png b/app/assets/images/emoji/family_wwbb.png similarity index 100% rename from public/-/emojis/1/family_wwbb.png rename to app/assets/images/emoji/family_wwbb.png diff --git a/public/-/emojis/1/family_wwg.png b/app/assets/images/emoji/family_wwg.png similarity index 100% rename from public/-/emojis/1/family_wwg.png rename to app/assets/images/emoji/family_wwg.png diff --git a/public/-/emojis/1/family_wwgb.png b/app/assets/images/emoji/family_wwgb.png similarity index 100% rename from public/-/emojis/1/family_wwgb.png rename to app/assets/images/emoji/family_wwgb.png diff --git a/public/-/emojis/1/family_wwgg.png b/app/assets/images/emoji/family_wwgg.png similarity index 100% rename from public/-/emojis/1/family_wwgg.png rename to app/assets/images/emoji/family_wwgg.png diff --git a/public/-/emojis/1/fast_forward.png b/app/assets/images/emoji/fast_forward.png similarity index 100% rename from public/-/emojis/1/fast_forward.png rename to app/assets/images/emoji/fast_forward.png diff --git a/public/-/emojis/1/fax.png b/app/assets/images/emoji/fax.png similarity index 100% rename from public/-/emojis/1/fax.png rename to app/assets/images/emoji/fax.png diff --git a/public/-/emojis/1/fearful.png b/app/assets/images/emoji/fearful.png similarity index 100% rename from public/-/emojis/1/fearful.png rename to app/assets/images/emoji/fearful.png diff --git a/public/-/emojis/1/feet.png b/app/assets/images/emoji/feet.png similarity index 100% rename from public/-/emojis/1/feet.png rename to app/assets/images/emoji/feet.png diff --git a/public/-/emojis/1/fencer.png b/app/assets/images/emoji/fencer.png similarity index 100% rename from public/-/emojis/1/fencer.png rename to app/assets/images/emoji/fencer.png diff --git a/public/-/emojis/1/ferris_wheel.png b/app/assets/images/emoji/ferris_wheel.png similarity index 100% rename from public/-/emojis/1/ferris_wheel.png rename to app/assets/images/emoji/ferris_wheel.png diff --git a/public/-/emojis/1/ferry.png b/app/assets/images/emoji/ferry.png similarity index 100% rename from public/-/emojis/1/ferry.png rename to app/assets/images/emoji/ferry.png diff --git a/public/-/emojis/1/field_hockey.png b/app/assets/images/emoji/field_hockey.png similarity index 100% rename from public/-/emojis/1/field_hockey.png rename to app/assets/images/emoji/field_hockey.png diff --git a/public/-/emojis/1/file_cabinet.png b/app/assets/images/emoji/file_cabinet.png similarity index 100% rename from public/-/emojis/1/file_cabinet.png rename to app/assets/images/emoji/file_cabinet.png diff --git a/public/-/emojis/1/file_folder.png b/app/assets/images/emoji/file_folder.png similarity index 100% rename from public/-/emojis/1/file_folder.png rename to app/assets/images/emoji/file_folder.png diff --git a/public/-/emojis/1/film_frames.png b/app/assets/images/emoji/film_frames.png similarity index 100% rename from public/-/emojis/1/film_frames.png rename to app/assets/images/emoji/film_frames.png diff --git a/public/-/emojis/1/fingers_crossed.png b/app/assets/images/emoji/fingers_crossed.png similarity index 100% rename from public/-/emojis/1/fingers_crossed.png rename to app/assets/images/emoji/fingers_crossed.png diff --git a/public/-/emojis/1/fingers_crossed_tone1.png b/app/assets/images/emoji/fingers_crossed_tone1.png similarity index 100% rename from public/-/emojis/1/fingers_crossed_tone1.png rename to app/assets/images/emoji/fingers_crossed_tone1.png diff --git a/public/-/emojis/1/fingers_crossed_tone2.png b/app/assets/images/emoji/fingers_crossed_tone2.png similarity index 100% rename from public/-/emojis/1/fingers_crossed_tone2.png rename to app/assets/images/emoji/fingers_crossed_tone2.png diff --git a/public/-/emojis/1/fingers_crossed_tone3.png b/app/assets/images/emoji/fingers_crossed_tone3.png similarity index 100% rename from public/-/emojis/1/fingers_crossed_tone3.png rename to app/assets/images/emoji/fingers_crossed_tone3.png diff --git a/public/-/emojis/1/fingers_crossed_tone4.png b/app/assets/images/emoji/fingers_crossed_tone4.png similarity index 100% rename from public/-/emojis/1/fingers_crossed_tone4.png rename to app/assets/images/emoji/fingers_crossed_tone4.png diff --git a/public/-/emojis/1/fingers_crossed_tone5.png b/app/assets/images/emoji/fingers_crossed_tone5.png similarity index 100% rename from public/-/emojis/1/fingers_crossed_tone5.png rename to app/assets/images/emoji/fingers_crossed_tone5.png diff --git a/public/-/emojis/1/fire.png b/app/assets/images/emoji/fire.png similarity index 100% rename from public/-/emojis/1/fire.png rename to app/assets/images/emoji/fire.png diff --git a/public/-/emojis/1/fire_engine.png b/app/assets/images/emoji/fire_engine.png similarity index 100% rename from public/-/emojis/1/fire_engine.png rename to app/assets/images/emoji/fire_engine.png diff --git a/public/-/emojis/1/fireworks.png b/app/assets/images/emoji/fireworks.png similarity index 100% rename from public/-/emojis/1/fireworks.png rename to app/assets/images/emoji/fireworks.png diff --git a/public/-/emojis/1/first_place.png b/app/assets/images/emoji/first_place.png similarity index 100% rename from public/-/emojis/1/first_place.png rename to app/assets/images/emoji/first_place.png diff --git a/public/-/emojis/1/first_quarter_moon.png b/app/assets/images/emoji/first_quarter_moon.png similarity index 100% rename from public/-/emojis/1/first_quarter_moon.png rename to app/assets/images/emoji/first_quarter_moon.png diff --git a/public/-/emojis/1/first_quarter_moon_with_face.png b/app/assets/images/emoji/first_quarter_moon_with_face.png similarity index 100% rename from public/-/emojis/1/first_quarter_moon_with_face.png rename to app/assets/images/emoji/first_quarter_moon_with_face.png diff --git a/public/-/emojis/1/fish.png b/app/assets/images/emoji/fish.png similarity index 100% rename from public/-/emojis/1/fish.png rename to app/assets/images/emoji/fish.png diff --git a/public/-/emojis/1/fish_cake.png b/app/assets/images/emoji/fish_cake.png similarity index 100% rename from public/-/emojis/1/fish_cake.png rename to app/assets/images/emoji/fish_cake.png diff --git a/public/-/emojis/1/fishing_pole_and_fish.png b/app/assets/images/emoji/fishing_pole_and_fish.png similarity index 100% rename from public/-/emojis/1/fishing_pole_and_fish.png rename to app/assets/images/emoji/fishing_pole_and_fish.png diff --git a/public/-/emojis/1/fist.png b/app/assets/images/emoji/fist.png similarity index 100% rename from public/-/emojis/1/fist.png rename to app/assets/images/emoji/fist.png diff --git a/public/-/emojis/1/fist_tone1.png b/app/assets/images/emoji/fist_tone1.png similarity index 100% rename from public/-/emojis/1/fist_tone1.png rename to app/assets/images/emoji/fist_tone1.png diff --git a/public/-/emojis/1/fist_tone2.png b/app/assets/images/emoji/fist_tone2.png similarity index 100% rename from public/-/emojis/1/fist_tone2.png rename to app/assets/images/emoji/fist_tone2.png diff --git a/public/-/emojis/1/fist_tone3.png b/app/assets/images/emoji/fist_tone3.png similarity index 100% rename from public/-/emojis/1/fist_tone3.png rename to app/assets/images/emoji/fist_tone3.png diff --git a/public/-/emojis/1/fist_tone4.png b/app/assets/images/emoji/fist_tone4.png similarity index 100% rename from public/-/emojis/1/fist_tone4.png rename to app/assets/images/emoji/fist_tone4.png diff --git a/public/-/emojis/1/fist_tone5.png b/app/assets/images/emoji/fist_tone5.png similarity index 100% rename from public/-/emojis/1/fist_tone5.png rename to app/assets/images/emoji/fist_tone5.png diff --git a/public/-/emojis/1/five.png b/app/assets/images/emoji/five.png similarity index 100% rename from public/-/emojis/1/five.png rename to app/assets/images/emoji/five.png diff --git a/public/-/emojis/1/flag_ac.png b/app/assets/images/emoji/flag_ac.png similarity index 100% rename from public/-/emojis/1/flag_ac.png rename to app/assets/images/emoji/flag_ac.png diff --git a/public/-/emojis/1/flag_ad.png b/app/assets/images/emoji/flag_ad.png similarity index 100% rename from public/-/emojis/1/flag_ad.png rename to app/assets/images/emoji/flag_ad.png diff --git a/public/-/emojis/1/flag_ae.png b/app/assets/images/emoji/flag_ae.png similarity index 100% rename from public/-/emojis/1/flag_ae.png rename to app/assets/images/emoji/flag_ae.png diff --git a/public/-/emojis/1/flag_af.png b/app/assets/images/emoji/flag_af.png similarity index 100% rename from public/-/emojis/1/flag_af.png rename to app/assets/images/emoji/flag_af.png diff --git a/public/-/emojis/1/flag_ag.png b/app/assets/images/emoji/flag_ag.png similarity index 100% rename from public/-/emojis/1/flag_ag.png rename to app/assets/images/emoji/flag_ag.png diff --git a/public/-/emojis/1/flag_ai.png b/app/assets/images/emoji/flag_ai.png similarity index 100% rename from public/-/emojis/1/flag_ai.png rename to app/assets/images/emoji/flag_ai.png diff --git a/public/-/emojis/1/flag_al.png b/app/assets/images/emoji/flag_al.png similarity index 100% rename from public/-/emojis/1/flag_al.png rename to app/assets/images/emoji/flag_al.png diff --git a/public/-/emojis/1/flag_am.png b/app/assets/images/emoji/flag_am.png similarity index 100% rename from public/-/emojis/1/flag_am.png rename to app/assets/images/emoji/flag_am.png diff --git a/public/-/emojis/1/flag_ao.png b/app/assets/images/emoji/flag_ao.png similarity index 100% rename from public/-/emojis/1/flag_ao.png rename to app/assets/images/emoji/flag_ao.png diff --git a/public/-/emojis/1/flag_aq.png b/app/assets/images/emoji/flag_aq.png similarity index 100% rename from public/-/emojis/1/flag_aq.png rename to app/assets/images/emoji/flag_aq.png diff --git a/public/-/emojis/1/flag_ar.png b/app/assets/images/emoji/flag_ar.png similarity index 100% rename from public/-/emojis/1/flag_ar.png rename to app/assets/images/emoji/flag_ar.png diff --git a/public/-/emojis/1/flag_as.png b/app/assets/images/emoji/flag_as.png similarity index 100% rename from public/-/emojis/1/flag_as.png rename to app/assets/images/emoji/flag_as.png diff --git a/public/-/emojis/1/flag_at.png b/app/assets/images/emoji/flag_at.png similarity index 100% rename from public/-/emojis/1/flag_at.png rename to app/assets/images/emoji/flag_at.png diff --git a/public/-/emojis/1/flag_au.png b/app/assets/images/emoji/flag_au.png similarity index 100% rename from public/-/emojis/1/flag_au.png rename to app/assets/images/emoji/flag_au.png diff --git a/public/-/emojis/1/flag_aw.png b/app/assets/images/emoji/flag_aw.png similarity index 100% rename from public/-/emojis/1/flag_aw.png rename to app/assets/images/emoji/flag_aw.png diff --git a/public/-/emojis/1/flag_ax.png b/app/assets/images/emoji/flag_ax.png similarity index 100% rename from public/-/emojis/1/flag_ax.png rename to app/assets/images/emoji/flag_ax.png diff --git a/public/-/emojis/1/flag_az.png b/app/assets/images/emoji/flag_az.png similarity index 100% rename from public/-/emojis/1/flag_az.png rename to app/assets/images/emoji/flag_az.png diff --git a/public/-/emojis/1/flag_ba.png b/app/assets/images/emoji/flag_ba.png similarity index 100% rename from public/-/emojis/1/flag_ba.png rename to app/assets/images/emoji/flag_ba.png diff --git a/public/-/emojis/1/flag_bb.png b/app/assets/images/emoji/flag_bb.png similarity index 100% rename from public/-/emojis/1/flag_bb.png rename to app/assets/images/emoji/flag_bb.png diff --git a/public/-/emojis/1/flag_bd.png b/app/assets/images/emoji/flag_bd.png similarity index 100% rename from public/-/emojis/1/flag_bd.png rename to app/assets/images/emoji/flag_bd.png diff --git a/public/-/emojis/1/flag_be.png b/app/assets/images/emoji/flag_be.png similarity index 100% rename from public/-/emojis/1/flag_be.png rename to app/assets/images/emoji/flag_be.png diff --git a/public/-/emojis/1/flag_bf.png b/app/assets/images/emoji/flag_bf.png similarity index 100% rename from public/-/emojis/1/flag_bf.png rename to app/assets/images/emoji/flag_bf.png diff --git a/public/-/emojis/1/flag_bg.png b/app/assets/images/emoji/flag_bg.png similarity index 100% rename from public/-/emojis/1/flag_bg.png rename to app/assets/images/emoji/flag_bg.png diff --git a/public/-/emojis/1/flag_bh.png b/app/assets/images/emoji/flag_bh.png similarity index 100% rename from public/-/emojis/1/flag_bh.png rename to app/assets/images/emoji/flag_bh.png diff --git a/public/-/emojis/1/flag_bi.png b/app/assets/images/emoji/flag_bi.png similarity index 100% rename from public/-/emojis/1/flag_bi.png rename to app/assets/images/emoji/flag_bi.png diff --git a/public/-/emojis/1/flag_bj.png b/app/assets/images/emoji/flag_bj.png similarity index 100% rename from public/-/emojis/1/flag_bj.png rename to app/assets/images/emoji/flag_bj.png diff --git a/public/-/emojis/1/flag_bl.png b/app/assets/images/emoji/flag_bl.png similarity index 100% rename from public/-/emojis/1/flag_bl.png rename to app/assets/images/emoji/flag_bl.png diff --git a/public/-/emojis/1/flag_black.png b/app/assets/images/emoji/flag_black.png similarity index 100% rename from public/-/emojis/1/flag_black.png rename to app/assets/images/emoji/flag_black.png diff --git a/public/-/emojis/1/flag_bm.png b/app/assets/images/emoji/flag_bm.png similarity index 100% rename from public/-/emojis/1/flag_bm.png rename to app/assets/images/emoji/flag_bm.png diff --git a/public/-/emojis/1/flag_bn.png b/app/assets/images/emoji/flag_bn.png similarity index 100% rename from public/-/emojis/1/flag_bn.png rename to app/assets/images/emoji/flag_bn.png diff --git a/public/-/emojis/1/flag_bo.png b/app/assets/images/emoji/flag_bo.png similarity index 100% rename from public/-/emojis/1/flag_bo.png rename to app/assets/images/emoji/flag_bo.png diff --git a/public/-/emojis/1/flag_bq.png b/app/assets/images/emoji/flag_bq.png similarity index 100% rename from public/-/emojis/1/flag_bq.png rename to app/assets/images/emoji/flag_bq.png diff --git a/public/-/emojis/1/flag_br.png b/app/assets/images/emoji/flag_br.png similarity index 100% rename from public/-/emojis/1/flag_br.png rename to app/assets/images/emoji/flag_br.png diff --git a/public/-/emojis/1/flag_bs.png b/app/assets/images/emoji/flag_bs.png similarity index 100% rename from public/-/emojis/1/flag_bs.png rename to app/assets/images/emoji/flag_bs.png diff --git a/public/-/emojis/1/flag_bt.png b/app/assets/images/emoji/flag_bt.png similarity index 100% rename from public/-/emojis/1/flag_bt.png rename to app/assets/images/emoji/flag_bt.png diff --git a/public/-/emojis/1/flag_bv.png b/app/assets/images/emoji/flag_bv.png similarity index 100% rename from public/-/emojis/1/flag_bv.png rename to app/assets/images/emoji/flag_bv.png diff --git a/public/-/emojis/1/flag_bw.png b/app/assets/images/emoji/flag_bw.png similarity index 100% rename from public/-/emojis/1/flag_bw.png rename to app/assets/images/emoji/flag_bw.png diff --git a/public/-/emojis/1/flag_by.png b/app/assets/images/emoji/flag_by.png similarity index 100% rename from public/-/emojis/1/flag_by.png rename to app/assets/images/emoji/flag_by.png diff --git a/public/-/emojis/1/flag_bz.png b/app/assets/images/emoji/flag_bz.png similarity index 100% rename from public/-/emojis/1/flag_bz.png rename to app/assets/images/emoji/flag_bz.png diff --git a/public/-/emojis/1/flag_ca.png b/app/assets/images/emoji/flag_ca.png similarity index 100% rename from public/-/emojis/1/flag_ca.png rename to app/assets/images/emoji/flag_ca.png diff --git a/public/-/emojis/1/flag_cc.png b/app/assets/images/emoji/flag_cc.png similarity index 100% rename from public/-/emojis/1/flag_cc.png rename to app/assets/images/emoji/flag_cc.png diff --git a/public/-/emojis/1/flag_cd.png b/app/assets/images/emoji/flag_cd.png similarity index 100% rename from public/-/emojis/1/flag_cd.png rename to app/assets/images/emoji/flag_cd.png diff --git a/public/-/emojis/1/flag_cf.png b/app/assets/images/emoji/flag_cf.png similarity index 100% rename from public/-/emojis/1/flag_cf.png rename to app/assets/images/emoji/flag_cf.png diff --git a/public/-/emojis/1/flag_cg.png b/app/assets/images/emoji/flag_cg.png similarity index 100% rename from public/-/emojis/1/flag_cg.png rename to app/assets/images/emoji/flag_cg.png diff --git a/public/-/emojis/1/flag_ch.png b/app/assets/images/emoji/flag_ch.png similarity index 100% rename from public/-/emojis/1/flag_ch.png rename to app/assets/images/emoji/flag_ch.png diff --git a/public/-/emojis/1/flag_ci.png b/app/assets/images/emoji/flag_ci.png similarity index 100% rename from public/-/emojis/1/flag_ci.png rename to app/assets/images/emoji/flag_ci.png diff --git a/public/-/emojis/1/flag_ck.png b/app/assets/images/emoji/flag_ck.png similarity index 100% rename from public/-/emojis/1/flag_ck.png rename to app/assets/images/emoji/flag_ck.png diff --git a/public/-/emojis/1/flag_cl.png b/app/assets/images/emoji/flag_cl.png similarity index 100% rename from public/-/emojis/1/flag_cl.png rename to app/assets/images/emoji/flag_cl.png diff --git a/public/-/emojis/1/flag_cm.png b/app/assets/images/emoji/flag_cm.png similarity index 100% rename from public/-/emojis/1/flag_cm.png rename to app/assets/images/emoji/flag_cm.png diff --git a/public/-/emojis/1/flag_cn.png b/app/assets/images/emoji/flag_cn.png similarity index 100% rename from public/-/emojis/1/flag_cn.png rename to app/assets/images/emoji/flag_cn.png diff --git a/public/-/emojis/1/flag_co.png b/app/assets/images/emoji/flag_co.png similarity index 100% rename from public/-/emojis/1/flag_co.png rename to app/assets/images/emoji/flag_co.png diff --git a/public/-/emojis/1/flag_cp.png b/app/assets/images/emoji/flag_cp.png similarity index 100% rename from public/-/emojis/1/flag_cp.png rename to app/assets/images/emoji/flag_cp.png diff --git a/public/-/emojis/1/flag_cr.png b/app/assets/images/emoji/flag_cr.png similarity index 100% rename from public/-/emojis/1/flag_cr.png rename to app/assets/images/emoji/flag_cr.png diff --git a/public/-/emojis/1/flag_cu.png b/app/assets/images/emoji/flag_cu.png similarity index 100% rename from public/-/emojis/1/flag_cu.png rename to app/assets/images/emoji/flag_cu.png diff --git a/public/-/emojis/1/flag_cv.png b/app/assets/images/emoji/flag_cv.png similarity index 100% rename from public/-/emojis/1/flag_cv.png rename to app/assets/images/emoji/flag_cv.png diff --git a/public/-/emojis/1/flag_cw.png b/app/assets/images/emoji/flag_cw.png similarity index 100% rename from public/-/emojis/1/flag_cw.png rename to app/assets/images/emoji/flag_cw.png diff --git a/public/-/emojis/1/flag_cx.png b/app/assets/images/emoji/flag_cx.png similarity index 100% rename from public/-/emojis/1/flag_cx.png rename to app/assets/images/emoji/flag_cx.png diff --git a/public/-/emojis/1/flag_cy.png b/app/assets/images/emoji/flag_cy.png similarity index 100% rename from public/-/emojis/1/flag_cy.png rename to app/assets/images/emoji/flag_cy.png diff --git a/public/-/emojis/1/flag_cz.png b/app/assets/images/emoji/flag_cz.png similarity index 100% rename from public/-/emojis/1/flag_cz.png rename to app/assets/images/emoji/flag_cz.png diff --git a/public/-/emojis/1/flag_de.png b/app/assets/images/emoji/flag_de.png similarity index 100% rename from public/-/emojis/1/flag_de.png rename to app/assets/images/emoji/flag_de.png diff --git a/public/-/emojis/1/flag_dg.png b/app/assets/images/emoji/flag_dg.png similarity index 100% rename from public/-/emojis/1/flag_dg.png rename to app/assets/images/emoji/flag_dg.png diff --git a/public/-/emojis/1/flag_dj.png b/app/assets/images/emoji/flag_dj.png similarity index 100% rename from public/-/emojis/1/flag_dj.png rename to app/assets/images/emoji/flag_dj.png diff --git a/public/-/emojis/1/flag_dk.png b/app/assets/images/emoji/flag_dk.png similarity index 100% rename from public/-/emojis/1/flag_dk.png rename to app/assets/images/emoji/flag_dk.png diff --git a/public/-/emojis/1/flag_dm.png b/app/assets/images/emoji/flag_dm.png similarity index 100% rename from public/-/emojis/1/flag_dm.png rename to app/assets/images/emoji/flag_dm.png diff --git a/public/-/emojis/1/flag_do.png b/app/assets/images/emoji/flag_do.png similarity index 100% rename from public/-/emojis/1/flag_do.png rename to app/assets/images/emoji/flag_do.png diff --git a/public/-/emojis/1/flag_dz.png b/app/assets/images/emoji/flag_dz.png similarity index 100% rename from public/-/emojis/1/flag_dz.png rename to app/assets/images/emoji/flag_dz.png diff --git a/public/-/emojis/1/flag_ea.png b/app/assets/images/emoji/flag_ea.png similarity index 100% rename from public/-/emojis/1/flag_ea.png rename to app/assets/images/emoji/flag_ea.png diff --git a/public/-/emojis/1/flag_ec.png b/app/assets/images/emoji/flag_ec.png similarity index 100% rename from public/-/emojis/1/flag_ec.png rename to app/assets/images/emoji/flag_ec.png diff --git a/public/-/emojis/1/flag_ee.png b/app/assets/images/emoji/flag_ee.png similarity index 100% rename from public/-/emojis/1/flag_ee.png rename to app/assets/images/emoji/flag_ee.png diff --git a/public/-/emojis/1/flag_eg.png b/app/assets/images/emoji/flag_eg.png similarity index 100% rename from public/-/emojis/1/flag_eg.png rename to app/assets/images/emoji/flag_eg.png diff --git a/public/-/emojis/1/flag_eh.png b/app/assets/images/emoji/flag_eh.png similarity index 100% rename from public/-/emojis/1/flag_eh.png rename to app/assets/images/emoji/flag_eh.png diff --git a/public/-/emojis/1/flag_er.png b/app/assets/images/emoji/flag_er.png similarity index 100% rename from public/-/emojis/1/flag_er.png rename to app/assets/images/emoji/flag_er.png diff --git a/public/-/emojis/1/flag_es.png b/app/assets/images/emoji/flag_es.png similarity index 100% rename from public/-/emojis/1/flag_es.png rename to app/assets/images/emoji/flag_es.png diff --git a/public/-/emojis/1/flag_et.png b/app/assets/images/emoji/flag_et.png similarity index 100% rename from public/-/emojis/1/flag_et.png rename to app/assets/images/emoji/flag_et.png diff --git a/public/-/emojis/1/flag_eu.png b/app/assets/images/emoji/flag_eu.png similarity index 100% rename from public/-/emojis/1/flag_eu.png rename to app/assets/images/emoji/flag_eu.png diff --git a/public/-/emojis/1/flag_fi.png b/app/assets/images/emoji/flag_fi.png similarity index 100% rename from public/-/emojis/1/flag_fi.png rename to app/assets/images/emoji/flag_fi.png diff --git a/public/-/emojis/1/flag_fj.png b/app/assets/images/emoji/flag_fj.png similarity index 100% rename from public/-/emojis/1/flag_fj.png rename to app/assets/images/emoji/flag_fj.png diff --git a/public/-/emojis/1/flag_fk.png b/app/assets/images/emoji/flag_fk.png similarity index 100% rename from public/-/emojis/1/flag_fk.png rename to app/assets/images/emoji/flag_fk.png diff --git a/public/-/emojis/1/flag_fm.png b/app/assets/images/emoji/flag_fm.png similarity index 100% rename from public/-/emojis/1/flag_fm.png rename to app/assets/images/emoji/flag_fm.png diff --git a/public/-/emojis/1/flag_fo.png b/app/assets/images/emoji/flag_fo.png similarity index 100% rename from public/-/emojis/1/flag_fo.png rename to app/assets/images/emoji/flag_fo.png diff --git a/public/-/emojis/1/flag_fr.png b/app/assets/images/emoji/flag_fr.png similarity index 100% rename from public/-/emojis/1/flag_fr.png rename to app/assets/images/emoji/flag_fr.png diff --git a/public/-/emojis/1/flag_ga.png b/app/assets/images/emoji/flag_ga.png similarity index 100% rename from public/-/emojis/1/flag_ga.png rename to app/assets/images/emoji/flag_ga.png diff --git a/public/-/emojis/1/flag_gb.png b/app/assets/images/emoji/flag_gb.png similarity index 100% rename from public/-/emojis/1/flag_gb.png rename to app/assets/images/emoji/flag_gb.png diff --git a/public/-/emojis/1/flag_gd.png b/app/assets/images/emoji/flag_gd.png similarity index 100% rename from public/-/emojis/1/flag_gd.png rename to app/assets/images/emoji/flag_gd.png diff --git a/public/-/emojis/1/flag_ge.png b/app/assets/images/emoji/flag_ge.png similarity index 100% rename from public/-/emojis/1/flag_ge.png rename to app/assets/images/emoji/flag_ge.png diff --git a/public/-/emojis/1/flag_gf.png b/app/assets/images/emoji/flag_gf.png similarity index 100% rename from public/-/emojis/1/flag_gf.png rename to app/assets/images/emoji/flag_gf.png diff --git a/public/-/emojis/1/flag_gg.png b/app/assets/images/emoji/flag_gg.png similarity index 100% rename from public/-/emojis/1/flag_gg.png rename to app/assets/images/emoji/flag_gg.png diff --git a/public/-/emojis/1/flag_gh.png b/app/assets/images/emoji/flag_gh.png similarity index 100% rename from public/-/emojis/1/flag_gh.png rename to app/assets/images/emoji/flag_gh.png diff --git a/public/-/emojis/1/flag_gi.png b/app/assets/images/emoji/flag_gi.png similarity index 100% rename from public/-/emojis/1/flag_gi.png rename to app/assets/images/emoji/flag_gi.png diff --git a/public/-/emojis/1/flag_gl.png b/app/assets/images/emoji/flag_gl.png similarity index 100% rename from public/-/emojis/1/flag_gl.png rename to app/assets/images/emoji/flag_gl.png diff --git a/public/-/emojis/1/flag_gm.png b/app/assets/images/emoji/flag_gm.png similarity index 100% rename from public/-/emojis/1/flag_gm.png rename to app/assets/images/emoji/flag_gm.png diff --git a/public/-/emojis/1/flag_gn.png b/app/assets/images/emoji/flag_gn.png similarity index 100% rename from public/-/emojis/1/flag_gn.png rename to app/assets/images/emoji/flag_gn.png diff --git a/public/-/emojis/1/flag_gp.png b/app/assets/images/emoji/flag_gp.png similarity index 100% rename from public/-/emojis/1/flag_gp.png rename to app/assets/images/emoji/flag_gp.png diff --git a/public/-/emojis/1/flag_gq.png b/app/assets/images/emoji/flag_gq.png similarity index 100% rename from public/-/emojis/1/flag_gq.png rename to app/assets/images/emoji/flag_gq.png diff --git a/public/-/emojis/1/flag_gr.png b/app/assets/images/emoji/flag_gr.png similarity index 100% rename from public/-/emojis/1/flag_gr.png rename to app/assets/images/emoji/flag_gr.png diff --git a/public/-/emojis/1/flag_gs.png b/app/assets/images/emoji/flag_gs.png similarity index 100% rename from public/-/emojis/1/flag_gs.png rename to app/assets/images/emoji/flag_gs.png diff --git a/public/-/emojis/1/flag_gt.png b/app/assets/images/emoji/flag_gt.png similarity index 100% rename from public/-/emojis/1/flag_gt.png rename to app/assets/images/emoji/flag_gt.png diff --git a/public/-/emojis/1/flag_gu.png b/app/assets/images/emoji/flag_gu.png similarity index 100% rename from public/-/emojis/1/flag_gu.png rename to app/assets/images/emoji/flag_gu.png diff --git a/public/-/emojis/1/flag_gw.png b/app/assets/images/emoji/flag_gw.png similarity index 100% rename from public/-/emojis/1/flag_gw.png rename to app/assets/images/emoji/flag_gw.png diff --git a/public/-/emojis/1/flag_gy.png b/app/assets/images/emoji/flag_gy.png similarity index 100% rename from public/-/emojis/1/flag_gy.png rename to app/assets/images/emoji/flag_gy.png diff --git a/public/-/emojis/1/flag_hk.png b/app/assets/images/emoji/flag_hk.png similarity index 100% rename from public/-/emojis/1/flag_hk.png rename to app/assets/images/emoji/flag_hk.png diff --git a/public/-/emojis/1/flag_hm.png b/app/assets/images/emoji/flag_hm.png similarity index 100% rename from public/-/emojis/1/flag_hm.png rename to app/assets/images/emoji/flag_hm.png diff --git a/public/-/emojis/1/flag_hn.png b/app/assets/images/emoji/flag_hn.png similarity index 100% rename from public/-/emojis/1/flag_hn.png rename to app/assets/images/emoji/flag_hn.png diff --git a/public/-/emojis/1/flag_hr.png b/app/assets/images/emoji/flag_hr.png similarity index 100% rename from public/-/emojis/1/flag_hr.png rename to app/assets/images/emoji/flag_hr.png diff --git a/public/-/emojis/1/flag_ht.png b/app/assets/images/emoji/flag_ht.png similarity index 100% rename from public/-/emojis/1/flag_ht.png rename to app/assets/images/emoji/flag_ht.png diff --git a/public/-/emojis/1/flag_hu.png b/app/assets/images/emoji/flag_hu.png similarity index 100% rename from public/-/emojis/1/flag_hu.png rename to app/assets/images/emoji/flag_hu.png diff --git a/public/-/emojis/1/flag_ic.png b/app/assets/images/emoji/flag_ic.png similarity index 100% rename from public/-/emojis/1/flag_ic.png rename to app/assets/images/emoji/flag_ic.png diff --git a/public/-/emojis/1/flag_id.png b/app/assets/images/emoji/flag_id.png similarity index 100% rename from public/-/emojis/1/flag_id.png rename to app/assets/images/emoji/flag_id.png diff --git a/public/-/emojis/1/flag_ie.png b/app/assets/images/emoji/flag_ie.png similarity index 100% rename from public/-/emojis/1/flag_ie.png rename to app/assets/images/emoji/flag_ie.png diff --git a/public/-/emojis/1/flag_il.png b/app/assets/images/emoji/flag_il.png similarity index 100% rename from public/-/emojis/1/flag_il.png rename to app/assets/images/emoji/flag_il.png diff --git a/public/-/emojis/1/flag_im.png b/app/assets/images/emoji/flag_im.png similarity index 100% rename from public/-/emojis/1/flag_im.png rename to app/assets/images/emoji/flag_im.png diff --git a/public/-/emojis/1/flag_in.png b/app/assets/images/emoji/flag_in.png similarity index 100% rename from public/-/emojis/1/flag_in.png rename to app/assets/images/emoji/flag_in.png diff --git a/public/-/emojis/1/flag_io.png b/app/assets/images/emoji/flag_io.png similarity index 100% rename from public/-/emojis/1/flag_io.png rename to app/assets/images/emoji/flag_io.png diff --git a/public/-/emojis/1/flag_iq.png b/app/assets/images/emoji/flag_iq.png similarity index 100% rename from public/-/emojis/1/flag_iq.png rename to app/assets/images/emoji/flag_iq.png diff --git a/public/-/emojis/1/flag_ir.png b/app/assets/images/emoji/flag_ir.png similarity index 100% rename from public/-/emojis/1/flag_ir.png rename to app/assets/images/emoji/flag_ir.png diff --git a/public/-/emojis/1/flag_is.png b/app/assets/images/emoji/flag_is.png similarity index 100% rename from public/-/emojis/1/flag_is.png rename to app/assets/images/emoji/flag_is.png diff --git a/public/-/emojis/1/flag_it.png b/app/assets/images/emoji/flag_it.png similarity index 100% rename from public/-/emojis/1/flag_it.png rename to app/assets/images/emoji/flag_it.png diff --git a/public/-/emojis/1/flag_je.png b/app/assets/images/emoji/flag_je.png similarity index 100% rename from public/-/emojis/1/flag_je.png rename to app/assets/images/emoji/flag_je.png diff --git a/public/-/emojis/1/flag_jm.png b/app/assets/images/emoji/flag_jm.png similarity index 100% rename from public/-/emojis/1/flag_jm.png rename to app/assets/images/emoji/flag_jm.png diff --git a/public/-/emojis/1/flag_jo.png b/app/assets/images/emoji/flag_jo.png similarity index 100% rename from public/-/emojis/1/flag_jo.png rename to app/assets/images/emoji/flag_jo.png diff --git a/public/-/emojis/1/flag_jp.png b/app/assets/images/emoji/flag_jp.png similarity index 100% rename from public/-/emojis/1/flag_jp.png rename to app/assets/images/emoji/flag_jp.png diff --git a/public/-/emojis/1/flag_ke.png b/app/assets/images/emoji/flag_ke.png similarity index 100% rename from public/-/emojis/1/flag_ke.png rename to app/assets/images/emoji/flag_ke.png diff --git a/public/-/emojis/1/flag_kg.png b/app/assets/images/emoji/flag_kg.png similarity index 100% rename from public/-/emojis/1/flag_kg.png rename to app/assets/images/emoji/flag_kg.png diff --git a/public/-/emojis/1/flag_kh.png b/app/assets/images/emoji/flag_kh.png similarity index 100% rename from public/-/emojis/1/flag_kh.png rename to app/assets/images/emoji/flag_kh.png diff --git a/public/-/emojis/1/flag_ki.png b/app/assets/images/emoji/flag_ki.png similarity index 100% rename from public/-/emojis/1/flag_ki.png rename to app/assets/images/emoji/flag_ki.png diff --git a/public/-/emojis/1/flag_km.png b/app/assets/images/emoji/flag_km.png similarity index 100% rename from public/-/emojis/1/flag_km.png rename to app/assets/images/emoji/flag_km.png diff --git a/public/-/emojis/1/flag_kn.png b/app/assets/images/emoji/flag_kn.png similarity index 100% rename from public/-/emojis/1/flag_kn.png rename to app/assets/images/emoji/flag_kn.png diff --git a/public/-/emojis/1/flag_kp.png b/app/assets/images/emoji/flag_kp.png similarity index 100% rename from public/-/emojis/1/flag_kp.png rename to app/assets/images/emoji/flag_kp.png diff --git a/public/-/emojis/1/flag_kr.png b/app/assets/images/emoji/flag_kr.png similarity index 100% rename from public/-/emojis/1/flag_kr.png rename to app/assets/images/emoji/flag_kr.png diff --git a/public/-/emojis/1/flag_kw.png b/app/assets/images/emoji/flag_kw.png similarity index 100% rename from public/-/emojis/1/flag_kw.png rename to app/assets/images/emoji/flag_kw.png diff --git a/public/-/emojis/1/flag_ky.png b/app/assets/images/emoji/flag_ky.png similarity index 100% rename from public/-/emojis/1/flag_ky.png rename to app/assets/images/emoji/flag_ky.png diff --git a/public/-/emojis/1/flag_kz.png b/app/assets/images/emoji/flag_kz.png similarity index 100% rename from public/-/emojis/1/flag_kz.png rename to app/assets/images/emoji/flag_kz.png diff --git a/public/-/emojis/1/flag_la.png b/app/assets/images/emoji/flag_la.png similarity index 100% rename from public/-/emojis/1/flag_la.png rename to app/assets/images/emoji/flag_la.png diff --git a/public/-/emojis/1/flag_lb.png b/app/assets/images/emoji/flag_lb.png similarity index 100% rename from public/-/emojis/1/flag_lb.png rename to app/assets/images/emoji/flag_lb.png diff --git a/public/-/emojis/1/flag_lc.png b/app/assets/images/emoji/flag_lc.png similarity index 100% rename from public/-/emojis/1/flag_lc.png rename to app/assets/images/emoji/flag_lc.png diff --git a/public/-/emojis/1/flag_li.png b/app/assets/images/emoji/flag_li.png similarity index 100% rename from public/-/emojis/1/flag_li.png rename to app/assets/images/emoji/flag_li.png diff --git a/public/-/emojis/1/flag_lk.png b/app/assets/images/emoji/flag_lk.png similarity index 100% rename from public/-/emojis/1/flag_lk.png rename to app/assets/images/emoji/flag_lk.png diff --git a/public/-/emojis/1/flag_lr.png b/app/assets/images/emoji/flag_lr.png similarity index 100% rename from public/-/emojis/1/flag_lr.png rename to app/assets/images/emoji/flag_lr.png diff --git a/public/-/emojis/1/flag_ls.png b/app/assets/images/emoji/flag_ls.png similarity index 100% rename from public/-/emojis/1/flag_ls.png rename to app/assets/images/emoji/flag_ls.png diff --git a/public/-/emojis/1/flag_lt.png b/app/assets/images/emoji/flag_lt.png similarity index 100% rename from public/-/emojis/1/flag_lt.png rename to app/assets/images/emoji/flag_lt.png diff --git a/public/-/emojis/1/flag_lu.png b/app/assets/images/emoji/flag_lu.png similarity index 100% rename from public/-/emojis/1/flag_lu.png rename to app/assets/images/emoji/flag_lu.png diff --git a/public/-/emojis/1/flag_lv.png b/app/assets/images/emoji/flag_lv.png similarity index 100% rename from public/-/emojis/1/flag_lv.png rename to app/assets/images/emoji/flag_lv.png diff --git a/public/-/emojis/1/flag_ly.png b/app/assets/images/emoji/flag_ly.png similarity index 100% rename from public/-/emojis/1/flag_ly.png rename to app/assets/images/emoji/flag_ly.png diff --git a/public/-/emojis/1/flag_ma.png b/app/assets/images/emoji/flag_ma.png similarity index 100% rename from public/-/emojis/1/flag_ma.png rename to app/assets/images/emoji/flag_ma.png diff --git a/public/-/emojis/1/flag_mc.png b/app/assets/images/emoji/flag_mc.png similarity index 100% rename from public/-/emojis/1/flag_mc.png rename to app/assets/images/emoji/flag_mc.png diff --git a/public/-/emojis/1/flag_md.png b/app/assets/images/emoji/flag_md.png similarity index 100% rename from public/-/emojis/1/flag_md.png rename to app/assets/images/emoji/flag_md.png diff --git a/public/-/emojis/1/flag_me.png b/app/assets/images/emoji/flag_me.png similarity index 100% rename from public/-/emojis/1/flag_me.png rename to app/assets/images/emoji/flag_me.png diff --git a/public/-/emojis/1/flag_mf.png b/app/assets/images/emoji/flag_mf.png similarity index 100% rename from public/-/emojis/1/flag_mf.png rename to app/assets/images/emoji/flag_mf.png diff --git a/public/-/emojis/1/flag_mg.png b/app/assets/images/emoji/flag_mg.png similarity index 100% rename from public/-/emojis/1/flag_mg.png rename to app/assets/images/emoji/flag_mg.png diff --git a/public/-/emojis/1/flag_mh.png b/app/assets/images/emoji/flag_mh.png similarity index 100% rename from public/-/emojis/1/flag_mh.png rename to app/assets/images/emoji/flag_mh.png diff --git a/public/-/emojis/1/flag_mk.png b/app/assets/images/emoji/flag_mk.png similarity index 100% rename from public/-/emojis/1/flag_mk.png rename to app/assets/images/emoji/flag_mk.png diff --git a/public/-/emojis/1/flag_ml.png b/app/assets/images/emoji/flag_ml.png similarity index 100% rename from public/-/emojis/1/flag_ml.png rename to app/assets/images/emoji/flag_ml.png diff --git a/public/-/emojis/1/flag_mm.png b/app/assets/images/emoji/flag_mm.png similarity index 100% rename from public/-/emojis/1/flag_mm.png rename to app/assets/images/emoji/flag_mm.png diff --git a/public/-/emojis/1/flag_mn.png b/app/assets/images/emoji/flag_mn.png similarity index 100% rename from public/-/emojis/1/flag_mn.png rename to app/assets/images/emoji/flag_mn.png diff --git a/public/-/emojis/1/flag_mo.png b/app/assets/images/emoji/flag_mo.png similarity index 100% rename from public/-/emojis/1/flag_mo.png rename to app/assets/images/emoji/flag_mo.png diff --git a/public/-/emojis/1/flag_mp.png b/app/assets/images/emoji/flag_mp.png similarity index 100% rename from public/-/emojis/1/flag_mp.png rename to app/assets/images/emoji/flag_mp.png diff --git a/public/-/emojis/1/flag_mq.png b/app/assets/images/emoji/flag_mq.png similarity index 100% rename from public/-/emojis/1/flag_mq.png rename to app/assets/images/emoji/flag_mq.png diff --git a/public/-/emojis/1/flag_mr.png b/app/assets/images/emoji/flag_mr.png similarity index 100% rename from public/-/emojis/1/flag_mr.png rename to app/assets/images/emoji/flag_mr.png diff --git a/public/-/emojis/1/flag_ms.png b/app/assets/images/emoji/flag_ms.png similarity index 100% rename from public/-/emojis/1/flag_ms.png rename to app/assets/images/emoji/flag_ms.png diff --git a/public/-/emojis/1/flag_mt.png b/app/assets/images/emoji/flag_mt.png similarity index 100% rename from public/-/emojis/1/flag_mt.png rename to app/assets/images/emoji/flag_mt.png diff --git a/public/-/emojis/1/flag_mu.png b/app/assets/images/emoji/flag_mu.png similarity index 100% rename from public/-/emojis/1/flag_mu.png rename to app/assets/images/emoji/flag_mu.png diff --git a/public/-/emojis/1/flag_mv.png b/app/assets/images/emoji/flag_mv.png similarity index 100% rename from public/-/emojis/1/flag_mv.png rename to app/assets/images/emoji/flag_mv.png diff --git a/public/-/emojis/1/flag_mw.png b/app/assets/images/emoji/flag_mw.png similarity index 100% rename from public/-/emojis/1/flag_mw.png rename to app/assets/images/emoji/flag_mw.png diff --git a/public/-/emojis/1/flag_mx.png b/app/assets/images/emoji/flag_mx.png similarity index 100% rename from public/-/emojis/1/flag_mx.png rename to app/assets/images/emoji/flag_mx.png diff --git a/public/-/emojis/1/flag_my.png b/app/assets/images/emoji/flag_my.png similarity index 100% rename from public/-/emojis/1/flag_my.png rename to app/assets/images/emoji/flag_my.png diff --git a/public/-/emojis/1/flag_mz.png b/app/assets/images/emoji/flag_mz.png similarity index 100% rename from public/-/emojis/1/flag_mz.png rename to app/assets/images/emoji/flag_mz.png diff --git a/public/-/emojis/1/flag_na.png b/app/assets/images/emoji/flag_na.png similarity index 100% rename from public/-/emojis/1/flag_na.png rename to app/assets/images/emoji/flag_na.png diff --git a/public/-/emojis/1/flag_nc.png b/app/assets/images/emoji/flag_nc.png similarity index 100% rename from public/-/emojis/1/flag_nc.png rename to app/assets/images/emoji/flag_nc.png diff --git a/public/-/emojis/1/flag_ne.png b/app/assets/images/emoji/flag_ne.png similarity index 100% rename from public/-/emojis/1/flag_ne.png rename to app/assets/images/emoji/flag_ne.png diff --git a/public/-/emojis/1/flag_nf.png b/app/assets/images/emoji/flag_nf.png similarity index 100% rename from public/-/emojis/1/flag_nf.png rename to app/assets/images/emoji/flag_nf.png diff --git a/public/-/emojis/1/flag_ng.png b/app/assets/images/emoji/flag_ng.png similarity index 100% rename from public/-/emojis/1/flag_ng.png rename to app/assets/images/emoji/flag_ng.png diff --git a/public/-/emojis/1/flag_ni.png b/app/assets/images/emoji/flag_ni.png similarity index 100% rename from public/-/emojis/1/flag_ni.png rename to app/assets/images/emoji/flag_ni.png diff --git a/public/-/emojis/1/flag_nl.png b/app/assets/images/emoji/flag_nl.png similarity index 100% rename from public/-/emojis/1/flag_nl.png rename to app/assets/images/emoji/flag_nl.png diff --git a/public/-/emojis/1/flag_no.png b/app/assets/images/emoji/flag_no.png similarity index 100% rename from public/-/emojis/1/flag_no.png rename to app/assets/images/emoji/flag_no.png diff --git a/public/-/emojis/1/flag_np.png b/app/assets/images/emoji/flag_np.png similarity index 100% rename from public/-/emojis/1/flag_np.png rename to app/assets/images/emoji/flag_np.png diff --git a/public/-/emojis/1/flag_nr.png b/app/assets/images/emoji/flag_nr.png similarity index 100% rename from public/-/emojis/1/flag_nr.png rename to app/assets/images/emoji/flag_nr.png diff --git a/public/-/emojis/1/flag_nu.png b/app/assets/images/emoji/flag_nu.png similarity index 100% rename from public/-/emojis/1/flag_nu.png rename to app/assets/images/emoji/flag_nu.png diff --git a/public/-/emojis/1/flag_nz.png b/app/assets/images/emoji/flag_nz.png similarity index 100% rename from public/-/emojis/1/flag_nz.png rename to app/assets/images/emoji/flag_nz.png diff --git a/public/-/emojis/1/flag_om.png b/app/assets/images/emoji/flag_om.png similarity index 100% rename from public/-/emojis/1/flag_om.png rename to app/assets/images/emoji/flag_om.png diff --git a/public/-/emojis/1/flag_pa.png b/app/assets/images/emoji/flag_pa.png similarity index 100% rename from public/-/emojis/1/flag_pa.png rename to app/assets/images/emoji/flag_pa.png diff --git a/public/-/emojis/1/flag_pe.png b/app/assets/images/emoji/flag_pe.png similarity index 100% rename from public/-/emojis/1/flag_pe.png rename to app/assets/images/emoji/flag_pe.png diff --git a/public/-/emojis/1/flag_pf.png b/app/assets/images/emoji/flag_pf.png similarity index 100% rename from public/-/emojis/1/flag_pf.png rename to app/assets/images/emoji/flag_pf.png diff --git a/public/-/emojis/1/flag_pg.png b/app/assets/images/emoji/flag_pg.png similarity index 100% rename from public/-/emojis/1/flag_pg.png rename to app/assets/images/emoji/flag_pg.png diff --git a/public/-/emojis/1/flag_ph.png b/app/assets/images/emoji/flag_ph.png similarity index 100% rename from public/-/emojis/1/flag_ph.png rename to app/assets/images/emoji/flag_ph.png diff --git a/public/-/emojis/1/flag_pk.png b/app/assets/images/emoji/flag_pk.png similarity index 100% rename from public/-/emojis/1/flag_pk.png rename to app/assets/images/emoji/flag_pk.png diff --git a/public/-/emojis/1/flag_pl.png b/app/assets/images/emoji/flag_pl.png similarity index 100% rename from public/-/emojis/1/flag_pl.png rename to app/assets/images/emoji/flag_pl.png diff --git a/public/-/emojis/1/flag_pm.png b/app/assets/images/emoji/flag_pm.png similarity index 100% rename from public/-/emojis/1/flag_pm.png rename to app/assets/images/emoji/flag_pm.png diff --git a/public/-/emojis/1/flag_pn.png b/app/assets/images/emoji/flag_pn.png similarity index 100% rename from public/-/emojis/1/flag_pn.png rename to app/assets/images/emoji/flag_pn.png diff --git a/public/-/emojis/1/flag_pr.png b/app/assets/images/emoji/flag_pr.png similarity index 100% rename from public/-/emojis/1/flag_pr.png rename to app/assets/images/emoji/flag_pr.png diff --git a/public/-/emojis/1/flag_ps.png b/app/assets/images/emoji/flag_ps.png similarity index 100% rename from public/-/emojis/1/flag_ps.png rename to app/assets/images/emoji/flag_ps.png diff --git a/public/-/emojis/1/flag_pt.png b/app/assets/images/emoji/flag_pt.png similarity index 100% rename from public/-/emojis/1/flag_pt.png rename to app/assets/images/emoji/flag_pt.png diff --git a/public/-/emojis/1/flag_pw.png b/app/assets/images/emoji/flag_pw.png similarity index 100% rename from public/-/emojis/1/flag_pw.png rename to app/assets/images/emoji/flag_pw.png diff --git a/public/-/emojis/1/flag_py.png b/app/assets/images/emoji/flag_py.png similarity index 100% rename from public/-/emojis/1/flag_py.png rename to app/assets/images/emoji/flag_py.png diff --git a/public/-/emojis/1/flag_qa.png b/app/assets/images/emoji/flag_qa.png similarity index 100% rename from public/-/emojis/1/flag_qa.png rename to app/assets/images/emoji/flag_qa.png diff --git a/public/-/emojis/1/flag_re.png b/app/assets/images/emoji/flag_re.png similarity index 100% rename from public/-/emojis/1/flag_re.png rename to app/assets/images/emoji/flag_re.png diff --git a/public/-/emojis/1/flag_ro.png b/app/assets/images/emoji/flag_ro.png similarity index 100% rename from public/-/emojis/1/flag_ro.png rename to app/assets/images/emoji/flag_ro.png diff --git a/public/-/emojis/1/flag_rs.png b/app/assets/images/emoji/flag_rs.png similarity index 100% rename from public/-/emojis/1/flag_rs.png rename to app/assets/images/emoji/flag_rs.png diff --git a/public/-/emojis/1/flag_ru.png b/app/assets/images/emoji/flag_ru.png similarity index 100% rename from public/-/emojis/1/flag_ru.png rename to app/assets/images/emoji/flag_ru.png diff --git a/public/-/emojis/1/flag_rw.png b/app/assets/images/emoji/flag_rw.png similarity index 100% rename from public/-/emojis/1/flag_rw.png rename to app/assets/images/emoji/flag_rw.png diff --git a/public/-/emojis/1/flag_sa.png b/app/assets/images/emoji/flag_sa.png similarity index 100% rename from public/-/emojis/1/flag_sa.png rename to app/assets/images/emoji/flag_sa.png diff --git a/public/-/emojis/1/flag_sb.png b/app/assets/images/emoji/flag_sb.png similarity index 100% rename from public/-/emojis/1/flag_sb.png rename to app/assets/images/emoji/flag_sb.png diff --git a/public/-/emojis/1/flag_sc.png b/app/assets/images/emoji/flag_sc.png similarity index 100% rename from public/-/emojis/1/flag_sc.png rename to app/assets/images/emoji/flag_sc.png diff --git a/public/-/emojis/1/flag_sd.png b/app/assets/images/emoji/flag_sd.png similarity index 100% rename from public/-/emojis/1/flag_sd.png rename to app/assets/images/emoji/flag_sd.png diff --git a/public/-/emojis/1/flag_se.png b/app/assets/images/emoji/flag_se.png similarity index 100% rename from public/-/emojis/1/flag_se.png rename to app/assets/images/emoji/flag_se.png diff --git a/public/-/emojis/1/flag_sg.png b/app/assets/images/emoji/flag_sg.png similarity index 100% rename from public/-/emojis/1/flag_sg.png rename to app/assets/images/emoji/flag_sg.png diff --git a/public/-/emojis/1/flag_sh.png b/app/assets/images/emoji/flag_sh.png similarity index 100% rename from public/-/emojis/1/flag_sh.png rename to app/assets/images/emoji/flag_sh.png diff --git a/public/-/emojis/1/flag_si.png b/app/assets/images/emoji/flag_si.png similarity index 100% rename from public/-/emojis/1/flag_si.png rename to app/assets/images/emoji/flag_si.png diff --git a/public/-/emojis/1/flag_sj.png b/app/assets/images/emoji/flag_sj.png similarity index 100% rename from public/-/emojis/1/flag_sj.png rename to app/assets/images/emoji/flag_sj.png diff --git a/public/-/emojis/1/flag_sk.png b/app/assets/images/emoji/flag_sk.png similarity index 100% rename from public/-/emojis/1/flag_sk.png rename to app/assets/images/emoji/flag_sk.png diff --git a/public/-/emojis/1/flag_sl.png b/app/assets/images/emoji/flag_sl.png similarity index 100% rename from public/-/emojis/1/flag_sl.png rename to app/assets/images/emoji/flag_sl.png diff --git a/public/-/emojis/1/flag_sm.png b/app/assets/images/emoji/flag_sm.png similarity index 100% rename from public/-/emojis/1/flag_sm.png rename to app/assets/images/emoji/flag_sm.png diff --git a/public/-/emojis/1/flag_sn.png b/app/assets/images/emoji/flag_sn.png similarity index 100% rename from public/-/emojis/1/flag_sn.png rename to app/assets/images/emoji/flag_sn.png diff --git a/public/-/emojis/1/flag_so.png b/app/assets/images/emoji/flag_so.png similarity index 100% rename from public/-/emojis/1/flag_so.png rename to app/assets/images/emoji/flag_so.png diff --git a/public/-/emojis/1/flag_sr.png b/app/assets/images/emoji/flag_sr.png similarity index 100% rename from public/-/emojis/1/flag_sr.png rename to app/assets/images/emoji/flag_sr.png diff --git a/public/-/emojis/1/flag_ss.png b/app/assets/images/emoji/flag_ss.png similarity index 100% rename from public/-/emojis/1/flag_ss.png rename to app/assets/images/emoji/flag_ss.png diff --git a/public/-/emojis/1/flag_st.png b/app/assets/images/emoji/flag_st.png similarity index 100% rename from public/-/emojis/1/flag_st.png rename to app/assets/images/emoji/flag_st.png diff --git a/public/-/emojis/1/flag_sv.png b/app/assets/images/emoji/flag_sv.png similarity index 100% rename from public/-/emojis/1/flag_sv.png rename to app/assets/images/emoji/flag_sv.png diff --git a/public/-/emojis/1/flag_sx.png b/app/assets/images/emoji/flag_sx.png similarity index 100% rename from public/-/emojis/1/flag_sx.png rename to app/assets/images/emoji/flag_sx.png diff --git a/public/-/emojis/1/flag_sy.png b/app/assets/images/emoji/flag_sy.png similarity index 100% rename from public/-/emojis/1/flag_sy.png rename to app/assets/images/emoji/flag_sy.png diff --git a/public/-/emojis/1/flag_sz.png b/app/assets/images/emoji/flag_sz.png similarity index 100% rename from public/-/emojis/1/flag_sz.png rename to app/assets/images/emoji/flag_sz.png diff --git a/public/-/emojis/1/flag_ta.png b/app/assets/images/emoji/flag_ta.png similarity index 100% rename from public/-/emojis/1/flag_ta.png rename to app/assets/images/emoji/flag_ta.png diff --git a/public/-/emojis/1/flag_tc.png b/app/assets/images/emoji/flag_tc.png similarity index 100% rename from public/-/emojis/1/flag_tc.png rename to app/assets/images/emoji/flag_tc.png diff --git a/public/-/emojis/1/flag_td.png b/app/assets/images/emoji/flag_td.png similarity index 100% rename from public/-/emojis/1/flag_td.png rename to app/assets/images/emoji/flag_td.png diff --git a/public/-/emojis/1/flag_tf.png b/app/assets/images/emoji/flag_tf.png similarity index 100% rename from public/-/emojis/1/flag_tf.png rename to app/assets/images/emoji/flag_tf.png diff --git a/public/-/emojis/1/flag_tg.png b/app/assets/images/emoji/flag_tg.png similarity index 100% rename from public/-/emojis/1/flag_tg.png rename to app/assets/images/emoji/flag_tg.png diff --git a/public/-/emojis/1/flag_th.png b/app/assets/images/emoji/flag_th.png similarity index 100% rename from public/-/emojis/1/flag_th.png rename to app/assets/images/emoji/flag_th.png diff --git a/public/-/emojis/1/flag_tj.png b/app/assets/images/emoji/flag_tj.png similarity index 100% rename from public/-/emojis/1/flag_tj.png rename to app/assets/images/emoji/flag_tj.png diff --git a/public/-/emojis/1/flag_tk.png b/app/assets/images/emoji/flag_tk.png similarity index 100% rename from public/-/emojis/1/flag_tk.png rename to app/assets/images/emoji/flag_tk.png diff --git a/public/-/emojis/1/flag_tl.png b/app/assets/images/emoji/flag_tl.png similarity index 100% rename from public/-/emojis/1/flag_tl.png rename to app/assets/images/emoji/flag_tl.png diff --git a/public/-/emojis/1/flag_tm.png b/app/assets/images/emoji/flag_tm.png similarity index 100% rename from public/-/emojis/1/flag_tm.png rename to app/assets/images/emoji/flag_tm.png diff --git a/public/-/emojis/1/flag_tn.png b/app/assets/images/emoji/flag_tn.png similarity index 100% rename from public/-/emojis/1/flag_tn.png rename to app/assets/images/emoji/flag_tn.png diff --git a/public/-/emojis/1/flag_to.png b/app/assets/images/emoji/flag_to.png similarity index 100% rename from public/-/emojis/1/flag_to.png rename to app/assets/images/emoji/flag_to.png diff --git a/public/-/emojis/1/flag_tr.png b/app/assets/images/emoji/flag_tr.png similarity index 100% rename from public/-/emojis/1/flag_tr.png rename to app/assets/images/emoji/flag_tr.png diff --git a/public/-/emojis/1/flag_tt.png b/app/assets/images/emoji/flag_tt.png similarity index 100% rename from public/-/emojis/1/flag_tt.png rename to app/assets/images/emoji/flag_tt.png diff --git a/public/-/emojis/1/flag_tv.png b/app/assets/images/emoji/flag_tv.png similarity index 100% rename from public/-/emojis/1/flag_tv.png rename to app/assets/images/emoji/flag_tv.png diff --git a/public/-/emojis/1/flag_tw.png b/app/assets/images/emoji/flag_tw.png similarity index 100% rename from public/-/emojis/1/flag_tw.png rename to app/assets/images/emoji/flag_tw.png diff --git a/public/-/emojis/1/flag_tz.png b/app/assets/images/emoji/flag_tz.png similarity index 100% rename from public/-/emojis/1/flag_tz.png rename to app/assets/images/emoji/flag_tz.png diff --git a/public/-/emojis/1/flag_ua.png b/app/assets/images/emoji/flag_ua.png similarity index 100% rename from public/-/emojis/1/flag_ua.png rename to app/assets/images/emoji/flag_ua.png diff --git a/public/-/emojis/1/flag_ug.png b/app/assets/images/emoji/flag_ug.png similarity index 100% rename from public/-/emojis/1/flag_ug.png rename to app/assets/images/emoji/flag_ug.png diff --git a/public/-/emojis/1/flag_um.png b/app/assets/images/emoji/flag_um.png similarity index 100% rename from public/-/emojis/1/flag_um.png rename to app/assets/images/emoji/flag_um.png diff --git a/public/-/emojis/1/flag_us.png b/app/assets/images/emoji/flag_us.png similarity index 100% rename from public/-/emojis/1/flag_us.png rename to app/assets/images/emoji/flag_us.png diff --git a/public/-/emojis/1/flag_uy.png b/app/assets/images/emoji/flag_uy.png similarity index 100% rename from public/-/emojis/1/flag_uy.png rename to app/assets/images/emoji/flag_uy.png diff --git a/public/-/emojis/1/flag_uz.png b/app/assets/images/emoji/flag_uz.png similarity index 100% rename from public/-/emojis/1/flag_uz.png rename to app/assets/images/emoji/flag_uz.png diff --git a/public/-/emojis/1/flag_va.png b/app/assets/images/emoji/flag_va.png similarity index 100% rename from public/-/emojis/1/flag_va.png rename to app/assets/images/emoji/flag_va.png diff --git a/public/-/emojis/1/flag_vc.png b/app/assets/images/emoji/flag_vc.png similarity index 100% rename from public/-/emojis/1/flag_vc.png rename to app/assets/images/emoji/flag_vc.png diff --git a/public/-/emojis/1/flag_ve.png b/app/assets/images/emoji/flag_ve.png similarity index 100% rename from public/-/emojis/1/flag_ve.png rename to app/assets/images/emoji/flag_ve.png diff --git a/public/-/emojis/1/flag_vg.png b/app/assets/images/emoji/flag_vg.png similarity index 100% rename from public/-/emojis/1/flag_vg.png rename to app/assets/images/emoji/flag_vg.png diff --git a/public/-/emojis/1/flag_vi.png b/app/assets/images/emoji/flag_vi.png similarity index 100% rename from public/-/emojis/1/flag_vi.png rename to app/assets/images/emoji/flag_vi.png diff --git a/public/-/emojis/1/flag_vn.png b/app/assets/images/emoji/flag_vn.png similarity index 100% rename from public/-/emojis/1/flag_vn.png rename to app/assets/images/emoji/flag_vn.png diff --git a/public/-/emojis/1/flag_vu.png b/app/assets/images/emoji/flag_vu.png similarity index 100% rename from public/-/emojis/1/flag_vu.png rename to app/assets/images/emoji/flag_vu.png diff --git a/public/-/emojis/1/flag_wf.png b/app/assets/images/emoji/flag_wf.png similarity index 100% rename from public/-/emojis/1/flag_wf.png rename to app/assets/images/emoji/flag_wf.png diff --git a/public/-/emojis/1/flag_white.png b/app/assets/images/emoji/flag_white.png similarity index 100% rename from public/-/emojis/1/flag_white.png rename to app/assets/images/emoji/flag_white.png diff --git a/public/-/emojis/1/flag_ws.png b/app/assets/images/emoji/flag_ws.png similarity index 100% rename from public/-/emojis/1/flag_ws.png rename to app/assets/images/emoji/flag_ws.png diff --git a/public/-/emojis/1/flag_xk.png b/app/assets/images/emoji/flag_xk.png similarity index 100% rename from public/-/emojis/1/flag_xk.png rename to app/assets/images/emoji/flag_xk.png diff --git a/public/-/emojis/1/flag_ye.png b/app/assets/images/emoji/flag_ye.png similarity index 100% rename from public/-/emojis/1/flag_ye.png rename to app/assets/images/emoji/flag_ye.png diff --git a/public/-/emojis/1/flag_yt.png b/app/assets/images/emoji/flag_yt.png similarity index 100% rename from public/-/emojis/1/flag_yt.png rename to app/assets/images/emoji/flag_yt.png diff --git a/public/-/emojis/1/flag_za.png b/app/assets/images/emoji/flag_za.png similarity index 100% rename from public/-/emojis/1/flag_za.png rename to app/assets/images/emoji/flag_za.png diff --git a/public/-/emojis/1/flag_zm.png b/app/assets/images/emoji/flag_zm.png similarity index 100% rename from public/-/emojis/1/flag_zm.png rename to app/assets/images/emoji/flag_zm.png diff --git a/public/-/emojis/1/flag_zw.png b/app/assets/images/emoji/flag_zw.png similarity index 100% rename from public/-/emojis/1/flag_zw.png rename to app/assets/images/emoji/flag_zw.png diff --git a/public/-/emojis/1/flags.png b/app/assets/images/emoji/flags.png similarity index 100% rename from public/-/emojis/1/flags.png rename to app/assets/images/emoji/flags.png diff --git a/public/-/emojis/1/flashlight.png b/app/assets/images/emoji/flashlight.png similarity index 100% rename from public/-/emojis/1/flashlight.png rename to app/assets/images/emoji/flashlight.png diff --git a/public/-/emojis/1/fleur-de-lis.png b/app/assets/images/emoji/fleur-de-lis.png similarity index 100% rename from public/-/emojis/1/fleur-de-lis.png rename to app/assets/images/emoji/fleur-de-lis.png diff --git a/public/-/emojis/1/floppy_disk.png b/app/assets/images/emoji/floppy_disk.png similarity index 100% rename from public/-/emojis/1/floppy_disk.png rename to app/assets/images/emoji/floppy_disk.png diff --git a/public/-/emojis/1/flower_playing_cards.png b/app/assets/images/emoji/flower_playing_cards.png similarity index 100% rename from public/-/emojis/1/flower_playing_cards.png rename to app/assets/images/emoji/flower_playing_cards.png diff --git a/public/-/emojis/1/flushed.png b/app/assets/images/emoji/flushed.png similarity index 100% rename from public/-/emojis/1/flushed.png rename to app/assets/images/emoji/flushed.png diff --git a/public/-/emojis/1/fog.png b/app/assets/images/emoji/fog.png similarity index 100% rename from public/-/emojis/1/fog.png rename to app/assets/images/emoji/fog.png diff --git a/public/-/emojis/1/foggy.png b/app/assets/images/emoji/foggy.png similarity index 100% rename from public/-/emojis/1/foggy.png rename to app/assets/images/emoji/foggy.png diff --git a/public/-/emojis/1/football.png b/app/assets/images/emoji/football.png similarity index 100% rename from public/-/emojis/1/football.png rename to app/assets/images/emoji/football.png diff --git a/public/-/emojis/1/footprints.png b/app/assets/images/emoji/footprints.png similarity index 100% rename from public/-/emojis/1/footprints.png rename to app/assets/images/emoji/footprints.png diff --git a/public/-/emojis/1/fork_and_knife.png b/app/assets/images/emoji/fork_and_knife.png similarity index 100% rename from public/-/emojis/1/fork_and_knife.png rename to app/assets/images/emoji/fork_and_knife.png diff --git a/public/-/emojis/1/fork_knife_plate.png b/app/assets/images/emoji/fork_knife_plate.png similarity index 100% rename from public/-/emojis/1/fork_knife_plate.png rename to app/assets/images/emoji/fork_knife_plate.png diff --git a/public/-/emojis/1/fountain.png b/app/assets/images/emoji/fountain.png similarity index 100% rename from public/-/emojis/1/fountain.png rename to app/assets/images/emoji/fountain.png diff --git a/public/-/emojis/1/four.png b/app/assets/images/emoji/four.png similarity index 100% rename from public/-/emojis/1/four.png rename to app/assets/images/emoji/four.png diff --git a/public/-/emojis/1/four_leaf_clover.png b/app/assets/images/emoji/four_leaf_clover.png similarity index 100% rename from public/-/emojis/1/four_leaf_clover.png rename to app/assets/images/emoji/four_leaf_clover.png diff --git a/public/-/emojis/1/fox.png b/app/assets/images/emoji/fox.png similarity index 100% rename from public/-/emojis/1/fox.png rename to app/assets/images/emoji/fox.png diff --git a/public/-/emojis/1/frame_photo.png b/app/assets/images/emoji/frame_photo.png similarity index 100% rename from public/-/emojis/1/frame_photo.png rename to app/assets/images/emoji/frame_photo.png diff --git a/public/-/emojis/1/free.png b/app/assets/images/emoji/free.png similarity index 100% rename from public/-/emojis/1/free.png rename to app/assets/images/emoji/free.png diff --git a/public/-/emojis/1/french_bread.png b/app/assets/images/emoji/french_bread.png similarity index 100% rename from public/-/emojis/1/french_bread.png rename to app/assets/images/emoji/french_bread.png diff --git a/public/-/emojis/1/fried_shrimp.png b/app/assets/images/emoji/fried_shrimp.png similarity index 100% rename from public/-/emojis/1/fried_shrimp.png rename to app/assets/images/emoji/fried_shrimp.png diff --git a/public/-/emojis/1/fries.png b/app/assets/images/emoji/fries.png similarity index 100% rename from public/-/emojis/1/fries.png rename to app/assets/images/emoji/fries.png diff --git a/public/-/emojis/1/frog.png b/app/assets/images/emoji/frog.png similarity index 100% rename from public/-/emojis/1/frog.png rename to app/assets/images/emoji/frog.png diff --git a/public/-/emojis/1/frowning.png b/app/assets/images/emoji/frowning.png similarity index 100% rename from public/-/emojis/1/frowning.png rename to app/assets/images/emoji/frowning.png diff --git a/public/-/emojis/1/frowning2.png b/app/assets/images/emoji/frowning2.png similarity index 100% rename from public/-/emojis/1/frowning2.png rename to app/assets/images/emoji/frowning2.png diff --git a/public/-/emojis/1/fuelpump.png b/app/assets/images/emoji/fuelpump.png similarity index 100% rename from public/-/emojis/1/fuelpump.png rename to app/assets/images/emoji/fuelpump.png diff --git a/public/-/emojis/1/full_moon.png b/app/assets/images/emoji/full_moon.png similarity index 100% rename from public/-/emojis/1/full_moon.png rename to app/assets/images/emoji/full_moon.png diff --git a/public/-/emojis/1/full_moon_with_face.png b/app/assets/images/emoji/full_moon_with_face.png similarity index 100% rename from public/-/emojis/1/full_moon_with_face.png rename to app/assets/images/emoji/full_moon_with_face.png diff --git a/public/-/emojis/1/game_die.png b/app/assets/images/emoji/game_die.png similarity index 100% rename from public/-/emojis/1/game_die.png rename to app/assets/images/emoji/game_die.png diff --git a/public/-/emojis/1/gay_pride_flag.png b/app/assets/images/emoji/gay_pride_flag.png similarity index 100% rename from public/-/emojis/1/gay_pride_flag.png rename to app/assets/images/emoji/gay_pride_flag.png diff --git a/public/-/emojis/1/gear.png b/app/assets/images/emoji/gear.png similarity index 100% rename from public/-/emojis/1/gear.png rename to app/assets/images/emoji/gear.png diff --git a/public/-/emojis/1/gem.png b/app/assets/images/emoji/gem.png similarity index 100% rename from public/-/emojis/1/gem.png rename to app/assets/images/emoji/gem.png diff --git a/public/-/emojis/1/gemini.png b/app/assets/images/emoji/gemini.png similarity index 100% rename from public/-/emojis/1/gemini.png rename to app/assets/images/emoji/gemini.png diff --git a/public/-/emojis/1/ghost.png b/app/assets/images/emoji/ghost.png similarity index 100% rename from public/-/emojis/1/ghost.png rename to app/assets/images/emoji/ghost.png diff --git a/public/-/emojis/1/gift.png b/app/assets/images/emoji/gift.png similarity index 100% rename from public/-/emojis/1/gift.png rename to app/assets/images/emoji/gift.png diff --git a/public/-/emojis/1/gift_heart.png b/app/assets/images/emoji/gift_heart.png similarity index 100% rename from public/-/emojis/1/gift_heart.png rename to app/assets/images/emoji/gift_heart.png diff --git a/public/-/emojis/1/girl.png b/app/assets/images/emoji/girl.png similarity index 100% rename from public/-/emojis/1/girl.png rename to app/assets/images/emoji/girl.png diff --git a/public/-/emojis/1/girl_tone1.png b/app/assets/images/emoji/girl_tone1.png similarity index 100% rename from public/-/emojis/1/girl_tone1.png rename to app/assets/images/emoji/girl_tone1.png diff --git a/public/-/emojis/1/girl_tone2.png b/app/assets/images/emoji/girl_tone2.png similarity index 100% rename from public/-/emojis/1/girl_tone2.png rename to app/assets/images/emoji/girl_tone2.png diff --git a/public/-/emojis/1/girl_tone3.png b/app/assets/images/emoji/girl_tone3.png similarity index 100% rename from public/-/emojis/1/girl_tone3.png rename to app/assets/images/emoji/girl_tone3.png diff --git a/public/-/emojis/1/girl_tone4.png b/app/assets/images/emoji/girl_tone4.png similarity index 100% rename from public/-/emojis/1/girl_tone4.png rename to app/assets/images/emoji/girl_tone4.png diff --git a/public/-/emojis/1/girl_tone5.png b/app/assets/images/emoji/girl_tone5.png similarity index 100% rename from public/-/emojis/1/girl_tone5.png rename to app/assets/images/emoji/girl_tone5.png diff --git a/public/-/emojis/1/globe_with_meridians.png b/app/assets/images/emoji/globe_with_meridians.png similarity index 100% rename from public/-/emojis/1/globe_with_meridians.png rename to app/assets/images/emoji/globe_with_meridians.png diff --git a/public/-/emojis/1/goal.png b/app/assets/images/emoji/goal.png similarity index 100% rename from public/-/emojis/1/goal.png rename to app/assets/images/emoji/goal.png diff --git a/public/-/emojis/1/goat.png b/app/assets/images/emoji/goat.png similarity index 100% rename from public/-/emojis/1/goat.png rename to app/assets/images/emoji/goat.png diff --git a/public/-/emojis/1/golf.png b/app/assets/images/emoji/golf.png similarity index 100% rename from public/-/emojis/1/golf.png rename to app/assets/images/emoji/golf.png diff --git a/public/-/emojis/1/golfer.png b/app/assets/images/emoji/golfer.png similarity index 100% rename from public/-/emojis/1/golfer.png rename to app/assets/images/emoji/golfer.png diff --git a/public/-/emojis/1/gorilla.png b/app/assets/images/emoji/gorilla.png similarity index 100% rename from public/-/emojis/1/gorilla.png rename to app/assets/images/emoji/gorilla.png diff --git a/public/-/emojis/1/grapes.png b/app/assets/images/emoji/grapes.png similarity index 100% rename from public/-/emojis/1/grapes.png rename to app/assets/images/emoji/grapes.png diff --git a/public/-/emojis/1/green_apple.png b/app/assets/images/emoji/green_apple.png similarity index 100% rename from public/-/emojis/1/green_apple.png rename to app/assets/images/emoji/green_apple.png diff --git a/public/-/emojis/1/green_book.png b/app/assets/images/emoji/green_book.png similarity index 100% rename from public/-/emojis/1/green_book.png rename to app/assets/images/emoji/green_book.png diff --git a/public/-/emojis/1/green_heart.png b/app/assets/images/emoji/green_heart.png similarity index 100% rename from public/-/emojis/1/green_heart.png rename to app/assets/images/emoji/green_heart.png diff --git a/public/-/emojis/1/grey_exclamation.png b/app/assets/images/emoji/grey_exclamation.png similarity index 100% rename from public/-/emojis/1/grey_exclamation.png rename to app/assets/images/emoji/grey_exclamation.png diff --git a/public/-/emojis/1/grey_question.png b/app/assets/images/emoji/grey_question.png similarity index 100% rename from public/-/emojis/1/grey_question.png rename to app/assets/images/emoji/grey_question.png diff --git a/public/-/emojis/1/grimacing.png b/app/assets/images/emoji/grimacing.png similarity index 100% rename from public/-/emojis/1/grimacing.png rename to app/assets/images/emoji/grimacing.png diff --git a/public/-/emojis/1/grin.png b/app/assets/images/emoji/grin.png similarity index 100% rename from public/-/emojis/1/grin.png rename to app/assets/images/emoji/grin.png diff --git a/public/-/emojis/1/grinning.png b/app/assets/images/emoji/grinning.png similarity index 100% rename from public/-/emojis/1/grinning.png rename to app/assets/images/emoji/grinning.png diff --git a/public/-/emojis/1/guardsman.png b/app/assets/images/emoji/guardsman.png similarity index 100% rename from public/-/emojis/1/guardsman.png rename to app/assets/images/emoji/guardsman.png diff --git a/public/-/emojis/1/guardsman_tone1.png b/app/assets/images/emoji/guardsman_tone1.png similarity index 100% rename from public/-/emojis/1/guardsman_tone1.png rename to app/assets/images/emoji/guardsman_tone1.png diff --git a/public/-/emojis/1/guardsman_tone2.png b/app/assets/images/emoji/guardsman_tone2.png similarity index 100% rename from public/-/emojis/1/guardsman_tone2.png rename to app/assets/images/emoji/guardsman_tone2.png diff --git a/public/-/emojis/1/guardsman_tone3.png b/app/assets/images/emoji/guardsman_tone3.png similarity index 100% rename from public/-/emojis/1/guardsman_tone3.png rename to app/assets/images/emoji/guardsman_tone3.png diff --git a/public/-/emojis/1/guardsman_tone4.png b/app/assets/images/emoji/guardsman_tone4.png similarity index 100% rename from public/-/emojis/1/guardsman_tone4.png rename to app/assets/images/emoji/guardsman_tone4.png diff --git a/public/-/emojis/1/guardsman_tone5.png b/app/assets/images/emoji/guardsman_tone5.png similarity index 100% rename from public/-/emojis/1/guardsman_tone5.png rename to app/assets/images/emoji/guardsman_tone5.png diff --git a/public/-/emojis/1/guitar.png b/app/assets/images/emoji/guitar.png similarity index 100% rename from public/-/emojis/1/guitar.png rename to app/assets/images/emoji/guitar.png diff --git a/public/-/emojis/1/gun.png b/app/assets/images/emoji/gun.png similarity index 100% rename from public/-/emojis/1/gun.png rename to app/assets/images/emoji/gun.png diff --git a/public/-/emojis/1/haircut.png b/app/assets/images/emoji/haircut.png similarity index 100% rename from public/-/emojis/1/haircut.png rename to app/assets/images/emoji/haircut.png diff --git a/public/-/emojis/1/haircut_tone1.png b/app/assets/images/emoji/haircut_tone1.png similarity index 100% rename from public/-/emojis/1/haircut_tone1.png rename to app/assets/images/emoji/haircut_tone1.png diff --git a/public/-/emojis/1/haircut_tone2.png b/app/assets/images/emoji/haircut_tone2.png similarity index 100% rename from public/-/emojis/1/haircut_tone2.png rename to app/assets/images/emoji/haircut_tone2.png diff --git a/public/-/emojis/1/haircut_tone3.png b/app/assets/images/emoji/haircut_tone3.png similarity index 100% rename from public/-/emojis/1/haircut_tone3.png rename to app/assets/images/emoji/haircut_tone3.png diff --git a/public/-/emojis/1/haircut_tone4.png b/app/assets/images/emoji/haircut_tone4.png similarity index 100% rename from public/-/emojis/1/haircut_tone4.png rename to app/assets/images/emoji/haircut_tone4.png diff --git a/public/-/emojis/1/haircut_tone5.png b/app/assets/images/emoji/haircut_tone5.png similarity index 100% rename from public/-/emojis/1/haircut_tone5.png rename to app/assets/images/emoji/haircut_tone5.png diff --git a/public/-/emojis/1/hamburger.png b/app/assets/images/emoji/hamburger.png similarity index 100% rename from public/-/emojis/1/hamburger.png rename to app/assets/images/emoji/hamburger.png diff --git a/public/-/emojis/1/hammer.png b/app/assets/images/emoji/hammer.png similarity index 100% rename from public/-/emojis/1/hammer.png rename to app/assets/images/emoji/hammer.png diff --git a/public/-/emojis/1/hammer_pick.png b/app/assets/images/emoji/hammer_pick.png similarity index 100% rename from public/-/emojis/1/hammer_pick.png rename to app/assets/images/emoji/hammer_pick.png diff --git a/public/-/emojis/1/hamster.png b/app/assets/images/emoji/hamster.png similarity index 100% rename from public/-/emojis/1/hamster.png rename to app/assets/images/emoji/hamster.png diff --git a/public/-/emojis/1/hand_splayed.png b/app/assets/images/emoji/hand_splayed.png similarity index 100% rename from public/-/emojis/1/hand_splayed.png rename to app/assets/images/emoji/hand_splayed.png diff --git a/public/-/emojis/1/hand_splayed_tone1.png b/app/assets/images/emoji/hand_splayed_tone1.png similarity index 100% rename from public/-/emojis/1/hand_splayed_tone1.png rename to app/assets/images/emoji/hand_splayed_tone1.png diff --git a/public/-/emojis/1/hand_splayed_tone2.png b/app/assets/images/emoji/hand_splayed_tone2.png similarity index 100% rename from public/-/emojis/1/hand_splayed_tone2.png rename to app/assets/images/emoji/hand_splayed_tone2.png diff --git a/public/-/emojis/1/hand_splayed_tone3.png b/app/assets/images/emoji/hand_splayed_tone3.png similarity index 100% rename from public/-/emojis/1/hand_splayed_tone3.png rename to app/assets/images/emoji/hand_splayed_tone3.png diff --git a/public/-/emojis/1/hand_splayed_tone4.png b/app/assets/images/emoji/hand_splayed_tone4.png similarity index 100% rename from public/-/emojis/1/hand_splayed_tone4.png rename to app/assets/images/emoji/hand_splayed_tone4.png diff --git a/public/-/emojis/1/hand_splayed_tone5.png b/app/assets/images/emoji/hand_splayed_tone5.png similarity index 100% rename from public/-/emojis/1/hand_splayed_tone5.png rename to app/assets/images/emoji/hand_splayed_tone5.png diff --git a/public/-/emojis/1/handbag.png b/app/assets/images/emoji/handbag.png similarity index 100% rename from public/-/emojis/1/handbag.png rename to app/assets/images/emoji/handbag.png diff --git a/public/-/emojis/1/handball.png b/app/assets/images/emoji/handball.png similarity index 100% rename from public/-/emojis/1/handball.png rename to app/assets/images/emoji/handball.png diff --git a/public/-/emojis/1/handball_tone1.png b/app/assets/images/emoji/handball_tone1.png similarity index 100% rename from public/-/emojis/1/handball_tone1.png rename to app/assets/images/emoji/handball_tone1.png diff --git a/public/-/emojis/1/handball_tone2.png b/app/assets/images/emoji/handball_tone2.png similarity index 100% rename from public/-/emojis/1/handball_tone2.png rename to app/assets/images/emoji/handball_tone2.png diff --git a/public/-/emojis/1/handball_tone3.png b/app/assets/images/emoji/handball_tone3.png similarity index 100% rename from public/-/emojis/1/handball_tone3.png rename to app/assets/images/emoji/handball_tone3.png diff --git a/public/-/emojis/1/handball_tone4.png b/app/assets/images/emoji/handball_tone4.png similarity index 100% rename from public/-/emojis/1/handball_tone4.png rename to app/assets/images/emoji/handball_tone4.png diff --git a/public/-/emojis/1/handball_tone5.png b/app/assets/images/emoji/handball_tone5.png similarity index 100% rename from public/-/emojis/1/handball_tone5.png rename to app/assets/images/emoji/handball_tone5.png diff --git a/public/-/emojis/1/handshake.png b/app/assets/images/emoji/handshake.png similarity index 100% rename from public/-/emojis/1/handshake.png rename to app/assets/images/emoji/handshake.png diff --git a/public/-/emojis/1/handshake_tone1.png b/app/assets/images/emoji/handshake_tone1.png similarity index 100% rename from public/-/emojis/1/handshake_tone1.png rename to app/assets/images/emoji/handshake_tone1.png diff --git a/public/-/emojis/1/handshake_tone2.png b/app/assets/images/emoji/handshake_tone2.png similarity index 100% rename from public/-/emojis/1/handshake_tone2.png rename to app/assets/images/emoji/handshake_tone2.png diff --git a/public/-/emojis/1/handshake_tone3.png b/app/assets/images/emoji/handshake_tone3.png similarity index 100% rename from public/-/emojis/1/handshake_tone3.png rename to app/assets/images/emoji/handshake_tone3.png diff --git a/public/-/emojis/1/handshake_tone4.png b/app/assets/images/emoji/handshake_tone4.png similarity index 100% rename from public/-/emojis/1/handshake_tone4.png rename to app/assets/images/emoji/handshake_tone4.png diff --git a/public/-/emojis/1/handshake_tone5.png b/app/assets/images/emoji/handshake_tone5.png similarity index 100% rename from public/-/emojis/1/handshake_tone5.png rename to app/assets/images/emoji/handshake_tone5.png diff --git a/public/-/emojis/1/hash.png b/app/assets/images/emoji/hash.png similarity index 100% rename from public/-/emojis/1/hash.png rename to app/assets/images/emoji/hash.png diff --git a/public/-/emojis/1/hatched_chick.png b/app/assets/images/emoji/hatched_chick.png similarity index 100% rename from public/-/emojis/1/hatched_chick.png rename to app/assets/images/emoji/hatched_chick.png diff --git a/public/-/emojis/1/hatching_chick.png b/app/assets/images/emoji/hatching_chick.png similarity index 100% rename from public/-/emojis/1/hatching_chick.png rename to app/assets/images/emoji/hatching_chick.png diff --git a/public/-/emojis/1/head_bandage.png b/app/assets/images/emoji/head_bandage.png similarity index 100% rename from public/-/emojis/1/head_bandage.png rename to app/assets/images/emoji/head_bandage.png diff --git a/public/-/emojis/1/headphones.png b/app/assets/images/emoji/headphones.png similarity index 100% rename from public/-/emojis/1/headphones.png rename to app/assets/images/emoji/headphones.png diff --git a/public/-/emojis/1/hear_no_evil.png b/app/assets/images/emoji/hear_no_evil.png similarity index 100% rename from public/-/emojis/1/hear_no_evil.png rename to app/assets/images/emoji/hear_no_evil.png diff --git a/public/-/emojis/1/heart.png b/app/assets/images/emoji/heart.png similarity index 100% rename from public/-/emojis/1/heart.png rename to app/assets/images/emoji/heart.png diff --git a/public/-/emojis/1/heart_decoration.png b/app/assets/images/emoji/heart_decoration.png similarity index 100% rename from public/-/emojis/1/heart_decoration.png rename to app/assets/images/emoji/heart_decoration.png diff --git a/public/-/emojis/1/heart_exclamation.png b/app/assets/images/emoji/heart_exclamation.png similarity index 100% rename from public/-/emojis/1/heart_exclamation.png rename to app/assets/images/emoji/heart_exclamation.png diff --git a/public/-/emojis/1/heart_eyes.png b/app/assets/images/emoji/heart_eyes.png similarity index 100% rename from public/-/emojis/1/heart_eyes.png rename to app/assets/images/emoji/heart_eyes.png diff --git a/public/-/emojis/1/heart_eyes_cat.png b/app/assets/images/emoji/heart_eyes_cat.png similarity index 100% rename from public/-/emojis/1/heart_eyes_cat.png rename to app/assets/images/emoji/heart_eyes_cat.png diff --git a/public/-/emojis/1/heartbeat.png b/app/assets/images/emoji/heartbeat.png similarity index 100% rename from public/-/emojis/1/heartbeat.png rename to app/assets/images/emoji/heartbeat.png diff --git a/public/-/emojis/1/heartpulse.png b/app/assets/images/emoji/heartpulse.png similarity index 100% rename from public/-/emojis/1/heartpulse.png rename to app/assets/images/emoji/heartpulse.png diff --git a/public/-/emojis/1/hearts.png b/app/assets/images/emoji/hearts.png similarity index 100% rename from public/-/emojis/1/hearts.png rename to app/assets/images/emoji/hearts.png diff --git a/public/-/emojis/1/heavy_check_mark.png b/app/assets/images/emoji/heavy_check_mark.png similarity index 100% rename from public/-/emojis/1/heavy_check_mark.png rename to app/assets/images/emoji/heavy_check_mark.png diff --git a/public/-/emojis/1/heavy_division_sign.png b/app/assets/images/emoji/heavy_division_sign.png similarity index 100% rename from public/-/emojis/1/heavy_division_sign.png rename to app/assets/images/emoji/heavy_division_sign.png diff --git a/public/-/emojis/1/heavy_dollar_sign.png b/app/assets/images/emoji/heavy_dollar_sign.png similarity index 100% rename from public/-/emojis/1/heavy_dollar_sign.png rename to app/assets/images/emoji/heavy_dollar_sign.png diff --git a/public/-/emojis/1/heavy_minus_sign.png b/app/assets/images/emoji/heavy_minus_sign.png similarity index 100% rename from public/-/emojis/1/heavy_minus_sign.png rename to app/assets/images/emoji/heavy_minus_sign.png diff --git a/public/-/emojis/1/heavy_multiplication_x.png b/app/assets/images/emoji/heavy_multiplication_x.png similarity index 100% rename from public/-/emojis/1/heavy_multiplication_x.png rename to app/assets/images/emoji/heavy_multiplication_x.png diff --git a/public/-/emojis/1/heavy_plus_sign.png b/app/assets/images/emoji/heavy_plus_sign.png similarity index 100% rename from public/-/emojis/1/heavy_plus_sign.png rename to app/assets/images/emoji/heavy_plus_sign.png diff --git a/public/-/emojis/1/helicopter.png b/app/assets/images/emoji/helicopter.png similarity index 100% rename from public/-/emojis/1/helicopter.png rename to app/assets/images/emoji/helicopter.png diff --git a/public/-/emojis/1/helmet_with_cross.png b/app/assets/images/emoji/helmet_with_cross.png similarity index 100% rename from public/-/emojis/1/helmet_with_cross.png rename to app/assets/images/emoji/helmet_with_cross.png diff --git a/public/-/emojis/1/herb.png b/app/assets/images/emoji/herb.png similarity index 100% rename from public/-/emojis/1/herb.png rename to app/assets/images/emoji/herb.png diff --git a/public/-/emojis/1/hibiscus.png b/app/assets/images/emoji/hibiscus.png similarity index 100% rename from public/-/emojis/1/hibiscus.png rename to app/assets/images/emoji/hibiscus.png diff --git a/public/-/emojis/1/high_brightness.png b/app/assets/images/emoji/high_brightness.png similarity index 100% rename from public/-/emojis/1/high_brightness.png rename to app/assets/images/emoji/high_brightness.png diff --git a/public/-/emojis/1/high_heel.png b/app/assets/images/emoji/high_heel.png similarity index 100% rename from public/-/emojis/1/high_heel.png rename to app/assets/images/emoji/high_heel.png diff --git a/public/-/emojis/1/hockey.png b/app/assets/images/emoji/hockey.png similarity index 100% rename from public/-/emojis/1/hockey.png rename to app/assets/images/emoji/hockey.png diff --git a/public/-/emojis/1/hole.png b/app/assets/images/emoji/hole.png similarity index 100% rename from public/-/emojis/1/hole.png rename to app/assets/images/emoji/hole.png diff --git a/public/-/emojis/1/homes.png b/app/assets/images/emoji/homes.png similarity index 100% rename from public/-/emojis/1/homes.png rename to app/assets/images/emoji/homes.png diff --git a/public/-/emojis/1/honey_pot.png b/app/assets/images/emoji/honey_pot.png similarity index 100% rename from public/-/emojis/1/honey_pot.png rename to app/assets/images/emoji/honey_pot.png diff --git a/public/-/emojis/1/horse.png b/app/assets/images/emoji/horse.png similarity index 100% rename from public/-/emojis/1/horse.png rename to app/assets/images/emoji/horse.png diff --git a/public/-/emojis/1/horse_racing.png b/app/assets/images/emoji/horse_racing.png similarity index 100% rename from public/-/emojis/1/horse_racing.png rename to app/assets/images/emoji/horse_racing.png diff --git a/public/-/emojis/1/horse_racing_tone1.png b/app/assets/images/emoji/horse_racing_tone1.png similarity index 100% rename from public/-/emojis/1/horse_racing_tone1.png rename to app/assets/images/emoji/horse_racing_tone1.png diff --git a/public/-/emojis/1/horse_racing_tone2.png b/app/assets/images/emoji/horse_racing_tone2.png similarity index 100% rename from public/-/emojis/1/horse_racing_tone2.png rename to app/assets/images/emoji/horse_racing_tone2.png diff --git a/public/-/emojis/1/horse_racing_tone3.png b/app/assets/images/emoji/horse_racing_tone3.png similarity index 100% rename from public/-/emojis/1/horse_racing_tone3.png rename to app/assets/images/emoji/horse_racing_tone3.png diff --git a/public/-/emojis/1/horse_racing_tone4.png b/app/assets/images/emoji/horse_racing_tone4.png similarity index 100% rename from public/-/emojis/1/horse_racing_tone4.png rename to app/assets/images/emoji/horse_racing_tone4.png diff --git a/public/-/emojis/1/horse_racing_tone5.png b/app/assets/images/emoji/horse_racing_tone5.png similarity index 100% rename from public/-/emojis/1/horse_racing_tone5.png rename to app/assets/images/emoji/horse_racing_tone5.png diff --git a/public/-/emojis/1/hospital.png b/app/assets/images/emoji/hospital.png similarity index 100% rename from public/-/emojis/1/hospital.png rename to app/assets/images/emoji/hospital.png diff --git a/public/-/emojis/1/hot_pepper.png b/app/assets/images/emoji/hot_pepper.png similarity index 100% rename from public/-/emojis/1/hot_pepper.png rename to app/assets/images/emoji/hot_pepper.png diff --git a/public/-/emojis/1/hotdog.png b/app/assets/images/emoji/hotdog.png similarity index 100% rename from public/-/emojis/1/hotdog.png rename to app/assets/images/emoji/hotdog.png diff --git a/public/-/emojis/1/hotel.png b/app/assets/images/emoji/hotel.png similarity index 100% rename from public/-/emojis/1/hotel.png rename to app/assets/images/emoji/hotel.png diff --git a/public/-/emojis/1/hotsprings.png b/app/assets/images/emoji/hotsprings.png similarity index 100% rename from public/-/emojis/1/hotsprings.png rename to app/assets/images/emoji/hotsprings.png diff --git a/public/-/emojis/1/hourglass.png b/app/assets/images/emoji/hourglass.png similarity index 100% rename from public/-/emojis/1/hourglass.png rename to app/assets/images/emoji/hourglass.png diff --git a/public/-/emojis/1/hourglass_flowing_sand.png b/app/assets/images/emoji/hourglass_flowing_sand.png similarity index 100% rename from public/-/emojis/1/hourglass_flowing_sand.png rename to app/assets/images/emoji/hourglass_flowing_sand.png diff --git a/public/-/emojis/1/house.png b/app/assets/images/emoji/house.png similarity index 100% rename from public/-/emojis/1/house.png rename to app/assets/images/emoji/house.png diff --git a/public/-/emojis/1/house_abandoned.png b/app/assets/images/emoji/house_abandoned.png similarity index 100% rename from public/-/emojis/1/house_abandoned.png rename to app/assets/images/emoji/house_abandoned.png diff --git a/public/-/emojis/1/house_with_garden.png b/app/assets/images/emoji/house_with_garden.png similarity index 100% rename from public/-/emojis/1/house_with_garden.png rename to app/assets/images/emoji/house_with_garden.png diff --git a/public/-/emojis/1/hugging.png b/app/assets/images/emoji/hugging.png similarity index 100% rename from public/-/emojis/1/hugging.png rename to app/assets/images/emoji/hugging.png diff --git a/public/-/emojis/1/hushed.png b/app/assets/images/emoji/hushed.png similarity index 100% rename from public/-/emojis/1/hushed.png rename to app/assets/images/emoji/hushed.png diff --git a/public/-/emojis/1/ice_cream.png b/app/assets/images/emoji/ice_cream.png similarity index 100% rename from public/-/emojis/1/ice_cream.png rename to app/assets/images/emoji/ice_cream.png diff --git a/public/-/emojis/1/ice_skate.png b/app/assets/images/emoji/ice_skate.png similarity index 100% rename from public/-/emojis/1/ice_skate.png rename to app/assets/images/emoji/ice_skate.png diff --git a/public/-/emojis/1/icecream.png b/app/assets/images/emoji/icecream.png similarity index 100% rename from public/-/emojis/1/icecream.png rename to app/assets/images/emoji/icecream.png diff --git a/public/-/emojis/1/id.png b/app/assets/images/emoji/id.png similarity index 100% rename from public/-/emojis/1/id.png rename to app/assets/images/emoji/id.png diff --git a/public/-/emojis/1/ideograph_advantage.png b/app/assets/images/emoji/ideograph_advantage.png similarity index 100% rename from public/-/emojis/1/ideograph_advantage.png rename to app/assets/images/emoji/ideograph_advantage.png diff --git a/public/-/emojis/1/imp.png b/app/assets/images/emoji/imp.png similarity index 100% rename from public/-/emojis/1/imp.png rename to app/assets/images/emoji/imp.png diff --git a/public/-/emojis/1/inbox_tray.png b/app/assets/images/emoji/inbox_tray.png similarity index 100% rename from public/-/emojis/1/inbox_tray.png rename to app/assets/images/emoji/inbox_tray.png diff --git a/public/-/emojis/1/incoming_envelope.png b/app/assets/images/emoji/incoming_envelope.png similarity index 100% rename from public/-/emojis/1/incoming_envelope.png rename to app/assets/images/emoji/incoming_envelope.png diff --git a/public/-/emojis/1/information_desk_person.png b/app/assets/images/emoji/information_desk_person.png similarity index 100% rename from public/-/emojis/1/information_desk_person.png rename to app/assets/images/emoji/information_desk_person.png diff --git a/public/-/emojis/1/information_desk_person_tone1.png b/app/assets/images/emoji/information_desk_person_tone1.png similarity index 100% rename from public/-/emojis/1/information_desk_person_tone1.png rename to app/assets/images/emoji/information_desk_person_tone1.png diff --git a/public/-/emojis/1/information_desk_person_tone2.png b/app/assets/images/emoji/information_desk_person_tone2.png similarity index 100% rename from public/-/emojis/1/information_desk_person_tone2.png rename to app/assets/images/emoji/information_desk_person_tone2.png diff --git a/public/-/emojis/1/information_desk_person_tone3.png b/app/assets/images/emoji/information_desk_person_tone3.png similarity index 100% rename from public/-/emojis/1/information_desk_person_tone3.png rename to app/assets/images/emoji/information_desk_person_tone3.png diff --git a/public/-/emojis/1/information_desk_person_tone4.png b/app/assets/images/emoji/information_desk_person_tone4.png similarity index 100% rename from public/-/emojis/1/information_desk_person_tone4.png rename to app/assets/images/emoji/information_desk_person_tone4.png diff --git a/public/-/emojis/1/information_desk_person_tone5.png b/app/assets/images/emoji/information_desk_person_tone5.png similarity index 100% rename from public/-/emojis/1/information_desk_person_tone5.png rename to app/assets/images/emoji/information_desk_person_tone5.png diff --git a/public/-/emojis/1/information_source.png b/app/assets/images/emoji/information_source.png similarity index 100% rename from public/-/emojis/1/information_source.png rename to app/assets/images/emoji/information_source.png diff --git a/public/-/emojis/1/innocent.png b/app/assets/images/emoji/innocent.png similarity index 100% rename from public/-/emojis/1/innocent.png rename to app/assets/images/emoji/innocent.png diff --git a/public/-/emojis/1/interrobang.png b/app/assets/images/emoji/interrobang.png similarity index 100% rename from public/-/emojis/1/interrobang.png rename to app/assets/images/emoji/interrobang.png diff --git a/public/-/emojis/1/iphone.png b/app/assets/images/emoji/iphone.png similarity index 100% rename from public/-/emojis/1/iphone.png rename to app/assets/images/emoji/iphone.png diff --git a/public/-/emojis/1/island.png b/app/assets/images/emoji/island.png similarity index 100% rename from public/-/emojis/1/island.png rename to app/assets/images/emoji/island.png diff --git a/public/-/emojis/1/izakaya_lantern.png b/app/assets/images/emoji/izakaya_lantern.png similarity index 100% rename from public/-/emojis/1/izakaya_lantern.png rename to app/assets/images/emoji/izakaya_lantern.png diff --git a/public/-/emojis/1/jack_o_lantern.png b/app/assets/images/emoji/jack_o_lantern.png similarity index 100% rename from public/-/emojis/1/jack_o_lantern.png rename to app/assets/images/emoji/jack_o_lantern.png diff --git a/public/-/emojis/1/japan.png b/app/assets/images/emoji/japan.png similarity index 100% rename from public/-/emojis/1/japan.png rename to app/assets/images/emoji/japan.png diff --git a/public/-/emojis/1/japanese_castle.png b/app/assets/images/emoji/japanese_castle.png similarity index 100% rename from public/-/emojis/1/japanese_castle.png rename to app/assets/images/emoji/japanese_castle.png diff --git a/public/-/emojis/1/japanese_goblin.png b/app/assets/images/emoji/japanese_goblin.png similarity index 100% rename from public/-/emojis/1/japanese_goblin.png rename to app/assets/images/emoji/japanese_goblin.png diff --git a/public/-/emojis/1/japanese_ogre.png b/app/assets/images/emoji/japanese_ogre.png similarity index 100% rename from public/-/emojis/1/japanese_ogre.png rename to app/assets/images/emoji/japanese_ogre.png diff --git a/public/-/emojis/1/jeans.png b/app/assets/images/emoji/jeans.png similarity index 100% rename from public/-/emojis/1/jeans.png rename to app/assets/images/emoji/jeans.png diff --git a/public/-/emojis/1/joy.png b/app/assets/images/emoji/joy.png similarity index 100% rename from public/-/emojis/1/joy.png rename to app/assets/images/emoji/joy.png diff --git a/public/-/emojis/1/joy_cat.png b/app/assets/images/emoji/joy_cat.png similarity index 100% rename from public/-/emojis/1/joy_cat.png rename to app/assets/images/emoji/joy_cat.png diff --git a/public/-/emojis/1/joystick.png b/app/assets/images/emoji/joystick.png similarity index 100% rename from public/-/emojis/1/joystick.png rename to app/assets/images/emoji/joystick.png diff --git a/public/-/emojis/1/juggling.png b/app/assets/images/emoji/juggling.png similarity index 100% rename from public/-/emojis/1/juggling.png rename to app/assets/images/emoji/juggling.png diff --git a/public/-/emojis/1/juggling_tone1.png b/app/assets/images/emoji/juggling_tone1.png similarity index 100% rename from public/-/emojis/1/juggling_tone1.png rename to app/assets/images/emoji/juggling_tone1.png diff --git a/public/-/emojis/1/juggling_tone2.png b/app/assets/images/emoji/juggling_tone2.png similarity index 100% rename from public/-/emojis/1/juggling_tone2.png rename to app/assets/images/emoji/juggling_tone2.png diff --git a/public/-/emojis/1/juggling_tone3.png b/app/assets/images/emoji/juggling_tone3.png similarity index 100% rename from public/-/emojis/1/juggling_tone3.png rename to app/assets/images/emoji/juggling_tone3.png diff --git a/public/-/emojis/1/juggling_tone4.png b/app/assets/images/emoji/juggling_tone4.png similarity index 100% rename from public/-/emojis/1/juggling_tone4.png rename to app/assets/images/emoji/juggling_tone4.png diff --git a/public/-/emojis/1/juggling_tone5.png b/app/assets/images/emoji/juggling_tone5.png similarity index 100% rename from public/-/emojis/1/juggling_tone5.png rename to app/assets/images/emoji/juggling_tone5.png diff --git a/public/-/emojis/1/kaaba.png b/app/assets/images/emoji/kaaba.png similarity index 100% rename from public/-/emojis/1/kaaba.png rename to app/assets/images/emoji/kaaba.png diff --git a/public/-/emojis/1/key.png b/app/assets/images/emoji/key.png similarity index 100% rename from public/-/emojis/1/key.png rename to app/assets/images/emoji/key.png diff --git a/public/-/emojis/1/key2.png b/app/assets/images/emoji/key2.png similarity index 100% rename from public/-/emojis/1/key2.png rename to app/assets/images/emoji/key2.png diff --git a/public/-/emojis/1/keyboard.png b/app/assets/images/emoji/keyboard.png similarity index 100% rename from public/-/emojis/1/keyboard.png rename to app/assets/images/emoji/keyboard.png diff --git a/public/-/emojis/1/kimono.png b/app/assets/images/emoji/kimono.png similarity index 100% rename from public/-/emojis/1/kimono.png rename to app/assets/images/emoji/kimono.png diff --git a/public/-/emojis/1/kiss.png b/app/assets/images/emoji/kiss.png similarity index 100% rename from public/-/emojis/1/kiss.png rename to app/assets/images/emoji/kiss.png diff --git a/public/-/emojis/1/kiss_mm.png b/app/assets/images/emoji/kiss_mm.png similarity index 100% rename from public/-/emojis/1/kiss_mm.png rename to app/assets/images/emoji/kiss_mm.png diff --git a/public/-/emojis/1/kiss_ww.png b/app/assets/images/emoji/kiss_ww.png similarity index 100% rename from public/-/emojis/1/kiss_ww.png rename to app/assets/images/emoji/kiss_ww.png diff --git a/public/-/emojis/1/kissing.png b/app/assets/images/emoji/kissing.png similarity index 100% rename from public/-/emojis/1/kissing.png rename to app/assets/images/emoji/kissing.png diff --git a/public/-/emojis/1/kissing_cat.png b/app/assets/images/emoji/kissing_cat.png similarity index 100% rename from public/-/emojis/1/kissing_cat.png rename to app/assets/images/emoji/kissing_cat.png diff --git a/public/-/emojis/1/kissing_closed_eyes.png b/app/assets/images/emoji/kissing_closed_eyes.png similarity index 100% rename from public/-/emojis/1/kissing_closed_eyes.png rename to app/assets/images/emoji/kissing_closed_eyes.png diff --git a/public/-/emojis/1/kissing_heart.png b/app/assets/images/emoji/kissing_heart.png similarity index 100% rename from public/-/emojis/1/kissing_heart.png rename to app/assets/images/emoji/kissing_heart.png diff --git a/public/-/emojis/1/kissing_smiling_eyes.png b/app/assets/images/emoji/kissing_smiling_eyes.png similarity index 100% rename from public/-/emojis/1/kissing_smiling_eyes.png rename to app/assets/images/emoji/kissing_smiling_eyes.png diff --git a/public/-/emojis/1/kiwi.png b/app/assets/images/emoji/kiwi.png similarity index 100% rename from public/-/emojis/1/kiwi.png rename to app/assets/images/emoji/kiwi.png diff --git a/public/-/emojis/1/knife.png b/app/assets/images/emoji/knife.png similarity index 100% rename from public/-/emojis/1/knife.png rename to app/assets/images/emoji/knife.png diff --git a/public/-/emojis/1/koala.png b/app/assets/images/emoji/koala.png similarity index 100% rename from public/-/emojis/1/koala.png rename to app/assets/images/emoji/koala.png diff --git a/public/-/emojis/1/koko.png b/app/assets/images/emoji/koko.png similarity index 100% rename from public/-/emojis/1/koko.png rename to app/assets/images/emoji/koko.png diff --git a/public/-/emojis/1/label.png b/app/assets/images/emoji/label.png similarity index 100% rename from public/-/emojis/1/label.png rename to app/assets/images/emoji/label.png diff --git a/public/-/emojis/1/large_blue_circle.png b/app/assets/images/emoji/large_blue_circle.png similarity index 100% rename from public/-/emojis/1/large_blue_circle.png rename to app/assets/images/emoji/large_blue_circle.png diff --git a/public/-/emojis/1/large_blue_diamond.png b/app/assets/images/emoji/large_blue_diamond.png similarity index 100% rename from public/-/emojis/1/large_blue_diamond.png rename to app/assets/images/emoji/large_blue_diamond.png diff --git a/public/-/emojis/1/large_orange_diamond.png b/app/assets/images/emoji/large_orange_diamond.png similarity index 100% rename from public/-/emojis/1/large_orange_diamond.png rename to app/assets/images/emoji/large_orange_diamond.png diff --git a/public/-/emojis/1/last_quarter_moon.png b/app/assets/images/emoji/last_quarter_moon.png similarity index 100% rename from public/-/emojis/1/last_quarter_moon.png rename to app/assets/images/emoji/last_quarter_moon.png diff --git a/public/-/emojis/1/last_quarter_moon_with_face.png b/app/assets/images/emoji/last_quarter_moon_with_face.png similarity index 100% rename from public/-/emojis/1/last_quarter_moon_with_face.png rename to app/assets/images/emoji/last_quarter_moon_with_face.png diff --git a/public/-/emojis/1/laughing.png b/app/assets/images/emoji/laughing.png similarity index 100% rename from public/-/emojis/1/laughing.png rename to app/assets/images/emoji/laughing.png diff --git a/public/-/emojis/1/leaves.png b/app/assets/images/emoji/leaves.png similarity index 100% rename from public/-/emojis/1/leaves.png rename to app/assets/images/emoji/leaves.png diff --git a/public/-/emojis/1/ledger.png b/app/assets/images/emoji/ledger.png similarity index 100% rename from public/-/emojis/1/ledger.png rename to app/assets/images/emoji/ledger.png diff --git a/public/-/emojis/1/left_facing_fist.png b/app/assets/images/emoji/left_facing_fist.png similarity index 100% rename from public/-/emojis/1/left_facing_fist.png rename to app/assets/images/emoji/left_facing_fist.png diff --git a/public/-/emojis/1/left_facing_fist_tone1.png b/app/assets/images/emoji/left_facing_fist_tone1.png similarity index 100% rename from public/-/emojis/1/left_facing_fist_tone1.png rename to app/assets/images/emoji/left_facing_fist_tone1.png diff --git a/public/-/emojis/1/left_facing_fist_tone2.png b/app/assets/images/emoji/left_facing_fist_tone2.png similarity index 100% rename from public/-/emojis/1/left_facing_fist_tone2.png rename to app/assets/images/emoji/left_facing_fist_tone2.png diff --git a/public/-/emojis/1/left_facing_fist_tone3.png b/app/assets/images/emoji/left_facing_fist_tone3.png similarity index 100% rename from public/-/emojis/1/left_facing_fist_tone3.png rename to app/assets/images/emoji/left_facing_fist_tone3.png diff --git a/public/-/emojis/1/left_facing_fist_tone4.png b/app/assets/images/emoji/left_facing_fist_tone4.png similarity index 100% rename from public/-/emojis/1/left_facing_fist_tone4.png rename to app/assets/images/emoji/left_facing_fist_tone4.png diff --git a/public/-/emojis/1/left_facing_fist_tone5.png b/app/assets/images/emoji/left_facing_fist_tone5.png similarity index 100% rename from public/-/emojis/1/left_facing_fist_tone5.png rename to app/assets/images/emoji/left_facing_fist_tone5.png diff --git a/public/-/emojis/1/left_luggage.png b/app/assets/images/emoji/left_luggage.png similarity index 100% rename from public/-/emojis/1/left_luggage.png rename to app/assets/images/emoji/left_luggage.png diff --git a/public/-/emojis/1/left_right_arrow.png b/app/assets/images/emoji/left_right_arrow.png similarity index 100% rename from public/-/emojis/1/left_right_arrow.png rename to app/assets/images/emoji/left_right_arrow.png diff --git a/public/-/emojis/1/leftwards_arrow_with_hook.png b/app/assets/images/emoji/leftwards_arrow_with_hook.png similarity index 100% rename from public/-/emojis/1/leftwards_arrow_with_hook.png rename to app/assets/images/emoji/leftwards_arrow_with_hook.png diff --git a/public/-/emojis/1/lemon.png b/app/assets/images/emoji/lemon.png similarity index 100% rename from public/-/emojis/1/lemon.png rename to app/assets/images/emoji/lemon.png diff --git a/public/-/emojis/1/leo.png b/app/assets/images/emoji/leo.png similarity index 100% rename from public/-/emojis/1/leo.png rename to app/assets/images/emoji/leo.png diff --git a/public/-/emojis/1/leopard.png b/app/assets/images/emoji/leopard.png similarity index 100% rename from public/-/emojis/1/leopard.png rename to app/assets/images/emoji/leopard.png diff --git a/public/-/emojis/1/level_slider.png b/app/assets/images/emoji/level_slider.png similarity index 100% rename from public/-/emojis/1/level_slider.png rename to app/assets/images/emoji/level_slider.png diff --git a/public/-/emojis/1/levitate.png b/app/assets/images/emoji/levitate.png similarity index 100% rename from public/-/emojis/1/levitate.png rename to app/assets/images/emoji/levitate.png diff --git a/public/-/emojis/1/libra.png b/app/assets/images/emoji/libra.png similarity index 100% rename from public/-/emojis/1/libra.png rename to app/assets/images/emoji/libra.png diff --git a/public/-/emojis/1/lifter.png b/app/assets/images/emoji/lifter.png similarity index 100% rename from public/-/emojis/1/lifter.png rename to app/assets/images/emoji/lifter.png diff --git a/public/-/emojis/1/lifter_tone1.png b/app/assets/images/emoji/lifter_tone1.png similarity index 100% rename from public/-/emojis/1/lifter_tone1.png rename to app/assets/images/emoji/lifter_tone1.png diff --git a/public/-/emojis/1/lifter_tone2.png b/app/assets/images/emoji/lifter_tone2.png similarity index 100% rename from public/-/emojis/1/lifter_tone2.png rename to app/assets/images/emoji/lifter_tone2.png diff --git a/public/-/emojis/1/lifter_tone3.png b/app/assets/images/emoji/lifter_tone3.png similarity index 100% rename from public/-/emojis/1/lifter_tone3.png rename to app/assets/images/emoji/lifter_tone3.png diff --git a/public/-/emojis/1/lifter_tone4.png b/app/assets/images/emoji/lifter_tone4.png similarity index 100% rename from public/-/emojis/1/lifter_tone4.png rename to app/assets/images/emoji/lifter_tone4.png diff --git a/public/-/emojis/1/lifter_tone5.png b/app/assets/images/emoji/lifter_tone5.png similarity index 100% rename from public/-/emojis/1/lifter_tone5.png rename to app/assets/images/emoji/lifter_tone5.png diff --git a/public/-/emojis/1/light_rail.png b/app/assets/images/emoji/light_rail.png similarity index 100% rename from public/-/emojis/1/light_rail.png rename to app/assets/images/emoji/light_rail.png diff --git a/public/-/emojis/1/link.png b/app/assets/images/emoji/link.png similarity index 100% rename from public/-/emojis/1/link.png rename to app/assets/images/emoji/link.png diff --git a/public/-/emojis/1/lion_face.png b/app/assets/images/emoji/lion_face.png similarity index 100% rename from public/-/emojis/1/lion_face.png rename to app/assets/images/emoji/lion_face.png diff --git a/public/-/emojis/1/lips.png b/app/assets/images/emoji/lips.png similarity index 100% rename from public/-/emojis/1/lips.png rename to app/assets/images/emoji/lips.png diff --git a/public/-/emojis/1/lipstick.png b/app/assets/images/emoji/lipstick.png similarity index 100% rename from public/-/emojis/1/lipstick.png rename to app/assets/images/emoji/lipstick.png diff --git a/public/-/emojis/1/lizard.png b/app/assets/images/emoji/lizard.png similarity index 100% rename from public/-/emojis/1/lizard.png rename to app/assets/images/emoji/lizard.png diff --git a/public/-/emojis/1/lock.png b/app/assets/images/emoji/lock.png similarity index 100% rename from public/-/emojis/1/lock.png rename to app/assets/images/emoji/lock.png diff --git a/public/-/emojis/1/lock_with_ink_pen.png b/app/assets/images/emoji/lock_with_ink_pen.png similarity index 100% rename from public/-/emojis/1/lock_with_ink_pen.png rename to app/assets/images/emoji/lock_with_ink_pen.png diff --git a/public/-/emojis/1/lollipop.png b/app/assets/images/emoji/lollipop.png similarity index 100% rename from public/-/emojis/1/lollipop.png rename to app/assets/images/emoji/lollipop.png diff --git a/public/-/emojis/1/loop.png b/app/assets/images/emoji/loop.png similarity index 100% rename from public/-/emojis/1/loop.png rename to app/assets/images/emoji/loop.png diff --git a/public/-/emojis/1/loud_sound.png b/app/assets/images/emoji/loud_sound.png similarity index 100% rename from public/-/emojis/1/loud_sound.png rename to app/assets/images/emoji/loud_sound.png diff --git a/public/-/emojis/1/loudspeaker.png b/app/assets/images/emoji/loudspeaker.png similarity index 100% rename from public/-/emojis/1/loudspeaker.png rename to app/assets/images/emoji/loudspeaker.png diff --git a/public/-/emojis/1/love_hotel.png b/app/assets/images/emoji/love_hotel.png similarity index 100% rename from public/-/emojis/1/love_hotel.png rename to app/assets/images/emoji/love_hotel.png diff --git a/public/-/emojis/1/love_letter.png b/app/assets/images/emoji/love_letter.png similarity index 100% rename from public/-/emojis/1/love_letter.png rename to app/assets/images/emoji/love_letter.png diff --git a/public/-/emojis/1/low_brightness.png b/app/assets/images/emoji/low_brightness.png similarity index 100% rename from public/-/emojis/1/low_brightness.png rename to app/assets/images/emoji/low_brightness.png diff --git a/public/-/emojis/1/lying_face.png b/app/assets/images/emoji/lying_face.png similarity index 100% rename from public/-/emojis/1/lying_face.png rename to app/assets/images/emoji/lying_face.png diff --git a/public/-/emojis/1/m.png b/app/assets/images/emoji/m.png similarity index 100% rename from public/-/emojis/1/m.png rename to app/assets/images/emoji/m.png diff --git a/public/-/emojis/1/mag.png b/app/assets/images/emoji/mag.png similarity index 100% rename from public/-/emojis/1/mag.png rename to app/assets/images/emoji/mag.png diff --git a/public/-/emojis/1/mag_right.png b/app/assets/images/emoji/mag_right.png similarity index 100% rename from public/-/emojis/1/mag_right.png rename to app/assets/images/emoji/mag_right.png diff --git a/public/-/emojis/1/mahjong.png b/app/assets/images/emoji/mahjong.png similarity index 100% rename from public/-/emojis/1/mahjong.png rename to app/assets/images/emoji/mahjong.png diff --git a/public/-/emojis/1/mailbox.png b/app/assets/images/emoji/mailbox.png similarity index 100% rename from public/-/emojis/1/mailbox.png rename to app/assets/images/emoji/mailbox.png diff --git a/public/-/emojis/1/mailbox_closed.png b/app/assets/images/emoji/mailbox_closed.png similarity index 100% rename from public/-/emojis/1/mailbox_closed.png rename to app/assets/images/emoji/mailbox_closed.png diff --git a/public/-/emojis/1/mailbox_with_mail.png b/app/assets/images/emoji/mailbox_with_mail.png similarity index 100% rename from public/-/emojis/1/mailbox_with_mail.png rename to app/assets/images/emoji/mailbox_with_mail.png diff --git a/public/-/emojis/1/mailbox_with_no_mail.png b/app/assets/images/emoji/mailbox_with_no_mail.png similarity index 100% rename from public/-/emojis/1/mailbox_with_no_mail.png rename to app/assets/images/emoji/mailbox_with_no_mail.png diff --git a/public/-/emojis/1/man.png b/app/assets/images/emoji/man.png similarity index 100% rename from public/-/emojis/1/man.png rename to app/assets/images/emoji/man.png diff --git a/public/-/emojis/1/man_dancing.png b/app/assets/images/emoji/man_dancing.png similarity index 100% rename from public/-/emojis/1/man_dancing.png rename to app/assets/images/emoji/man_dancing.png diff --git a/public/-/emojis/1/man_dancing_tone1.png b/app/assets/images/emoji/man_dancing_tone1.png similarity index 100% rename from public/-/emojis/1/man_dancing_tone1.png rename to app/assets/images/emoji/man_dancing_tone1.png diff --git a/public/-/emojis/1/man_dancing_tone2.png b/app/assets/images/emoji/man_dancing_tone2.png similarity index 100% rename from public/-/emojis/1/man_dancing_tone2.png rename to app/assets/images/emoji/man_dancing_tone2.png diff --git a/public/-/emojis/1/man_dancing_tone3.png b/app/assets/images/emoji/man_dancing_tone3.png similarity index 100% rename from public/-/emojis/1/man_dancing_tone3.png rename to app/assets/images/emoji/man_dancing_tone3.png diff --git a/public/-/emojis/1/man_dancing_tone4.png b/app/assets/images/emoji/man_dancing_tone4.png similarity index 100% rename from public/-/emojis/1/man_dancing_tone4.png rename to app/assets/images/emoji/man_dancing_tone4.png diff --git a/public/-/emojis/1/man_dancing_tone5.png b/app/assets/images/emoji/man_dancing_tone5.png similarity index 100% rename from public/-/emojis/1/man_dancing_tone5.png rename to app/assets/images/emoji/man_dancing_tone5.png diff --git a/public/-/emojis/1/man_in_tuxedo.png b/app/assets/images/emoji/man_in_tuxedo.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo.png rename to app/assets/images/emoji/man_in_tuxedo.png diff --git a/public/-/emojis/1/man_in_tuxedo_tone1.png b/app/assets/images/emoji/man_in_tuxedo_tone1.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo_tone1.png rename to app/assets/images/emoji/man_in_tuxedo_tone1.png diff --git a/public/-/emojis/1/man_in_tuxedo_tone2.png b/app/assets/images/emoji/man_in_tuxedo_tone2.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo_tone2.png rename to app/assets/images/emoji/man_in_tuxedo_tone2.png diff --git a/public/-/emojis/1/man_in_tuxedo_tone3.png b/app/assets/images/emoji/man_in_tuxedo_tone3.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo_tone3.png rename to app/assets/images/emoji/man_in_tuxedo_tone3.png diff --git a/public/-/emojis/1/man_in_tuxedo_tone4.png b/app/assets/images/emoji/man_in_tuxedo_tone4.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo_tone4.png rename to app/assets/images/emoji/man_in_tuxedo_tone4.png diff --git a/public/-/emojis/1/man_in_tuxedo_tone5.png b/app/assets/images/emoji/man_in_tuxedo_tone5.png similarity index 100% rename from public/-/emojis/1/man_in_tuxedo_tone5.png rename to app/assets/images/emoji/man_in_tuxedo_tone5.png diff --git a/public/-/emojis/1/man_tone1.png b/app/assets/images/emoji/man_tone1.png similarity index 100% rename from public/-/emojis/1/man_tone1.png rename to app/assets/images/emoji/man_tone1.png diff --git a/public/-/emojis/1/man_tone2.png b/app/assets/images/emoji/man_tone2.png similarity index 100% rename from public/-/emojis/1/man_tone2.png rename to app/assets/images/emoji/man_tone2.png diff --git a/public/-/emojis/1/man_tone3.png b/app/assets/images/emoji/man_tone3.png similarity index 100% rename from public/-/emojis/1/man_tone3.png rename to app/assets/images/emoji/man_tone3.png diff --git a/public/-/emojis/1/man_tone4.png b/app/assets/images/emoji/man_tone4.png similarity index 100% rename from public/-/emojis/1/man_tone4.png rename to app/assets/images/emoji/man_tone4.png diff --git a/public/-/emojis/1/man_tone5.png b/app/assets/images/emoji/man_tone5.png similarity index 100% rename from public/-/emojis/1/man_tone5.png rename to app/assets/images/emoji/man_tone5.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao.png b/app/assets/images/emoji/man_with_gua_pi_mao.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao.png rename to app/assets/images/emoji/man_with_gua_pi_mao.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone1.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone1.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao_tone1.png rename to app/assets/images/emoji/man_with_gua_pi_mao_tone1.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone2.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone2.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao_tone2.png rename to app/assets/images/emoji/man_with_gua_pi_mao_tone2.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone3.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone3.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao_tone3.png rename to app/assets/images/emoji/man_with_gua_pi_mao_tone3.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone4.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone4.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao_tone4.png rename to app/assets/images/emoji/man_with_gua_pi_mao_tone4.png diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone5.png b/app/assets/images/emoji/man_with_gua_pi_mao_tone5.png similarity index 100% rename from public/-/emojis/1/man_with_gua_pi_mao_tone5.png rename to app/assets/images/emoji/man_with_gua_pi_mao_tone5.png diff --git a/public/-/emojis/1/man_with_turban.png b/app/assets/images/emoji/man_with_turban.png similarity index 100% rename from public/-/emojis/1/man_with_turban.png rename to app/assets/images/emoji/man_with_turban.png diff --git a/public/-/emojis/1/man_with_turban_tone1.png b/app/assets/images/emoji/man_with_turban_tone1.png similarity index 100% rename from public/-/emojis/1/man_with_turban_tone1.png rename to app/assets/images/emoji/man_with_turban_tone1.png diff --git a/public/-/emojis/1/man_with_turban_tone2.png b/app/assets/images/emoji/man_with_turban_tone2.png similarity index 100% rename from public/-/emojis/1/man_with_turban_tone2.png rename to app/assets/images/emoji/man_with_turban_tone2.png diff --git a/public/-/emojis/1/man_with_turban_tone3.png b/app/assets/images/emoji/man_with_turban_tone3.png similarity index 100% rename from public/-/emojis/1/man_with_turban_tone3.png rename to app/assets/images/emoji/man_with_turban_tone3.png diff --git a/public/-/emojis/1/man_with_turban_tone4.png b/app/assets/images/emoji/man_with_turban_tone4.png similarity index 100% rename from public/-/emojis/1/man_with_turban_tone4.png rename to app/assets/images/emoji/man_with_turban_tone4.png diff --git a/public/-/emojis/1/man_with_turban_tone5.png b/app/assets/images/emoji/man_with_turban_tone5.png similarity index 100% rename from public/-/emojis/1/man_with_turban_tone5.png rename to app/assets/images/emoji/man_with_turban_tone5.png diff --git a/public/-/emojis/1/mans_shoe.png b/app/assets/images/emoji/mans_shoe.png similarity index 100% rename from public/-/emojis/1/mans_shoe.png rename to app/assets/images/emoji/mans_shoe.png diff --git a/public/-/emojis/1/map.png b/app/assets/images/emoji/map.png similarity index 100% rename from public/-/emojis/1/map.png rename to app/assets/images/emoji/map.png diff --git a/public/-/emojis/1/maple_leaf.png b/app/assets/images/emoji/maple_leaf.png similarity index 100% rename from public/-/emojis/1/maple_leaf.png rename to app/assets/images/emoji/maple_leaf.png diff --git a/public/-/emojis/1/martial_arts_uniform.png b/app/assets/images/emoji/martial_arts_uniform.png similarity index 100% rename from public/-/emojis/1/martial_arts_uniform.png rename to app/assets/images/emoji/martial_arts_uniform.png diff --git a/public/-/emojis/1/mask.png b/app/assets/images/emoji/mask.png similarity index 100% rename from public/-/emojis/1/mask.png rename to app/assets/images/emoji/mask.png diff --git a/public/-/emojis/1/massage.png b/app/assets/images/emoji/massage.png similarity index 100% rename from public/-/emojis/1/massage.png rename to app/assets/images/emoji/massage.png diff --git a/public/-/emojis/1/massage_tone1.png b/app/assets/images/emoji/massage_tone1.png similarity index 100% rename from public/-/emojis/1/massage_tone1.png rename to app/assets/images/emoji/massage_tone1.png diff --git a/public/-/emojis/1/massage_tone2.png b/app/assets/images/emoji/massage_tone2.png similarity index 100% rename from public/-/emojis/1/massage_tone2.png rename to app/assets/images/emoji/massage_tone2.png diff --git a/public/-/emojis/1/massage_tone3.png b/app/assets/images/emoji/massage_tone3.png similarity index 100% rename from public/-/emojis/1/massage_tone3.png rename to app/assets/images/emoji/massage_tone3.png diff --git a/public/-/emojis/1/massage_tone4.png b/app/assets/images/emoji/massage_tone4.png similarity index 100% rename from public/-/emojis/1/massage_tone4.png rename to app/assets/images/emoji/massage_tone4.png diff --git a/public/-/emojis/1/massage_tone5.png b/app/assets/images/emoji/massage_tone5.png similarity index 100% rename from public/-/emojis/1/massage_tone5.png rename to app/assets/images/emoji/massage_tone5.png diff --git a/public/-/emojis/1/meat_on_bone.png b/app/assets/images/emoji/meat_on_bone.png similarity index 100% rename from public/-/emojis/1/meat_on_bone.png rename to app/assets/images/emoji/meat_on_bone.png diff --git a/public/-/emojis/1/medal.png b/app/assets/images/emoji/medal.png similarity index 100% rename from public/-/emojis/1/medal.png rename to app/assets/images/emoji/medal.png diff --git a/public/-/emojis/1/mega.png b/app/assets/images/emoji/mega.png similarity index 100% rename from public/-/emojis/1/mega.png rename to app/assets/images/emoji/mega.png diff --git a/public/-/emojis/1/melon.png b/app/assets/images/emoji/melon.png similarity index 100% rename from public/-/emojis/1/melon.png rename to app/assets/images/emoji/melon.png diff --git a/public/-/emojis/1/menorah.png b/app/assets/images/emoji/menorah.png similarity index 100% rename from public/-/emojis/1/menorah.png rename to app/assets/images/emoji/menorah.png diff --git a/public/-/emojis/1/mens.png b/app/assets/images/emoji/mens.png similarity index 100% rename from public/-/emojis/1/mens.png rename to app/assets/images/emoji/mens.png diff --git a/public/-/emojis/1/metal.png b/app/assets/images/emoji/metal.png similarity index 100% rename from public/-/emojis/1/metal.png rename to app/assets/images/emoji/metal.png diff --git a/public/-/emojis/1/metal_tone1.png b/app/assets/images/emoji/metal_tone1.png similarity index 100% rename from public/-/emojis/1/metal_tone1.png rename to app/assets/images/emoji/metal_tone1.png diff --git a/public/-/emojis/1/metal_tone2.png b/app/assets/images/emoji/metal_tone2.png similarity index 100% rename from public/-/emojis/1/metal_tone2.png rename to app/assets/images/emoji/metal_tone2.png diff --git a/public/-/emojis/1/metal_tone3.png b/app/assets/images/emoji/metal_tone3.png similarity index 100% rename from public/-/emojis/1/metal_tone3.png rename to app/assets/images/emoji/metal_tone3.png diff --git a/public/-/emojis/1/metal_tone4.png b/app/assets/images/emoji/metal_tone4.png similarity index 100% rename from public/-/emojis/1/metal_tone4.png rename to app/assets/images/emoji/metal_tone4.png diff --git a/public/-/emojis/1/metal_tone5.png b/app/assets/images/emoji/metal_tone5.png similarity index 100% rename from public/-/emojis/1/metal_tone5.png rename to app/assets/images/emoji/metal_tone5.png diff --git a/public/-/emojis/1/metro.png b/app/assets/images/emoji/metro.png similarity index 100% rename from public/-/emojis/1/metro.png rename to app/assets/images/emoji/metro.png diff --git a/public/-/emojis/1/microphone.png b/app/assets/images/emoji/microphone.png similarity index 100% rename from public/-/emojis/1/microphone.png rename to app/assets/images/emoji/microphone.png diff --git a/public/-/emojis/1/microphone2.png b/app/assets/images/emoji/microphone2.png similarity index 100% rename from public/-/emojis/1/microphone2.png rename to app/assets/images/emoji/microphone2.png diff --git a/public/-/emojis/1/microscope.png b/app/assets/images/emoji/microscope.png similarity index 100% rename from public/-/emojis/1/microscope.png rename to app/assets/images/emoji/microscope.png diff --git a/public/-/emojis/1/middle_finger.png b/app/assets/images/emoji/middle_finger.png similarity index 100% rename from public/-/emojis/1/middle_finger.png rename to app/assets/images/emoji/middle_finger.png diff --git a/public/-/emojis/1/middle_finger_tone1.png b/app/assets/images/emoji/middle_finger_tone1.png similarity index 100% rename from public/-/emojis/1/middle_finger_tone1.png rename to app/assets/images/emoji/middle_finger_tone1.png diff --git a/public/-/emojis/1/middle_finger_tone2.png b/app/assets/images/emoji/middle_finger_tone2.png similarity index 100% rename from public/-/emojis/1/middle_finger_tone2.png rename to app/assets/images/emoji/middle_finger_tone2.png diff --git a/public/-/emojis/1/middle_finger_tone3.png b/app/assets/images/emoji/middle_finger_tone3.png similarity index 100% rename from public/-/emojis/1/middle_finger_tone3.png rename to app/assets/images/emoji/middle_finger_tone3.png diff --git a/public/-/emojis/1/middle_finger_tone4.png b/app/assets/images/emoji/middle_finger_tone4.png similarity index 100% rename from public/-/emojis/1/middle_finger_tone4.png rename to app/assets/images/emoji/middle_finger_tone4.png diff --git a/public/-/emojis/1/middle_finger_tone5.png b/app/assets/images/emoji/middle_finger_tone5.png similarity index 100% rename from public/-/emojis/1/middle_finger_tone5.png rename to app/assets/images/emoji/middle_finger_tone5.png diff --git a/public/-/emojis/1/military_medal.png b/app/assets/images/emoji/military_medal.png similarity index 100% rename from public/-/emojis/1/military_medal.png rename to app/assets/images/emoji/military_medal.png diff --git a/public/-/emojis/1/milk.png b/app/assets/images/emoji/milk.png similarity index 100% rename from public/-/emojis/1/milk.png rename to app/assets/images/emoji/milk.png diff --git a/public/-/emojis/1/milky_way.png b/app/assets/images/emoji/milky_way.png similarity index 100% rename from public/-/emojis/1/milky_way.png rename to app/assets/images/emoji/milky_way.png diff --git a/public/-/emojis/1/minibus.png b/app/assets/images/emoji/minibus.png similarity index 100% rename from public/-/emojis/1/minibus.png rename to app/assets/images/emoji/minibus.png diff --git a/public/-/emojis/1/minidisc.png b/app/assets/images/emoji/minidisc.png similarity index 100% rename from public/-/emojis/1/minidisc.png rename to app/assets/images/emoji/minidisc.png diff --git a/public/-/emojis/1/mobile_phone_off.png b/app/assets/images/emoji/mobile_phone_off.png similarity index 100% rename from public/-/emojis/1/mobile_phone_off.png rename to app/assets/images/emoji/mobile_phone_off.png diff --git a/public/-/emojis/1/money_mouth.png b/app/assets/images/emoji/money_mouth.png similarity index 100% rename from public/-/emojis/1/money_mouth.png rename to app/assets/images/emoji/money_mouth.png diff --git a/public/-/emojis/1/money_with_wings.png b/app/assets/images/emoji/money_with_wings.png similarity index 100% rename from public/-/emojis/1/money_with_wings.png rename to app/assets/images/emoji/money_with_wings.png diff --git a/public/-/emojis/1/moneybag.png b/app/assets/images/emoji/moneybag.png similarity index 100% rename from public/-/emojis/1/moneybag.png rename to app/assets/images/emoji/moneybag.png diff --git a/public/-/emojis/1/monkey.png b/app/assets/images/emoji/monkey.png similarity index 100% rename from public/-/emojis/1/monkey.png rename to app/assets/images/emoji/monkey.png diff --git a/public/-/emojis/1/monkey_face.png b/app/assets/images/emoji/monkey_face.png similarity index 100% rename from public/-/emojis/1/monkey_face.png rename to app/assets/images/emoji/monkey_face.png diff --git a/public/-/emojis/1/monorail.png b/app/assets/images/emoji/monorail.png similarity index 100% rename from public/-/emojis/1/monorail.png rename to app/assets/images/emoji/monorail.png diff --git a/public/-/emojis/1/mortar_board.png b/app/assets/images/emoji/mortar_board.png similarity index 100% rename from public/-/emojis/1/mortar_board.png rename to app/assets/images/emoji/mortar_board.png diff --git a/public/-/emojis/1/mosque.png b/app/assets/images/emoji/mosque.png similarity index 100% rename from public/-/emojis/1/mosque.png rename to app/assets/images/emoji/mosque.png diff --git a/public/-/emojis/1/motor_scooter.png b/app/assets/images/emoji/motor_scooter.png similarity index 100% rename from public/-/emojis/1/motor_scooter.png rename to app/assets/images/emoji/motor_scooter.png diff --git a/public/-/emojis/1/motorboat.png b/app/assets/images/emoji/motorboat.png similarity index 100% rename from public/-/emojis/1/motorboat.png rename to app/assets/images/emoji/motorboat.png diff --git a/public/-/emojis/1/motorcycle.png b/app/assets/images/emoji/motorcycle.png similarity index 100% rename from public/-/emojis/1/motorcycle.png rename to app/assets/images/emoji/motorcycle.png diff --git a/public/-/emojis/1/motorway.png b/app/assets/images/emoji/motorway.png similarity index 100% rename from public/-/emojis/1/motorway.png rename to app/assets/images/emoji/motorway.png diff --git a/public/-/emojis/1/mount_fuji.png b/app/assets/images/emoji/mount_fuji.png similarity index 100% rename from public/-/emojis/1/mount_fuji.png rename to app/assets/images/emoji/mount_fuji.png diff --git a/public/-/emojis/1/mountain.png b/app/assets/images/emoji/mountain.png similarity index 100% rename from public/-/emojis/1/mountain.png rename to app/assets/images/emoji/mountain.png diff --git a/public/-/emojis/1/mountain_bicyclist.png b/app/assets/images/emoji/mountain_bicyclist.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist.png rename to app/assets/images/emoji/mountain_bicyclist.png diff --git a/public/-/emojis/1/mountain_bicyclist_tone1.png b/app/assets/images/emoji/mountain_bicyclist_tone1.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist_tone1.png rename to app/assets/images/emoji/mountain_bicyclist_tone1.png diff --git a/public/-/emojis/1/mountain_bicyclist_tone2.png b/app/assets/images/emoji/mountain_bicyclist_tone2.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist_tone2.png rename to app/assets/images/emoji/mountain_bicyclist_tone2.png diff --git a/public/-/emojis/1/mountain_bicyclist_tone3.png b/app/assets/images/emoji/mountain_bicyclist_tone3.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist_tone3.png rename to app/assets/images/emoji/mountain_bicyclist_tone3.png diff --git a/public/-/emojis/1/mountain_bicyclist_tone4.png b/app/assets/images/emoji/mountain_bicyclist_tone4.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist_tone4.png rename to app/assets/images/emoji/mountain_bicyclist_tone4.png diff --git a/public/-/emojis/1/mountain_bicyclist_tone5.png b/app/assets/images/emoji/mountain_bicyclist_tone5.png similarity index 100% rename from public/-/emojis/1/mountain_bicyclist_tone5.png rename to app/assets/images/emoji/mountain_bicyclist_tone5.png diff --git a/public/-/emojis/1/mountain_cableway.png b/app/assets/images/emoji/mountain_cableway.png similarity index 100% rename from public/-/emojis/1/mountain_cableway.png rename to app/assets/images/emoji/mountain_cableway.png diff --git a/public/-/emojis/1/mountain_railway.png b/app/assets/images/emoji/mountain_railway.png similarity index 100% rename from public/-/emojis/1/mountain_railway.png rename to app/assets/images/emoji/mountain_railway.png diff --git a/public/-/emojis/1/mountain_snow.png b/app/assets/images/emoji/mountain_snow.png similarity index 100% rename from public/-/emojis/1/mountain_snow.png rename to app/assets/images/emoji/mountain_snow.png diff --git a/public/-/emojis/1/mouse.png b/app/assets/images/emoji/mouse.png similarity index 100% rename from public/-/emojis/1/mouse.png rename to app/assets/images/emoji/mouse.png diff --git a/public/-/emojis/1/mouse2.png b/app/assets/images/emoji/mouse2.png similarity index 100% rename from public/-/emojis/1/mouse2.png rename to app/assets/images/emoji/mouse2.png diff --git a/public/-/emojis/1/mouse_three_button.png b/app/assets/images/emoji/mouse_three_button.png similarity index 100% rename from public/-/emojis/1/mouse_three_button.png rename to app/assets/images/emoji/mouse_three_button.png diff --git a/public/-/emojis/1/movie_camera.png b/app/assets/images/emoji/movie_camera.png similarity index 100% rename from public/-/emojis/1/movie_camera.png rename to app/assets/images/emoji/movie_camera.png diff --git a/public/-/emojis/1/moyai.png b/app/assets/images/emoji/moyai.png similarity index 100% rename from public/-/emojis/1/moyai.png rename to app/assets/images/emoji/moyai.png diff --git a/public/-/emojis/1/mrs_claus.png b/app/assets/images/emoji/mrs_claus.png similarity index 100% rename from public/-/emojis/1/mrs_claus.png rename to app/assets/images/emoji/mrs_claus.png diff --git a/public/-/emojis/1/mrs_claus_tone1.png b/app/assets/images/emoji/mrs_claus_tone1.png similarity index 100% rename from public/-/emojis/1/mrs_claus_tone1.png rename to app/assets/images/emoji/mrs_claus_tone1.png diff --git a/public/-/emojis/1/mrs_claus_tone2.png b/app/assets/images/emoji/mrs_claus_tone2.png similarity index 100% rename from public/-/emojis/1/mrs_claus_tone2.png rename to app/assets/images/emoji/mrs_claus_tone2.png diff --git a/public/-/emojis/1/mrs_claus_tone3.png b/app/assets/images/emoji/mrs_claus_tone3.png similarity index 100% rename from public/-/emojis/1/mrs_claus_tone3.png rename to app/assets/images/emoji/mrs_claus_tone3.png diff --git a/public/-/emojis/1/mrs_claus_tone4.png b/app/assets/images/emoji/mrs_claus_tone4.png similarity index 100% rename from public/-/emojis/1/mrs_claus_tone4.png rename to app/assets/images/emoji/mrs_claus_tone4.png diff --git a/public/-/emojis/1/mrs_claus_tone5.png b/app/assets/images/emoji/mrs_claus_tone5.png similarity index 100% rename from public/-/emojis/1/mrs_claus_tone5.png rename to app/assets/images/emoji/mrs_claus_tone5.png diff --git a/public/-/emojis/1/muscle.png b/app/assets/images/emoji/muscle.png similarity index 100% rename from public/-/emojis/1/muscle.png rename to app/assets/images/emoji/muscle.png diff --git a/public/-/emojis/1/muscle_tone1.png b/app/assets/images/emoji/muscle_tone1.png similarity index 100% rename from public/-/emojis/1/muscle_tone1.png rename to app/assets/images/emoji/muscle_tone1.png diff --git a/public/-/emojis/1/muscle_tone2.png b/app/assets/images/emoji/muscle_tone2.png similarity index 100% rename from public/-/emojis/1/muscle_tone2.png rename to app/assets/images/emoji/muscle_tone2.png diff --git a/public/-/emojis/1/muscle_tone3.png b/app/assets/images/emoji/muscle_tone3.png similarity index 100% rename from public/-/emojis/1/muscle_tone3.png rename to app/assets/images/emoji/muscle_tone3.png diff --git a/public/-/emojis/1/muscle_tone4.png b/app/assets/images/emoji/muscle_tone4.png similarity index 100% rename from public/-/emojis/1/muscle_tone4.png rename to app/assets/images/emoji/muscle_tone4.png diff --git a/public/-/emojis/1/muscle_tone5.png b/app/assets/images/emoji/muscle_tone5.png similarity index 100% rename from public/-/emojis/1/muscle_tone5.png rename to app/assets/images/emoji/muscle_tone5.png diff --git a/public/-/emojis/1/mushroom.png b/app/assets/images/emoji/mushroom.png similarity index 100% rename from public/-/emojis/1/mushroom.png rename to app/assets/images/emoji/mushroom.png diff --git a/public/-/emojis/1/musical_keyboard.png b/app/assets/images/emoji/musical_keyboard.png similarity index 100% rename from public/-/emojis/1/musical_keyboard.png rename to app/assets/images/emoji/musical_keyboard.png diff --git a/public/-/emojis/1/musical_note.png b/app/assets/images/emoji/musical_note.png similarity index 100% rename from public/-/emojis/1/musical_note.png rename to app/assets/images/emoji/musical_note.png diff --git a/public/-/emojis/1/musical_score.png b/app/assets/images/emoji/musical_score.png similarity index 100% rename from public/-/emojis/1/musical_score.png rename to app/assets/images/emoji/musical_score.png diff --git a/public/-/emojis/1/mute.png b/app/assets/images/emoji/mute.png similarity index 100% rename from public/-/emojis/1/mute.png rename to app/assets/images/emoji/mute.png diff --git a/public/-/emojis/1/nail_care.png b/app/assets/images/emoji/nail_care.png similarity index 100% rename from public/-/emojis/1/nail_care.png rename to app/assets/images/emoji/nail_care.png diff --git a/public/-/emojis/1/nail_care_tone1.png b/app/assets/images/emoji/nail_care_tone1.png similarity index 100% rename from public/-/emojis/1/nail_care_tone1.png rename to app/assets/images/emoji/nail_care_tone1.png diff --git a/public/-/emojis/1/nail_care_tone2.png b/app/assets/images/emoji/nail_care_tone2.png similarity index 100% rename from public/-/emojis/1/nail_care_tone2.png rename to app/assets/images/emoji/nail_care_tone2.png diff --git a/public/-/emojis/1/nail_care_tone3.png b/app/assets/images/emoji/nail_care_tone3.png similarity index 100% rename from public/-/emojis/1/nail_care_tone3.png rename to app/assets/images/emoji/nail_care_tone3.png diff --git a/public/-/emojis/1/nail_care_tone4.png b/app/assets/images/emoji/nail_care_tone4.png similarity index 100% rename from public/-/emojis/1/nail_care_tone4.png rename to app/assets/images/emoji/nail_care_tone4.png diff --git a/public/-/emojis/1/nail_care_tone5.png b/app/assets/images/emoji/nail_care_tone5.png similarity index 100% rename from public/-/emojis/1/nail_care_tone5.png rename to app/assets/images/emoji/nail_care_tone5.png diff --git a/public/-/emojis/1/name_badge.png b/app/assets/images/emoji/name_badge.png similarity index 100% rename from public/-/emojis/1/name_badge.png rename to app/assets/images/emoji/name_badge.png diff --git a/public/-/emojis/1/nauseated_face.png b/app/assets/images/emoji/nauseated_face.png similarity index 100% rename from public/-/emojis/1/nauseated_face.png rename to app/assets/images/emoji/nauseated_face.png diff --git a/public/-/emojis/1/necktie.png b/app/assets/images/emoji/necktie.png similarity index 100% rename from public/-/emojis/1/necktie.png rename to app/assets/images/emoji/necktie.png diff --git a/public/-/emojis/1/negative_squared_cross_mark.png b/app/assets/images/emoji/negative_squared_cross_mark.png similarity index 100% rename from public/-/emojis/1/negative_squared_cross_mark.png rename to app/assets/images/emoji/negative_squared_cross_mark.png diff --git a/public/-/emojis/1/nerd.png b/app/assets/images/emoji/nerd.png similarity index 100% rename from public/-/emojis/1/nerd.png rename to app/assets/images/emoji/nerd.png diff --git a/public/-/emojis/1/neutral_face.png b/app/assets/images/emoji/neutral_face.png similarity index 100% rename from public/-/emojis/1/neutral_face.png rename to app/assets/images/emoji/neutral_face.png diff --git a/public/-/emojis/1/new.png b/app/assets/images/emoji/new.png similarity index 100% rename from public/-/emojis/1/new.png rename to app/assets/images/emoji/new.png diff --git a/public/-/emojis/1/new_moon.png b/app/assets/images/emoji/new_moon.png similarity index 100% rename from public/-/emojis/1/new_moon.png rename to app/assets/images/emoji/new_moon.png diff --git a/public/-/emojis/1/new_moon_with_face.png b/app/assets/images/emoji/new_moon_with_face.png similarity index 100% rename from public/-/emojis/1/new_moon_with_face.png rename to app/assets/images/emoji/new_moon_with_face.png diff --git a/public/-/emojis/1/newspaper.png b/app/assets/images/emoji/newspaper.png similarity index 100% rename from public/-/emojis/1/newspaper.png rename to app/assets/images/emoji/newspaper.png diff --git a/public/-/emojis/1/newspaper2.png b/app/assets/images/emoji/newspaper2.png similarity index 100% rename from public/-/emojis/1/newspaper2.png rename to app/assets/images/emoji/newspaper2.png diff --git a/public/-/emojis/1/ng.png b/app/assets/images/emoji/ng.png similarity index 100% rename from public/-/emojis/1/ng.png rename to app/assets/images/emoji/ng.png diff --git a/public/-/emojis/1/night_with_stars.png b/app/assets/images/emoji/night_with_stars.png similarity index 100% rename from public/-/emojis/1/night_with_stars.png rename to app/assets/images/emoji/night_with_stars.png diff --git a/public/-/emojis/1/nine.png b/app/assets/images/emoji/nine.png similarity index 100% rename from public/-/emojis/1/nine.png rename to app/assets/images/emoji/nine.png diff --git a/public/-/emojis/1/no_bell.png b/app/assets/images/emoji/no_bell.png similarity index 100% rename from public/-/emojis/1/no_bell.png rename to app/assets/images/emoji/no_bell.png diff --git a/public/-/emojis/1/no_bicycles.png b/app/assets/images/emoji/no_bicycles.png similarity index 100% rename from public/-/emojis/1/no_bicycles.png rename to app/assets/images/emoji/no_bicycles.png diff --git a/public/-/emojis/1/no_entry.png b/app/assets/images/emoji/no_entry.png similarity index 100% rename from public/-/emojis/1/no_entry.png rename to app/assets/images/emoji/no_entry.png diff --git a/public/-/emojis/1/no_entry_sign.png b/app/assets/images/emoji/no_entry_sign.png similarity index 100% rename from public/-/emojis/1/no_entry_sign.png rename to app/assets/images/emoji/no_entry_sign.png diff --git a/public/-/emojis/1/no_good.png b/app/assets/images/emoji/no_good.png similarity index 100% rename from public/-/emojis/1/no_good.png rename to app/assets/images/emoji/no_good.png diff --git a/public/-/emojis/1/no_good_tone1.png b/app/assets/images/emoji/no_good_tone1.png similarity index 100% rename from public/-/emojis/1/no_good_tone1.png rename to app/assets/images/emoji/no_good_tone1.png diff --git a/public/-/emojis/1/no_good_tone2.png b/app/assets/images/emoji/no_good_tone2.png similarity index 100% rename from public/-/emojis/1/no_good_tone2.png rename to app/assets/images/emoji/no_good_tone2.png diff --git a/public/-/emojis/1/no_good_tone3.png b/app/assets/images/emoji/no_good_tone3.png similarity index 100% rename from public/-/emojis/1/no_good_tone3.png rename to app/assets/images/emoji/no_good_tone3.png diff --git a/public/-/emojis/1/no_good_tone4.png b/app/assets/images/emoji/no_good_tone4.png similarity index 100% rename from public/-/emojis/1/no_good_tone4.png rename to app/assets/images/emoji/no_good_tone4.png diff --git a/public/-/emojis/1/no_good_tone5.png b/app/assets/images/emoji/no_good_tone5.png similarity index 100% rename from public/-/emojis/1/no_good_tone5.png rename to app/assets/images/emoji/no_good_tone5.png diff --git a/public/-/emojis/1/no_mobile_phones.png b/app/assets/images/emoji/no_mobile_phones.png similarity index 100% rename from public/-/emojis/1/no_mobile_phones.png rename to app/assets/images/emoji/no_mobile_phones.png diff --git a/public/-/emojis/1/no_mouth.png b/app/assets/images/emoji/no_mouth.png similarity index 100% rename from public/-/emojis/1/no_mouth.png rename to app/assets/images/emoji/no_mouth.png diff --git a/public/-/emojis/1/no_pedestrians.png b/app/assets/images/emoji/no_pedestrians.png similarity index 100% rename from public/-/emojis/1/no_pedestrians.png rename to app/assets/images/emoji/no_pedestrians.png diff --git a/public/-/emojis/1/no_smoking.png b/app/assets/images/emoji/no_smoking.png similarity index 100% rename from public/-/emojis/1/no_smoking.png rename to app/assets/images/emoji/no_smoking.png diff --git a/public/-/emojis/1/non-potable_water.png b/app/assets/images/emoji/non-potable_water.png similarity index 100% rename from public/-/emojis/1/non-potable_water.png rename to app/assets/images/emoji/non-potable_water.png diff --git a/public/-/emojis/1/nose.png b/app/assets/images/emoji/nose.png similarity index 100% rename from public/-/emojis/1/nose.png rename to app/assets/images/emoji/nose.png diff --git a/public/-/emojis/1/nose_tone1.png b/app/assets/images/emoji/nose_tone1.png similarity index 100% rename from public/-/emojis/1/nose_tone1.png rename to app/assets/images/emoji/nose_tone1.png diff --git a/public/-/emojis/1/nose_tone2.png b/app/assets/images/emoji/nose_tone2.png similarity index 100% rename from public/-/emojis/1/nose_tone2.png rename to app/assets/images/emoji/nose_tone2.png diff --git a/public/-/emojis/1/nose_tone3.png b/app/assets/images/emoji/nose_tone3.png similarity index 100% rename from public/-/emojis/1/nose_tone3.png rename to app/assets/images/emoji/nose_tone3.png diff --git a/public/-/emojis/1/nose_tone4.png b/app/assets/images/emoji/nose_tone4.png similarity index 100% rename from public/-/emojis/1/nose_tone4.png rename to app/assets/images/emoji/nose_tone4.png diff --git a/public/-/emojis/1/nose_tone5.png b/app/assets/images/emoji/nose_tone5.png similarity index 100% rename from public/-/emojis/1/nose_tone5.png rename to app/assets/images/emoji/nose_tone5.png diff --git a/public/-/emojis/1/notebook.png b/app/assets/images/emoji/notebook.png similarity index 100% rename from public/-/emojis/1/notebook.png rename to app/assets/images/emoji/notebook.png diff --git a/public/-/emojis/1/notebook_with_decorative_cover.png b/app/assets/images/emoji/notebook_with_decorative_cover.png similarity index 100% rename from public/-/emojis/1/notebook_with_decorative_cover.png rename to app/assets/images/emoji/notebook_with_decorative_cover.png diff --git a/public/-/emojis/1/notepad_spiral.png b/app/assets/images/emoji/notepad_spiral.png similarity index 100% rename from public/-/emojis/1/notepad_spiral.png rename to app/assets/images/emoji/notepad_spiral.png diff --git a/public/-/emojis/1/notes.png b/app/assets/images/emoji/notes.png similarity index 100% rename from public/-/emojis/1/notes.png rename to app/assets/images/emoji/notes.png diff --git a/public/-/emojis/1/nut_and_bolt.png b/app/assets/images/emoji/nut_and_bolt.png similarity index 100% rename from public/-/emojis/1/nut_and_bolt.png rename to app/assets/images/emoji/nut_and_bolt.png diff --git a/public/-/emojis/1/o.png b/app/assets/images/emoji/o.png similarity index 100% rename from public/-/emojis/1/o.png rename to app/assets/images/emoji/o.png diff --git a/public/-/emojis/1/o2.png b/app/assets/images/emoji/o2.png similarity index 100% rename from public/-/emojis/1/o2.png rename to app/assets/images/emoji/o2.png diff --git a/public/-/emojis/1/ocean.png b/app/assets/images/emoji/ocean.png similarity index 100% rename from public/-/emojis/1/ocean.png rename to app/assets/images/emoji/ocean.png diff --git a/public/-/emojis/1/octagonal_sign.png b/app/assets/images/emoji/octagonal_sign.png similarity index 100% rename from public/-/emojis/1/octagonal_sign.png rename to app/assets/images/emoji/octagonal_sign.png diff --git a/public/-/emojis/1/octopus.png b/app/assets/images/emoji/octopus.png similarity index 100% rename from public/-/emojis/1/octopus.png rename to app/assets/images/emoji/octopus.png diff --git a/public/-/emojis/1/oden.png b/app/assets/images/emoji/oden.png similarity index 100% rename from public/-/emojis/1/oden.png rename to app/assets/images/emoji/oden.png diff --git a/public/-/emojis/1/office.png b/app/assets/images/emoji/office.png similarity index 100% rename from public/-/emojis/1/office.png rename to app/assets/images/emoji/office.png diff --git a/public/-/emojis/1/oil.png b/app/assets/images/emoji/oil.png similarity index 100% rename from public/-/emojis/1/oil.png rename to app/assets/images/emoji/oil.png diff --git a/public/-/emojis/1/ok.png b/app/assets/images/emoji/ok.png similarity index 100% rename from public/-/emojis/1/ok.png rename to app/assets/images/emoji/ok.png diff --git a/public/-/emojis/1/ok_hand.png b/app/assets/images/emoji/ok_hand.png similarity index 100% rename from public/-/emojis/1/ok_hand.png rename to app/assets/images/emoji/ok_hand.png diff --git a/public/-/emojis/1/ok_hand_tone1.png b/app/assets/images/emoji/ok_hand_tone1.png similarity index 100% rename from public/-/emojis/1/ok_hand_tone1.png rename to app/assets/images/emoji/ok_hand_tone1.png diff --git a/public/-/emojis/1/ok_hand_tone2.png b/app/assets/images/emoji/ok_hand_tone2.png similarity index 100% rename from public/-/emojis/1/ok_hand_tone2.png rename to app/assets/images/emoji/ok_hand_tone2.png diff --git a/public/-/emojis/1/ok_hand_tone3.png b/app/assets/images/emoji/ok_hand_tone3.png similarity index 100% rename from public/-/emojis/1/ok_hand_tone3.png rename to app/assets/images/emoji/ok_hand_tone3.png diff --git a/public/-/emojis/1/ok_hand_tone4.png b/app/assets/images/emoji/ok_hand_tone4.png similarity index 100% rename from public/-/emojis/1/ok_hand_tone4.png rename to app/assets/images/emoji/ok_hand_tone4.png diff --git a/public/-/emojis/1/ok_hand_tone5.png b/app/assets/images/emoji/ok_hand_tone5.png similarity index 100% rename from public/-/emojis/1/ok_hand_tone5.png rename to app/assets/images/emoji/ok_hand_tone5.png diff --git a/public/-/emojis/1/ok_woman.png b/app/assets/images/emoji/ok_woman.png similarity index 100% rename from public/-/emojis/1/ok_woman.png rename to app/assets/images/emoji/ok_woman.png diff --git a/public/-/emojis/1/ok_woman_tone1.png b/app/assets/images/emoji/ok_woman_tone1.png similarity index 100% rename from public/-/emojis/1/ok_woman_tone1.png rename to app/assets/images/emoji/ok_woman_tone1.png diff --git a/public/-/emojis/1/ok_woman_tone2.png b/app/assets/images/emoji/ok_woman_tone2.png similarity index 100% rename from public/-/emojis/1/ok_woman_tone2.png rename to app/assets/images/emoji/ok_woman_tone2.png diff --git a/public/-/emojis/1/ok_woman_tone3.png b/app/assets/images/emoji/ok_woman_tone3.png similarity index 100% rename from public/-/emojis/1/ok_woman_tone3.png rename to app/assets/images/emoji/ok_woman_tone3.png diff --git a/public/-/emojis/1/ok_woman_tone4.png b/app/assets/images/emoji/ok_woman_tone4.png similarity index 100% rename from public/-/emojis/1/ok_woman_tone4.png rename to app/assets/images/emoji/ok_woman_tone4.png diff --git a/public/-/emojis/1/ok_woman_tone5.png b/app/assets/images/emoji/ok_woman_tone5.png similarity index 100% rename from public/-/emojis/1/ok_woman_tone5.png rename to app/assets/images/emoji/ok_woman_tone5.png diff --git a/public/-/emojis/1/older_man.png b/app/assets/images/emoji/older_man.png similarity index 100% rename from public/-/emojis/1/older_man.png rename to app/assets/images/emoji/older_man.png diff --git a/public/-/emojis/1/older_man_tone1.png b/app/assets/images/emoji/older_man_tone1.png similarity index 100% rename from public/-/emojis/1/older_man_tone1.png rename to app/assets/images/emoji/older_man_tone1.png diff --git a/public/-/emojis/1/older_man_tone2.png b/app/assets/images/emoji/older_man_tone2.png similarity index 100% rename from public/-/emojis/1/older_man_tone2.png rename to app/assets/images/emoji/older_man_tone2.png diff --git a/public/-/emojis/1/older_man_tone3.png b/app/assets/images/emoji/older_man_tone3.png similarity index 100% rename from public/-/emojis/1/older_man_tone3.png rename to app/assets/images/emoji/older_man_tone3.png diff --git a/public/-/emojis/1/older_man_tone4.png b/app/assets/images/emoji/older_man_tone4.png similarity index 100% rename from public/-/emojis/1/older_man_tone4.png rename to app/assets/images/emoji/older_man_tone4.png diff --git a/public/-/emojis/1/older_man_tone5.png b/app/assets/images/emoji/older_man_tone5.png similarity index 100% rename from public/-/emojis/1/older_man_tone5.png rename to app/assets/images/emoji/older_man_tone5.png diff --git a/public/-/emojis/1/older_woman.png b/app/assets/images/emoji/older_woman.png similarity index 100% rename from public/-/emojis/1/older_woman.png rename to app/assets/images/emoji/older_woman.png diff --git a/public/-/emojis/1/older_woman_tone1.png b/app/assets/images/emoji/older_woman_tone1.png similarity index 100% rename from public/-/emojis/1/older_woman_tone1.png rename to app/assets/images/emoji/older_woman_tone1.png diff --git a/public/-/emojis/1/older_woman_tone2.png b/app/assets/images/emoji/older_woman_tone2.png similarity index 100% rename from public/-/emojis/1/older_woman_tone2.png rename to app/assets/images/emoji/older_woman_tone2.png diff --git a/public/-/emojis/1/older_woman_tone3.png b/app/assets/images/emoji/older_woman_tone3.png similarity index 100% rename from public/-/emojis/1/older_woman_tone3.png rename to app/assets/images/emoji/older_woman_tone3.png diff --git a/public/-/emojis/1/older_woman_tone4.png b/app/assets/images/emoji/older_woman_tone4.png similarity index 100% rename from public/-/emojis/1/older_woman_tone4.png rename to app/assets/images/emoji/older_woman_tone4.png diff --git a/public/-/emojis/1/older_woman_tone5.png b/app/assets/images/emoji/older_woman_tone5.png similarity index 100% rename from public/-/emojis/1/older_woman_tone5.png rename to app/assets/images/emoji/older_woman_tone5.png diff --git a/public/-/emojis/1/om_symbol.png b/app/assets/images/emoji/om_symbol.png similarity index 100% rename from public/-/emojis/1/om_symbol.png rename to app/assets/images/emoji/om_symbol.png diff --git a/public/-/emojis/1/on.png b/app/assets/images/emoji/on.png similarity index 100% rename from public/-/emojis/1/on.png rename to app/assets/images/emoji/on.png diff --git a/public/-/emojis/1/oncoming_automobile.png b/app/assets/images/emoji/oncoming_automobile.png similarity index 100% rename from public/-/emojis/1/oncoming_automobile.png rename to app/assets/images/emoji/oncoming_automobile.png diff --git a/public/-/emojis/1/oncoming_bus.png b/app/assets/images/emoji/oncoming_bus.png similarity index 100% rename from public/-/emojis/1/oncoming_bus.png rename to app/assets/images/emoji/oncoming_bus.png diff --git a/public/-/emojis/1/oncoming_police_car.png b/app/assets/images/emoji/oncoming_police_car.png similarity index 100% rename from public/-/emojis/1/oncoming_police_car.png rename to app/assets/images/emoji/oncoming_police_car.png diff --git a/public/-/emojis/1/oncoming_taxi.png b/app/assets/images/emoji/oncoming_taxi.png similarity index 100% rename from public/-/emojis/1/oncoming_taxi.png rename to app/assets/images/emoji/oncoming_taxi.png diff --git a/public/-/emojis/1/one.png b/app/assets/images/emoji/one.png similarity index 100% rename from public/-/emojis/1/one.png rename to app/assets/images/emoji/one.png diff --git a/public/-/emojis/1/open_file_folder.png b/app/assets/images/emoji/open_file_folder.png similarity index 100% rename from public/-/emojis/1/open_file_folder.png rename to app/assets/images/emoji/open_file_folder.png diff --git a/public/-/emojis/1/open_hands.png b/app/assets/images/emoji/open_hands.png similarity index 100% rename from public/-/emojis/1/open_hands.png rename to app/assets/images/emoji/open_hands.png diff --git a/public/-/emojis/1/open_hands_tone1.png b/app/assets/images/emoji/open_hands_tone1.png similarity index 100% rename from public/-/emojis/1/open_hands_tone1.png rename to app/assets/images/emoji/open_hands_tone1.png diff --git a/public/-/emojis/1/open_hands_tone2.png b/app/assets/images/emoji/open_hands_tone2.png similarity index 100% rename from public/-/emojis/1/open_hands_tone2.png rename to app/assets/images/emoji/open_hands_tone2.png diff --git a/public/-/emojis/1/open_hands_tone3.png b/app/assets/images/emoji/open_hands_tone3.png similarity index 100% rename from public/-/emojis/1/open_hands_tone3.png rename to app/assets/images/emoji/open_hands_tone3.png diff --git a/public/-/emojis/1/open_hands_tone4.png b/app/assets/images/emoji/open_hands_tone4.png similarity index 100% rename from public/-/emojis/1/open_hands_tone4.png rename to app/assets/images/emoji/open_hands_tone4.png diff --git a/public/-/emojis/1/open_hands_tone5.png b/app/assets/images/emoji/open_hands_tone5.png similarity index 100% rename from public/-/emojis/1/open_hands_tone5.png rename to app/assets/images/emoji/open_hands_tone5.png diff --git a/public/-/emojis/1/open_mouth.png b/app/assets/images/emoji/open_mouth.png similarity index 100% rename from public/-/emojis/1/open_mouth.png rename to app/assets/images/emoji/open_mouth.png diff --git a/public/-/emojis/1/ophiuchus.png b/app/assets/images/emoji/ophiuchus.png similarity index 100% rename from public/-/emojis/1/ophiuchus.png rename to app/assets/images/emoji/ophiuchus.png diff --git a/public/-/emojis/1/orange_book.png b/app/assets/images/emoji/orange_book.png similarity index 100% rename from public/-/emojis/1/orange_book.png rename to app/assets/images/emoji/orange_book.png diff --git a/public/-/emojis/1/orthodox_cross.png b/app/assets/images/emoji/orthodox_cross.png similarity index 100% rename from public/-/emojis/1/orthodox_cross.png rename to app/assets/images/emoji/orthodox_cross.png diff --git a/public/-/emojis/1/outbox_tray.png b/app/assets/images/emoji/outbox_tray.png similarity index 100% rename from public/-/emojis/1/outbox_tray.png rename to app/assets/images/emoji/outbox_tray.png diff --git a/public/-/emojis/1/owl.png b/app/assets/images/emoji/owl.png similarity index 100% rename from public/-/emojis/1/owl.png rename to app/assets/images/emoji/owl.png diff --git a/public/-/emojis/1/ox.png b/app/assets/images/emoji/ox.png similarity index 100% rename from public/-/emojis/1/ox.png rename to app/assets/images/emoji/ox.png diff --git a/public/-/emojis/1/package.png b/app/assets/images/emoji/package.png similarity index 100% rename from public/-/emojis/1/package.png rename to app/assets/images/emoji/package.png diff --git a/public/-/emojis/1/page_facing_up.png b/app/assets/images/emoji/page_facing_up.png similarity index 100% rename from public/-/emojis/1/page_facing_up.png rename to app/assets/images/emoji/page_facing_up.png diff --git a/public/-/emojis/1/page_with_curl.png b/app/assets/images/emoji/page_with_curl.png similarity index 100% rename from public/-/emojis/1/page_with_curl.png rename to app/assets/images/emoji/page_with_curl.png diff --git a/public/-/emojis/1/pager.png b/app/assets/images/emoji/pager.png similarity index 100% rename from public/-/emojis/1/pager.png rename to app/assets/images/emoji/pager.png diff --git a/public/-/emojis/1/paintbrush.png b/app/assets/images/emoji/paintbrush.png similarity index 100% rename from public/-/emojis/1/paintbrush.png rename to app/assets/images/emoji/paintbrush.png diff --git a/public/-/emojis/1/palm_tree.png b/app/assets/images/emoji/palm_tree.png similarity index 100% rename from public/-/emojis/1/palm_tree.png rename to app/assets/images/emoji/palm_tree.png diff --git a/public/-/emojis/1/pancakes.png b/app/assets/images/emoji/pancakes.png similarity index 100% rename from public/-/emojis/1/pancakes.png rename to app/assets/images/emoji/pancakes.png diff --git a/public/-/emojis/1/panda_face.png b/app/assets/images/emoji/panda_face.png similarity index 100% rename from public/-/emojis/1/panda_face.png rename to app/assets/images/emoji/panda_face.png diff --git a/public/-/emojis/1/paperclip.png b/app/assets/images/emoji/paperclip.png similarity index 100% rename from public/-/emojis/1/paperclip.png rename to app/assets/images/emoji/paperclip.png diff --git a/public/-/emojis/1/paperclips.png b/app/assets/images/emoji/paperclips.png similarity index 100% rename from public/-/emojis/1/paperclips.png rename to app/assets/images/emoji/paperclips.png diff --git a/public/-/emojis/1/park.png b/app/assets/images/emoji/park.png similarity index 100% rename from public/-/emojis/1/park.png rename to app/assets/images/emoji/park.png diff --git a/public/-/emojis/1/parking.png b/app/assets/images/emoji/parking.png similarity index 100% rename from public/-/emojis/1/parking.png rename to app/assets/images/emoji/parking.png diff --git a/public/-/emojis/1/part_alternation_mark.png b/app/assets/images/emoji/part_alternation_mark.png similarity index 100% rename from public/-/emojis/1/part_alternation_mark.png rename to app/assets/images/emoji/part_alternation_mark.png diff --git a/public/-/emojis/1/partly_sunny.png b/app/assets/images/emoji/partly_sunny.png similarity index 100% rename from public/-/emojis/1/partly_sunny.png rename to app/assets/images/emoji/partly_sunny.png diff --git a/public/-/emojis/1/passport_control.png b/app/assets/images/emoji/passport_control.png similarity index 100% rename from public/-/emojis/1/passport_control.png rename to app/assets/images/emoji/passport_control.png diff --git a/public/-/emojis/1/pause_button.png b/app/assets/images/emoji/pause_button.png similarity index 100% rename from public/-/emojis/1/pause_button.png rename to app/assets/images/emoji/pause_button.png diff --git a/public/-/emojis/1/peace.png b/app/assets/images/emoji/peace.png similarity index 100% rename from public/-/emojis/1/peace.png rename to app/assets/images/emoji/peace.png diff --git a/public/-/emojis/1/peach.png b/app/assets/images/emoji/peach.png similarity index 100% rename from public/-/emojis/1/peach.png rename to app/assets/images/emoji/peach.png diff --git a/public/-/emojis/1/peanuts.png b/app/assets/images/emoji/peanuts.png similarity index 100% rename from public/-/emojis/1/peanuts.png rename to app/assets/images/emoji/peanuts.png diff --git a/public/-/emojis/1/pear.png b/app/assets/images/emoji/pear.png similarity index 100% rename from public/-/emojis/1/pear.png rename to app/assets/images/emoji/pear.png diff --git a/public/-/emojis/1/pen_ballpoint.png b/app/assets/images/emoji/pen_ballpoint.png similarity index 100% rename from public/-/emojis/1/pen_ballpoint.png rename to app/assets/images/emoji/pen_ballpoint.png diff --git a/public/-/emojis/1/pen_fountain.png b/app/assets/images/emoji/pen_fountain.png similarity index 100% rename from public/-/emojis/1/pen_fountain.png rename to app/assets/images/emoji/pen_fountain.png diff --git a/public/-/emojis/1/pencil.png b/app/assets/images/emoji/pencil.png similarity index 100% rename from public/-/emojis/1/pencil.png rename to app/assets/images/emoji/pencil.png diff --git a/public/-/emojis/1/pencil2.png b/app/assets/images/emoji/pencil2.png similarity index 100% rename from public/-/emojis/1/pencil2.png rename to app/assets/images/emoji/pencil2.png diff --git a/public/-/emojis/1/penguin.png b/app/assets/images/emoji/penguin.png similarity index 100% rename from public/-/emojis/1/penguin.png rename to app/assets/images/emoji/penguin.png diff --git a/public/-/emojis/1/pensive.png b/app/assets/images/emoji/pensive.png similarity index 100% rename from public/-/emojis/1/pensive.png rename to app/assets/images/emoji/pensive.png diff --git a/public/-/emojis/1/performing_arts.png b/app/assets/images/emoji/performing_arts.png similarity index 100% rename from public/-/emojis/1/performing_arts.png rename to app/assets/images/emoji/performing_arts.png diff --git a/public/-/emojis/1/persevere.png b/app/assets/images/emoji/persevere.png similarity index 100% rename from public/-/emojis/1/persevere.png rename to app/assets/images/emoji/persevere.png diff --git a/public/-/emojis/1/person_frowning.png b/app/assets/images/emoji/person_frowning.png similarity index 100% rename from public/-/emojis/1/person_frowning.png rename to app/assets/images/emoji/person_frowning.png diff --git a/public/-/emojis/1/person_frowning_tone1.png b/app/assets/images/emoji/person_frowning_tone1.png similarity index 100% rename from public/-/emojis/1/person_frowning_tone1.png rename to app/assets/images/emoji/person_frowning_tone1.png diff --git a/public/-/emojis/1/person_frowning_tone2.png b/app/assets/images/emoji/person_frowning_tone2.png similarity index 100% rename from public/-/emojis/1/person_frowning_tone2.png rename to app/assets/images/emoji/person_frowning_tone2.png diff --git a/public/-/emojis/1/person_frowning_tone3.png b/app/assets/images/emoji/person_frowning_tone3.png similarity index 100% rename from public/-/emojis/1/person_frowning_tone3.png rename to app/assets/images/emoji/person_frowning_tone3.png diff --git a/public/-/emojis/1/person_frowning_tone4.png b/app/assets/images/emoji/person_frowning_tone4.png similarity index 100% rename from public/-/emojis/1/person_frowning_tone4.png rename to app/assets/images/emoji/person_frowning_tone4.png diff --git a/public/-/emojis/1/person_frowning_tone5.png b/app/assets/images/emoji/person_frowning_tone5.png similarity index 100% rename from public/-/emojis/1/person_frowning_tone5.png rename to app/assets/images/emoji/person_frowning_tone5.png diff --git a/public/-/emojis/1/person_with_blond_hair.png b/app/assets/images/emoji/person_with_blond_hair.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair.png rename to app/assets/images/emoji/person_with_blond_hair.png diff --git a/public/-/emojis/1/person_with_blond_hair_tone1.png b/app/assets/images/emoji/person_with_blond_hair_tone1.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair_tone1.png rename to app/assets/images/emoji/person_with_blond_hair_tone1.png diff --git a/public/-/emojis/1/person_with_blond_hair_tone2.png b/app/assets/images/emoji/person_with_blond_hair_tone2.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair_tone2.png rename to app/assets/images/emoji/person_with_blond_hair_tone2.png diff --git a/public/-/emojis/1/person_with_blond_hair_tone3.png b/app/assets/images/emoji/person_with_blond_hair_tone3.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair_tone3.png rename to app/assets/images/emoji/person_with_blond_hair_tone3.png diff --git a/public/-/emojis/1/person_with_blond_hair_tone4.png b/app/assets/images/emoji/person_with_blond_hair_tone4.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair_tone4.png rename to app/assets/images/emoji/person_with_blond_hair_tone4.png diff --git a/public/-/emojis/1/person_with_blond_hair_tone5.png b/app/assets/images/emoji/person_with_blond_hair_tone5.png similarity index 100% rename from public/-/emojis/1/person_with_blond_hair_tone5.png rename to app/assets/images/emoji/person_with_blond_hair_tone5.png diff --git a/public/-/emojis/1/person_with_pouting_face.png b/app/assets/images/emoji/person_with_pouting_face.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face.png rename to app/assets/images/emoji/person_with_pouting_face.png diff --git a/public/-/emojis/1/person_with_pouting_face_tone1.png b/app/assets/images/emoji/person_with_pouting_face_tone1.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face_tone1.png rename to app/assets/images/emoji/person_with_pouting_face_tone1.png diff --git a/public/-/emojis/1/person_with_pouting_face_tone2.png b/app/assets/images/emoji/person_with_pouting_face_tone2.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face_tone2.png rename to app/assets/images/emoji/person_with_pouting_face_tone2.png diff --git a/public/-/emojis/1/person_with_pouting_face_tone3.png b/app/assets/images/emoji/person_with_pouting_face_tone3.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face_tone3.png rename to app/assets/images/emoji/person_with_pouting_face_tone3.png diff --git a/public/-/emojis/1/person_with_pouting_face_tone4.png b/app/assets/images/emoji/person_with_pouting_face_tone4.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face_tone4.png rename to app/assets/images/emoji/person_with_pouting_face_tone4.png diff --git a/public/-/emojis/1/person_with_pouting_face_tone5.png b/app/assets/images/emoji/person_with_pouting_face_tone5.png similarity index 100% rename from public/-/emojis/1/person_with_pouting_face_tone5.png rename to app/assets/images/emoji/person_with_pouting_face_tone5.png diff --git a/public/-/emojis/1/pick.png b/app/assets/images/emoji/pick.png similarity index 100% rename from public/-/emojis/1/pick.png rename to app/assets/images/emoji/pick.png diff --git a/public/-/emojis/1/pig.png b/app/assets/images/emoji/pig.png similarity index 100% rename from public/-/emojis/1/pig.png rename to app/assets/images/emoji/pig.png diff --git a/public/-/emojis/1/pig2.png b/app/assets/images/emoji/pig2.png similarity index 100% rename from public/-/emojis/1/pig2.png rename to app/assets/images/emoji/pig2.png diff --git a/public/-/emojis/1/pig_nose.png b/app/assets/images/emoji/pig_nose.png similarity index 100% rename from public/-/emojis/1/pig_nose.png rename to app/assets/images/emoji/pig_nose.png diff --git a/public/-/emojis/1/pill.png b/app/assets/images/emoji/pill.png similarity index 100% rename from public/-/emojis/1/pill.png rename to app/assets/images/emoji/pill.png diff --git a/public/-/emojis/1/pineapple.png b/app/assets/images/emoji/pineapple.png similarity index 100% rename from public/-/emojis/1/pineapple.png rename to app/assets/images/emoji/pineapple.png diff --git a/public/-/emojis/1/ping_pong.png b/app/assets/images/emoji/ping_pong.png similarity index 100% rename from public/-/emojis/1/ping_pong.png rename to app/assets/images/emoji/ping_pong.png diff --git a/public/-/emojis/1/pisces.png b/app/assets/images/emoji/pisces.png similarity index 100% rename from public/-/emojis/1/pisces.png rename to app/assets/images/emoji/pisces.png diff --git a/public/-/emojis/1/pizza.png b/app/assets/images/emoji/pizza.png similarity index 100% rename from public/-/emojis/1/pizza.png rename to app/assets/images/emoji/pizza.png diff --git a/public/-/emojis/1/place_of_worship.png b/app/assets/images/emoji/place_of_worship.png similarity index 100% rename from public/-/emojis/1/place_of_worship.png rename to app/assets/images/emoji/place_of_worship.png diff --git a/public/-/emojis/1/play_pause.png b/app/assets/images/emoji/play_pause.png similarity index 100% rename from public/-/emojis/1/play_pause.png rename to app/assets/images/emoji/play_pause.png diff --git a/public/-/emojis/1/point_down.png b/app/assets/images/emoji/point_down.png similarity index 100% rename from public/-/emojis/1/point_down.png rename to app/assets/images/emoji/point_down.png diff --git a/public/-/emojis/1/point_down_tone1.png b/app/assets/images/emoji/point_down_tone1.png similarity index 100% rename from public/-/emojis/1/point_down_tone1.png rename to app/assets/images/emoji/point_down_tone1.png diff --git a/public/-/emojis/1/point_down_tone2.png b/app/assets/images/emoji/point_down_tone2.png similarity index 100% rename from public/-/emojis/1/point_down_tone2.png rename to app/assets/images/emoji/point_down_tone2.png diff --git a/public/-/emojis/1/point_down_tone3.png b/app/assets/images/emoji/point_down_tone3.png similarity index 100% rename from public/-/emojis/1/point_down_tone3.png rename to app/assets/images/emoji/point_down_tone3.png diff --git a/public/-/emojis/1/point_down_tone4.png b/app/assets/images/emoji/point_down_tone4.png similarity index 100% rename from public/-/emojis/1/point_down_tone4.png rename to app/assets/images/emoji/point_down_tone4.png diff --git a/public/-/emojis/1/point_down_tone5.png b/app/assets/images/emoji/point_down_tone5.png similarity index 100% rename from public/-/emojis/1/point_down_tone5.png rename to app/assets/images/emoji/point_down_tone5.png diff --git a/public/-/emojis/1/point_left.png b/app/assets/images/emoji/point_left.png similarity index 100% rename from public/-/emojis/1/point_left.png rename to app/assets/images/emoji/point_left.png diff --git a/public/-/emojis/1/point_left_tone1.png b/app/assets/images/emoji/point_left_tone1.png similarity index 100% rename from public/-/emojis/1/point_left_tone1.png rename to app/assets/images/emoji/point_left_tone1.png diff --git a/public/-/emojis/1/point_left_tone2.png b/app/assets/images/emoji/point_left_tone2.png similarity index 100% rename from public/-/emojis/1/point_left_tone2.png rename to app/assets/images/emoji/point_left_tone2.png diff --git a/public/-/emojis/1/point_left_tone3.png b/app/assets/images/emoji/point_left_tone3.png similarity index 100% rename from public/-/emojis/1/point_left_tone3.png rename to app/assets/images/emoji/point_left_tone3.png diff --git a/public/-/emojis/1/point_left_tone4.png b/app/assets/images/emoji/point_left_tone4.png similarity index 100% rename from public/-/emojis/1/point_left_tone4.png rename to app/assets/images/emoji/point_left_tone4.png diff --git a/public/-/emojis/1/point_left_tone5.png b/app/assets/images/emoji/point_left_tone5.png similarity index 100% rename from public/-/emojis/1/point_left_tone5.png rename to app/assets/images/emoji/point_left_tone5.png diff --git a/public/-/emojis/1/point_right.png b/app/assets/images/emoji/point_right.png similarity index 100% rename from public/-/emojis/1/point_right.png rename to app/assets/images/emoji/point_right.png diff --git a/public/-/emojis/1/point_right_tone1.png b/app/assets/images/emoji/point_right_tone1.png similarity index 100% rename from public/-/emojis/1/point_right_tone1.png rename to app/assets/images/emoji/point_right_tone1.png diff --git a/public/-/emojis/1/point_right_tone2.png b/app/assets/images/emoji/point_right_tone2.png similarity index 100% rename from public/-/emojis/1/point_right_tone2.png rename to app/assets/images/emoji/point_right_tone2.png diff --git a/public/-/emojis/1/point_right_tone3.png b/app/assets/images/emoji/point_right_tone3.png similarity index 100% rename from public/-/emojis/1/point_right_tone3.png rename to app/assets/images/emoji/point_right_tone3.png diff --git a/public/-/emojis/1/point_right_tone4.png b/app/assets/images/emoji/point_right_tone4.png similarity index 100% rename from public/-/emojis/1/point_right_tone4.png rename to app/assets/images/emoji/point_right_tone4.png diff --git a/public/-/emojis/1/point_right_tone5.png b/app/assets/images/emoji/point_right_tone5.png similarity index 100% rename from public/-/emojis/1/point_right_tone5.png rename to app/assets/images/emoji/point_right_tone5.png diff --git a/public/-/emojis/1/point_up.png b/app/assets/images/emoji/point_up.png similarity index 100% rename from public/-/emojis/1/point_up.png rename to app/assets/images/emoji/point_up.png diff --git a/public/-/emojis/1/point_up_2.png b/app/assets/images/emoji/point_up_2.png similarity index 100% rename from public/-/emojis/1/point_up_2.png rename to app/assets/images/emoji/point_up_2.png diff --git a/public/-/emojis/1/point_up_2_tone1.png b/app/assets/images/emoji/point_up_2_tone1.png similarity index 100% rename from public/-/emojis/1/point_up_2_tone1.png rename to app/assets/images/emoji/point_up_2_tone1.png diff --git a/public/-/emojis/1/point_up_2_tone2.png b/app/assets/images/emoji/point_up_2_tone2.png similarity index 100% rename from public/-/emojis/1/point_up_2_tone2.png rename to app/assets/images/emoji/point_up_2_tone2.png diff --git a/public/-/emojis/1/point_up_2_tone3.png b/app/assets/images/emoji/point_up_2_tone3.png similarity index 100% rename from public/-/emojis/1/point_up_2_tone3.png rename to app/assets/images/emoji/point_up_2_tone3.png diff --git a/public/-/emojis/1/point_up_2_tone4.png b/app/assets/images/emoji/point_up_2_tone4.png similarity index 100% rename from public/-/emojis/1/point_up_2_tone4.png rename to app/assets/images/emoji/point_up_2_tone4.png diff --git a/public/-/emojis/1/point_up_2_tone5.png b/app/assets/images/emoji/point_up_2_tone5.png similarity index 100% rename from public/-/emojis/1/point_up_2_tone5.png rename to app/assets/images/emoji/point_up_2_tone5.png diff --git a/public/-/emojis/1/point_up_tone1.png b/app/assets/images/emoji/point_up_tone1.png similarity index 100% rename from public/-/emojis/1/point_up_tone1.png rename to app/assets/images/emoji/point_up_tone1.png diff --git a/public/-/emojis/1/point_up_tone2.png b/app/assets/images/emoji/point_up_tone2.png similarity index 100% rename from public/-/emojis/1/point_up_tone2.png rename to app/assets/images/emoji/point_up_tone2.png diff --git a/public/-/emojis/1/point_up_tone3.png b/app/assets/images/emoji/point_up_tone3.png similarity index 100% rename from public/-/emojis/1/point_up_tone3.png rename to app/assets/images/emoji/point_up_tone3.png diff --git a/public/-/emojis/1/point_up_tone4.png b/app/assets/images/emoji/point_up_tone4.png similarity index 100% rename from public/-/emojis/1/point_up_tone4.png rename to app/assets/images/emoji/point_up_tone4.png diff --git a/public/-/emojis/1/point_up_tone5.png b/app/assets/images/emoji/point_up_tone5.png similarity index 100% rename from public/-/emojis/1/point_up_tone5.png rename to app/assets/images/emoji/point_up_tone5.png diff --git a/public/-/emojis/1/police_car.png b/app/assets/images/emoji/police_car.png similarity index 100% rename from public/-/emojis/1/police_car.png rename to app/assets/images/emoji/police_car.png diff --git a/public/-/emojis/1/poodle.png b/app/assets/images/emoji/poodle.png similarity index 100% rename from public/-/emojis/1/poodle.png rename to app/assets/images/emoji/poodle.png diff --git a/public/-/emojis/1/poop.png b/app/assets/images/emoji/poop.png similarity index 100% rename from public/-/emojis/1/poop.png rename to app/assets/images/emoji/poop.png diff --git a/public/-/emojis/1/popcorn.png b/app/assets/images/emoji/popcorn.png similarity index 100% rename from public/-/emojis/1/popcorn.png rename to app/assets/images/emoji/popcorn.png diff --git a/public/-/emojis/1/post_office.png b/app/assets/images/emoji/post_office.png similarity index 100% rename from public/-/emojis/1/post_office.png rename to app/assets/images/emoji/post_office.png diff --git a/public/-/emojis/1/postal_horn.png b/app/assets/images/emoji/postal_horn.png similarity index 100% rename from public/-/emojis/1/postal_horn.png rename to app/assets/images/emoji/postal_horn.png diff --git a/public/-/emojis/1/postbox.png b/app/assets/images/emoji/postbox.png similarity index 100% rename from public/-/emojis/1/postbox.png rename to app/assets/images/emoji/postbox.png diff --git a/public/-/emojis/1/potable_water.png b/app/assets/images/emoji/potable_water.png similarity index 100% rename from public/-/emojis/1/potable_water.png rename to app/assets/images/emoji/potable_water.png diff --git a/public/-/emojis/1/potato.png b/app/assets/images/emoji/potato.png similarity index 100% rename from public/-/emojis/1/potato.png rename to app/assets/images/emoji/potato.png diff --git a/public/-/emojis/1/pouch.png b/app/assets/images/emoji/pouch.png similarity index 100% rename from public/-/emojis/1/pouch.png rename to app/assets/images/emoji/pouch.png diff --git a/public/-/emojis/1/poultry_leg.png b/app/assets/images/emoji/poultry_leg.png similarity index 100% rename from public/-/emojis/1/poultry_leg.png rename to app/assets/images/emoji/poultry_leg.png diff --git a/public/-/emojis/1/pound.png b/app/assets/images/emoji/pound.png similarity index 100% rename from public/-/emojis/1/pound.png rename to app/assets/images/emoji/pound.png diff --git a/public/-/emojis/1/pouting_cat.png b/app/assets/images/emoji/pouting_cat.png similarity index 100% rename from public/-/emojis/1/pouting_cat.png rename to app/assets/images/emoji/pouting_cat.png diff --git a/public/-/emojis/1/pray.png b/app/assets/images/emoji/pray.png similarity index 100% rename from public/-/emojis/1/pray.png rename to app/assets/images/emoji/pray.png diff --git a/public/-/emojis/1/pray_tone1.png b/app/assets/images/emoji/pray_tone1.png similarity index 100% rename from public/-/emojis/1/pray_tone1.png rename to app/assets/images/emoji/pray_tone1.png diff --git a/public/-/emojis/1/pray_tone2.png b/app/assets/images/emoji/pray_tone2.png similarity index 100% rename from public/-/emojis/1/pray_tone2.png rename to app/assets/images/emoji/pray_tone2.png diff --git a/public/-/emojis/1/pray_tone3.png b/app/assets/images/emoji/pray_tone3.png similarity index 100% rename from public/-/emojis/1/pray_tone3.png rename to app/assets/images/emoji/pray_tone3.png diff --git a/public/-/emojis/1/pray_tone4.png b/app/assets/images/emoji/pray_tone4.png similarity index 100% rename from public/-/emojis/1/pray_tone4.png rename to app/assets/images/emoji/pray_tone4.png diff --git a/public/-/emojis/1/pray_tone5.png b/app/assets/images/emoji/pray_tone5.png similarity index 100% rename from public/-/emojis/1/pray_tone5.png rename to app/assets/images/emoji/pray_tone5.png diff --git a/public/-/emojis/1/prayer_beads.png b/app/assets/images/emoji/prayer_beads.png similarity index 100% rename from public/-/emojis/1/prayer_beads.png rename to app/assets/images/emoji/prayer_beads.png diff --git a/public/-/emojis/1/pregnant_woman.png b/app/assets/images/emoji/pregnant_woman.png similarity index 100% rename from public/-/emojis/1/pregnant_woman.png rename to app/assets/images/emoji/pregnant_woman.png diff --git a/public/-/emojis/1/pregnant_woman_tone1.png b/app/assets/images/emoji/pregnant_woman_tone1.png similarity index 100% rename from public/-/emojis/1/pregnant_woman_tone1.png rename to app/assets/images/emoji/pregnant_woman_tone1.png diff --git a/public/-/emojis/1/pregnant_woman_tone2.png b/app/assets/images/emoji/pregnant_woman_tone2.png similarity index 100% rename from public/-/emojis/1/pregnant_woman_tone2.png rename to app/assets/images/emoji/pregnant_woman_tone2.png diff --git a/public/-/emojis/1/pregnant_woman_tone3.png b/app/assets/images/emoji/pregnant_woman_tone3.png similarity index 100% rename from public/-/emojis/1/pregnant_woman_tone3.png rename to app/assets/images/emoji/pregnant_woman_tone3.png diff --git a/public/-/emojis/1/pregnant_woman_tone4.png b/app/assets/images/emoji/pregnant_woman_tone4.png similarity index 100% rename from public/-/emojis/1/pregnant_woman_tone4.png rename to app/assets/images/emoji/pregnant_woman_tone4.png diff --git a/public/-/emojis/1/pregnant_woman_tone5.png b/app/assets/images/emoji/pregnant_woman_tone5.png similarity index 100% rename from public/-/emojis/1/pregnant_woman_tone5.png rename to app/assets/images/emoji/pregnant_woman_tone5.png diff --git a/public/-/emojis/1/prince.png b/app/assets/images/emoji/prince.png similarity index 100% rename from public/-/emojis/1/prince.png rename to app/assets/images/emoji/prince.png diff --git a/public/-/emojis/1/prince_tone1.png b/app/assets/images/emoji/prince_tone1.png similarity index 100% rename from public/-/emojis/1/prince_tone1.png rename to app/assets/images/emoji/prince_tone1.png diff --git a/public/-/emojis/1/prince_tone2.png b/app/assets/images/emoji/prince_tone2.png similarity index 100% rename from public/-/emojis/1/prince_tone2.png rename to app/assets/images/emoji/prince_tone2.png diff --git a/public/-/emojis/1/prince_tone3.png b/app/assets/images/emoji/prince_tone3.png similarity index 100% rename from public/-/emojis/1/prince_tone3.png rename to app/assets/images/emoji/prince_tone3.png diff --git a/public/-/emojis/1/prince_tone4.png b/app/assets/images/emoji/prince_tone4.png similarity index 100% rename from public/-/emojis/1/prince_tone4.png rename to app/assets/images/emoji/prince_tone4.png diff --git a/public/-/emojis/1/prince_tone5.png b/app/assets/images/emoji/prince_tone5.png similarity index 100% rename from public/-/emojis/1/prince_tone5.png rename to app/assets/images/emoji/prince_tone5.png diff --git a/public/-/emojis/1/princess.png b/app/assets/images/emoji/princess.png similarity index 100% rename from public/-/emojis/1/princess.png rename to app/assets/images/emoji/princess.png diff --git a/public/-/emojis/1/princess_tone1.png b/app/assets/images/emoji/princess_tone1.png similarity index 100% rename from public/-/emojis/1/princess_tone1.png rename to app/assets/images/emoji/princess_tone1.png diff --git a/public/-/emojis/1/princess_tone2.png b/app/assets/images/emoji/princess_tone2.png similarity index 100% rename from public/-/emojis/1/princess_tone2.png rename to app/assets/images/emoji/princess_tone2.png diff --git a/public/-/emojis/1/princess_tone3.png b/app/assets/images/emoji/princess_tone3.png similarity index 100% rename from public/-/emojis/1/princess_tone3.png rename to app/assets/images/emoji/princess_tone3.png diff --git a/public/-/emojis/1/princess_tone4.png b/app/assets/images/emoji/princess_tone4.png similarity index 100% rename from public/-/emojis/1/princess_tone4.png rename to app/assets/images/emoji/princess_tone4.png diff --git a/public/-/emojis/1/princess_tone5.png b/app/assets/images/emoji/princess_tone5.png similarity index 100% rename from public/-/emojis/1/princess_tone5.png rename to app/assets/images/emoji/princess_tone5.png diff --git a/public/-/emojis/1/printer.png b/app/assets/images/emoji/printer.png similarity index 100% rename from public/-/emojis/1/printer.png rename to app/assets/images/emoji/printer.png diff --git a/public/-/emojis/1/projector.png b/app/assets/images/emoji/projector.png similarity index 100% rename from public/-/emojis/1/projector.png rename to app/assets/images/emoji/projector.png diff --git a/public/-/emojis/1/punch.png b/app/assets/images/emoji/punch.png similarity index 100% rename from public/-/emojis/1/punch.png rename to app/assets/images/emoji/punch.png diff --git a/public/-/emojis/1/punch_tone1.png b/app/assets/images/emoji/punch_tone1.png similarity index 100% rename from public/-/emojis/1/punch_tone1.png rename to app/assets/images/emoji/punch_tone1.png diff --git a/public/-/emojis/1/punch_tone2.png b/app/assets/images/emoji/punch_tone2.png similarity index 100% rename from public/-/emojis/1/punch_tone2.png rename to app/assets/images/emoji/punch_tone2.png diff --git a/public/-/emojis/1/punch_tone3.png b/app/assets/images/emoji/punch_tone3.png similarity index 100% rename from public/-/emojis/1/punch_tone3.png rename to app/assets/images/emoji/punch_tone3.png diff --git a/public/-/emojis/1/punch_tone4.png b/app/assets/images/emoji/punch_tone4.png similarity index 100% rename from public/-/emojis/1/punch_tone4.png rename to app/assets/images/emoji/punch_tone4.png diff --git a/public/-/emojis/1/punch_tone5.png b/app/assets/images/emoji/punch_tone5.png similarity index 100% rename from public/-/emojis/1/punch_tone5.png rename to app/assets/images/emoji/punch_tone5.png diff --git a/public/-/emojis/1/purple_heart.png b/app/assets/images/emoji/purple_heart.png similarity index 100% rename from public/-/emojis/1/purple_heart.png rename to app/assets/images/emoji/purple_heart.png diff --git a/public/-/emojis/1/purse.png b/app/assets/images/emoji/purse.png similarity index 100% rename from public/-/emojis/1/purse.png rename to app/assets/images/emoji/purse.png diff --git a/public/-/emojis/1/pushpin.png b/app/assets/images/emoji/pushpin.png similarity index 100% rename from public/-/emojis/1/pushpin.png rename to app/assets/images/emoji/pushpin.png diff --git a/public/-/emojis/1/put_litter_in_its_place.png b/app/assets/images/emoji/put_litter_in_its_place.png similarity index 100% rename from public/-/emojis/1/put_litter_in_its_place.png rename to app/assets/images/emoji/put_litter_in_its_place.png diff --git a/public/-/emojis/1/question.png b/app/assets/images/emoji/question.png similarity index 100% rename from public/-/emojis/1/question.png rename to app/assets/images/emoji/question.png diff --git a/public/-/emojis/1/rabbit.png b/app/assets/images/emoji/rabbit.png similarity index 100% rename from public/-/emojis/1/rabbit.png rename to app/assets/images/emoji/rabbit.png diff --git a/public/-/emojis/1/rabbit2.png b/app/assets/images/emoji/rabbit2.png similarity index 100% rename from public/-/emojis/1/rabbit2.png rename to app/assets/images/emoji/rabbit2.png diff --git a/public/-/emojis/1/race_car.png b/app/assets/images/emoji/race_car.png similarity index 100% rename from public/-/emojis/1/race_car.png rename to app/assets/images/emoji/race_car.png diff --git a/public/-/emojis/1/racehorse.png b/app/assets/images/emoji/racehorse.png similarity index 100% rename from public/-/emojis/1/racehorse.png rename to app/assets/images/emoji/racehorse.png diff --git a/public/-/emojis/1/radio.png b/app/assets/images/emoji/radio.png similarity index 100% rename from public/-/emojis/1/radio.png rename to app/assets/images/emoji/radio.png diff --git a/public/-/emojis/1/radio_button.png b/app/assets/images/emoji/radio_button.png similarity index 100% rename from public/-/emojis/1/radio_button.png rename to app/assets/images/emoji/radio_button.png diff --git a/public/-/emojis/1/radioactive.png b/app/assets/images/emoji/radioactive.png similarity index 100% rename from public/-/emojis/1/radioactive.png rename to app/assets/images/emoji/radioactive.png diff --git a/public/-/emojis/1/rage.png b/app/assets/images/emoji/rage.png similarity index 100% rename from public/-/emojis/1/rage.png rename to app/assets/images/emoji/rage.png diff --git a/public/-/emojis/1/railway_car.png b/app/assets/images/emoji/railway_car.png similarity index 100% rename from public/-/emojis/1/railway_car.png rename to app/assets/images/emoji/railway_car.png diff --git a/public/-/emojis/1/railway_track.png b/app/assets/images/emoji/railway_track.png similarity index 100% rename from public/-/emojis/1/railway_track.png rename to app/assets/images/emoji/railway_track.png diff --git a/public/-/emojis/1/rainbow.png b/app/assets/images/emoji/rainbow.png similarity index 100% rename from public/-/emojis/1/rainbow.png rename to app/assets/images/emoji/rainbow.png diff --git a/public/-/emojis/1/raised_back_of_hand.png b/app/assets/images/emoji/raised_back_of_hand.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand.png rename to app/assets/images/emoji/raised_back_of_hand.png diff --git a/public/-/emojis/1/raised_back_of_hand_tone1.png b/app/assets/images/emoji/raised_back_of_hand_tone1.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand_tone1.png rename to app/assets/images/emoji/raised_back_of_hand_tone1.png diff --git a/public/-/emojis/1/raised_back_of_hand_tone2.png b/app/assets/images/emoji/raised_back_of_hand_tone2.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand_tone2.png rename to app/assets/images/emoji/raised_back_of_hand_tone2.png diff --git a/public/-/emojis/1/raised_back_of_hand_tone3.png b/app/assets/images/emoji/raised_back_of_hand_tone3.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand_tone3.png rename to app/assets/images/emoji/raised_back_of_hand_tone3.png diff --git a/public/-/emojis/1/raised_back_of_hand_tone4.png b/app/assets/images/emoji/raised_back_of_hand_tone4.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand_tone4.png rename to app/assets/images/emoji/raised_back_of_hand_tone4.png diff --git a/public/-/emojis/1/raised_back_of_hand_tone5.png b/app/assets/images/emoji/raised_back_of_hand_tone5.png similarity index 100% rename from public/-/emojis/1/raised_back_of_hand_tone5.png rename to app/assets/images/emoji/raised_back_of_hand_tone5.png diff --git a/public/-/emojis/1/raised_hand.png b/app/assets/images/emoji/raised_hand.png similarity index 100% rename from public/-/emojis/1/raised_hand.png rename to app/assets/images/emoji/raised_hand.png diff --git a/public/-/emojis/1/raised_hand_tone1.png b/app/assets/images/emoji/raised_hand_tone1.png similarity index 100% rename from public/-/emojis/1/raised_hand_tone1.png rename to app/assets/images/emoji/raised_hand_tone1.png diff --git a/public/-/emojis/1/raised_hand_tone2.png b/app/assets/images/emoji/raised_hand_tone2.png similarity index 100% rename from public/-/emojis/1/raised_hand_tone2.png rename to app/assets/images/emoji/raised_hand_tone2.png diff --git a/public/-/emojis/1/raised_hand_tone3.png b/app/assets/images/emoji/raised_hand_tone3.png similarity index 100% rename from public/-/emojis/1/raised_hand_tone3.png rename to app/assets/images/emoji/raised_hand_tone3.png diff --git a/public/-/emojis/1/raised_hand_tone4.png b/app/assets/images/emoji/raised_hand_tone4.png similarity index 100% rename from public/-/emojis/1/raised_hand_tone4.png rename to app/assets/images/emoji/raised_hand_tone4.png diff --git a/public/-/emojis/1/raised_hand_tone5.png b/app/assets/images/emoji/raised_hand_tone5.png similarity index 100% rename from public/-/emojis/1/raised_hand_tone5.png rename to app/assets/images/emoji/raised_hand_tone5.png diff --git a/public/-/emojis/1/raised_hands.png b/app/assets/images/emoji/raised_hands.png similarity index 100% rename from public/-/emojis/1/raised_hands.png rename to app/assets/images/emoji/raised_hands.png diff --git a/public/-/emojis/1/raised_hands_tone1.png b/app/assets/images/emoji/raised_hands_tone1.png similarity index 100% rename from public/-/emojis/1/raised_hands_tone1.png rename to app/assets/images/emoji/raised_hands_tone1.png diff --git a/public/-/emojis/1/raised_hands_tone2.png b/app/assets/images/emoji/raised_hands_tone2.png similarity index 100% rename from public/-/emojis/1/raised_hands_tone2.png rename to app/assets/images/emoji/raised_hands_tone2.png diff --git a/public/-/emojis/1/raised_hands_tone3.png b/app/assets/images/emoji/raised_hands_tone3.png similarity index 100% rename from public/-/emojis/1/raised_hands_tone3.png rename to app/assets/images/emoji/raised_hands_tone3.png diff --git a/public/-/emojis/1/raised_hands_tone4.png b/app/assets/images/emoji/raised_hands_tone4.png similarity index 100% rename from public/-/emojis/1/raised_hands_tone4.png rename to app/assets/images/emoji/raised_hands_tone4.png diff --git a/public/-/emojis/1/raised_hands_tone5.png b/app/assets/images/emoji/raised_hands_tone5.png similarity index 100% rename from public/-/emojis/1/raised_hands_tone5.png rename to app/assets/images/emoji/raised_hands_tone5.png diff --git a/public/-/emojis/1/raising_hand.png b/app/assets/images/emoji/raising_hand.png similarity index 100% rename from public/-/emojis/1/raising_hand.png rename to app/assets/images/emoji/raising_hand.png diff --git a/public/-/emojis/1/raising_hand_tone1.png b/app/assets/images/emoji/raising_hand_tone1.png similarity index 100% rename from public/-/emojis/1/raising_hand_tone1.png rename to app/assets/images/emoji/raising_hand_tone1.png diff --git a/public/-/emojis/1/raising_hand_tone2.png b/app/assets/images/emoji/raising_hand_tone2.png similarity index 100% rename from public/-/emojis/1/raising_hand_tone2.png rename to app/assets/images/emoji/raising_hand_tone2.png diff --git a/public/-/emojis/1/raising_hand_tone3.png b/app/assets/images/emoji/raising_hand_tone3.png similarity index 100% rename from public/-/emojis/1/raising_hand_tone3.png rename to app/assets/images/emoji/raising_hand_tone3.png diff --git a/public/-/emojis/1/raising_hand_tone4.png b/app/assets/images/emoji/raising_hand_tone4.png similarity index 100% rename from public/-/emojis/1/raising_hand_tone4.png rename to app/assets/images/emoji/raising_hand_tone4.png diff --git a/public/-/emojis/1/raising_hand_tone5.png b/app/assets/images/emoji/raising_hand_tone5.png similarity index 100% rename from public/-/emojis/1/raising_hand_tone5.png rename to app/assets/images/emoji/raising_hand_tone5.png diff --git a/public/-/emojis/1/ram.png b/app/assets/images/emoji/ram.png similarity index 100% rename from public/-/emojis/1/ram.png rename to app/assets/images/emoji/ram.png diff --git a/public/-/emojis/1/ramen.png b/app/assets/images/emoji/ramen.png similarity index 100% rename from public/-/emojis/1/ramen.png rename to app/assets/images/emoji/ramen.png diff --git a/public/-/emojis/1/rat.png b/app/assets/images/emoji/rat.png similarity index 100% rename from public/-/emojis/1/rat.png rename to app/assets/images/emoji/rat.png diff --git a/public/-/emojis/1/record_button.png b/app/assets/images/emoji/record_button.png similarity index 100% rename from public/-/emojis/1/record_button.png rename to app/assets/images/emoji/record_button.png diff --git a/public/-/emojis/1/recycle.png b/app/assets/images/emoji/recycle.png similarity index 100% rename from public/-/emojis/1/recycle.png rename to app/assets/images/emoji/recycle.png diff --git a/public/-/emojis/1/red_car.png b/app/assets/images/emoji/red_car.png similarity index 100% rename from public/-/emojis/1/red_car.png rename to app/assets/images/emoji/red_car.png diff --git a/public/-/emojis/1/red_circle.png b/app/assets/images/emoji/red_circle.png similarity index 100% rename from public/-/emojis/1/red_circle.png rename to app/assets/images/emoji/red_circle.png diff --git a/public/-/emojis/1/registered.png b/app/assets/images/emoji/registered.png similarity index 100% rename from public/-/emojis/1/registered.png rename to app/assets/images/emoji/registered.png diff --git a/public/-/emojis/1/relaxed.png b/app/assets/images/emoji/relaxed.png similarity index 100% rename from public/-/emojis/1/relaxed.png rename to app/assets/images/emoji/relaxed.png diff --git a/public/-/emojis/1/relieved.png b/app/assets/images/emoji/relieved.png similarity index 100% rename from public/-/emojis/1/relieved.png rename to app/assets/images/emoji/relieved.png diff --git a/public/-/emojis/1/reminder_ribbon.png b/app/assets/images/emoji/reminder_ribbon.png similarity index 100% rename from public/-/emojis/1/reminder_ribbon.png rename to app/assets/images/emoji/reminder_ribbon.png diff --git a/public/-/emojis/1/repeat.png b/app/assets/images/emoji/repeat.png similarity index 100% rename from public/-/emojis/1/repeat.png rename to app/assets/images/emoji/repeat.png diff --git a/public/-/emojis/1/repeat_one.png b/app/assets/images/emoji/repeat_one.png similarity index 100% rename from public/-/emojis/1/repeat_one.png rename to app/assets/images/emoji/repeat_one.png diff --git a/public/-/emojis/1/restroom.png b/app/assets/images/emoji/restroom.png similarity index 100% rename from public/-/emojis/1/restroom.png rename to app/assets/images/emoji/restroom.png diff --git a/public/-/emojis/1/revolving_hearts.png b/app/assets/images/emoji/revolving_hearts.png similarity index 100% rename from public/-/emojis/1/revolving_hearts.png rename to app/assets/images/emoji/revolving_hearts.png diff --git a/public/-/emojis/1/rewind.png b/app/assets/images/emoji/rewind.png similarity index 100% rename from public/-/emojis/1/rewind.png rename to app/assets/images/emoji/rewind.png diff --git a/public/-/emojis/1/rhino.png b/app/assets/images/emoji/rhino.png similarity index 100% rename from public/-/emojis/1/rhino.png rename to app/assets/images/emoji/rhino.png diff --git a/public/-/emojis/1/ribbon.png b/app/assets/images/emoji/ribbon.png similarity index 100% rename from public/-/emojis/1/ribbon.png rename to app/assets/images/emoji/ribbon.png diff --git a/public/-/emojis/1/rice.png b/app/assets/images/emoji/rice.png similarity index 100% rename from public/-/emojis/1/rice.png rename to app/assets/images/emoji/rice.png diff --git a/public/-/emojis/1/rice_ball.png b/app/assets/images/emoji/rice_ball.png similarity index 100% rename from public/-/emojis/1/rice_ball.png rename to app/assets/images/emoji/rice_ball.png diff --git a/public/-/emojis/1/rice_cracker.png b/app/assets/images/emoji/rice_cracker.png similarity index 100% rename from public/-/emojis/1/rice_cracker.png rename to app/assets/images/emoji/rice_cracker.png diff --git a/public/-/emojis/1/rice_scene.png b/app/assets/images/emoji/rice_scene.png similarity index 100% rename from public/-/emojis/1/rice_scene.png rename to app/assets/images/emoji/rice_scene.png diff --git a/public/-/emojis/1/right_facing_fist.png b/app/assets/images/emoji/right_facing_fist.png similarity index 100% rename from public/-/emojis/1/right_facing_fist.png rename to app/assets/images/emoji/right_facing_fist.png diff --git a/public/-/emojis/1/right_facing_fist_tone1.png b/app/assets/images/emoji/right_facing_fist_tone1.png similarity index 100% rename from public/-/emojis/1/right_facing_fist_tone1.png rename to app/assets/images/emoji/right_facing_fist_tone1.png diff --git a/public/-/emojis/1/right_facing_fist_tone2.png b/app/assets/images/emoji/right_facing_fist_tone2.png similarity index 100% rename from public/-/emojis/1/right_facing_fist_tone2.png rename to app/assets/images/emoji/right_facing_fist_tone2.png diff --git a/public/-/emojis/1/right_facing_fist_tone3.png b/app/assets/images/emoji/right_facing_fist_tone3.png similarity index 100% rename from public/-/emojis/1/right_facing_fist_tone3.png rename to app/assets/images/emoji/right_facing_fist_tone3.png diff --git a/public/-/emojis/1/right_facing_fist_tone4.png b/app/assets/images/emoji/right_facing_fist_tone4.png similarity index 100% rename from public/-/emojis/1/right_facing_fist_tone4.png rename to app/assets/images/emoji/right_facing_fist_tone4.png diff --git a/public/-/emojis/1/right_facing_fist_tone5.png b/app/assets/images/emoji/right_facing_fist_tone5.png similarity index 100% rename from public/-/emojis/1/right_facing_fist_tone5.png rename to app/assets/images/emoji/right_facing_fist_tone5.png diff --git a/public/-/emojis/1/ring.png b/app/assets/images/emoji/ring.png similarity index 100% rename from public/-/emojis/1/ring.png rename to app/assets/images/emoji/ring.png diff --git a/public/-/emojis/1/robot.png b/app/assets/images/emoji/robot.png similarity index 100% rename from public/-/emojis/1/robot.png rename to app/assets/images/emoji/robot.png diff --git a/public/-/emojis/1/rocket.png b/app/assets/images/emoji/rocket.png similarity index 100% rename from public/-/emojis/1/rocket.png rename to app/assets/images/emoji/rocket.png diff --git a/public/-/emojis/1/rofl.png b/app/assets/images/emoji/rofl.png similarity index 100% rename from public/-/emojis/1/rofl.png rename to app/assets/images/emoji/rofl.png diff --git a/public/-/emojis/1/roller_coaster.png b/app/assets/images/emoji/roller_coaster.png similarity index 100% rename from public/-/emojis/1/roller_coaster.png rename to app/assets/images/emoji/roller_coaster.png diff --git a/public/-/emojis/1/rolling_eyes.png b/app/assets/images/emoji/rolling_eyes.png similarity index 100% rename from public/-/emojis/1/rolling_eyes.png rename to app/assets/images/emoji/rolling_eyes.png diff --git a/public/-/emojis/1/rooster.png b/app/assets/images/emoji/rooster.png similarity index 100% rename from public/-/emojis/1/rooster.png rename to app/assets/images/emoji/rooster.png diff --git a/public/-/emojis/1/rose.png b/app/assets/images/emoji/rose.png similarity index 100% rename from public/-/emojis/1/rose.png rename to app/assets/images/emoji/rose.png diff --git a/public/-/emojis/1/rosette.png b/app/assets/images/emoji/rosette.png similarity index 100% rename from public/-/emojis/1/rosette.png rename to app/assets/images/emoji/rosette.png diff --git a/public/-/emojis/1/rotating_light.png b/app/assets/images/emoji/rotating_light.png similarity index 100% rename from public/-/emojis/1/rotating_light.png rename to app/assets/images/emoji/rotating_light.png diff --git a/public/-/emojis/1/round_pushpin.png b/app/assets/images/emoji/round_pushpin.png similarity index 100% rename from public/-/emojis/1/round_pushpin.png rename to app/assets/images/emoji/round_pushpin.png diff --git a/public/-/emojis/1/rowboat.png b/app/assets/images/emoji/rowboat.png similarity index 100% rename from public/-/emojis/1/rowboat.png rename to app/assets/images/emoji/rowboat.png diff --git a/public/-/emojis/1/rowboat_tone1.png b/app/assets/images/emoji/rowboat_tone1.png similarity index 100% rename from public/-/emojis/1/rowboat_tone1.png rename to app/assets/images/emoji/rowboat_tone1.png diff --git a/public/-/emojis/1/rowboat_tone2.png b/app/assets/images/emoji/rowboat_tone2.png similarity index 100% rename from public/-/emojis/1/rowboat_tone2.png rename to app/assets/images/emoji/rowboat_tone2.png diff --git a/public/-/emojis/1/rowboat_tone3.png b/app/assets/images/emoji/rowboat_tone3.png similarity index 100% rename from public/-/emojis/1/rowboat_tone3.png rename to app/assets/images/emoji/rowboat_tone3.png diff --git a/public/-/emojis/1/rowboat_tone4.png b/app/assets/images/emoji/rowboat_tone4.png similarity index 100% rename from public/-/emojis/1/rowboat_tone4.png rename to app/assets/images/emoji/rowboat_tone4.png diff --git a/public/-/emojis/1/rowboat_tone5.png b/app/assets/images/emoji/rowboat_tone5.png similarity index 100% rename from public/-/emojis/1/rowboat_tone5.png rename to app/assets/images/emoji/rowboat_tone5.png diff --git a/public/-/emojis/1/rugby_football.png b/app/assets/images/emoji/rugby_football.png similarity index 100% rename from public/-/emojis/1/rugby_football.png rename to app/assets/images/emoji/rugby_football.png diff --git a/public/-/emojis/1/runner.png b/app/assets/images/emoji/runner.png similarity index 100% rename from public/-/emojis/1/runner.png rename to app/assets/images/emoji/runner.png diff --git a/public/-/emojis/1/runner_tone1.png b/app/assets/images/emoji/runner_tone1.png similarity index 100% rename from public/-/emojis/1/runner_tone1.png rename to app/assets/images/emoji/runner_tone1.png diff --git a/public/-/emojis/1/runner_tone2.png b/app/assets/images/emoji/runner_tone2.png similarity index 100% rename from public/-/emojis/1/runner_tone2.png rename to app/assets/images/emoji/runner_tone2.png diff --git a/public/-/emojis/1/runner_tone3.png b/app/assets/images/emoji/runner_tone3.png similarity index 100% rename from public/-/emojis/1/runner_tone3.png rename to app/assets/images/emoji/runner_tone3.png diff --git a/public/-/emojis/1/runner_tone4.png b/app/assets/images/emoji/runner_tone4.png similarity index 100% rename from public/-/emojis/1/runner_tone4.png rename to app/assets/images/emoji/runner_tone4.png diff --git a/public/-/emojis/1/runner_tone5.png b/app/assets/images/emoji/runner_tone5.png similarity index 100% rename from public/-/emojis/1/runner_tone5.png rename to app/assets/images/emoji/runner_tone5.png diff --git a/public/-/emojis/1/running_shirt_with_sash.png b/app/assets/images/emoji/running_shirt_with_sash.png similarity index 100% rename from public/-/emojis/1/running_shirt_with_sash.png rename to app/assets/images/emoji/running_shirt_with_sash.png diff --git a/public/-/emojis/1/sa.png b/app/assets/images/emoji/sa.png similarity index 100% rename from public/-/emojis/1/sa.png rename to app/assets/images/emoji/sa.png diff --git a/public/-/emojis/1/sagittarius.png b/app/assets/images/emoji/sagittarius.png similarity index 100% rename from public/-/emojis/1/sagittarius.png rename to app/assets/images/emoji/sagittarius.png diff --git a/public/-/emojis/1/sailboat.png b/app/assets/images/emoji/sailboat.png similarity index 100% rename from public/-/emojis/1/sailboat.png rename to app/assets/images/emoji/sailboat.png diff --git a/public/-/emojis/1/sake.png b/app/assets/images/emoji/sake.png similarity index 100% rename from public/-/emojis/1/sake.png rename to app/assets/images/emoji/sake.png diff --git a/public/-/emojis/1/salad.png b/app/assets/images/emoji/salad.png similarity index 100% rename from public/-/emojis/1/salad.png rename to app/assets/images/emoji/salad.png diff --git a/public/-/emojis/1/sandal.png b/app/assets/images/emoji/sandal.png similarity index 100% rename from public/-/emojis/1/sandal.png rename to app/assets/images/emoji/sandal.png diff --git a/public/-/emojis/1/santa.png b/app/assets/images/emoji/santa.png similarity index 100% rename from public/-/emojis/1/santa.png rename to app/assets/images/emoji/santa.png diff --git a/public/-/emojis/1/santa_tone1.png b/app/assets/images/emoji/santa_tone1.png similarity index 100% rename from public/-/emojis/1/santa_tone1.png rename to app/assets/images/emoji/santa_tone1.png diff --git a/public/-/emojis/1/santa_tone2.png b/app/assets/images/emoji/santa_tone2.png similarity index 100% rename from public/-/emojis/1/santa_tone2.png rename to app/assets/images/emoji/santa_tone2.png diff --git a/public/-/emojis/1/santa_tone3.png b/app/assets/images/emoji/santa_tone3.png similarity index 100% rename from public/-/emojis/1/santa_tone3.png rename to app/assets/images/emoji/santa_tone3.png diff --git a/public/-/emojis/1/santa_tone4.png b/app/assets/images/emoji/santa_tone4.png similarity index 100% rename from public/-/emojis/1/santa_tone4.png rename to app/assets/images/emoji/santa_tone4.png diff --git a/public/-/emojis/1/santa_tone5.png b/app/assets/images/emoji/santa_tone5.png similarity index 100% rename from public/-/emojis/1/santa_tone5.png rename to app/assets/images/emoji/santa_tone5.png diff --git a/public/-/emojis/1/satellite.png b/app/assets/images/emoji/satellite.png similarity index 100% rename from public/-/emojis/1/satellite.png rename to app/assets/images/emoji/satellite.png diff --git a/public/-/emojis/1/satellite_orbital.png b/app/assets/images/emoji/satellite_orbital.png similarity index 100% rename from public/-/emojis/1/satellite_orbital.png rename to app/assets/images/emoji/satellite_orbital.png diff --git a/public/-/emojis/1/saxophone.png b/app/assets/images/emoji/saxophone.png similarity index 100% rename from public/-/emojis/1/saxophone.png rename to app/assets/images/emoji/saxophone.png diff --git a/public/-/emojis/1/scales.png b/app/assets/images/emoji/scales.png similarity index 100% rename from public/-/emojis/1/scales.png rename to app/assets/images/emoji/scales.png diff --git a/public/-/emojis/1/school.png b/app/assets/images/emoji/school.png similarity index 100% rename from public/-/emojis/1/school.png rename to app/assets/images/emoji/school.png diff --git a/public/-/emojis/1/school_satchel.png b/app/assets/images/emoji/school_satchel.png similarity index 100% rename from public/-/emojis/1/school_satchel.png rename to app/assets/images/emoji/school_satchel.png diff --git a/public/-/emojis/1/scissors.png b/app/assets/images/emoji/scissors.png similarity index 100% rename from public/-/emojis/1/scissors.png rename to app/assets/images/emoji/scissors.png diff --git a/public/-/emojis/1/scooter.png b/app/assets/images/emoji/scooter.png similarity index 100% rename from public/-/emojis/1/scooter.png rename to app/assets/images/emoji/scooter.png diff --git a/public/-/emojis/1/scorpion.png b/app/assets/images/emoji/scorpion.png similarity index 100% rename from public/-/emojis/1/scorpion.png rename to app/assets/images/emoji/scorpion.png diff --git a/public/-/emojis/1/scorpius.png b/app/assets/images/emoji/scorpius.png similarity index 100% rename from public/-/emojis/1/scorpius.png rename to app/assets/images/emoji/scorpius.png diff --git a/public/-/emojis/1/scream.png b/app/assets/images/emoji/scream.png similarity index 100% rename from public/-/emojis/1/scream.png rename to app/assets/images/emoji/scream.png diff --git a/public/-/emojis/1/scream_cat.png b/app/assets/images/emoji/scream_cat.png similarity index 100% rename from public/-/emojis/1/scream_cat.png rename to app/assets/images/emoji/scream_cat.png diff --git a/public/-/emojis/1/scroll.png b/app/assets/images/emoji/scroll.png similarity index 100% rename from public/-/emojis/1/scroll.png rename to app/assets/images/emoji/scroll.png diff --git a/public/-/emojis/1/seat.png b/app/assets/images/emoji/seat.png similarity index 100% rename from public/-/emojis/1/seat.png rename to app/assets/images/emoji/seat.png diff --git a/public/-/emojis/1/second_place.png b/app/assets/images/emoji/second_place.png similarity index 100% rename from public/-/emojis/1/second_place.png rename to app/assets/images/emoji/second_place.png diff --git a/public/-/emojis/1/secret.png b/app/assets/images/emoji/secret.png similarity index 100% rename from public/-/emojis/1/secret.png rename to app/assets/images/emoji/secret.png diff --git a/public/-/emojis/1/see_no_evil.png b/app/assets/images/emoji/see_no_evil.png similarity index 100% rename from public/-/emojis/1/see_no_evil.png rename to app/assets/images/emoji/see_no_evil.png diff --git a/public/-/emojis/1/seedling.png b/app/assets/images/emoji/seedling.png similarity index 100% rename from public/-/emojis/1/seedling.png rename to app/assets/images/emoji/seedling.png diff --git a/public/-/emojis/1/selfie.png b/app/assets/images/emoji/selfie.png similarity index 100% rename from public/-/emojis/1/selfie.png rename to app/assets/images/emoji/selfie.png diff --git a/public/-/emojis/1/selfie_tone1.png b/app/assets/images/emoji/selfie_tone1.png similarity index 100% rename from public/-/emojis/1/selfie_tone1.png rename to app/assets/images/emoji/selfie_tone1.png diff --git a/public/-/emojis/1/selfie_tone2.png b/app/assets/images/emoji/selfie_tone2.png similarity index 100% rename from public/-/emojis/1/selfie_tone2.png rename to app/assets/images/emoji/selfie_tone2.png diff --git a/public/-/emojis/1/selfie_tone3.png b/app/assets/images/emoji/selfie_tone3.png similarity index 100% rename from public/-/emojis/1/selfie_tone3.png rename to app/assets/images/emoji/selfie_tone3.png diff --git a/public/-/emojis/1/selfie_tone4.png b/app/assets/images/emoji/selfie_tone4.png similarity index 100% rename from public/-/emojis/1/selfie_tone4.png rename to app/assets/images/emoji/selfie_tone4.png diff --git a/public/-/emojis/1/selfie_tone5.png b/app/assets/images/emoji/selfie_tone5.png similarity index 100% rename from public/-/emojis/1/selfie_tone5.png rename to app/assets/images/emoji/selfie_tone5.png diff --git a/public/-/emojis/1/seven.png b/app/assets/images/emoji/seven.png similarity index 100% rename from public/-/emojis/1/seven.png rename to app/assets/images/emoji/seven.png diff --git a/public/-/emojis/1/shallow_pan_of_food.png b/app/assets/images/emoji/shallow_pan_of_food.png similarity index 100% rename from public/-/emojis/1/shallow_pan_of_food.png rename to app/assets/images/emoji/shallow_pan_of_food.png diff --git a/public/-/emojis/1/shamrock.png b/app/assets/images/emoji/shamrock.png similarity index 100% rename from public/-/emojis/1/shamrock.png rename to app/assets/images/emoji/shamrock.png diff --git a/public/-/emojis/1/shark.png b/app/assets/images/emoji/shark.png similarity index 100% rename from public/-/emojis/1/shark.png rename to app/assets/images/emoji/shark.png diff --git a/public/-/emojis/1/shaved_ice.png b/app/assets/images/emoji/shaved_ice.png similarity index 100% rename from public/-/emojis/1/shaved_ice.png rename to app/assets/images/emoji/shaved_ice.png diff --git a/public/-/emojis/1/sheep.png b/app/assets/images/emoji/sheep.png similarity index 100% rename from public/-/emojis/1/sheep.png rename to app/assets/images/emoji/sheep.png diff --git a/public/-/emojis/1/shell.png b/app/assets/images/emoji/shell.png similarity index 100% rename from public/-/emojis/1/shell.png rename to app/assets/images/emoji/shell.png diff --git a/public/-/emojis/1/shield.png b/app/assets/images/emoji/shield.png similarity index 100% rename from public/-/emojis/1/shield.png rename to app/assets/images/emoji/shield.png diff --git a/public/-/emojis/1/shinto_shrine.png b/app/assets/images/emoji/shinto_shrine.png similarity index 100% rename from public/-/emojis/1/shinto_shrine.png rename to app/assets/images/emoji/shinto_shrine.png diff --git a/public/-/emojis/1/ship.png b/app/assets/images/emoji/ship.png similarity index 100% rename from public/-/emojis/1/ship.png rename to app/assets/images/emoji/ship.png diff --git a/public/-/emojis/1/shirt.png b/app/assets/images/emoji/shirt.png similarity index 100% rename from public/-/emojis/1/shirt.png rename to app/assets/images/emoji/shirt.png diff --git a/public/-/emojis/1/shopping_bags.png b/app/assets/images/emoji/shopping_bags.png similarity index 100% rename from public/-/emojis/1/shopping_bags.png rename to app/assets/images/emoji/shopping_bags.png diff --git a/public/-/emojis/1/shopping_cart.png b/app/assets/images/emoji/shopping_cart.png similarity index 100% rename from public/-/emojis/1/shopping_cart.png rename to app/assets/images/emoji/shopping_cart.png diff --git a/public/-/emojis/1/shower.png b/app/assets/images/emoji/shower.png similarity index 100% rename from public/-/emojis/1/shower.png rename to app/assets/images/emoji/shower.png diff --git a/public/-/emojis/1/shrimp.png b/app/assets/images/emoji/shrimp.png similarity index 100% rename from public/-/emojis/1/shrimp.png rename to app/assets/images/emoji/shrimp.png diff --git a/public/-/emojis/1/shrug.png b/app/assets/images/emoji/shrug.png similarity index 100% rename from public/-/emojis/1/shrug.png rename to app/assets/images/emoji/shrug.png diff --git a/public/-/emojis/1/shrug_tone1.png b/app/assets/images/emoji/shrug_tone1.png similarity index 100% rename from public/-/emojis/1/shrug_tone1.png rename to app/assets/images/emoji/shrug_tone1.png diff --git a/public/-/emojis/1/shrug_tone2.png b/app/assets/images/emoji/shrug_tone2.png similarity index 100% rename from public/-/emojis/1/shrug_tone2.png rename to app/assets/images/emoji/shrug_tone2.png diff --git a/public/-/emojis/1/shrug_tone3.png b/app/assets/images/emoji/shrug_tone3.png similarity index 100% rename from public/-/emojis/1/shrug_tone3.png rename to app/assets/images/emoji/shrug_tone3.png diff --git a/public/-/emojis/1/shrug_tone4.png b/app/assets/images/emoji/shrug_tone4.png similarity index 100% rename from public/-/emojis/1/shrug_tone4.png rename to app/assets/images/emoji/shrug_tone4.png diff --git a/public/-/emojis/1/shrug_tone5.png b/app/assets/images/emoji/shrug_tone5.png similarity index 100% rename from public/-/emojis/1/shrug_tone5.png rename to app/assets/images/emoji/shrug_tone5.png diff --git a/public/-/emojis/1/signal_strength.png b/app/assets/images/emoji/signal_strength.png similarity index 100% rename from public/-/emojis/1/signal_strength.png rename to app/assets/images/emoji/signal_strength.png diff --git a/public/-/emojis/1/six.png b/app/assets/images/emoji/six.png similarity index 100% rename from public/-/emojis/1/six.png rename to app/assets/images/emoji/six.png diff --git a/public/-/emojis/1/six_pointed_star.png b/app/assets/images/emoji/six_pointed_star.png similarity index 100% rename from public/-/emojis/1/six_pointed_star.png rename to app/assets/images/emoji/six_pointed_star.png diff --git a/public/-/emojis/1/ski.png b/app/assets/images/emoji/ski.png similarity index 100% rename from public/-/emojis/1/ski.png rename to app/assets/images/emoji/ski.png diff --git a/public/-/emojis/1/skier.png b/app/assets/images/emoji/skier.png similarity index 100% rename from public/-/emojis/1/skier.png rename to app/assets/images/emoji/skier.png diff --git a/public/-/emojis/1/skull.png b/app/assets/images/emoji/skull.png similarity index 100% rename from public/-/emojis/1/skull.png rename to app/assets/images/emoji/skull.png diff --git a/public/-/emojis/1/skull_crossbones.png b/app/assets/images/emoji/skull_crossbones.png similarity index 100% rename from public/-/emojis/1/skull_crossbones.png rename to app/assets/images/emoji/skull_crossbones.png diff --git a/public/-/emojis/1/sleeping.png b/app/assets/images/emoji/sleeping.png similarity index 100% rename from public/-/emojis/1/sleeping.png rename to app/assets/images/emoji/sleeping.png diff --git a/public/-/emojis/1/sleeping_accommodation.png b/app/assets/images/emoji/sleeping_accommodation.png similarity index 100% rename from public/-/emojis/1/sleeping_accommodation.png rename to app/assets/images/emoji/sleeping_accommodation.png diff --git a/public/-/emojis/1/sleepy.png b/app/assets/images/emoji/sleepy.png similarity index 100% rename from public/-/emojis/1/sleepy.png rename to app/assets/images/emoji/sleepy.png diff --git a/public/-/emojis/1/slight_frown.png b/app/assets/images/emoji/slight_frown.png similarity index 100% rename from public/-/emojis/1/slight_frown.png rename to app/assets/images/emoji/slight_frown.png diff --git a/public/-/emojis/1/slight_smile.png b/app/assets/images/emoji/slight_smile.png similarity index 100% rename from public/-/emojis/1/slight_smile.png rename to app/assets/images/emoji/slight_smile.png diff --git a/public/-/emojis/1/slot_machine.png b/app/assets/images/emoji/slot_machine.png similarity index 100% rename from public/-/emojis/1/slot_machine.png rename to app/assets/images/emoji/slot_machine.png diff --git a/public/-/emojis/1/small_blue_diamond.png b/app/assets/images/emoji/small_blue_diamond.png similarity index 100% rename from public/-/emojis/1/small_blue_diamond.png rename to app/assets/images/emoji/small_blue_diamond.png diff --git a/public/-/emojis/1/small_orange_diamond.png b/app/assets/images/emoji/small_orange_diamond.png similarity index 100% rename from public/-/emojis/1/small_orange_diamond.png rename to app/assets/images/emoji/small_orange_diamond.png diff --git a/public/-/emojis/1/small_red_triangle.png b/app/assets/images/emoji/small_red_triangle.png similarity index 100% rename from public/-/emojis/1/small_red_triangle.png rename to app/assets/images/emoji/small_red_triangle.png diff --git a/public/-/emojis/1/small_red_triangle_down.png b/app/assets/images/emoji/small_red_triangle_down.png similarity index 100% rename from public/-/emojis/1/small_red_triangle_down.png rename to app/assets/images/emoji/small_red_triangle_down.png diff --git a/public/-/emojis/1/smile.png b/app/assets/images/emoji/smile.png similarity index 100% rename from public/-/emojis/1/smile.png rename to app/assets/images/emoji/smile.png diff --git a/public/-/emojis/1/smile_cat.png b/app/assets/images/emoji/smile_cat.png similarity index 100% rename from public/-/emojis/1/smile_cat.png rename to app/assets/images/emoji/smile_cat.png diff --git a/public/-/emojis/1/smiley.png b/app/assets/images/emoji/smiley.png similarity index 100% rename from public/-/emojis/1/smiley.png rename to app/assets/images/emoji/smiley.png diff --git a/public/-/emojis/1/smiley_cat.png b/app/assets/images/emoji/smiley_cat.png similarity index 100% rename from public/-/emojis/1/smiley_cat.png rename to app/assets/images/emoji/smiley_cat.png diff --git a/public/-/emojis/1/smiling_imp.png b/app/assets/images/emoji/smiling_imp.png similarity index 100% rename from public/-/emojis/1/smiling_imp.png rename to app/assets/images/emoji/smiling_imp.png diff --git a/public/-/emojis/1/smirk.png b/app/assets/images/emoji/smirk.png similarity index 100% rename from public/-/emojis/1/smirk.png rename to app/assets/images/emoji/smirk.png diff --git a/public/-/emojis/1/smirk_cat.png b/app/assets/images/emoji/smirk_cat.png similarity index 100% rename from public/-/emojis/1/smirk_cat.png rename to app/assets/images/emoji/smirk_cat.png diff --git a/public/-/emojis/1/smoking.png b/app/assets/images/emoji/smoking.png similarity index 100% rename from public/-/emojis/1/smoking.png rename to app/assets/images/emoji/smoking.png diff --git a/public/-/emojis/1/snail.png b/app/assets/images/emoji/snail.png similarity index 100% rename from public/-/emojis/1/snail.png rename to app/assets/images/emoji/snail.png diff --git a/public/-/emojis/1/snake.png b/app/assets/images/emoji/snake.png similarity index 100% rename from public/-/emojis/1/snake.png rename to app/assets/images/emoji/snake.png diff --git a/public/-/emojis/1/sneezing_face.png b/app/assets/images/emoji/sneezing_face.png similarity index 100% rename from public/-/emojis/1/sneezing_face.png rename to app/assets/images/emoji/sneezing_face.png diff --git a/public/-/emojis/1/snowboarder.png b/app/assets/images/emoji/snowboarder.png similarity index 100% rename from public/-/emojis/1/snowboarder.png rename to app/assets/images/emoji/snowboarder.png diff --git a/public/-/emojis/1/snowflake.png b/app/assets/images/emoji/snowflake.png similarity index 100% rename from public/-/emojis/1/snowflake.png rename to app/assets/images/emoji/snowflake.png diff --git a/public/-/emojis/1/snowman.png b/app/assets/images/emoji/snowman.png similarity index 100% rename from public/-/emojis/1/snowman.png rename to app/assets/images/emoji/snowman.png diff --git a/public/-/emojis/1/snowman2.png b/app/assets/images/emoji/snowman2.png similarity index 100% rename from public/-/emojis/1/snowman2.png rename to app/assets/images/emoji/snowman2.png diff --git a/public/-/emojis/1/sob.png b/app/assets/images/emoji/sob.png similarity index 100% rename from public/-/emojis/1/sob.png rename to app/assets/images/emoji/sob.png diff --git a/public/-/emojis/1/soccer.png b/app/assets/images/emoji/soccer.png similarity index 100% rename from public/-/emojis/1/soccer.png rename to app/assets/images/emoji/soccer.png diff --git a/public/-/emojis/1/soon.png b/app/assets/images/emoji/soon.png similarity index 100% rename from public/-/emojis/1/soon.png rename to app/assets/images/emoji/soon.png diff --git a/public/-/emojis/1/sos.png b/app/assets/images/emoji/sos.png similarity index 100% rename from public/-/emojis/1/sos.png rename to app/assets/images/emoji/sos.png diff --git a/public/-/emojis/1/sound.png b/app/assets/images/emoji/sound.png similarity index 100% rename from public/-/emojis/1/sound.png rename to app/assets/images/emoji/sound.png diff --git a/public/-/emojis/1/space_invader.png b/app/assets/images/emoji/space_invader.png similarity index 100% rename from public/-/emojis/1/space_invader.png rename to app/assets/images/emoji/space_invader.png diff --git a/public/-/emojis/1/spades.png b/app/assets/images/emoji/spades.png similarity index 100% rename from public/-/emojis/1/spades.png rename to app/assets/images/emoji/spades.png diff --git a/public/-/emojis/1/spaghetti.png b/app/assets/images/emoji/spaghetti.png similarity index 100% rename from public/-/emojis/1/spaghetti.png rename to app/assets/images/emoji/spaghetti.png diff --git a/public/-/emojis/1/sparkle.png b/app/assets/images/emoji/sparkle.png similarity index 100% rename from public/-/emojis/1/sparkle.png rename to app/assets/images/emoji/sparkle.png diff --git a/public/-/emojis/1/sparkler.png b/app/assets/images/emoji/sparkler.png similarity index 100% rename from public/-/emojis/1/sparkler.png rename to app/assets/images/emoji/sparkler.png diff --git a/public/-/emojis/1/sparkles.png b/app/assets/images/emoji/sparkles.png similarity index 100% rename from public/-/emojis/1/sparkles.png rename to app/assets/images/emoji/sparkles.png diff --git a/public/-/emojis/1/sparkling_heart.png b/app/assets/images/emoji/sparkling_heart.png similarity index 100% rename from public/-/emojis/1/sparkling_heart.png rename to app/assets/images/emoji/sparkling_heart.png diff --git a/public/-/emojis/1/speak_no_evil.png b/app/assets/images/emoji/speak_no_evil.png similarity index 100% rename from public/-/emojis/1/speak_no_evil.png rename to app/assets/images/emoji/speak_no_evil.png diff --git a/public/-/emojis/1/speaker.png b/app/assets/images/emoji/speaker.png similarity index 100% rename from public/-/emojis/1/speaker.png rename to app/assets/images/emoji/speaker.png diff --git a/public/-/emojis/1/speaking_head.png b/app/assets/images/emoji/speaking_head.png similarity index 100% rename from public/-/emojis/1/speaking_head.png rename to app/assets/images/emoji/speaking_head.png diff --git a/public/-/emojis/1/speech_balloon.png b/app/assets/images/emoji/speech_balloon.png similarity index 100% rename from public/-/emojis/1/speech_balloon.png rename to app/assets/images/emoji/speech_balloon.png diff --git a/public/-/emojis/1/speech_left.png b/app/assets/images/emoji/speech_left.png similarity index 100% rename from public/-/emojis/1/speech_left.png rename to app/assets/images/emoji/speech_left.png diff --git a/public/-/emojis/1/speedboat.png b/app/assets/images/emoji/speedboat.png similarity index 100% rename from public/-/emojis/1/speedboat.png rename to app/assets/images/emoji/speedboat.png diff --git a/public/-/emojis/1/spider.png b/app/assets/images/emoji/spider.png similarity index 100% rename from public/-/emojis/1/spider.png rename to app/assets/images/emoji/spider.png diff --git a/public/-/emojis/1/spider_web.png b/app/assets/images/emoji/spider_web.png similarity index 100% rename from public/-/emojis/1/spider_web.png rename to app/assets/images/emoji/spider_web.png diff --git a/public/-/emojis/1/spoon.png b/app/assets/images/emoji/spoon.png similarity index 100% rename from public/-/emojis/1/spoon.png rename to app/assets/images/emoji/spoon.png diff --git a/public/-/emojis/1/spy.png b/app/assets/images/emoji/spy.png similarity index 100% rename from public/-/emojis/1/spy.png rename to app/assets/images/emoji/spy.png diff --git a/public/-/emojis/1/spy_tone1.png b/app/assets/images/emoji/spy_tone1.png similarity index 100% rename from public/-/emojis/1/spy_tone1.png rename to app/assets/images/emoji/spy_tone1.png diff --git a/public/-/emojis/1/spy_tone2.png b/app/assets/images/emoji/spy_tone2.png similarity index 100% rename from public/-/emojis/1/spy_tone2.png rename to app/assets/images/emoji/spy_tone2.png diff --git a/public/-/emojis/1/spy_tone3.png b/app/assets/images/emoji/spy_tone3.png similarity index 100% rename from public/-/emojis/1/spy_tone3.png rename to app/assets/images/emoji/spy_tone3.png diff --git a/public/-/emojis/1/spy_tone4.png b/app/assets/images/emoji/spy_tone4.png similarity index 100% rename from public/-/emojis/1/spy_tone4.png rename to app/assets/images/emoji/spy_tone4.png diff --git a/public/-/emojis/1/spy_tone5.png b/app/assets/images/emoji/spy_tone5.png similarity index 100% rename from public/-/emojis/1/spy_tone5.png rename to app/assets/images/emoji/spy_tone5.png diff --git a/public/-/emojis/1/squid.png b/app/assets/images/emoji/squid.png similarity index 100% rename from public/-/emojis/1/squid.png rename to app/assets/images/emoji/squid.png diff --git a/public/-/emojis/1/stadium.png b/app/assets/images/emoji/stadium.png similarity index 100% rename from public/-/emojis/1/stadium.png rename to app/assets/images/emoji/stadium.png diff --git a/public/-/emojis/1/star.png b/app/assets/images/emoji/star.png similarity index 100% rename from public/-/emojis/1/star.png rename to app/assets/images/emoji/star.png diff --git a/public/-/emojis/1/star2.png b/app/assets/images/emoji/star2.png similarity index 100% rename from public/-/emojis/1/star2.png rename to app/assets/images/emoji/star2.png diff --git a/public/-/emojis/1/star_and_crescent.png b/app/assets/images/emoji/star_and_crescent.png similarity index 100% rename from public/-/emojis/1/star_and_crescent.png rename to app/assets/images/emoji/star_and_crescent.png diff --git a/public/-/emojis/1/star_of_david.png b/app/assets/images/emoji/star_of_david.png similarity index 100% rename from public/-/emojis/1/star_of_david.png rename to app/assets/images/emoji/star_of_david.png diff --git a/public/-/emojis/1/stars.png b/app/assets/images/emoji/stars.png similarity index 100% rename from public/-/emojis/1/stars.png rename to app/assets/images/emoji/stars.png diff --git a/public/-/emojis/1/station.png b/app/assets/images/emoji/station.png similarity index 100% rename from public/-/emojis/1/station.png rename to app/assets/images/emoji/station.png diff --git a/public/-/emojis/1/statue_of_liberty.png b/app/assets/images/emoji/statue_of_liberty.png similarity index 100% rename from public/-/emojis/1/statue_of_liberty.png rename to app/assets/images/emoji/statue_of_liberty.png diff --git a/public/-/emojis/1/steam_locomotive.png b/app/assets/images/emoji/steam_locomotive.png similarity index 100% rename from public/-/emojis/1/steam_locomotive.png rename to app/assets/images/emoji/steam_locomotive.png diff --git a/public/-/emojis/1/stew.png b/app/assets/images/emoji/stew.png similarity index 100% rename from public/-/emojis/1/stew.png rename to app/assets/images/emoji/stew.png diff --git a/public/-/emojis/1/stop_button.png b/app/assets/images/emoji/stop_button.png similarity index 100% rename from public/-/emojis/1/stop_button.png rename to app/assets/images/emoji/stop_button.png diff --git a/public/-/emojis/1/stopwatch.png b/app/assets/images/emoji/stopwatch.png similarity index 100% rename from public/-/emojis/1/stopwatch.png rename to app/assets/images/emoji/stopwatch.png diff --git a/public/-/emojis/1/straight_ruler.png b/app/assets/images/emoji/straight_ruler.png similarity index 100% rename from public/-/emojis/1/straight_ruler.png rename to app/assets/images/emoji/straight_ruler.png diff --git a/public/-/emojis/1/strawberry.png b/app/assets/images/emoji/strawberry.png similarity index 100% rename from public/-/emojis/1/strawberry.png rename to app/assets/images/emoji/strawberry.png diff --git a/public/-/emojis/1/stuck_out_tongue.png b/app/assets/images/emoji/stuck_out_tongue.png similarity index 100% rename from public/-/emojis/1/stuck_out_tongue.png rename to app/assets/images/emoji/stuck_out_tongue.png diff --git a/public/-/emojis/1/stuck_out_tongue_closed_eyes.png b/app/assets/images/emoji/stuck_out_tongue_closed_eyes.png similarity index 100% rename from public/-/emojis/1/stuck_out_tongue_closed_eyes.png rename to app/assets/images/emoji/stuck_out_tongue_closed_eyes.png diff --git a/public/-/emojis/1/stuck_out_tongue_winking_eye.png b/app/assets/images/emoji/stuck_out_tongue_winking_eye.png similarity index 100% rename from public/-/emojis/1/stuck_out_tongue_winking_eye.png rename to app/assets/images/emoji/stuck_out_tongue_winking_eye.png diff --git a/public/-/emojis/1/stuffed_flatbread.png b/app/assets/images/emoji/stuffed_flatbread.png similarity index 100% rename from public/-/emojis/1/stuffed_flatbread.png rename to app/assets/images/emoji/stuffed_flatbread.png diff --git a/public/-/emojis/1/sun_with_face.png b/app/assets/images/emoji/sun_with_face.png similarity index 100% rename from public/-/emojis/1/sun_with_face.png rename to app/assets/images/emoji/sun_with_face.png diff --git a/public/-/emojis/1/sunflower.png b/app/assets/images/emoji/sunflower.png similarity index 100% rename from public/-/emojis/1/sunflower.png rename to app/assets/images/emoji/sunflower.png diff --git a/public/-/emojis/1/sunglasses.png b/app/assets/images/emoji/sunglasses.png similarity index 100% rename from public/-/emojis/1/sunglasses.png rename to app/assets/images/emoji/sunglasses.png diff --git a/public/-/emojis/1/sunny.png b/app/assets/images/emoji/sunny.png similarity index 100% rename from public/-/emojis/1/sunny.png rename to app/assets/images/emoji/sunny.png diff --git a/public/-/emojis/1/sunrise.png b/app/assets/images/emoji/sunrise.png similarity index 100% rename from public/-/emojis/1/sunrise.png rename to app/assets/images/emoji/sunrise.png diff --git a/public/-/emojis/1/sunrise_over_mountains.png b/app/assets/images/emoji/sunrise_over_mountains.png similarity index 100% rename from public/-/emojis/1/sunrise_over_mountains.png rename to app/assets/images/emoji/sunrise_over_mountains.png diff --git a/public/-/emojis/1/surfer.png b/app/assets/images/emoji/surfer.png similarity index 100% rename from public/-/emojis/1/surfer.png rename to app/assets/images/emoji/surfer.png diff --git a/public/-/emojis/1/surfer_tone1.png b/app/assets/images/emoji/surfer_tone1.png similarity index 100% rename from public/-/emojis/1/surfer_tone1.png rename to app/assets/images/emoji/surfer_tone1.png diff --git a/public/-/emojis/1/surfer_tone2.png b/app/assets/images/emoji/surfer_tone2.png similarity index 100% rename from public/-/emojis/1/surfer_tone2.png rename to app/assets/images/emoji/surfer_tone2.png diff --git a/public/-/emojis/1/surfer_tone3.png b/app/assets/images/emoji/surfer_tone3.png similarity index 100% rename from public/-/emojis/1/surfer_tone3.png rename to app/assets/images/emoji/surfer_tone3.png diff --git a/public/-/emojis/1/surfer_tone4.png b/app/assets/images/emoji/surfer_tone4.png similarity index 100% rename from public/-/emojis/1/surfer_tone4.png rename to app/assets/images/emoji/surfer_tone4.png diff --git a/public/-/emojis/1/surfer_tone5.png b/app/assets/images/emoji/surfer_tone5.png similarity index 100% rename from public/-/emojis/1/surfer_tone5.png rename to app/assets/images/emoji/surfer_tone5.png diff --git a/public/-/emojis/1/sushi.png b/app/assets/images/emoji/sushi.png similarity index 100% rename from public/-/emojis/1/sushi.png rename to app/assets/images/emoji/sushi.png diff --git a/public/-/emojis/1/suspension_railway.png b/app/assets/images/emoji/suspension_railway.png similarity index 100% rename from public/-/emojis/1/suspension_railway.png rename to app/assets/images/emoji/suspension_railway.png diff --git a/public/-/emojis/1/sweat.png b/app/assets/images/emoji/sweat.png similarity index 100% rename from public/-/emojis/1/sweat.png rename to app/assets/images/emoji/sweat.png diff --git a/public/-/emojis/1/sweat_drops.png b/app/assets/images/emoji/sweat_drops.png similarity index 100% rename from public/-/emojis/1/sweat_drops.png rename to app/assets/images/emoji/sweat_drops.png diff --git a/public/-/emojis/1/sweat_smile.png b/app/assets/images/emoji/sweat_smile.png similarity index 100% rename from public/-/emojis/1/sweat_smile.png rename to app/assets/images/emoji/sweat_smile.png diff --git a/public/-/emojis/1/sweet_potato.png b/app/assets/images/emoji/sweet_potato.png similarity index 100% rename from public/-/emojis/1/sweet_potato.png rename to app/assets/images/emoji/sweet_potato.png diff --git a/public/-/emojis/1/swimmer.png b/app/assets/images/emoji/swimmer.png similarity index 100% rename from public/-/emojis/1/swimmer.png rename to app/assets/images/emoji/swimmer.png diff --git a/public/-/emojis/1/swimmer_tone1.png b/app/assets/images/emoji/swimmer_tone1.png similarity index 100% rename from public/-/emojis/1/swimmer_tone1.png rename to app/assets/images/emoji/swimmer_tone1.png diff --git a/public/-/emojis/1/swimmer_tone2.png b/app/assets/images/emoji/swimmer_tone2.png similarity index 100% rename from public/-/emojis/1/swimmer_tone2.png rename to app/assets/images/emoji/swimmer_tone2.png diff --git a/public/-/emojis/1/swimmer_tone3.png b/app/assets/images/emoji/swimmer_tone3.png similarity index 100% rename from public/-/emojis/1/swimmer_tone3.png rename to app/assets/images/emoji/swimmer_tone3.png diff --git a/public/-/emojis/1/swimmer_tone4.png b/app/assets/images/emoji/swimmer_tone4.png similarity index 100% rename from public/-/emojis/1/swimmer_tone4.png rename to app/assets/images/emoji/swimmer_tone4.png diff --git a/public/-/emojis/1/swimmer_tone5.png b/app/assets/images/emoji/swimmer_tone5.png similarity index 100% rename from public/-/emojis/1/swimmer_tone5.png rename to app/assets/images/emoji/swimmer_tone5.png diff --git a/public/-/emojis/1/symbols.png b/app/assets/images/emoji/symbols.png similarity index 100% rename from public/-/emojis/1/symbols.png rename to app/assets/images/emoji/symbols.png diff --git a/public/-/emojis/1/synagogue.png b/app/assets/images/emoji/synagogue.png similarity index 100% rename from public/-/emojis/1/synagogue.png rename to app/assets/images/emoji/synagogue.png diff --git a/public/-/emojis/1/syringe.png b/app/assets/images/emoji/syringe.png similarity index 100% rename from public/-/emojis/1/syringe.png rename to app/assets/images/emoji/syringe.png diff --git a/public/-/emojis/1/taco.png b/app/assets/images/emoji/taco.png similarity index 100% rename from public/-/emojis/1/taco.png rename to app/assets/images/emoji/taco.png diff --git a/public/-/emojis/1/tada.png b/app/assets/images/emoji/tada.png similarity index 100% rename from public/-/emojis/1/tada.png rename to app/assets/images/emoji/tada.png diff --git a/public/-/emojis/1/tanabata_tree.png b/app/assets/images/emoji/tanabata_tree.png similarity index 100% rename from public/-/emojis/1/tanabata_tree.png rename to app/assets/images/emoji/tanabata_tree.png diff --git a/public/-/emojis/1/tangerine.png b/app/assets/images/emoji/tangerine.png similarity index 100% rename from public/-/emojis/1/tangerine.png rename to app/assets/images/emoji/tangerine.png diff --git a/public/-/emojis/1/taurus.png b/app/assets/images/emoji/taurus.png similarity index 100% rename from public/-/emojis/1/taurus.png rename to app/assets/images/emoji/taurus.png diff --git a/public/-/emojis/1/taxi.png b/app/assets/images/emoji/taxi.png similarity index 100% rename from public/-/emojis/1/taxi.png rename to app/assets/images/emoji/taxi.png diff --git a/public/-/emojis/1/tea.png b/app/assets/images/emoji/tea.png similarity index 100% rename from public/-/emojis/1/tea.png rename to app/assets/images/emoji/tea.png diff --git a/public/-/emojis/1/telephone.png b/app/assets/images/emoji/telephone.png similarity index 100% rename from public/-/emojis/1/telephone.png rename to app/assets/images/emoji/telephone.png diff --git a/public/-/emojis/1/telephone_receiver.png b/app/assets/images/emoji/telephone_receiver.png similarity index 100% rename from public/-/emojis/1/telephone_receiver.png rename to app/assets/images/emoji/telephone_receiver.png diff --git a/public/-/emojis/1/telescope.png b/app/assets/images/emoji/telescope.png similarity index 100% rename from public/-/emojis/1/telescope.png rename to app/assets/images/emoji/telescope.png diff --git a/public/-/emojis/1/ten.png b/app/assets/images/emoji/ten.png similarity index 100% rename from public/-/emojis/1/ten.png rename to app/assets/images/emoji/ten.png diff --git a/public/-/emojis/1/tennis.png b/app/assets/images/emoji/tennis.png similarity index 100% rename from public/-/emojis/1/tennis.png rename to app/assets/images/emoji/tennis.png diff --git a/public/-/emojis/1/tent.png b/app/assets/images/emoji/tent.png similarity index 100% rename from public/-/emojis/1/tent.png rename to app/assets/images/emoji/tent.png diff --git a/public/-/emojis/1/thermometer.png b/app/assets/images/emoji/thermometer.png similarity index 100% rename from public/-/emojis/1/thermometer.png rename to app/assets/images/emoji/thermometer.png diff --git a/public/-/emojis/1/thermometer_face.png b/app/assets/images/emoji/thermometer_face.png similarity index 100% rename from public/-/emojis/1/thermometer_face.png rename to app/assets/images/emoji/thermometer_face.png diff --git a/public/-/emojis/1/thinking.png b/app/assets/images/emoji/thinking.png similarity index 100% rename from public/-/emojis/1/thinking.png rename to app/assets/images/emoji/thinking.png diff --git a/public/-/emojis/1/third_place.png b/app/assets/images/emoji/third_place.png similarity index 100% rename from public/-/emojis/1/third_place.png rename to app/assets/images/emoji/third_place.png diff --git a/public/-/emojis/1/thought_balloon.png b/app/assets/images/emoji/thought_balloon.png similarity index 100% rename from public/-/emojis/1/thought_balloon.png rename to app/assets/images/emoji/thought_balloon.png diff --git a/public/-/emojis/1/three.png b/app/assets/images/emoji/three.png similarity index 100% rename from public/-/emojis/1/three.png rename to app/assets/images/emoji/three.png diff --git a/public/-/emojis/1/thumbsdown.png b/app/assets/images/emoji/thumbsdown.png similarity index 100% rename from public/-/emojis/1/thumbsdown.png rename to app/assets/images/emoji/thumbsdown.png diff --git a/public/-/emojis/1/thumbsdown_tone1.png b/app/assets/images/emoji/thumbsdown_tone1.png similarity index 100% rename from public/-/emojis/1/thumbsdown_tone1.png rename to app/assets/images/emoji/thumbsdown_tone1.png diff --git a/public/-/emojis/1/thumbsdown_tone2.png b/app/assets/images/emoji/thumbsdown_tone2.png similarity index 100% rename from public/-/emojis/1/thumbsdown_tone2.png rename to app/assets/images/emoji/thumbsdown_tone2.png diff --git a/public/-/emojis/1/thumbsdown_tone3.png b/app/assets/images/emoji/thumbsdown_tone3.png similarity index 100% rename from public/-/emojis/1/thumbsdown_tone3.png rename to app/assets/images/emoji/thumbsdown_tone3.png diff --git a/public/-/emojis/1/thumbsdown_tone4.png b/app/assets/images/emoji/thumbsdown_tone4.png similarity index 100% rename from public/-/emojis/1/thumbsdown_tone4.png rename to app/assets/images/emoji/thumbsdown_tone4.png diff --git a/public/-/emojis/1/thumbsdown_tone5.png b/app/assets/images/emoji/thumbsdown_tone5.png similarity index 100% rename from public/-/emojis/1/thumbsdown_tone5.png rename to app/assets/images/emoji/thumbsdown_tone5.png diff --git a/public/-/emojis/1/thumbsup.png b/app/assets/images/emoji/thumbsup.png similarity index 100% rename from public/-/emojis/1/thumbsup.png rename to app/assets/images/emoji/thumbsup.png diff --git a/public/-/emojis/1/thumbsup_tone1.png b/app/assets/images/emoji/thumbsup_tone1.png similarity index 100% rename from public/-/emojis/1/thumbsup_tone1.png rename to app/assets/images/emoji/thumbsup_tone1.png diff --git a/public/-/emojis/1/thumbsup_tone2.png b/app/assets/images/emoji/thumbsup_tone2.png similarity index 100% rename from public/-/emojis/1/thumbsup_tone2.png rename to app/assets/images/emoji/thumbsup_tone2.png diff --git a/public/-/emojis/1/thumbsup_tone3.png b/app/assets/images/emoji/thumbsup_tone3.png similarity index 100% rename from public/-/emojis/1/thumbsup_tone3.png rename to app/assets/images/emoji/thumbsup_tone3.png diff --git a/public/-/emojis/1/thumbsup_tone4.png b/app/assets/images/emoji/thumbsup_tone4.png similarity index 100% rename from public/-/emojis/1/thumbsup_tone4.png rename to app/assets/images/emoji/thumbsup_tone4.png diff --git a/public/-/emojis/1/thumbsup_tone5.png b/app/assets/images/emoji/thumbsup_tone5.png similarity index 100% rename from public/-/emojis/1/thumbsup_tone5.png rename to app/assets/images/emoji/thumbsup_tone5.png diff --git a/public/-/emojis/1/thunder_cloud_rain.png b/app/assets/images/emoji/thunder_cloud_rain.png similarity index 100% rename from public/-/emojis/1/thunder_cloud_rain.png rename to app/assets/images/emoji/thunder_cloud_rain.png diff --git a/public/-/emojis/1/ticket.png b/app/assets/images/emoji/ticket.png similarity index 100% rename from public/-/emojis/1/ticket.png rename to app/assets/images/emoji/ticket.png diff --git a/public/-/emojis/1/tickets.png b/app/assets/images/emoji/tickets.png similarity index 100% rename from public/-/emojis/1/tickets.png rename to app/assets/images/emoji/tickets.png diff --git a/public/-/emojis/1/tiger.png b/app/assets/images/emoji/tiger.png similarity index 100% rename from public/-/emojis/1/tiger.png rename to app/assets/images/emoji/tiger.png diff --git a/public/-/emojis/1/tiger2.png b/app/assets/images/emoji/tiger2.png similarity index 100% rename from public/-/emojis/1/tiger2.png rename to app/assets/images/emoji/tiger2.png diff --git a/public/-/emojis/1/timer.png b/app/assets/images/emoji/timer.png similarity index 100% rename from public/-/emojis/1/timer.png rename to app/assets/images/emoji/timer.png diff --git a/public/-/emojis/1/tired_face.png b/app/assets/images/emoji/tired_face.png similarity index 100% rename from public/-/emojis/1/tired_face.png rename to app/assets/images/emoji/tired_face.png diff --git a/public/-/emojis/1/tm.png b/app/assets/images/emoji/tm.png similarity index 100% rename from public/-/emojis/1/tm.png rename to app/assets/images/emoji/tm.png diff --git a/public/-/emojis/1/toilet.png b/app/assets/images/emoji/toilet.png similarity index 100% rename from public/-/emojis/1/toilet.png rename to app/assets/images/emoji/toilet.png diff --git a/public/-/emojis/1/tokyo_tower.png b/app/assets/images/emoji/tokyo_tower.png similarity index 100% rename from public/-/emojis/1/tokyo_tower.png rename to app/assets/images/emoji/tokyo_tower.png diff --git a/public/-/emojis/1/tomato.png b/app/assets/images/emoji/tomato.png similarity index 100% rename from public/-/emojis/1/tomato.png rename to app/assets/images/emoji/tomato.png diff --git a/public/-/emojis/1/tone1.png b/app/assets/images/emoji/tone1.png similarity index 100% rename from public/-/emojis/1/tone1.png rename to app/assets/images/emoji/tone1.png diff --git a/public/-/emojis/1/tone2.png b/app/assets/images/emoji/tone2.png similarity index 100% rename from public/-/emojis/1/tone2.png rename to app/assets/images/emoji/tone2.png diff --git a/public/-/emojis/1/tone3.png b/app/assets/images/emoji/tone3.png similarity index 100% rename from public/-/emojis/1/tone3.png rename to app/assets/images/emoji/tone3.png diff --git a/public/-/emojis/1/tone4.png b/app/assets/images/emoji/tone4.png similarity index 100% rename from public/-/emojis/1/tone4.png rename to app/assets/images/emoji/tone4.png diff --git a/public/-/emojis/1/tone5.png b/app/assets/images/emoji/tone5.png similarity index 100% rename from public/-/emojis/1/tone5.png rename to app/assets/images/emoji/tone5.png diff --git a/public/-/emojis/1/tongue.png b/app/assets/images/emoji/tongue.png similarity index 100% rename from public/-/emojis/1/tongue.png rename to app/assets/images/emoji/tongue.png diff --git a/public/-/emojis/1/tools.png b/app/assets/images/emoji/tools.png similarity index 100% rename from public/-/emojis/1/tools.png rename to app/assets/images/emoji/tools.png diff --git a/public/-/emojis/1/top.png b/app/assets/images/emoji/top.png similarity index 100% rename from public/-/emojis/1/top.png rename to app/assets/images/emoji/top.png diff --git a/public/-/emojis/1/tophat.png b/app/assets/images/emoji/tophat.png similarity index 100% rename from public/-/emojis/1/tophat.png rename to app/assets/images/emoji/tophat.png diff --git a/public/-/emojis/1/track_next.png b/app/assets/images/emoji/track_next.png similarity index 100% rename from public/-/emojis/1/track_next.png rename to app/assets/images/emoji/track_next.png diff --git a/public/-/emojis/1/track_previous.png b/app/assets/images/emoji/track_previous.png similarity index 100% rename from public/-/emojis/1/track_previous.png rename to app/assets/images/emoji/track_previous.png diff --git a/public/-/emojis/1/trackball.png b/app/assets/images/emoji/trackball.png similarity index 100% rename from public/-/emojis/1/trackball.png rename to app/assets/images/emoji/trackball.png diff --git a/public/-/emojis/1/tractor.png b/app/assets/images/emoji/tractor.png similarity index 100% rename from public/-/emojis/1/tractor.png rename to app/assets/images/emoji/tractor.png diff --git a/public/-/emojis/1/traffic_light.png b/app/assets/images/emoji/traffic_light.png similarity index 100% rename from public/-/emojis/1/traffic_light.png rename to app/assets/images/emoji/traffic_light.png diff --git a/public/-/emojis/1/train.png b/app/assets/images/emoji/train.png similarity index 100% rename from public/-/emojis/1/train.png rename to app/assets/images/emoji/train.png diff --git a/public/-/emojis/1/train2.png b/app/assets/images/emoji/train2.png similarity index 100% rename from public/-/emojis/1/train2.png rename to app/assets/images/emoji/train2.png diff --git a/public/-/emojis/1/tram.png b/app/assets/images/emoji/tram.png similarity index 100% rename from public/-/emojis/1/tram.png rename to app/assets/images/emoji/tram.png diff --git a/public/-/emojis/1/triangular_flag_on_post.png b/app/assets/images/emoji/triangular_flag_on_post.png similarity index 100% rename from public/-/emojis/1/triangular_flag_on_post.png rename to app/assets/images/emoji/triangular_flag_on_post.png diff --git a/public/-/emojis/1/triangular_ruler.png b/app/assets/images/emoji/triangular_ruler.png similarity index 100% rename from public/-/emojis/1/triangular_ruler.png rename to app/assets/images/emoji/triangular_ruler.png diff --git a/public/-/emojis/1/trident.png b/app/assets/images/emoji/trident.png similarity index 100% rename from public/-/emojis/1/trident.png rename to app/assets/images/emoji/trident.png diff --git a/public/-/emojis/1/triumph.png b/app/assets/images/emoji/triumph.png similarity index 100% rename from public/-/emojis/1/triumph.png rename to app/assets/images/emoji/triumph.png diff --git a/public/-/emojis/1/trolleybus.png b/app/assets/images/emoji/trolleybus.png similarity index 100% rename from public/-/emojis/1/trolleybus.png rename to app/assets/images/emoji/trolleybus.png diff --git a/public/-/emojis/1/trophy.png b/app/assets/images/emoji/trophy.png similarity index 100% rename from public/-/emojis/1/trophy.png rename to app/assets/images/emoji/trophy.png diff --git a/public/-/emojis/1/tropical_drink.png b/app/assets/images/emoji/tropical_drink.png similarity index 100% rename from public/-/emojis/1/tropical_drink.png rename to app/assets/images/emoji/tropical_drink.png diff --git a/public/-/emojis/1/tropical_fish.png b/app/assets/images/emoji/tropical_fish.png similarity index 100% rename from public/-/emojis/1/tropical_fish.png rename to app/assets/images/emoji/tropical_fish.png diff --git a/public/-/emojis/1/truck.png b/app/assets/images/emoji/truck.png similarity index 100% rename from public/-/emojis/1/truck.png rename to app/assets/images/emoji/truck.png diff --git a/public/-/emojis/1/trumpet.png b/app/assets/images/emoji/trumpet.png similarity index 100% rename from public/-/emojis/1/trumpet.png rename to app/assets/images/emoji/trumpet.png diff --git a/public/-/emojis/1/tulip.png b/app/assets/images/emoji/tulip.png similarity index 100% rename from public/-/emojis/1/tulip.png rename to app/assets/images/emoji/tulip.png diff --git a/public/-/emojis/1/tumbler_glass.png b/app/assets/images/emoji/tumbler_glass.png similarity index 100% rename from public/-/emojis/1/tumbler_glass.png rename to app/assets/images/emoji/tumbler_glass.png diff --git a/public/-/emojis/1/turkey.png b/app/assets/images/emoji/turkey.png similarity index 100% rename from public/-/emojis/1/turkey.png rename to app/assets/images/emoji/turkey.png diff --git a/public/-/emojis/1/turtle.png b/app/assets/images/emoji/turtle.png similarity index 100% rename from public/-/emojis/1/turtle.png rename to app/assets/images/emoji/turtle.png diff --git a/public/-/emojis/1/tv.png b/app/assets/images/emoji/tv.png similarity index 100% rename from public/-/emojis/1/tv.png rename to app/assets/images/emoji/tv.png diff --git a/public/-/emojis/1/twisted_rightwards_arrows.png b/app/assets/images/emoji/twisted_rightwards_arrows.png similarity index 100% rename from public/-/emojis/1/twisted_rightwards_arrows.png rename to app/assets/images/emoji/twisted_rightwards_arrows.png diff --git a/public/-/emojis/1/two.png b/app/assets/images/emoji/two.png similarity index 100% rename from public/-/emojis/1/two.png rename to app/assets/images/emoji/two.png diff --git a/public/-/emojis/1/two_hearts.png b/app/assets/images/emoji/two_hearts.png similarity index 100% rename from public/-/emojis/1/two_hearts.png rename to app/assets/images/emoji/two_hearts.png diff --git a/public/-/emojis/1/two_men_holding_hands.png b/app/assets/images/emoji/two_men_holding_hands.png similarity index 100% rename from public/-/emojis/1/two_men_holding_hands.png rename to app/assets/images/emoji/two_men_holding_hands.png diff --git a/public/-/emojis/1/two_women_holding_hands.png b/app/assets/images/emoji/two_women_holding_hands.png similarity index 100% rename from public/-/emojis/1/two_women_holding_hands.png rename to app/assets/images/emoji/two_women_holding_hands.png diff --git a/public/-/emojis/1/u5272.png b/app/assets/images/emoji/u5272.png similarity index 100% rename from public/-/emojis/1/u5272.png rename to app/assets/images/emoji/u5272.png diff --git a/public/-/emojis/1/u5408.png b/app/assets/images/emoji/u5408.png similarity index 100% rename from public/-/emojis/1/u5408.png rename to app/assets/images/emoji/u5408.png diff --git a/public/-/emojis/1/u55b6.png b/app/assets/images/emoji/u55b6.png similarity index 100% rename from public/-/emojis/1/u55b6.png rename to app/assets/images/emoji/u55b6.png diff --git a/public/-/emojis/1/u6307.png b/app/assets/images/emoji/u6307.png similarity index 100% rename from public/-/emojis/1/u6307.png rename to app/assets/images/emoji/u6307.png diff --git a/public/-/emojis/1/u6708.png b/app/assets/images/emoji/u6708.png similarity index 100% rename from public/-/emojis/1/u6708.png rename to app/assets/images/emoji/u6708.png diff --git a/public/-/emojis/1/u6709.png b/app/assets/images/emoji/u6709.png similarity index 100% rename from public/-/emojis/1/u6709.png rename to app/assets/images/emoji/u6709.png diff --git a/public/-/emojis/1/u6e80.png b/app/assets/images/emoji/u6e80.png similarity index 100% rename from public/-/emojis/1/u6e80.png rename to app/assets/images/emoji/u6e80.png diff --git a/public/-/emojis/1/u7121.png b/app/assets/images/emoji/u7121.png similarity index 100% rename from public/-/emojis/1/u7121.png rename to app/assets/images/emoji/u7121.png diff --git a/public/-/emojis/1/u7533.png b/app/assets/images/emoji/u7533.png similarity index 100% rename from public/-/emojis/1/u7533.png rename to app/assets/images/emoji/u7533.png diff --git a/public/-/emojis/1/u7981.png b/app/assets/images/emoji/u7981.png similarity index 100% rename from public/-/emojis/1/u7981.png rename to app/assets/images/emoji/u7981.png diff --git a/public/-/emojis/1/u7a7a.png b/app/assets/images/emoji/u7a7a.png similarity index 100% rename from public/-/emojis/1/u7a7a.png rename to app/assets/images/emoji/u7a7a.png diff --git a/public/-/emojis/1/umbrella.png b/app/assets/images/emoji/umbrella.png similarity index 100% rename from public/-/emojis/1/umbrella.png rename to app/assets/images/emoji/umbrella.png diff --git a/public/-/emojis/1/umbrella2.png b/app/assets/images/emoji/umbrella2.png similarity index 100% rename from public/-/emojis/1/umbrella2.png rename to app/assets/images/emoji/umbrella2.png diff --git a/public/-/emojis/1/unamused.png b/app/assets/images/emoji/unamused.png similarity index 100% rename from public/-/emojis/1/unamused.png rename to app/assets/images/emoji/unamused.png diff --git a/public/-/emojis/1/underage.png b/app/assets/images/emoji/underage.png similarity index 100% rename from public/-/emojis/1/underage.png rename to app/assets/images/emoji/underage.png diff --git a/public/-/emojis/1/unicorn.png b/app/assets/images/emoji/unicorn.png similarity index 100% rename from public/-/emojis/1/unicorn.png rename to app/assets/images/emoji/unicorn.png diff --git a/public/-/emojis/1/unlock.png b/app/assets/images/emoji/unlock.png similarity index 100% rename from public/-/emojis/1/unlock.png rename to app/assets/images/emoji/unlock.png diff --git a/public/-/emojis/1/up.png b/app/assets/images/emoji/up.png similarity index 100% rename from public/-/emojis/1/up.png rename to app/assets/images/emoji/up.png diff --git a/public/-/emojis/1/upside_down.png b/app/assets/images/emoji/upside_down.png similarity index 100% rename from public/-/emojis/1/upside_down.png rename to app/assets/images/emoji/upside_down.png diff --git a/public/-/emojis/1/urn.png b/app/assets/images/emoji/urn.png similarity index 100% rename from public/-/emojis/1/urn.png rename to app/assets/images/emoji/urn.png diff --git a/public/-/emojis/1/v.png b/app/assets/images/emoji/v.png similarity index 100% rename from public/-/emojis/1/v.png rename to app/assets/images/emoji/v.png diff --git a/public/-/emojis/1/v_tone1.png b/app/assets/images/emoji/v_tone1.png similarity index 100% rename from public/-/emojis/1/v_tone1.png rename to app/assets/images/emoji/v_tone1.png diff --git a/public/-/emojis/1/v_tone2.png b/app/assets/images/emoji/v_tone2.png similarity index 100% rename from public/-/emojis/1/v_tone2.png rename to app/assets/images/emoji/v_tone2.png diff --git a/public/-/emojis/1/v_tone3.png b/app/assets/images/emoji/v_tone3.png similarity index 100% rename from public/-/emojis/1/v_tone3.png rename to app/assets/images/emoji/v_tone3.png diff --git a/public/-/emojis/1/v_tone4.png b/app/assets/images/emoji/v_tone4.png similarity index 100% rename from public/-/emojis/1/v_tone4.png rename to app/assets/images/emoji/v_tone4.png diff --git a/public/-/emojis/1/v_tone5.png b/app/assets/images/emoji/v_tone5.png similarity index 100% rename from public/-/emojis/1/v_tone5.png rename to app/assets/images/emoji/v_tone5.png diff --git a/public/-/emojis/1/vertical_traffic_light.png b/app/assets/images/emoji/vertical_traffic_light.png similarity index 100% rename from public/-/emojis/1/vertical_traffic_light.png rename to app/assets/images/emoji/vertical_traffic_light.png diff --git a/public/-/emojis/1/vhs.png b/app/assets/images/emoji/vhs.png similarity index 100% rename from public/-/emojis/1/vhs.png rename to app/assets/images/emoji/vhs.png diff --git a/public/-/emojis/1/vibration_mode.png b/app/assets/images/emoji/vibration_mode.png similarity index 100% rename from public/-/emojis/1/vibration_mode.png rename to app/assets/images/emoji/vibration_mode.png diff --git a/public/-/emojis/1/video_camera.png b/app/assets/images/emoji/video_camera.png similarity index 100% rename from public/-/emojis/1/video_camera.png rename to app/assets/images/emoji/video_camera.png diff --git a/public/-/emojis/1/video_game.png b/app/assets/images/emoji/video_game.png similarity index 100% rename from public/-/emojis/1/video_game.png rename to app/assets/images/emoji/video_game.png diff --git a/public/-/emojis/1/violin.png b/app/assets/images/emoji/violin.png similarity index 100% rename from public/-/emojis/1/violin.png rename to app/assets/images/emoji/violin.png diff --git a/public/-/emojis/1/virgo.png b/app/assets/images/emoji/virgo.png similarity index 100% rename from public/-/emojis/1/virgo.png rename to app/assets/images/emoji/virgo.png diff --git a/public/-/emojis/1/volcano.png b/app/assets/images/emoji/volcano.png similarity index 100% rename from public/-/emojis/1/volcano.png rename to app/assets/images/emoji/volcano.png diff --git a/public/-/emojis/1/volleyball.png b/app/assets/images/emoji/volleyball.png similarity index 100% rename from public/-/emojis/1/volleyball.png rename to app/assets/images/emoji/volleyball.png diff --git a/public/-/emojis/1/vs.png b/app/assets/images/emoji/vs.png similarity index 100% rename from public/-/emojis/1/vs.png rename to app/assets/images/emoji/vs.png diff --git a/public/-/emojis/1/vulcan.png b/app/assets/images/emoji/vulcan.png similarity index 100% rename from public/-/emojis/1/vulcan.png rename to app/assets/images/emoji/vulcan.png diff --git a/public/-/emojis/1/vulcan_tone1.png b/app/assets/images/emoji/vulcan_tone1.png similarity index 100% rename from public/-/emojis/1/vulcan_tone1.png rename to app/assets/images/emoji/vulcan_tone1.png diff --git a/public/-/emojis/1/vulcan_tone2.png b/app/assets/images/emoji/vulcan_tone2.png similarity index 100% rename from public/-/emojis/1/vulcan_tone2.png rename to app/assets/images/emoji/vulcan_tone2.png diff --git a/public/-/emojis/1/vulcan_tone3.png b/app/assets/images/emoji/vulcan_tone3.png similarity index 100% rename from public/-/emojis/1/vulcan_tone3.png rename to app/assets/images/emoji/vulcan_tone3.png diff --git a/public/-/emojis/1/vulcan_tone4.png b/app/assets/images/emoji/vulcan_tone4.png similarity index 100% rename from public/-/emojis/1/vulcan_tone4.png rename to app/assets/images/emoji/vulcan_tone4.png diff --git a/public/-/emojis/1/vulcan_tone5.png b/app/assets/images/emoji/vulcan_tone5.png similarity index 100% rename from public/-/emojis/1/vulcan_tone5.png rename to app/assets/images/emoji/vulcan_tone5.png diff --git a/public/-/emojis/1/walking.png b/app/assets/images/emoji/walking.png similarity index 100% rename from public/-/emojis/1/walking.png rename to app/assets/images/emoji/walking.png diff --git a/public/-/emojis/1/walking_tone1.png b/app/assets/images/emoji/walking_tone1.png similarity index 100% rename from public/-/emojis/1/walking_tone1.png rename to app/assets/images/emoji/walking_tone1.png diff --git a/public/-/emojis/1/walking_tone2.png b/app/assets/images/emoji/walking_tone2.png similarity index 100% rename from public/-/emojis/1/walking_tone2.png rename to app/assets/images/emoji/walking_tone2.png diff --git a/public/-/emojis/1/walking_tone3.png b/app/assets/images/emoji/walking_tone3.png similarity index 100% rename from public/-/emojis/1/walking_tone3.png rename to app/assets/images/emoji/walking_tone3.png diff --git a/public/-/emojis/1/walking_tone4.png b/app/assets/images/emoji/walking_tone4.png similarity index 100% rename from public/-/emojis/1/walking_tone4.png rename to app/assets/images/emoji/walking_tone4.png diff --git a/public/-/emojis/1/walking_tone5.png b/app/assets/images/emoji/walking_tone5.png similarity index 100% rename from public/-/emojis/1/walking_tone5.png rename to app/assets/images/emoji/walking_tone5.png diff --git a/public/-/emojis/1/waning_crescent_moon.png b/app/assets/images/emoji/waning_crescent_moon.png similarity index 100% rename from public/-/emojis/1/waning_crescent_moon.png rename to app/assets/images/emoji/waning_crescent_moon.png diff --git a/public/-/emojis/1/waning_gibbous_moon.png b/app/assets/images/emoji/waning_gibbous_moon.png similarity index 100% rename from public/-/emojis/1/waning_gibbous_moon.png rename to app/assets/images/emoji/waning_gibbous_moon.png diff --git a/public/-/emojis/1/warning.png b/app/assets/images/emoji/warning.png similarity index 100% rename from public/-/emojis/1/warning.png rename to app/assets/images/emoji/warning.png diff --git a/public/-/emojis/1/wastebasket.png b/app/assets/images/emoji/wastebasket.png similarity index 100% rename from public/-/emojis/1/wastebasket.png rename to app/assets/images/emoji/wastebasket.png diff --git a/public/-/emojis/1/watch.png b/app/assets/images/emoji/watch.png similarity index 100% rename from public/-/emojis/1/watch.png rename to app/assets/images/emoji/watch.png diff --git a/public/-/emojis/1/water_buffalo.png b/app/assets/images/emoji/water_buffalo.png similarity index 100% rename from public/-/emojis/1/water_buffalo.png rename to app/assets/images/emoji/water_buffalo.png diff --git a/public/-/emojis/1/water_polo.png b/app/assets/images/emoji/water_polo.png similarity index 100% rename from public/-/emojis/1/water_polo.png rename to app/assets/images/emoji/water_polo.png diff --git a/public/-/emojis/1/water_polo_tone1.png b/app/assets/images/emoji/water_polo_tone1.png similarity index 100% rename from public/-/emojis/1/water_polo_tone1.png rename to app/assets/images/emoji/water_polo_tone1.png diff --git a/public/-/emojis/1/water_polo_tone2.png b/app/assets/images/emoji/water_polo_tone2.png similarity index 100% rename from public/-/emojis/1/water_polo_tone2.png rename to app/assets/images/emoji/water_polo_tone2.png diff --git a/public/-/emojis/1/water_polo_tone3.png b/app/assets/images/emoji/water_polo_tone3.png similarity index 100% rename from public/-/emojis/1/water_polo_tone3.png rename to app/assets/images/emoji/water_polo_tone3.png diff --git a/public/-/emojis/1/water_polo_tone4.png b/app/assets/images/emoji/water_polo_tone4.png similarity index 100% rename from public/-/emojis/1/water_polo_tone4.png rename to app/assets/images/emoji/water_polo_tone4.png diff --git a/public/-/emojis/1/water_polo_tone5.png b/app/assets/images/emoji/water_polo_tone5.png similarity index 100% rename from public/-/emojis/1/water_polo_tone5.png rename to app/assets/images/emoji/water_polo_tone5.png diff --git a/public/-/emojis/1/watermelon.png b/app/assets/images/emoji/watermelon.png similarity index 100% rename from public/-/emojis/1/watermelon.png rename to app/assets/images/emoji/watermelon.png diff --git a/public/-/emojis/1/wave.png b/app/assets/images/emoji/wave.png similarity index 100% rename from public/-/emojis/1/wave.png rename to app/assets/images/emoji/wave.png diff --git a/public/-/emojis/1/wave_tone1.png b/app/assets/images/emoji/wave_tone1.png similarity index 100% rename from public/-/emojis/1/wave_tone1.png rename to app/assets/images/emoji/wave_tone1.png diff --git a/public/-/emojis/1/wave_tone2.png b/app/assets/images/emoji/wave_tone2.png similarity index 100% rename from public/-/emojis/1/wave_tone2.png rename to app/assets/images/emoji/wave_tone2.png diff --git a/public/-/emojis/1/wave_tone3.png b/app/assets/images/emoji/wave_tone3.png similarity index 100% rename from public/-/emojis/1/wave_tone3.png rename to app/assets/images/emoji/wave_tone3.png diff --git a/public/-/emojis/1/wave_tone4.png b/app/assets/images/emoji/wave_tone4.png similarity index 100% rename from public/-/emojis/1/wave_tone4.png rename to app/assets/images/emoji/wave_tone4.png diff --git a/public/-/emojis/1/wave_tone5.png b/app/assets/images/emoji/wave_tone5.png similarity index 100% rename from public/-/emojis/1/wave_tone5.png rename to app/assets/images/emoji/wave_tone5.png diff --git a/public/-/emojis/1/wavy_dash.png b/app/assets/images/emoji/wavy_dash.png similarity index 100% rename from public/-/emojis/1/wavy_dash.png rename to app/assets/images/emoji/wavy_dash.png diff --git a/public/-/emojis/1/waxing_crescent_moon.png b/app/assets/images/emoji/waxing_crescent_moon.png similarity index 100% rename from public/-/emojis/1/waxing_crescent_moon.png rename to app/assets/images/emoji/waxing_crescent_moon.png diff --git a/public/-/emojis/1/waxing_gibbous_moon.png b/app/assets/images/emoji/waxing_gibbous_moon.png similarity index 100% rename from public/-/emojis/1/waxing_gibbous_moon.png rename to app/assets/images/emoji/waxing_gibbous_moon.png diff --git a/public/-/emojis/1/wc.png b/app/assets/images/emoji/wc.png similarity index 100% rename from public/-/emojis/1/wc.png rename to app/assets/images/emoji/wc.png diff --git a/public/-/emojis/1/weary.png b/app/assets/images/emoji/weary.png similarity index 100% rename from public/-/emojis/1/weary.png rename to app/assets/images/emoji/weary.png diff --git a/public/-/emojis/1/wedding.png b/app/assets/images/emoji/wedding.png similarity index 100% rename from public/-/emojis/1/wedding.png rename to app/assets/images/emoji/wedding.png diff --git a/public/-/emojis/1/whale.png b/app/assets/images/emoji/whale.png similarity index 100% rename from public/-/emojis/1/whale.png rename to app/assets/images/emoji/whale.png diff --git a/public/-/emojis/1/whale2.png b/app/assets/images/emoji/whale2.png similarity index 100% rename from public/-/emojis/1/whale2.png rename to app/assets/images/emoji/whale2.png diff --git a/public/-/emojis/1/wheel_of_dharma.png b/app/assets/images/emoji/wheel_of_dharma.png similarity index 100% rename from public/-/emojis/1/wheel_of_dharma.png rename to app/assets/images/emoji/wheel_of_dharma.png diff --git a/public/-/emojis/1/wheelchair.png b/app/assets/images/emoji/wheelchair.png similarity index 100% rename from public/-/emojis/1/wheelchair.png rename to app/assets/images/emoji/wheelchair.png diff --git a/public/-/emojis/1/white_check_mark.png b/app/assets/images/emoji/white_check_mark.png similarity index 100% rename from public/-/emojis/1/white_check_mark.png rename to app/assets/images/emoji/white_check_mark.png diff --git a/public/-/emojis/1/white_circle.png b/app/assets/images/emoji/white_circle.png similarity index 100% rename from public/-/emojis/1/white_circle.png rename to app/assets/images/emoji/white_circle.png diff --git a/public/-/emojis/1/white_flower.png b/app/assets/images/emoji/white_flower.png similarity index 100% rename from public/-/emojis/1/white_flower.png rename to app/assets/images/emoji/white_flower.png diff --git a/public/-/emojis/1/white_large_square.png b/app/assets/images/emoji/white_large_square.png similarity index 100% rename from public/-/emojis/1/white_large_square.png rename to app/assets/images/emoji/white_large_square.png diff --git a/public/-/emojis/1/white_medium_small_square.png b/app/assets/images/emoji/white_medium_small_square.png similarity index 100% rename from public/-/emojis/1/white_medium_small_square.png rename to app/assets/images/emoji/white_medium_small_square.png diff --git a/public/-/emojis/1/white_medium_square.png b/app/assets/images/emoji/white_medium_square.png similarity index 100% rename from public/-/emojis/1/white_medium_square.png rename to app/assets/images/emoji/white_medium_square.png diff --git a/public/-/emojis/1/white_small_square.png b/app/assets/images/emoji/white_small_square.png similarity index 100% rename from public/-/emojis/1/white_small_square.png rename to app/assets/images/emoji/white_small_square.png diff --git a/public/-/emojis/1/white_square_button.png b/app/assets/images/emoji/white_square_button.png similarity index 100% rename from public/-/emojis/1/white_square_button.png rename to app/assets/images/emoji/white_square_button.png diff --git a/public/-/emojis/1/white_sun_cloud.png b/app/assets/images/emoji/white_sun_cloud.png similarity index 100% rename from public/-/emojis/1/white_sun_cloud.png rename to app/assets/images/emoji/white_sun_cloud.png diff --git a/public/-/emojis/1/white_sun_rain_cloud.png b/app/assets/images/emoji/white_sun_rain_cloud.png similarity index 100% rename from public/-/emojis/1/white_sun_rain_cloud.png rename to app/assets/images/emoji/white_sun_rain_cloud.png diff --git a/public/-/emojis/1/white_sun_small_cloud.png b/app/assets/images/emoji/white_sun_small_cloud.png similarity index 100% rename from public/-/emojis/1/white_sun_small_cloud.png rename to app/assets/images/emoji/white_sun_small_cloud.png diff --git a/public/-/emojis/1/wilted_rose.png b/app/assets/images/emoji/wilted_rose.png similarity index 100% rename from public/-/emojis/1/wilted_rose.png rename to app/assets/images/emoji/wilted_rose.png diff --git a/public/-/emojis/1/wind_blowing_face.png b/app/assets/images/emoji/wind_blowing_face.png similarity index 100% rename from public/-/emojis/1/wind_blowing_face.png rename to app/assets/images/emoji/wind_blowing_face.png diff --git a/public/-/emojis/1/wind_chime.png b/app/assets/images/emoji/wind_chime.png similarity index 100% rename from public/-/emojis/1/wind_chime.png rename to app/assets/images/emoji/wind_chime.png diff --git a/public/-/emojis/1/wine_glass.png b/app/assets/images/emoji/wine_glass.png similarity index 100% rename from public/-/emojis/1/wine_glass.png rename to app/assets/images/emoji/wine_glass.png diff --git a/public/-/emojis/1/wink.png b/app/assets/images/emoji/wink.png similarity index 100% rename from public/-/emojis/1/wink.png rename to app/assets/images/emoji/wink.png diff --git a/public/-/emojis/1/wolf.png b/app/assets/images/emoji/wolf.png similarity index 100% rename from public/-/emojis/1/wolf.png rename to app/assets/images/emoji/wolf.png diff --git a/public/-/emojis/1/woman.png b/app/assets/images/emoji/woman.png similarity index 100% rename from public/-/emojis/1/woman.png rename to app/assets/images/emoji/woman.png diff --git a/public/-/emojis/1/woman_tone1.png b/app/assets/images/emoji/woman_tone1.png similarity index 100% rename from public/-/emojis/1/woman_tone1.png rename to app/assets/images/emoji/woman_tone1.png diff --git a/public/-/emojis/1/woman_tone2.png b/app/assets/images/emoji/woman_tone2.png similarity index 100% rename from public/-/emojis/1/woman_tone2.png rename to app/assets/images/emoji/woman_tone2.png diff --git a/public/-/emojis/1/woman_tone3.png b/app/assets/images/emoji/woman_tone3.png similarity index 100% rename from public/-/emojis/1/woman_tone3.png rename to app/assets/images/emoji/woman_tone3.png diff --git a/public/-/emojis/1/woman_tone4.png b/app/assets/images/emoji/woman_tone4.png similarity index 100% rename from public/-/emojis/1/woman_tone4.png rename to app/assets/images/emoji/woman_tone4.png diff --git a/public/-/emojis/1/woman_tone5.png b/app/assets/images/emoji/woman_tone5.png similarity index 100% rename from public/-/emojis/1/woman_tone5.png rename to app/assets/images/emoji/woman_tone5.png diff --git a/public/-/emojis/1/womans_clothes.png b/app/assets/images/emoji/womans_clothes.png similarity index 100% rename from public/-/emojis/1/womans_clothes.png rename to app/assets/images/emoji/womans_clothes.png diff --git a/public/-/emojis/1/womans_hat.png b/app/assets/images/emoji/womans_hat.png similarity index 100% rename from public/-/emojis/1/womans_hat.png rename to app/assets/images/emoji/womans_hat.png diff --git a/public/-/emojis/1/womens.png b/app/assets/images/emoji/womens.png similarity index 100% rename from public/-/emojis/1/womens.png rename to app/assets/images/emoji/womens.png diff --git a/public/-/emojis/1/worried.png b/app/assets/images/emoji/worried.png similarity index 100% rename from public/-/emojis/1/worried.png rename to app/assets/images/emoji/worried.png diff --git a/public/-/emojis/1/wrench.png b/app/assets/images/emoji/wrench.png similarity index 100% rename from public/-/emojis/1/wrench.png rename to app/assets/images/emoji/wrench.png diff --git a/public/-/emojis/1/wrestlers.png b/app/assets/images/emoji/wrestlers.png similarity index 100% rename from public/-/emojis/1/wrestlers.png rename to app/assets/images/emoji/wrestlers.png diff --git a/public/-/emojis/1/wrestlers_tone1.png b/app/assets/images/emoji/wrestlers_tone1.png similarity index 100% rename from public/-/emojis/1/wrestlers_tone1.png rename to app/assets/images/emoji/wrestlers_tone1.png diff --git a/public/-/emojis/1/wrestlers_tone2.png b/app/assets/images/emoji/wrestlers_tone2.png similarity index 100% rename from public/-/emojis/1/wrestlers_tone2.png rename to app/assets/images/emoji/wrestlers_tone2.png diff --git a/public/-/emojis/1/wrestlers_tone3.png b/app/assets/images/emoji/wrestlers_tone3.png similarity index 100% rename from public/-/emojis/1/wrestlers_tone3.png rename to app/assets/images/emoji/wrestlers_tone3.png diff --git a/public/-/emojis/1/wrestlers_tone4.png b/app/assets/images/emoji/wrestlers_tone4.png similarity index 100% rename from public/-/emojis/1/wrestlers_tone4.png rename to app/assets/images/emoji/wrestlers_tone4.png diff --git a/public/-/emojis/1/wrestlers_tone5.png b/app/assets/images/emoji/wrestlers_tone5.png similarity index 100% rename from public/-/emojis/1/wrestlers_tone5.png rename to app/assets/images/emoji/wrestlers_tone5.png diff --git a/public/-/emojis/1/writing_hand.png b/app/assets/images/emoji/writing_hand.png similarity index 100% rename from public/-/emojis/1/writing_hand.png rename to app/assets/images/emoji/writing_hand.png diff --git a/public/-/emojis/1/writing_hand_tone1.png b/app/assets/images/emoji/writing_hand_tone1.png similarity index 100% rename from public/-/emojis/1/writing_hand_tone1.png rename to app/assets/images/emoji/writing_hand_tone1.png diff --git a/public/-/emojis/1/writing_hand_tone2.png b/app/assets/images/emoji/writing_hand_tone2.png similarity index 100% rename from public/-/emojis/1/writing_hand_tone2.png rename to app/assets/images/emoji/writing_hand_tone2.png diff --git a/public/-/emojis/1/writing_hand_tone3.png b/app/assets/images/emoji/writing_hand_tone3.png similarity index 100% rename from public/-/emojis/1/writing_hand_tone3.png rename to app/assets/images/emoji/writing_hand_tone3.png diff --git a/public/-/emojis/1/writing_hand_tone4.png b/app/assets/images/emoji/writing_hand_tone4.png similarity index 100% rename from public/-/emojis/1/writing_hand_tone4.png rename to app/assets/images/emoji/writing_hand_tone4.png diff --git a/public/-/emojis/1/writing_hand_tone5.png b/app/assets/images/emoji/writing_hand_tone5.png similarity index 100% rename from public/-/emojis/1/writing_hand_tone5.png rename to app/assets/images/emoji/writing_hand_tone5.png diff --git a/public/-/emojis/1/x.png b/app/assets/images/emoji/x.png similarity index 100% rename from public/-/emojis/1/x.png rename to app/assets/images/emoji/x.png diff --git a/public/-/emojis/1/yellow_heart.png b/app/assets/images/emoji/yellow_heart.png similarity index 100% rename from public/-/emojis/1/yellow_heart.png rename to app/assets/images/emoji/yellow_heart.png diff --git a/public/-/emojis/1/yen.png b/app/assets/images/emoji/yen.png similarity index 100% rename from public/-/emojis/1/yen.png rename to app/assets/images/emoji/yen.png diff --git a/public/-/emojis/1/yin_yang.png b/app/assets/images/emoji/yin_yang.png similarity index 100% rename from public/-/emojis/1/yin_yang.png rename to app/assets/images/emoji/yin_yang.png diff --git a/public/-/emojis/1/yum.png b/app/assets/images/emoji/yum.png similarity index 100% rename from public/-/emojis/1/yum.png rename to app/assets/images/emoji/yum.png diff --git a/public/-/emojis/1/zap.png b/app/assets/images/emoji/zap.png similarity index 100% rename from public/-/emojis/1/zap.png rename to app/assets/images/emoji/zap.png diff --git a/public/-/emojis/1/zero.png b/app/assets/images/emoji/zero.png similarity index 100% rename from public/-/emojis/1/zero.png rename to app/assets/images/emoji/zero.png diff --git a/public/-/emojis/1/zipper_mouth.png b/app/assets/images/emoji/zipper_mouth.png similarity index 100% rename from public/-/emojis/1/zipper_mouth.png rename to app/assets/images/emoji/zipper_mouth.png diff --git a/public/-/emojis/1/zzz.png b/app/assets/images/emoji/zzz.png similarity index 100% rename from public/-/emojis/1/zzz.png rename to app/assets/images/emoji/zzz.png diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index aeb88715c1111104884bccf9d4c2cf7864456f6f..73ce3e760ab3c0e3c28a75cea8b182a04cd5599c 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -615,18 +615,10 @@ export class AwardsHandler { let awardsHandlerPromise = null; export default function loadAwardsHandler(reload = false) { if (!awardsHandlerPromise || reload) { - awardsHandlerPromise = new Promise((resolve, reject) => { - import(/* webpackChunkName: 'emoji' */ './emoji') - .then(Emoji => { - Emoji.initEmojiMap() - .then(() => { - const awardsHandler = new AwardsHandler(Emoji); - awardsHandler.bindEvents(); - resolve(awardsHandler); - }) - .catch(() => reject); - }) - .catch(() => reject); + awardsHandlerPromise = import(/* webpackChunkName: 'emoji' */ './emoji').then(Emoji => { + const awardsHandler = new AwardsHandler(Emoji); + awardsHandler.bindEvents(); + return awardsHandler; }); } return awardsHandlerPromise; diff --git a/app/assets/javascripts/behaviors/gl_emoji.js b/app/assets/javascripts/behaviors/gl_emoji.js index 9034563d9b31f164d4cad042723016acd8b92fab..d1d75658181a5df95eddbf4420b85c8de7ae5198 100644 --- a/app/assets/javascripts/behaviors/gl_emoji.js +++ b/app/assets/javascripts/behaviors/gl_emoji.js @@ -1,74 +1,47 @@ import 'document-register-element'; import isEmojiUnicodeSupported from '../emoji/support'; -import { initEmojiMap, getEmojiInfo, emojiFallbackImageSrc, emojiImageTag } from '../emoji'; class GlEmoji extends HTMLElement { constructor() { super(); - let emojiUnicode = this.textContent.trim(); - const { fallbackSpriteClass, fallbackSrc, forceFallback } = this.dataset; - let { name, unicodeVersion } = this.dataset; - - initEmojiMap() - .then(() => { - if (!unicodeVersion) { - const emojiInfo = getEmojiInfo(name); - - if (emojiInfo) { - if (name !== emojiInfo.name) { - ({ name } = emojiInfo); - this.dataset.name = emojiInfo.name; - } - unicodeVersion = emojiInfo.u; - this.dataset.uni = unicodeVersion; - - if (forceFallback === 'true' && !fallbackSpriteClass) { - this.innerHTML = emojiImageTag(name, emojiFallbackImageSrc(name)); - } else { - emojiUnicode = emojiInfo.e; - this.innerHTML = emojiInfo.e; - } - - this.title = emojiInfo.d; - } + const emojiUnicode = this.textContent.trim(); + const { name, unicodeVersion, fallbackSrc, fallbackSpriteClass } = this.dataset; + + const isEmojiUnicode = + this.childNodes && + Array.prototype.every.call(this.childNodes, childNode => childNode.nodeType === 3); + const hasImageFallback = fallbackSrc && fallbackSrc.length > 0; + const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0; + + if (emojiUnicode && isEmojiUnicode && !isEmojiUnicodeSupported(emojiUnicode, unicodeVersion)) { + // CSS sprite fallback takes precedence over image fallback + if (hasCssSpriteFalback) { + if (!gon.emoji_sprites_css_added && gon.emoji_sprites_css_path) { + const emojiSpriteLinkTag = document.createElement('link'); + emojiSpriteLinkTag.setAttribute('rel', 'stylesheet'); + emojiSpriteLinkTag.setAttribute('href', gon.emoji_sprites_css_path); + document.head.appendChild(emojiSpriteLinkTag); + gon.emoji_sprites_css_added = true; } - - const isEmojiUnicode = - this.childNodes && - Array.prototype.every.call(this.childNodes, childNode => childNode.nodeType === 3); - const hasImageFallback = fallbackSrc && fallbackSrc.length > 0; - const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0; - - if ( - emojiUnicode && - isEmojiUnicode && - !isEmojiUnicodeSupported(emojiUnicode, unicodeVersion) - ) { - // CSS sprite fallback takes precedence over image fallback - if (hasCssSpriteFalback) { - if (!gon.emoji_sprites_css_added && gon.emoji_sprites_css_path) { - const emojiSpriteLinkTag = document.createElement('link'); - emojiSpriteLinkTag.setAttribute('rel', 'stylesheet'); - emojiSpriteLinkTag.setAttribute('href', gon.emoji_sprites_css_path); - document.head.appendChild(emojiSpriteLinkTag); - gon.emoji_sprites_css_added = true; + // IE 11 doesn't like adding multiple at once :( + this.classList.add('emoji-icon'); + this.classList.add(fallbackSpriteClass); + } else { + import(/* webpackChunkName: 'emoji' */ '../emoji') + .then(({ emojiImageTag, emojiFallbackImageSrc }) => { + if (hasImageFallback) { + this.innerHTML = emojiImageTag(name, fallbackSrc); + } else { + const src = emojiFallbackImageSrc(name); + this.innerHTML = emojiImageTag(name, src); } - // IE 11 doesn't like adding multiple at once :( - this.classList.add('emoji-icon'); - this.classList.add(fallbackSpriteClass); - } else if (hasImageFallback) { - this.innerHTML = emojiImageTag(name, fallbackSrc); - } else { - const src = emojiFallbackImageSrc(name); - this.innerHTML = emojiImageTag(name, src); - } - } - }) - .catch(error => { - // Only reject is already handled in initEmojiMap - throw error; - }); + }) + .catch(() => { + // do nothing + }); + } + } } } diff --git a/app/assets/javascripts/diffs/components/diff_file_header.vue b/app/assets/javascripts/diffs/components/diff_file_header.vue index a5125c3d07764db6bc5f594742a3f6a797588a3d..d41d1464166e883a6ff024669c86e6ea462fc7aa 100644 --- a/app/assets/javascripts/diffs/components/diff_file_header.vue +++ b/app/assets/javascripts/diffs/components/diff_file_header.vue @@ -128,9 +128,6 @@ export default { isModeChanged() { return this.diffFile.viewer.name === diffViewerModes.mode_changed; }, - showExpandDiffToFullFileEnabled() { - return gon.features.expandDiffFullFile && !this.diffFile.is_fully_expanded; - }, }, mounted() { polyfillSticky(this.$refs.header); @@ -258,7 +255,7 @@ export default { diff --git a/app/assets/javascripts/emoji/index.js b/app/assets/javascripts/emoji/index.js index 36542315c4c30dfbccb04b51114a62add16f4657..cd8dff40b88147da42cacaeb40c2318670a65768 100644 --- a/app/assets/javascripts/emoji/index.js +++ b/app/assets/javascripts/emoji/index.js @@ -1,58 +1,13 @@ import _ from 'underscore'; -import createFlash from '~/flash'; -import { s__ } from '~/locale'; +import emojiMap from 'emojis/digests.json'; import emojiAliases from 'emojis/aliases.json'; -import axios from '../lib/utils/axios_utils'; -import AccessorUtilities from '../lib/utils/accessor'; - -let emojiMap = null; -let validEmojiNames = null; - -export const EMOJI_VERSION = '1'; -const EMOJI_VERSION_LOCALSTORAGE = `EMOJIS_${EMOJI_VERSION}`; - -const isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe(); - -export function initEmojiMap() { - return new Promise((resolve, reject) => { - if (emojiMap) { - resolve(emojiMap); - } else if (isLocalStorageAvailable && window.localStorage.getItem(EMOJI_VERSION_LOCALSTORAGE)) { - emojiMap = JSON.parse(window.localStorage.getItem(EMOJI_VERSION_LOCALSTORAGE)); - validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; - resolve(emojiMap); - } else { - // We load the JSON from server - axios - .get( - `${gon.asset_host || ''}${gon.relative_url_root || - ''}/-/emojis/${EMOJI_VERSION}/emojis.json`, - ) - .then(({ data }) => { - emojiMap = data; - validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; - resolve(emojiMap); - if (isLocalStorageAvailable) { - window.localStorage.setItem(EMOJI_VERSION_LOCALSTORAGE, JSON.stringify(emojiMap)); - } - }) - .catch(err => { - createFlash(s__('Emojis|Something went wrong while loading emojis.')); - reject(err); - }); - } - }); -} +export const validEmojiNames = [...Object.keys(emojiMap), ...Object.keys(emojiAliases)]; export function normalizeEmojiName(name) { return Object.prototype.hasOwnProperty.call(emojiAliases, name) ? emojiAliases[name] : name; } -export function getValidEmojiNames() { - return validEmojiNames; -} - export function isEmojiNameValid(name) { return validEmojiNames.indexOf(name) >= 0; } @@ -81,8 +36,8 @@ export function getEmojiCategoryMap() { }; Object.keys(emojiMap).forEach(name => { const emoji = emojiMap[name]; - if (emojiCategoryMap[emoji.c]) { - emojiCategoryMap[emoji.c].push(name); + if (emojiCategoryMap[emoji.category]) { + emojiCategoryMap[emoji.category].push(name); } }); } @@ -103,9 +58,8 @@ export function getEmojiInfo(query) { } export function emojiFallbackImageSrc(inputName) { - const { name } = getEmojiInfo(inputName); - return `${gon.asset_host || ''}${gon.relative_url_root || - ''}/-/emojis/${EMOJI_VERSION}/${name}.png`; + const { name, digest } = getEmojiInfo(inputName); + return `${gon.asset_host || ''}${gon.relative_url_root || ''}/assets/emoji/${name}-${digest}.png`; } export function emojiImageTag(name, src) { @@ -114,8 +68,9 @@ export function emojiImageTag(name, src) { export function glEmojiTag(inputName, options) { const opts = { sprite: false, forceFallback: false, ...options }; - const name = normalizeEmojiName(inputName); + const { name, ...emojiInfo } = getEmojiInfo(inputName); + const fallbackImageSrc = emojiFallbackImageSrc(name); const fallbackSpriteClass = `emoji-${name}`; const classList = []; @@ -124,19 +79,24 @@ export function glEmojiTag(inputName, options) { classList.push(fallbackSpriteClass); } const classAttribute = classList.length > 0 ? `class="${classList.join(' ')}"` : ''; - const fallbackSpriteAttribute = opts.sprite ? `data-fallback-sprite-class="${fallbackSpriteClass}"` : ''; - const forceFallbackAttribute = opts.forceFallback ? 'data-force-fallback="true"' : ''; + let contents = emojiInfo.moji; + if (opts.forceFallback && !opts.sprite) { + contents = emojiImageTag(name, fallbackImageSrc); + } return ` + ${contents} `; } diff --git a/app/assets/javascripts/emoji/support/index.js b/app/assets/javascripts/emoji/support/index.js index ed9bfb8bc78e4f552bd63aa862b44445b5d16c2a..1f7852dd487dc02b585589038bcbb009046dbcbc 100644 --- a/app/assets/javascripts/emoji/support/index.js +++ b/app/assets/javascripts/emoji/support/index.js @@ -5,9 +5,6 @@ import getUnicodeSupportMap from './unicode_support_map'; let browserUnicodeSupportMap; export default function isEmojiUnicodeSupportedByBrowser(emojiUnicode, unicodeVersion) { - // Our Spec browser would fail producing emoji maps - if (/\bHeadlessChrome\//.test(navigator.userAgent)) return true; - browserUnicodeSupportMap = browserUnicodeSupportMap || getUnicodeSupportMap(); return isEmojiUnicodeSupported(browserUnicodeSupportMap, emojiUnicode, unicodeVersion); } diff --git a/app/assets/javascripts/filtered_search/visual_token_value.js b/app/assets/javascripts/filtered_search/visual_token_value.js index 7f6f41c18f790aea9ab2cf821ac5193483e7a7bb..a9d5ba8faa8d7221168abbe9c571657e1911b90b 100644 --- a/app/assets/javascripts/filtered_search/visual_token_value.js +++ b/app/assets/javascripts/filtered_search/visual_token_value.js @@ -13,9 +13,9 @@ export default class VisualTokenValue { } render(tokenValueContainer, tokenValueElement) { - const { tokenType } = this; + const { tokenType, tokenValue } = this; - if (['none', 'any'].includes(tokenType)) { + if (['none', 'any'].includes(tokenValue.toLowerCase())) { return; } @@ -102,24 +102,15 @@ export default class VisualTokenValue { return ( import(/* webpackChunkName: 'emoji' */ '../emoji') .then(Emoji => { - Emoji.initEmojiMap() - .then(() => { - if (!Emoji.isEmojiNameValid(value)) { - return; - } - - container.dataset.originalValue = value; - element.innerHTML = Emoji.glEmojiTag(value); - }) - // ignore error and leave emoji name in the search bar - .catch(err => { - throw err; - }); + if (!Emoji.isEmojiNameValid(value)) { + return; + } + + container.dataset.originalValue = value; + element.innerHTML = Emoji.glEmojiTag(value); }) // ignore error and leave emoji name in the search bar - .catch(importError => { - throw importError; - }) + .catch(() => {}) ); } } diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js index 8c3afc1305e5b36e837c4cc7eb90c6cf0042c759..6ad58adb13d108993ef55c217ad3eb17762c09da 100644 --- a/app/assets/javascripts/gfm_auto_complete.js +++ b/app/assets/javascripts/gfm_auto_complete.js @@ -494,15 +494,9 @@ class GfmAutoComplete { this.loadData($input, at, this.cachedData[at]); } else if (GfmAutoComplete.atTypeMap[at] === 'emojis') { import(/* webpackChunkName: 'emoji' */ './emoji') - .then(({ initEmojiMap, getValidEmojiNames, glEmojiTag }) => { - initEmojiMap() - .then(() => { - this.loadData($input, at, getValidEmojiNames()); - GfmAutoComplete.glEmojiTag = glEmojiTag; - }) - .catch(() => { - this.isLoadingData[at] = false; - }); + .then(({ validEmojiNames, glEmojiTag }) => { + this.loadData($input, at, validEmojiNames); + GfmAutoComplete.glEmojiTag = glEmojiTag; }) .catch(() => { this.isLoadingData[at] = false; diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js index 94b78907d9a7f39ef2db9647f817715ea29d0d22..b3508f36cf915532b5f40fac0f5f81d5aecbaac5 100644 --- a/app/assets/javascripts/issue.js +++ b/app/assets/javascripts/issue.js @@ -16,7 +16,9 @@ export default class Issue { Issue.createMrDropdownWrap = document.querySelector('.create-mr-dropdown-wrap'); Issue.initMergeRequests(); - Issue.initRelatedBranches(); + if (document.querySelector('#related-branches')) { + Issue.initRelatedBranches(); + } this.closeButtons = $('a.btn-close'); this.reopenButtons = $('a.btn-reopen'); diff --git a/app/assets/javascripts/lib/utils/simple_poll.js b/app/assets/javascripts/lib/utils/simple_poll.js index 473f179ad86e99048d20846334abb5db899693c6..576a9ec880cb6e52333a3a74025f58ca609442a5 100644 --- a/app/assets/javascripts/lib/utils/simple_poll.js +++ b/app/assets/javascripts/lib/utils/simple_poll.js @@ -1,10 +1,10 @@ -export default (fn, interval = 2000, timeout = 60000) => { +export default (fn, { interval = 2000, timeout = 60000 } = {}) => { const startTime = Date.now(); return new Promise((resolve, reject) => { const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg)); const next = () => { - if (Date.now() - startTime < timeout) { + if (timeout === 0 || Date.now() - startTime < timeout) { setTimeout(fn.bind(null, next, stop), interval); } else { reject(new Error('SIMPLE_POLL_TIMEOUT')); diff --git a/app/assets/javascripts/mirrors/ssh_mirror.js b/app/assets/javascripts/mirrors/ssh_mirror.js index 5bdf5d6277a0b55782354134ffc7138624c6d6ac..547c078ec55f35dcfe8c4bda1ecd9cdddf78db2f 100644 --- a/app/assets/javascripts/mirrors/ssh_mirror.js +++ b/app/assets/javascripts/mirrors/ssh_mirror.js @@ -20,6 +20,7 @@ export default class SSHMirror { this.$btnDetectHostKeys = this.$form.find('.js-detect-host-keys'); this.$btnSSHHostsShowAdvanced = this.$form.find('.btn-show-advanced'); this.$dropdownAuthType = this.$form.find('.js-mirror-auth-type'); + this.$hiddenAuthType = this.$form.find('.js-hidden-mirror-auth-type'); this.$wellAuthTypeChanging = this.$form.find('.js-well-changing-auth'); this.$wellPasswordAuth = this.$form.find('.js-well-password-auth'); @@ -167,6 +168,7 @@ export default class SSHMirror { this.$wellPasswordAuth.collapse('hide'); this.$wellSSHAuth.collapse('hide'); + this.updateHiddenAuthType(selectedAuthType); // This request should happen only if selected Auth type was SSH // and SSH Public key was not present on page load @@ -234,6 +236,12 @@ export default class SSHMirror { toggleAuthWell(authType) { this.$wellPasswordAuth.collapse(authType === AUTH_METHOD.PASSWORD ? 'show' : 'hide'); this.$wellSSHAuth.collapse(authType === AUTH_METHOD.SSH ? 'show' : 'hide'); + this.updateHiddenAuthType(authType); + } + + updateHiddenAuthType(authType) { + this.$hiddenAuthType.val(authType); + this.$hiddenAuthType.prop('disabled', authType === AUTH_METHOD.SSH); } /** diff --git a/app/assets/javascripts/notes/components/note_actions/reply_button.vue b/app/assets/javascripts/notes/components/note_actions/reply_button.vue index f50cab81efe5b9d75e4209c852b32be864e0d086..be8e42af9eac4a3b553626208ab78f7d55d20e02 100644 --- a/app/assets/javascripts/notes/components/note_actions/reply_button.vue +++ b/app/assets/javascripts/notes/components/note_actions/reply_button.vue @@ -18,7 +18,7 @@ export default {
{ + initGroupDetails('details'); +}); diff --git a/app/assets/javascripts/pages/groups/shared/group_details.js b/app/assets/javascripts/pages/groups/shared/group_details.js new file mode 100644 index 0000000000000000000000000000000000000000..01ef3f1db2bdc0819587f1e4abf127bf56d27b50 --- /dev/null +++ b/app/assets/javascripts/pages/groups/shared/group_details.js @@ -0,0 +1,31 @@ +/* eslint-disable no-new */ + +import { getPagePath } from '~/lib/utils/common_utils'; +import { ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED } from '~/groups/constants'; +import NewGroupChild from '~/groups/new_group_child'; +import notificationsDropdown from '~/notifications_dropdown'; +import NotificationsForm from '~/notifications_form'; +import ProjectsList from '~/projects_list'; +import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; +import GroupTabs from './group_tabs'; + +export default function initGroupDetails(actionName = 'show') { + const newGroupChildWrapper = document.querySelector('.js-new-project-subgroup'); + const loadableActions = [ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED]; + const paths = window.location.pathname.split('/'); + const subpath = paths[paths.length - 1]; + let action = loadableActions.includes(subpath) ? subpath : getPagePath(1); + if (actionName && action === actionName) { + action = 'show'; // 'show' resets GroupTabs to default action through base class + } + + new GroupTabs({ parentEl: '.groups-listing', action }); + new ShortcutsNavigation(); + new NotificationsForm(); + notificationsDropdown(); + new ProjectsList(); + + if (newGroupChildWrapper) { + new NewGroupChild(newGroupChildWrapper); + } +} diff --git a/app/assets/javascripts/pages/groups/show/group_tabs.js b/app/assets/javascripts/pages/groups/shared/group_tabs.js similarity index 100% rename from app/assets/javascripts/pages/groups/show/group_tabs.js rename to app/assets/javascripts/pages/groups/shared/group_tabs.js diff --git a/app/assets/javascripts/pages/groups/show/index.js b/app/assets/javascripts/pages/groups/show/index.js index 3a45fd70d020972cf72841f8b1c3d0582ab2f8c4..af924e74f1f29d59cfd7e311fe332f470f9cd08d 100644 --- a/app/assets/javascripts/pages/groups/show/index.js +++ b/app/assets/javascripts/pages/groups/show/index.js @@ -1,28 +1,5 @@ -/* eslint-disable no-new */ - -import { getPagePath } from '~/lib/utils/common_utils'; -import { ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED } from '~/groups/constants'; -import NewGroupChild from '~/groups/new_group_child'; -import notificationsDropdown from '~/notifications_dropdown'; -import NotificationsForm from '~/notifications_form'; -import ProjectsList from '~/projects_list'; -import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; -import GroupTabs from './group_tabs'; +import initGroupDetails from '../shared/group_details'; document.addEventListener('DOMContentLoaded', () => { - const newGroupChildWrapper = document.querySelector('.js-new-project-subgroup'); - const loadableActions = [ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED]; - const paths = window.location.pathname.split('/'); - const subpath = paths[paths.length - 1]; - const action = loadableActions.includes(subpath) ? subpath : getPagePath(1); - - new GroupTabs({ parentEl: '.groups-listing', action }); - new ShortcutsNavigation(); - new NotificationsForm(); - notificationsDropdown(); - new ProjectsList(); - - if (newGroupChildWrapper) { - new NewGroupChild(newGroupChildWrapper); - } + initGroupDetails(); }); diff --git a/app/assets/javascripts/pages/profiles/show/index.js b/app/assets/javascripts/pages/profiles/show/index.js index c9d3bbc8c396632e3f104d5dfb7c4fcde5109450..0dd0d5336fc459c16a83a84111baa74390a30089 100644 --- a/app/assets/javascripts/pages/profiles/show/index.js +++ b/app/assets/javascripts/pages/profiles/show/index.js @@ -56,34 +56,30 @@ document.addEventListener('DOMContentLoaded', () => { import(/* webpackChunkName: 'emoji' */ '~/emoji') .then(Emoji => { - Emoji.initEmojiMap() - .then(() => { - const emojiMenu = new EmojiMenu( - Emoji, - toggleEmojiMenuButtonSelector, - 'js-status-emoji-menu', - selectEmojiCallback, - ); - emojiMenu.bindEvents(); + const emojiMenu = new EmojiMenu( + Emoji, + toggleEmojiMenuButtonSelector, + 'js-status-emoji-menu', + selectEmojiCallback, + ); + emojiMenu.bindEvents(); - const defaultEmojiTag = Emoji.glEmojiTag(defaultStatusEmoji); - statusMessageField.addEventListener('input', () => { - const hasStatusMessage = statusMessageField.value.trim() !== ''; - const statusEmoji = findStatusEmoji(); - if (hasStatusMessage && statusEmoji) { - return; - } + const defaultEmojiTag = Emoji.glEmojiTag(defaultStatusEmoji); + statusMessageField.addEventListener('input', () => { + const hasStatusMessage = statusMessageField.value.trim() !== ''; + const statusEmoji = findStatusEmoji(); + if (hasStatusMessage && statusEmoji) { + return; + } - if (hasStatusMessage) { - toggleNoEmojiPlaceholder(false); - toggleEmojiMenuButton.innerHTML += defaultEmojiTag; - } else if (statusEmoji.dataset.name === defaultStatusEmoji) { - toggleNoEmojiPlaceholder(true); - removeStatusEmoji(); - } - }); - }) - .catch(() => createFlash('Failed to load emoji list.')); + if (hasStatusMessage) { + toggleNoEmojiPlaceholder(false); + toggleEmojiMenuButton.innerHTML += defaultEmojiTag; + } else if (statusEmoji.dataset.name === defaultStatusEmoji) { + toggleNoEmojiPlaceholder(true); + removeStatusEmoji(); + } + }); }) .catch(() => createFlash('Failed to load emoji list.')); }); diff --git a/app/assets/javascripts/pages/users/user_tabs.js b/app/assets/javascripts/pages/users/user_tabs.js index 636308c54012dae7ac4e992d384fbf31cc9ca1d6..7f800d2083591cc87e1ad016e9c4ffe07490ec89 100644 --- a/app/assets/javascripts/pages/users/user_tabs.js +++ b/app/assets/javascripts/pages/users/user_tabs.js @@ -91,6 +91,7 @@ export default class UserTabs { this.actions = Object.keys(this.loaded); this.bindEvents(); + // TODO: refactor to make this configurable via constructor params with a default value of 'show' if (this.action === 'show') { this.action = this.defaultAction; } diff --git a/app/assets/javascripts/pdf/index.vue b/app/assets/javascripts/pdf/index.vue index cdf1257b4e33a1c87ba4759a3c7f2f92d71fad82..dc5f9ba960757b5cf784747bd5d3a790da783935 100644 --- a/app/assets/javascripts/pdf/index.vue +++ b/app/assets/javascripts/pdf/index.vue @@ -28,7 +28,7 @@ export default { }, watch: { pdf: 'load' }, mounted() { - pdfjsLib.PDFJS.workerSrc = workerSrc; + pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc; if (this.hasPDF) this.load(); }, methods: { diff --git a/app/assets/javascripts/pipelines/pipeline_details_mediator.js b/app/assets/javascripts/pipelines/pipeline_details_mediator.js index dd4fdd060b502d79244ae8a6f712c0f367ffa8c8..562cf01d6395c4287445c97918e26c58fa11e1f9 100644 --- a/app/assets/javascripts/pipelines/pipeline_details_mediator.js +++ b/app/assets/javascripts/pipelines/pipeline_details_mediator.js @@ -19,6 +19,7 @@ export default class pipelinesMediator { this.poll = new Poll({ resource: this.service, method: 'getPipeline', + data: this.store.state.expandedPipelines ? this.getExpandedParameters() : undefined, successCallback: this.successCallback.bind(this), errorCallback: this.errorCallback.bind(this), }); @@ -56,6 +57,19 @@ export default class pipelinesMediator { .getPipeline() .then(response => this.successCallback(response)) .catch(() => this.errorCallback()) - .finally(() => this.poll.restart()); + .finally(() => + this.poll.restart( + this.store.state.expandedPipelines ? this.getExpandedParameters() : undefined, + ), + ); + } + + /** + * Backend expects paramets in the following format: `expanded[]=id&expanded[]=id` + */ + getExpandedParameters() { + return { + expanded: this.store.state.expandedPipelines, + }; } } diff --git a/app/assets/javascripts/pipelines/services/pipeline_service.js b/app/assets/javascripts/pipelines/services/pipeline_service.js index a53a9cc8365a9d6fe6259d5cd85e0653f73b2cb5..e44eb9cdfd11201a8b99b6fdf412c67488af2c9d 100644 --- a/app/assets/javascripts/pipelines/services/pipeline_service.js +++ b/app/assets/javascripts/pipelines/services/pipeline_service.js @@ -5,8 +5,8 @@ export default class PipelineService { this.pipeline = endpoint; } - getPipeline() { - return axios.get(this.pipeline); + getPipeline(params) { + return axios.get(this.pipeline, { params }); } // eslint-disable-next-line class-methods-use-this diff --git a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue index e9ed05e30cdf6f7e26d54b9bf8706c92e29bb5aa..7f86741ed2937115f7f368fa4c38f739a3ab1715 100644 --- a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue +++ b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue @@ -66,23 +66,19 @@ export default { import(/* webpackChunkName: 'emoji' */ '~/emoji') .then(Emoji => { - Emoji.initEmojiMap() - .then(() => { - if (this.emoji) { - this.emojiTag = Emoji.glEmojiTag(this.emoji); - } - this.noEmoji = this.emoji === ''; - this.defaultEmojiTag = Emoji.glEmojiTag('speech_balloon'); + if (this.emoji) { + this.emojiTag = Emoji.glEmojiTag(this.emoji); + } + this.noEmoji = this.emoji === ''; + this.defaultEmojiTag = Emoji.glEmojiTag('speech_balloon'); - this.emojiMenu = new EmojiMenuInModal( - Emoji, - toggleEmojiMenuButtonSelector, - emojiMenuClass, - this.setEmoji, - this.$refs.userStatusForm, - ); - }) - .catch(() => createFlash(__('Failed to load emoji list.'))); + this.emojiMenu = new EmojiMenuInModal( + Emoji, + toggleEmojiMenuButtonSelector, + emojiMenuClass, + this.setEmoji, + this.$refs.userStatusForm, + ); }) .catch(() => createFlash(__('Failed to load emoji list.'))); }, diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue index 33963d5e1e6ad1ebc7e0912f3a9f9fe78365adff..0312b147b621786406ede97f2c194848f7a65a63 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue @@ -14,6 +14,10 @@ export default { type: Boolean, required: true, }, + isFastForwardEnabled: { + type: Boolean, + required: true, + }, commitsCount: { type: Number, required: false, @@ -37,16 +41,22 @@ export default { return n__(__('%d commit'), __('%d commits'), this.isSquashEnabled ? 1 : this.commitsCount); }, modifyLinkMessage() { - return this.isSquashEnabled ? __('Modify commit messages') : __('Modify merge commit'); + if (this.isFastForwardEnabled) return __('Modify commit message'); + else if (this.isSquashEnabled) return __('Modify commit messages'); + return __('Modify merge commit'); }, ariaLabel() { return this.expanded ? __('Collapse') : __('Expand'); }, message() { + const message = this.isFastForwardEnabled + ? s__('mrWidgetCommitsAdded|%{commitCount} will be added to %{targetBranch}.') + : s__( + 'mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}.', + ); + return sprintf( - s__( - 'mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}.', - ), + message, { commitCount: `${this.commitsCountMessage}`, mergeCommitCount: `${s__('mrWidgetCommitsAdded|1 merge commit')}`, diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index 5ac47b44041967c347c73566f9ff3cd9b97dfc2c..f9722d02e2c23dbf6f61c791f55b52d67d781fae 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -117,6 +117,12 @@ export default { shouldShowMergeControls() { return this.mr.isMergeAllowed || this.shouldShowMergeWhenPipelineSucceedsText; }, + shouldShowSquashEdit() { + return this.squashBeforeMerge && this.shouldShowSquashBeforeMerge; + }, + shouldShowMergeEdit() { + return !this.mr.ffOnlyEnabled; + }, }, methods: { updateMergeCommitMessage(includeDescription) { @@ -163,9 +169,12 @@ export default { }); }, initiateMergePolling() { - simplePoll((continuePolling, stopPolling) => { - this.handleMergePolling(continuePolling, stopPolling); - }); + simplePoll( + (continuePolling, stopPolling) => { + this.handleMergePolling(continuePolling, stopPolling); + }, + { timeout: 0 }, + ); }, handleMergePolling(continuePolling, stopPolling) { this.service @@ -196,6 +205,7 @@ export default { }) .catch(() => { new Flash(__('Something went wrong while merging this merge request. Please try again.')); // eslint-disable-line + stopPolling(); }); }, initiateRemoveSourceBranchPolling() { @@ -325,43 +335,44 @@ export default {
{{ __('Fast-forward merge without a merge commit') }}
- + {{ __('Include merge request description') }} + + + +
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 431512cb73149b515af546d0a7ad115c11b75dd8..33dec6fea0f218c06de6e6ccc0bfb321bf43301e 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -3,6 +3,7 @@ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at * the top of the compiled file, but it's generally better to create a new file per style scope. *= require jquery.atwho + *= require select2 *= require_self *= require cropper.css */ @@ -17,7 +18,6 @@ @import "../../../node_modules/pikaday/scss/pikaday"; @import "../../../node_modules/dropzone/dist/basic"; -@import "../../../node_modules/select2/select2"; /* * GitLab UI framework diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index ba3b0906e2815a650606319af4bd1a1fa4092863..955ae80cd58330d266da5e7ccb6bff05445b605f 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -259,6 +259,7 @@ background: $gray-light; border: 1px solid $border-color; color: $gl-text-color; + position: -webkit-sticky; position: sticky; top: $header-height; padding: $grid-size; diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index e50db5310a65e57e49c687c35e2da4d89f0f2462..c88922ae5eaddc21c0aab55899520190e55f61ec 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -9,6 +9,7 @@ @media (min-width: map-get($grid-breakpoints, md)) { $mr-file-header-top: $mr-version-controls-height + $header-height + $mr-tabs-height; + position: -webkit-sticky; position: sticky; top: $mr-file-header-top; z-index: 102; @@ -725,6 +726,7 @@ } @include media-breakpoint-up(sm) { + position: -webkit-sticky; position: sticky; top: $header-height; background-color: $white-light; @@ -1015,6 +1017,7 @@ } .diff-tree-list { + position: -webkit-sticky; position: sticky; $top-pos: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px; top: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px; diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index e73d1a1289df0d862e4ca844f8baf538129c8597..ef6552fb26525a9627861e688a98d6fb93df83ca 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -784,6 +784,7 @@ } @include media-breakpoint-up(md) { + position: -webkit-sticky; position: sticky; top: $header-height + $mr-tabs-height; width: 100%; @@ -805,11 +806,12 @@ .merge-request-tabs-holder { top: $header-height; - z-index: 300; + z-index: 250; background-color: $white-light; border-bottom: 1px solid $border-color; @include media-breakpoint-up(sm) { + position: -webkit-sticky; position: sticky; } diff --git a/app/assets/stylesheets/pages/settings.scss b/app/assets/stylesheets/pages/settings.scss index 716704f9346be5011fbc69f5e3b0d93c84fcdd49..0ef93a0ba045c8ef8f8677edab19d7b56d04bf1c 100644 --- a/app/assets/stylesheets/pages/settings.scss +++ b/app/assets/stylesheets/pages/settings.scss @@ -23,7 +23,10 @@ } .settings { - border-bottom: 1px solid $gray-darker; + // border-top for each item except the top one + + .settings { + border-top: 1px solid $border-color; + } &:first-of-type { margin-top: 10px; diff --git a/app/controllers/admin/projects_controller.rb b/app/controllers/admin/projects_controller.rb index e6d4488ec776ec2a6005c050a2bc20375ac504f6..9729ac62655e23a0a070687267ec2137c6dd6949 100644 --- a/app/controllers/admin/projects_controller.rb +++ b/app/controllers/admin/projects_controller.rb @@ -15,7 +15,7 @@ def index format.html format.json do render json: { - html: view_to_html_string("admin/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("admin/projects/_projects", projects: @projects) } end end diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb index c0c0160a827a4964bd8419d49970051d4c25dcde..c6a59c450a6dd8b53836589c0455607afff7e657 100644 --- a/app/controllers/concerns/milestone_actions.rb +++ b/app/controllers/concerns/milestone_actions.rb @@ -31,7 +31,7 @@ def labels format.html { redirect_to milestone_redirect_path } format.json do render json: tabs_json("shared/milestones/_labels_tab", { - labels: @milestone.labels # rubocop:disable Gitlab/ModuleWithInstanceVariables + labels: @milestone.issue_labels_visible_by_user(current_user) # rubocop:disable Gitlab/ModuleWithInstanceVariables }) end end diff --git a/app/controllers/concerns/notes_actions.rb b/app/controllers/concerns/notes_actions.rb index b4fee93713ba2b09a1e54f43eac9a6f0a9121fcc..f96d182109558eb3d76df70baf1ae0954b91d7d7 100644 --- a/app/controllers/concerns/notes_actions.rb +++ b/app/controllers/concerns/notes_actions.rb @@ -48,7 +48,7 @@ def create respond_to do |format| format.json do json = { - commands_changes: @note.commands_changes + commands_changes: @note.commands_changes&.slice(:emoji_award, :time_estimate, :spend_time) } if @note.persisted? && return_discussion? diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb index b044affd4e86b8cfa183291291b0246c84931538..0a47736cad8ddd9e2a0f7b6e928d8794b6c1a3e7 100644 --- a/app/controllers/dashboard/projects_controller.rb +++ b/app/controllers/dashboard/projects_controller.rb @@ -26,7 +26,7 @@ def index end format.json do render json: { - html: view_to_html_string("dashboard/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("dashboard/projects/_projects", projects: @projects) } end end @@ -43,7 +43,7 @@ def starred format.html format.json do render json: { - html: view_to_html_string("dashboard/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("dashboard/projects/_projects", projects: @projects) } end end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 75329b05a6f8fb99c1cbe70d56deb1d0f8112a75..1a97b39d3ae1234c7982c2d95eef2ade0f007c48 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -46,7 +46,10 @@ def set_show_full_reference end def check_filters_presence! - @no_filters_set = finder_type.scalar_params.none? { |k| params.key?(k) } + no_scalar_filters_set = finder_type.scalar_params.none? { |k| params.key?(k) } + no_array_filters_set = finder_type.array_params.none? { |k, _| params.key?(k) } + + @no_filters_set = no_scalar_filters_set && no_array_filters_set return unless @no_filters_set diff --git a/app/controllers/explore/projects_controller.rb b/app/controllers/explore/projects_controller.rb index f3d76c5a4788b06b7388b4d2d1fceb365c5e303e..ef86d5f981ac8fe32db5c7b60e311d732ea29cba 100644 --- a/app/controllers/explore/projects_controller.rb +++ b/app/controllers/explore/projects_controller.rb @@ -15,7 +15,7 @@ def index format.html format.json do render json: { - html: view_to_html_string("explore/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("explore/projects/_projects", projects: @projects) } end end @@ -30,7 +30,7 @@ def trending format.html format.json do render json: { - html: view_to_html_string("explore/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("explore/projects/_projects", projects: @projects) } end end @@ -44,7 +44,7 @@ def starred format.html format.json do render json: { - html: view_to_html_string("explore/projects/_projects", locals: { projects: @projects }) + html: view_to_html_string("explore/projects/_projects", projects: @projects) } end end diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index afe279b137febd944246196240da3863c9b7b423..8769d4d09563dcf322f388e20f0320b3017fe57c 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -58,11 +58,24 @@ def create def show respond_to do |format| - format.html + format.html do + render_show_html + end format.atom do - load_events - render layout: 'xml.atom' + render_details_view_atom + end + end + end + + def details + respond_to do |format| + format.html do + render_details_html + end + + format.atom do + render_details_view_atom end end end @@ -119,6 +132,19 @@ def transfer protected + def render_show_html + render 'groups/show' + end + + def render_details_html + render 'groups/show' + end + + def render_details_view_atom + load_events + render layout: 'xml.atom', template: 'groups/show' + end + # rubocop: disable CodeReuse/ActiveRecord def authorize_create_group! allowed = if params[:parent_id].present? @@ -178,8 +204,8 @@ def load_events .includes(:namespace) @events = EventCollection - .new(@projects, offset: params[:offset].to_i, filter: event_filter) - .to_a + .new(@projects, offset: params[:offset].to_i, filter: event_filter) + .to_a Events::RenderService .new(current_user) diff --git a/app/controllers/projects/graphs_controller.rb b/app/controllers/projects/graphs_controller.rb index c80fce513f60ec8efce8ef8c784ba582f9f0734f..67d3f49af18544d1a1dd7d238809727550814fd7 100644 --- a/app/controllers/projects/graphs_controller.rb +++ b/app/controllers/projects/graphs_controller.rb @@ -46,12 +46,8 @@ def get_commits def get_languages @languages = - if @project.repository_languages.present? - @project.repository_languages.map do |lang| - { value: lang.share, label: lang.name, color: lang.color, highlight: lang.color } - end - else - @project.repository.languages + ::Projects::RepositoryLanguagesService.new(@project, current_user).execute.map do |lang| + { value: lang.share, label: lang.name, color: lang.color, highlight: lang.color } end end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 5d6559d228a90b18fd947284b56e303ff64722ce..63ae2377df9de4b429219d074fea137a9d029aba 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -39,6 +39,7 @@ def set_issuables_index_only_actions before_action :authorize_create_merge_request_from!, only: [:create_merge_request] before_action :authorize_import_issues!, only: [:import_csv] + before_action :authorize_download_code!, only: [:related_branches] before_action :set_suggested_issues_feature_flags, only: [:new] diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 4487749968b7ea43090169388d5d5ee6d001bb1c..d1b6ef2c6c60fab1f2cd4e391582d2e9aae69e8c 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -16,11 +16,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action :authenticate_user!, only: [:assign_related_issues] before_action :check_user_can_push_to_source_branch!, only: [:rebase] - before_action only: [:show] do - push_frontend_feature_flag(:diff_tree_filtering, default_enabled: true) - push_frontend_feature_flag(:expand_diff_full_file) - end - def index @merge_requests = @issuables diff --git a/app/controllers/projects/settings/operations_controller.rb b/app/controllers/projects/settings/operations_controller.rb index 2953db764a0c7348041efd1b717b60535b16a47b..15e565d5742d23ba8645bb6978e2b97d071343bb 100644 --- a/app/controllers/projects/settings/operations_controller.rb +++ b/app/controllers/projects/settings/operations_controller.rb @@ -3,7 +3,6 @@ module Projects module Settings class OperationsController < Projects::ApplicationController - before_action :check_license before_action :authorize_update_environment! helper_method :error_tracking_setting @@ -65,10 +64,6 @@ def permitted_project_params ] } end - - def check_license - render_404 unless helpers.settings_operations_available? - end end end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 8d851bb5733e55e8b003ce20bc385ed68a6025b6..e460917316d9afc0e96dbbb33ab0f5c9e40f56c7 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -47,7 +47,7 @@ def edit end def create - @project = ::Projects::CreateService.new(current_user, project_params).execute + @project = ::Projects::CreateService.new(current_user, project_params(attributes: project_params_create_attributes)).execute if @project.saved? cookies[:issue_board_welcome_hidden] = { path: project_path(@project), value: nil, expires: Time.at(0) } @@ -328,9 +328,9 @@ def load_events end # rubocop: enable CodeReuse/ActiveRecord - def project_params + def project_params(attributes: []) params.require(:project) - .permit(project_params_attributes) + .permit(project_params_attributes + attributes) end def project_params_attributes @@ -349,11 +349,10 @@ def project_params_attributes :last_activity_at, :lfs_enabled, :name, - :namespace_id, :only_allow_merge_if_all_discussions_are_resolved, :only_allow_merge_if_pipeline_succeeds, - :printing_merge_request_link_enabled, :path, + :printing_merge_request_link_enabled, :public_builds, :request_access_enabled, :runners_token, @@ -375,6 +374,10 @@ def project_params_attributes ] end + def project_params_create_attributes + [:namespace_id] + end + def custom_import_params {} end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index a01dcf1dece82cc545ab0e0df862e3c7fb71ad67..06af8a2c14c8cdaffb4733f2060712f2bacb862d 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -15,6 +15,8 @@ class SessionsController < Devise::SessionsController prepend_before_action :check_captcha, only: [:create] prepend_before_action :store_redirect_uri, only: [:new] prepend_before_action :ldap_servers, only: [:new, :create] + prepend_before_action :ensure_password_authentication_enabled!, if: :password_based_login?, only: [:create] + before_action :auto_sign_in_with_provider, only: [:new] before_action :load_recaptcha @@ -126,6 +128,14 @@ def check_initial_setup end # rubocop: enable CodeReuse/ActiveRecord + def ensure_password_authentication_enabled! + render_403 unless Gitlab::CurrentSettings.password_authentication_enabled_for_web? + end + + def password_based_login? + user_params[:login].present? || user_params[:password].present? + end + def user_params params.require(:user).permit(:login, :password, :remember_me, :otp_attempt, :device_response) end diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 072d07e0ed2537090bbb43c53f9f51e46778cafd..fa434a3b4e89e1a716f2cf686d6221a6179017a5 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -53,7 +53,6 @@ def self.scalar_params assignee_username author_id author_username - label_name milestone_title my_reaction_emoji search diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 700a62aa9f888e97cb84cf46afed29ce21f7e7d9..4a20e300559a22c808825cc89d871fe1865a7604 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -127,6 +127,7 @@ def visible_attributes :akismet_api_key, :akismet_enabled, :allow_local_requests_from_hooks_and_services, + :dns_rebinding_protection_enabled, :archive_builds_in_human_readable, :authorized_keys_enabled, :auto_devops_enabled, diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb index a9458d7cec4531ca38974e2ed11634e9704f232d..f97c8f7108ec2088340d0e8ecdce62ba6897db43 100644 --- a/app/helpers/groups_helper.rb +++ b/app/helpers/groups_helper.rb @@ -4,6 +4,7 @@ module GroupsHelper def group_overview_nav_link_paths %w[ groups#show + groups#details groups#activity groups#subgroups analytics#show diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 5318ab4ddef8be91835c9b830104316915afd5d5..c08b8d41ba9794d994df98a4c838a54ce51984be 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -93,4 +93,8 @@ def notification_event_name(event) s_(event.to_s.humanize) end end + + def show_unsubscribe_title?(noteable) + can?(current_user, "read_#{noteable.to_ability_name}".to_sym, noteable) + end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index a3d662d82508d9113e80aedcd5992863e8a87713..289864bbaa496f67a21740b1e6a93b217ccae61f 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -7,6 +7,19 @@ def self.id_in(ids) where(id: ids) end + def self.safe_ensure_unique(retries: 0) + transaction(requires_new: true) do + yield + end + rescue ActiveRecord::RecordNotUnique + if retries > 0 + retries -= 1 + retry + end + + false + end + def self.safe_find_or_create_by!(*args) safe_find_or_create_by(*args).tap do |record| record.validate! unless record.persisted? @@ -14,10 +27,8 @@ def self.safe_find_or_create_by!(*args) end def self.safe_find_or_create_by(*args) - transaction(requires_new: true) do + safe_ensure_unique(retries: 1) do find_or_create_by(*args) end - rescue ActiveRecord::RecordNotUnique - retry end end diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 8595db2850907cb2c8deb9ad832f0f623b8f0478..6808c7df93b49397d69a6e10baa3d1c1bbdb2291 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -7,7 +7,7 @@ class ApplicationSetting < ActiveRecord::Base include IgnorableColumn include ChronicDurationAttribute - add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption) ? :optional : :required } + add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption, default_enabled: true) ? :optional : :required } add_authentication_token_field :health_check_access_token DOMAIN_LIST_SEPARATOR = %r{\s*[,;]\s* # comma or semicolon, optionally surrounded by whitespace diff --git a/app/models/broadcast_message.rb b/app/models/broadcast_message.rb index eb1399447c40512c732deea896104ed810aae419..64899e8540cd8dc35294c7c9495e9a19f8bd181a 100644 --- a/app/models/broadcast_message.rb +++ b/app/models/broadcast_message.rb @@ -4,7 +4,7 @@ class BroadcastMessage < ActiveRecord::Base include CacheMarkdownField include Sortable - cache_markdown_field :message, pipeline: :broadcast_message + cache_markdown_field :message, pipeline: :broadcast_message, whitelisted: true validates :message, presence: true validates :starts_at, presence: true diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 5fbde5267cb781b8aacacf0cdd93db34907cae04..20df389107c7844992002bec5cfca7d63df4f151 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -10,7 +10,7 @@ class Runner < ActiveRecord::Base include FromUnion include TokenAuthenticatable - add_authentication_token_field :token, encrypted: -> { Feature.enabled?(:ci_runners_tokens_optional_encryption) ? :optional : :required } + add_authentication_token_field :token, encrypted: -> { Feature.enabled?(:ci_runners_tokens_optional_encryption, default_enabled: true) ? :optional : :required } enum access_level: { not_protected: 0, diff --git a/app/models/clusters/applications/knative.rb b/app/models/clusters/applications/knative.rb index 347c3c8c37f0b42644157b6c11a0fc5ad134cd45..776d93f0664594e37462d1fd8d3521dbb2a8a3d5 100644 --- a/app/models/clusters/applications/knative.rb +++ b/app/models/clusters/applications/knative.rb @@ -3,7 +3,7 @@ module Clusters module Applications class Knative < ActiveRecord::Base - VERSION = '0.2.2'.freeze + VERSION = '0.5.0'.freeze REPOSITORY = 'https://storage.googleapis.com/triggermesh-charts'.freeze METRICS_CONFIG = 'https://storage.googleapis.com/triggermesh-charts/istio-metrics.yaml'.freeze FETCH_IP_ADDRESS_DELAY = 30.seconds @@ -86,7 +86,7 @@ def calculate_reactive_cache end def ingress_service - cluster.kubeclient.get_service('knative-ingressgateway', 'istio-system') + cluster.kubeclient.get_service('istio-ingressgateway', 'istio-system') end def services_for(ns: namespace) diff --git a/app/models/concerns/cache_markdown_field.rb b/app/models/concerns/cache_markdown_field.rb index 1a8570b80c368202a7dfe71a2bba4b70541e68d5..15d8d58b9b5af91a6d4b82acd8a8f5cb7656ea51 100644 --- a/app/models/concerns/cache_markdown_field.rb +++ b/app/models/concerns/cache_markdown_field.rb @@ -7,6 +7,7 @@ # cache_markdown_field :foo # cache_markdown_field :bar # cache_markdown_field :baz, pipeline: :single_line +# cache_markdown_field :baz, whitelisted: true # # Corresponding foo_html, bar_html and baz_html fields should exist. module CacheMarkdownField @@ -37,7 +38,15 @@ def html_field(markdown_field) end def html_fields - markdown_fields.map {|field| html_field(field) } + markdown_fields.map { |field| html_field(field) } + end + + def html_fields_whitelisted + markdown_fields.each_with_object([]) do |field, fields| + if @data[field].fetch(:whitelisted, false) + fields << html_field(field) + end + end end end @@ -149,13 +158,18 @@ def local_version alias_method :attributes_before_markdown_cache, :attributes def attributes attrs = attributes_before_markdown_cache + html_fields = cached_markdown_fields.html_fields + whitelisted = cached_markdown_fields.html_fields_whitelisted + exclude_fields = html_fields - whitelisted - attrs.delete('cached_markdown_version') - - cached_markdown_fields.html_fields.each do |field| + exclude_fields.each do |field| attrs.delete(field) end + if whitelisted.empty? + attrs.delete('cached_markdown_version') + end + attrs end diff --git a/app/models/group.rb b/app/models/group.rb index ca7f06a0f705c6c5699dc0e747fcfdd7f85a9346..b78c90b289f16d4b37a4a6438eaa0003c37d0f3f 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -56,7 +56,7 @@ class Group < Namespace validates :two_factor_grace_period, presence: true, numericality: { greater_than_or_equal_to: 0 } - add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:groups_tokens_optional_encryption) ? :optional : :required } + add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:groups_tokens_optional_encryption, default_enabled: true) ? :optional : :required } after_create :post_create_hook after_destroy :post_destroy_hook diff --git a/app/models/label.rb b/app/models/label.rb index 1c3db3eb35da794f338140fb6955f7e19156c02c..08ab07bba7a2263aff7dbc291c1ce2d15603c346 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -126,6 +126,10 @@ def self.search(query) fuzzy_search(query, [:title, :description]) end + def self.by_ids(ids) + where(id: ids) + end + def open_issues_count(user = nil) issues_count(user, state: 'opened') end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index e4e6fa4506701326d7ce77c05194fdc386610cc7..26071d40a234fe54a7783c0dbbc6a1ee7cdd9cc8 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -599,6 +599,8 @@ def validate_branches return end + [:source_branch, :target_branch].each { |attr| validate_branch_name(attr) } + if opened? similar_mrs = target_project .merge_requests @@ -619,6 +621,16 @@ def validate_branches end end + def validate_branch_name(attr) + return unless changes_include?(attr) + + branch = read_attribute(attr) + + return unless branch + + errors.add(attr) unless Gitlab::GitRefValidator.validate_merge_request_branch(branch) + end + def validate_target_project return true if target_project.merge_requests_enabled? @@ -1303,7 +1315,7 @@ def keep_around_commit end def has_commits? - merge_request_diff && commits_count > 0 + merge_request_diff && commits_count.to_i > 0 end def has_no_commits? diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 351a662ae83cbc6c3962528b942056f5efa479c5..6c1592604d3dd00126ebc3d62f08c74cf6864cc6 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -298,6 +298,11 @@ def opening_external_diff private + def encode_in_base64?(diff_text) + (diff_text.encoding == Encoding::BINARY && !diff_text.ascii_only?) || + diff_text.include?("\0") + end + def create_merge_request_diff_files(diffs) rows = if has_attribute?(:external_diff) && Gitlab.config.external_diffs.enabled @@ -350,7 +355,7 @@ def build_merge_request_diff_files(diffs) diff_hash.tap do |hash| diff_text = hash[:diff] - if diff_text.encoding == Encoding::BINARY && !diff_text.ascii_only? + if encode_in_base64?(diff_text) hash[:binary] = true hash[:diff] = [diff_text].pack('m0') end diff --git a/app/models/note.rb b/app/models/note.rb index 6b9d2954621606fd7d313f05c630fe148bc9ee64..2b3e5614b48c87bad9a425f9703a8e43d9248aa1 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -313,6 +313,14 @@ def editable? !system? end + # Since we're using `updated_at` as `last_edited_at`, it could be touched by transforming / resolving a note. + # This makes sure it is only marked as edited when the note body is updated. + def edited? + return false if updated_by.blank? + + super + end + def cross_reference_not_visible_for?(user) cross_reference? && !all_referenced_mentionables_allowed?(user) end diff --git a/app/models/notification_recipient.rb b/app/models/notification_recipient.rb index 793cce191fa8473690335e24ed12ab979d38253b..292e8a58028c523e7f704a1ef2f6afb358e01401 100644 --- a/app/models/notification_recipient.rb +++ b/app/models/notification_recipient.rb @@ -123,15 +123,19 @@ def read_ability return @read_ability if instance_variable_defined?(:@read_ability) @read_ability = - case @target - when Issuable - :"read_#{@target.to_ability_name}" - when Ci::Pipeline + if @target.is_a?(Ci::Pipeline) :read_build # We have build trace in pipeline emails - when ActiveRecord::Base - :"read_#{@target.class.model_name.name.underscore}" - else - nil + elsif default_ability_for_target + :"read_#{default_ability_for_target}" + end + end + + def default_ability_for_target + @default_ability_for_target ||= + if @target.respond_to?(:to_ability_name) + @target.to_ability_name + elsif @target.class.respond_to?(:model_name) + @target.class.model_name.name.underscore end end diff --git a/app/models/project.rb b/app/models/project.rb index af576a73e9ed16fa1b7be71f6a8983f305f2f7c1..728dab53b1000063bf14951862a253bb2395d9ba 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -85,7 +85,7 @@ class Project < ActiveRecord::Base default_value_for :snippets_enabled, gitlab_config_features.snippets default_value_for :only_allow_merge_if_all_discussions_are_resolved, false - add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:projects_tokens_optional_encryption) ? :optional : :required } + add_authentication_token_field :runners_token, encrypted: -> { Feature.enabled?(:projects_tokens_optional_encryption, default_enabled: true) ? :optional : :required } before_validation :mark_remote_mirrors_for_removal, if: -> { RemoteMirror.table_exists? } @@ -147,6 +147,7 @@ class Project < ActiveRecord::Base has_one :pipelines_email_service has_one :irker_service has_one :pivotaltracker_service + has_one :hipchat_service has_one :flowdock_service has_one :assembla_service has_one :asana_service @@ -334,8 +335,8 @@ class Project < ActiveRecord::Base validates :star_count, numericality: { greater_than_or_equal_to: 0 } validate :check_personal_projects_limit, on: :create validate :check_repository_path_availability, on: :update, if: ->(project) { project.renamed? } - validate :visibility_level_allowed_by_group, if: -> { changes.has_key?(:visibility_level) } - validate :visibility_level_allowed_as_fork, if: -> { changes.has_key?(:visibility_level) } + validate :visibility_level_allowed_by_group, if: :should_validate_visibility_level? + validate :visibility_level_allowed_as_fork, if: :should_validate_visibility_level? validate :check_wiki_path_conflict validate :validate_pages_https_only, if: -> { changes.has_key?(:pages_https_only) } validates :repository_storage, @@ -403,6 +404,7 @@ class Project < ActiveRecord::Base scope :with_builds_enabled, -> { with_feature_enabled(:builds) } scope :with_issues_enabled, -> { with_feature_enabled(:issues) } scope :with_issues_available_for_user, ->(current_user) { with_feature_available_for_user(:issues, current_user) } + scope :with_merge_requests_available_for_user, ->(current_user) { with_feature_available_for_user(:merge_requests, current_user) } scope :with_merge_requests_enabled, -> { with_feature_enabled(:merge_requests) } scope :with_remote_mirrors, -> { joins(:remote_mirrors).where(remote_mirrors: { enabled: true }).distinct } @@ -587,6 +589,17 @@ def cached_count def group_ids joins(:namespace).where(namespaces: { type: 'Group' }).select(:namespace_id) end + + # Returns ids of projects with milestones available for given user + # + # Used on queries to find milestones which user can see + # For example: Milestone.where(project_id: ids_with_milestone_available_for(user)) + def ids_with_milestone_available_for(user) + with_issues_enabled = with_issues_available_for_user(user).select(:id) + with_merge_requests_enabled = with_merge_requests_available_for_user(user).select(:id) + + from_union([with_issues_enabled, with_merge_requests_enabled]).select(:id) + end end def all_pipelines @@ -869,6 +882,10 @@ def check_personal_projects_limit self.errors.add(:limit_reached, error % { limit: limit }) end + def should_validate_visibility_level? + new_record? || changes.has_key?(:visibility_level) + end + def visibility_level_allowed_by_group return if visibility_level_allowed_by_group? @@ -1378,6 +1395,7 @@ def change_head(branch) repository.raw_repository.write_ref('HEAD', "refs/heads/#{branch}") repository.copy_gitattributes(branch) repository.after_change_head + ProjectCacheWorker.perform_async(self.id, [], [:commit_count]) reload_default_branch else errors.add(:base, "Could not change HEAD: branch '#{branch}' does not exist") diff --git a/app/models/project_services/hipchat_service.rb b/app/models/project_services/hipchat_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..caf361360616b0cddef6942e74e6af3a15a65b5d --- /dev/null +++ b/app/models/project_services/hipchat_service.rb @@ -0,0 +1,313 @@ +# frozen_string_literal: true + +class HipchatService < Service + include ActionView::Helpers::SanitizeHelper + + MAX_COMMITS = 3 + HIPCHAT_ALLOWED_TAGS = %w[ + a b i strong em br img pre code + table th tr td caption colgroup col thead tbody tfoot + ul ol li dl dt dd + ].freeze + + prop_accessor :token, :room, :server, :color, :api_version + boolean_accessor :notify_only_broken_pipelines, :notify + validates :token, presence: true, if: :activated? + + def initialize_properties + if properties.nil? + self.properties = {} + self.notify_only_broken_pipelines = true + end + end + + def title + 'HipChat' + end + + def description + 'Private group chat and IM' + end + + def self.to_param + 'hipchat' + end + + def fields + [ + { type: 'text', name: 'token', placeholder: 'Room token', required: true }, + { type: 'text', name: 'room', placeholder: 'Room name or ID' }, + { type: 'checkbox', name: 'notify' }, + { type: 'select', name: 'color', choices: %w(yellow red green purple gray random) }, + { type: 'text', name: 'api_version', + placeholder: 'Leave blank for default (v2)' }, + { type: 'text', name: 'server', + placeholder: 'Leave blank for default. https://hipchat.example.com' }, + { type: 'checkbox', name: 'notify_only_broken_pipelines' } + ] + end + + def self.supported_events + %w(push issue confidential_issue merge_request note confidential_note tag_push pipeline) + end + + def execute(data) + return unless supported_events.include?(data[:object_kind]) + + message = create_message(data) + return unless message.present? + + gate[room].send('GitLab', message, message_options(data)) # rubocop:disable GitlabSecurity/PublicSend + end + + def test(data) + begin + result = execute(data) + rescue StandardError => error + return { success: false, result: error } + end + + { success: true, result: result } + end + + private + + def gate + options = { api_version: api_version.present? ? api_version : 'v2' } + options[:server_url] = server unless server.blank? + @gate ||= HipChat::Client.new(token, options) + end + + def message_options(data = nil) + { notify: notify.present? && Gitlab::Utils.to_boolean(notify), color: message_color(data) } + end + + def create_message(data) + object_kind = data[:object_kind] + + case object_kind + when "push", "tag_push" + create_push_message(data) + when "issue" + create_issue_message(data) unless update?(data) + when "merge_request" + create_merge_request_message(data) unless update?(data) + when "note" + create_note_message(data) + when "pipeline" + create_pipeline_message(data) if should_pipeline_be_notified?(data) + end + end + + def render_line(text) + markdown(text.lines.first.chomp, pipeline: :single_line) if text + end + + def create_push_message(push) + ref_type = Gitlab::Git.tag_ref?(push[:ref]) ? 'tag' : 'branch' + ref = Gitlab::Git.ref_name(push[:ref]) + + before = push[:before] + after = push[:after] + + message = [] + message << "#{push[:user_name]} " + + if Gitlab::Git.blank_ref?(before) + message << "pushed new #{ref_type} #{ref}"\ + " to #{project_link}\n" + elsif Gitlab::Git.blank_ref?(after) + message << "removed #{ref_type} #{ref} from #{project_name} \n" + else + message << "pushed to #{ref_type} #{ref} " + message << "of #{project.full_name.gsub!(/\s/, '')} " + message << "(Compare changes)" + + push[:commits].take(MAX_COMMITS).each do |commit| + message << "
- #{render_line(commit[:message])} (#{commit[:id][0..5]})" + end + + if push[:commits].count > MAX_COMMITS + message << "
... #{push[:commits].count - MAX_COMMITS} more commits" + end + end + + message.join + end + + def markdown(text, options = {}) + return "" unless text + + context = { + project: project, + pipeline: :email + } + + Banzai.render(text, context) + + context.merge!(options) + + html = Banzai.render_and_post_process(text, context) + sanitized_html = sanitize(html, tags: HIPCHAT_ALLOWED_TAGS, attributes: %w[href title alt]) + + sanitized_html.truncate(200, separator: ' ', omission: '...') + end + + def create_issue_message(data) + user_name = data[:user][:name] + + obj_attr = data[:object_attributes] + obj_attr = HashWithIndifferentAccess.new(obj_attr) + title = render_line(obj_attr[:title]) + state = obj_attr[:state] + issue_iid = obj_attr[:iid] + issue_url = obj_attr[:url] + description = obj_attr[:description] + + issue_link = "issue ##{issue_iid}" + + message = ["#{user_name} #{state} #{issue_link} in #{project_link}: #{title}"] + message << "
#{markdown(description)}
" + + message.join + end + + def create_merge_request_message(data) + user_name = data[:user][:name] + + obj_attr = data[:object_attributes] + obj_attr = HashWithIndifferentAccess.new(obj_attr) + merge_request_id = obj_attr[:iid] + state = obj_attr[:state] + description = obj_attr[:description] + title = render_line(obj_attr[:title]) + + merge_request_url = "#{project_url}/merge_requests/#{merge_request_id}" + merge_request_link = "merge request !#{merge_request_id}" + message = ["#{user_name} #{state} #{merge_request_link} in " \ + "#{project_link}: #{title}"] + + message << "
#{markdown(description)}
" + message.join + end + + def format_title(title) + "#{render_line(title)}" + end + + def create_note_message(data) + data = HashWithIndifferentAccess.new(data) + user_name = data[:user][:name] + + obj_attr = HashWithIndifferentAccess.new(data[:object_attributes]) + note = obj_attr[:note] + note_url = obj_attr[:url] + noteable_type = obj_attr[:noteable_type] + commit_id = nil + + case noteable_type + when "Commit" + commit_attr = HashWithIndifferentAccess.new(data[:commit]) + commit_id = commit_attr[:id] + subject_desc = commit_id + subject_desc = Commit.truncate_sha(subject_desc) + subject_type = "commit" + title = format_title(commit_attr[:message]) + when "Issue" + subj_attr = HashWithIndifferentAccess.new(data[:issue]) + subject_id = subj_attr[:iid] + subject_desc = "##{subject_id}" + subject_type = "issue" + title = format_title(subj_attr[:title]) + when "MergeRequest" + subj_attr = HashWithIndifferentAccess.new(data[:merge_request]) + subject_id = subj_attr[:iid] + subject_desc = "!#{subject_id}" + subject_type = "merge request" + title = format_title(subj_attr[:title]) + when "Snippet" + subj_attr = HashWithIndifferentAccess.new(data[:snippet]) + subject_id = subj_attr[:id] + subject_desc = "##{subject_id}" + subject_type = "snippet" + title = format_title(subj_attr[:title]) + end + + subject_html = "#{subject_type} #{subject_desc}" + message = ["#{user_name} commented on #{subject_html} in #{project_link}: "] + message << title + + message << "
#{markdown(note, ref: commit_id)}
" + message.join + end + + def create_pipeline_message(data) + pipeline_attributes = data[:object_attributes] + pipeline_id = pipeline_attributes[:id] + ref_type = pipeline_attributes[:tag] ? 'tag' : 'branch' + ref = pipeline_attributes[:ref] + user_name = (data[:user] && data[:user][:name]) || 'API' + status = pipeline_attributes[:status] + duration = pipeline_attributes[:duration] + + branch_link = "#{ref}" + pipeline_url = "##{pipeline_id}" + + "#{project_link}: Pipeline #{pipeline_url} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status(status)} in #{duration} second(s)" + end + + def message_color(data) + pipeline_status_color(data) || color || 'yellow' + end + + def pipeline_status_color(data) + return unless data && data[:object_kind] == 'pipeline' + + case data[:object_attributes][:status] + when 'success' + 'green' + else + 'red' + end + end + + def project_name + project.full_name.gsub(/\s/, '') + end + + def project_url + project.web_url + end + + def project_link + "#{project_name}" + end + + def update?(data) + data[:object_attributes][:action] == 'update' + end + + def humanized_status(status) + case status + when 'success' + 'passed' + else + status + end + end + + def should_pipeline_be_notified?(data) + case data[:object_attributes][:status] + when 'success' + !notify_only_broken_pipelines? + when 'failed' + true + else + false + end + end +end + +HipchatService.prepend(EE::HipchatService) diff --git a/app/models/service.rb b/app/models/service.rb index c594601489be8cf58666e891f00f05c73ce95f9d..8b6d264fa3272cc6ad7721c4df3c6ab0c8c25eea 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -255,6 +255,7 @@ def self.available_services_names external_wiki flowdock hangouts_chat + hipchat irker jira kubernetes diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb index 1bf3caf6ba1adb3793d0127af746ee0c03314623..164e1aab309f094ce41d5b46bf1a1f8d5f2f13c4 100644 --- a/app/policies/group_policy.rb +++ b/app/policies/group_policy.rb @@ -26,7 +26,7 @@ class GroupPolicy < BasePolicy condition(:can_change_parent_share_with_group_lock) { can?(:change_share_with_group_lock, @subject.parent) } condition(:has_projects) do - GroupProjectsFinder.new(group: @subject, current_user: @user, options: { include_subgroups: true }).execute.any? + GroupProjectsFinder.new(group: @subject, current_user: @user, options: { include_subgroups: true, only_owned: true }).execute.any? end condition(:has_clusters, scope: :subject) { clusterable_has_clusters? } @@ -55,6 +55,7 @@ class GroupPolicy < BasePolicy rule { has_projects }.policy do enable :read_list enable :read_label + enable :read_group end rule { has_access }.enable :read_namespace diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index 4a702a2d9ac334296f7f9a17067d7da2410837e5..ac33f1bbd98e92282b4867e750d038f899b57af0 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -177,7 +177,6 @@ class ProjectPolicy < BasePolicy enable :read_cycle_analytics enable :award_emoji enable :read_pages_content - enable :read_release end # These abilities are not allowed to admins that are not members of the project, @@ -203,6 +202,7 @@ class ProjectPolicy < BasePolicy enable :read_deployment enable :read_merge_request enable :read_sentry_issue + enable :read_release end # We define `:public_user_access` separately because there are cases in gitlab-ee diff --git a/app/serializers/diff_file_entity.rb b/app/serializers/diff_file_entity.rb index 13711070a46bcf6ea6abef79599bce5aba5a906b..d3d5883e46bf4e51302d9ee54842e90173c0482e 100644 --- a/app/serializers/diff_file_entity.rb +++ b/app/serializers/diff_file_entity.rb @@ -57,7 +57,7 @@ class DiffFileEntity < DiffFileBaseEntity diff_file.diff_lines_for_serializer end - expose :is_fully_expanded, if: -> (diff_file, _) { Feature.enabled?(:expand_diff_full_file) && diff_file.text? } do |diff_file| + expose :is_fully_expanded, if: -> (diff_file, _) { diff_file.text? } do |diff_file| diff_file.fully_expanded? end diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index e18dc04b8d78bbdf43559cf9c1918ab86cdf2073..042f0e0cd71493b01317d25476a9808c3391adb0 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -70,10 +70,14 @@ def filter_milestone end def filter_labels - filter_labels_in_param(:add_label_ids) - filter_labels_in_param(:remove_label_ids) - filter_labels_in_param(:label_ids) - find_or_create_label_ids + params[:add_label_ids] = labels_service.filter_labels_ids_in_param(:add_label_ids) if params[:add_label_ids] + params[:remove_label_ids] = labels_service.filter_labels_ids_in_param(:remove_label_ids) if params[:remove_label_ids] + + if params[:label_ids] + params[:label_ids] = labels_service.filter_labels_ids_in_param(:label_ids) + elsif params[:labels] + params[:label_ids] = labels_service.find_or_create_by_titles.map(&:id) + end end # rubocop: disable CodeReuse/ActiveRecord @@ -101,6 +105,10 @@ def find_or_create_label_ids end.compact end + def labels_service + @labels_service ||= ::Labels::AvailableLabelsService.new(current_user, parent, params) + end + def process_label_ids(attributes, existing_label_ids: nil) label_ids = attributes.delete(:label_ids) add_label_ids = attributes.delete(:add_label_ids) @@ -118,10 +126,6 @@ def process_label_ids(attributes, existing_label_ids: nil) new_label_ids end - def available_labels - @available_labels ||= LabelsFinder.new(current_user, project_id: @project.id, include_ancestor_groups: true).execute - end - def handle_quick_actions_on_create(issuable) merge_quick_actions_into_params!(issuable) end diff --git a/app/services/labels/available_labels_service.rb b/app/services/labels/available_labels_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..fe477d96970edcbaf1c2bcefd16ed2ef46ee7e54 --- /dev/null +++ b/app/services/labels/available_labels_service.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true +module Labels + class AvailableLabelsService + attr_reader :current_user, :parent, :params + + def initialize(current_user, parent, params) + @current_user = current_user + @parent = parent + @params = params + end + + def find_or_create_by_titles + labels = params.delete(:labels) + + return [] unless labels + + labels = labels.split(',') if labels.is_a?(String) + + labels.map do |label_name| + label = Labels::FindOrCreateService.new( + current_user, + parent, + include_ancestor_groups: true, + title: label_name.strip, + available_labels: available_labels + ).execute + + label + end.compact + end + + def filter_labels_ids_in_param(key) + return [] if params[key].to_a.empty? + + # rubocop:disable CodeReuse/ActiveRecord + available_labels.by_ids(params[key]).pluck(:id) + # rubocop:enable CodeReuse/ActiveRecord + end + + private + + def available_labels + @available_labels ||= LabelsFinder.new(current_user, finder_params).execute + end + + def finder_params + params = { include_ancestor_groups: true } + + case parent + when Group + params[:group_id] = parent.id + params[:only_group_labels] = true + when Project + params[:project_id] = parent.id + end + + params + end + end +end diff --git a/app/services/projects/after_import_service.rb b/app/services/projects/after_import_service.rb index bbdde4408d2054fc4943daca2c16bbe17c3cc4f0..afb9048e87ba9aa408d6d0c6079fe69027392307 100644 --- a/app/services/projects/after_import_service.rb +++ b/app/services/projects/after_import_service.rb @@ -9,7 +9,7 @@ def initialize(project) end def execute - Projects::HousekeepingService.new(@project).execute do + Projects::HousekeepingService.new(@project, :gc).execute do repository.delete_all_refs_except(RESERVED_REF_PREFIXES) end rescue Projects::HousekeepingService::LeaseTaken => e diff --git a/app/services/projects/detect_repository_languages_service.rb b/app/services/projects/detect_repository_languages_service.rb index 4a837a4fb6adff663f780755d783a8a252ad6290..b020e4d9088302c6f27de5743939b1195a00fc13 100644 --- a/app/services/projects/detect_repository_languages_service.rb +++ b/app/services/projects/detect_repository_languages_service.rb @@ -2,7 +2,7 @@ module Projects class DetectRepositoryLanguagesService < BaseService - attr_reader :detected_repository_languages, :programming_languages + attr_reader :programming_languages # rubocop: disable CodeReuse/ActiveRecord def execute @@ -25,6 +25,8 @@ def execute RepositoryLanguage.table_name, detection.insertions(matching_programming_languages) ) + + set_detected_repository_languages end project.repository_languages.reload @@ -56,5 +58,11 @@ def create_language(name, color) retry end # rubocop: enable CodeReuse/ActiveRecord + + def set_detected_repository_languages + return if project.detected_repository_languages? + + project.update_column(:detected_repository_languages, true) + end end end diff --git a/app/services/projects/housekeeping_service.rb b/app/services/projects/housekeeping_service.rb index 2f6dc4207ddef3f53836e54c69278ebfa7e7694b..10bd5363b5124bccb98afdbcd0081806b68baf38 100644 --- a/app/services/projects/housekeeping_service.rb +++ b/app/services/projects/housekeeping_service.rb @@ -18,8 +18,9 @@ def to_s end end - def initialize(project) + def initialize(project, task = nil) @project = project + @task = task end def execute @@ -69,6 +70,8 @@ def pushes_since_gc end def task + return @task if @task + if pushes_since_gc % gc_period == 0 :gc elsif pushes_since_gc % full_repack_period == 0 diff --git a/app/services/projects/repository_languages_service.rb b/app/services/projects/repository_languages_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..e75851c7da4b21fdfbae3632b6316ee624ed838a --- /dev/null +++ b/app/services/projects/repository_languages_service.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Projects + class RepositoryLanguagesService < BaseService + def execute + perform_language_detection unless project.detected_repository_languages? + persisted_repository_languages + end + + private + + def perform_language_detection + if persisted_repository_languages.blank? + ::DetectRepositoryLanguagesWorker.perform_async(project.id, current_user.id) + else + project.update_column(:detected_repository_languages, true) + end + end + + def persisted_repository_languages + project.repository_languages + end + end +end diff --git a/app/validators/sha_validator.rb b/app/validators/sha_validator.rb index 085fca4d65d81052e6e7608b71e9a831f2124ebe..77e7cfa4f6bcdc196735c602187a656a31e7763b 100644 --- a/app/validators/sha_validator.rb +++ b/app/validators/sha_validator.rb @@ -2,7 +2,7 @@ class ShaValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - return if value.blank? || value.match(/\A\h{40}\z/) + return if value.blank? || Commit.valid_hash?(value) record.errors.add(attribute, 'is not a valid SHA') end diff --git a/app/views/admin/application_settings/_outbound.html.haml b/app/views/admin/application_settings/_outbound.html.haml index f4bfb5af385701f5fa9f22b7028c0d4efc4c1d37..dd56bb99a06318ee2885dac862f5e42a76998ff0 100644 --- a/app/views/admin/application_settings/_outbound.html.haml +++ b/app/views/admin/application_settings/_outbound.html.haml @@ -8,4 +8,12 @@ = f.label :allow_local_requests_from_hooks_and_services, class: 'form-check-label' do Allow requests to the local network from hooks and services + .form-group + .form-check + = f.check_box :dns_rebinding_protection_enabled, class: 'form-check-input' + = f.label :dns_rebinding_protection_enabled, class: 'form-check-label' do + = _('Enforce DNS rebinding attack protection') + %span.form-text.text-muted + = _('Resolves IP addresses once and uses them to submit requests') + = f.submit 'Save changes', class: "btn btn-success" diff --git a/app/views/layouts/nav/sidebar/_group.html.haml b/app/views/layouts/nav/sidebar/_group.html.haml index 3e741ed7318a262510dd0ba7f7bec7fb3dd10480..8c57e82119fb240badc537ed0a150a458fb48e6a 100644 --- a/app/views/layouts/nav/sidebar/_group.html.haml +++ b/app/views/layouts/nav/sidebar/_group.html.haml @@ -20,13 +20,14 @@ = _('Overview') %ul.sidebar-sub-level-items - = nav_link(path: ['groups#show', 'groups#activity', 'groups#subgroups'], html_options: { class: "fly-out-top-item" } ) do + = nav_link(path: ['groups#show', 'groups#details', 'groups#activity', 'groups#subgroups'], html_options: { class: "fly-out-top-item" } ) do = link_to group_path(@group) do %strong.fly-out-top-item-name = _('Overview') %li.divider.fly-out-top-item - = nav_link(path: ['groups#show', 'groups#subgroups'], html_options: { class: 'home' }) do - = link_to group_path(@group), title: _('Group details') do + + = nav_link(path: ['groups#show', 'groups#details', 'groups#subgroups'], html_options: { class: 'home' }) do + = link_to details_group_path(@group), title: _('Group details') do %span = _('Details') @@ -40,9 +41,11 @@ - if group_sidebar_link?(:contribution_analytics) = nav_link(path: 'analytics#show') do - = link_to group_analytics_path(@group), title: 'Contribution Analytics', data: {placement: 'right'} do + = link_to group_analytics_path(@group), title: _('Contribution Analytics'), data: { placement: 'right' } do %span - Contribution Analytics + = _('Contribution Analytics') + + = render_if_exists 'layouts/nav/group_insights_link' = render_if_exists "layouts/nav/ee/epic_link", group: @group diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index edd8d12d4049fda2fc1cf29e713049afe56d66c9..16aeca777952c1273bbd42d5420d5eb33244d276 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -41,6 +41,8 @@ = link_to project_cycle_analytics_path(@project), title: _('Cycle Analytics'), class: 'shortcuts-project-cycle-analytics' do %span= _('Cycle Analytics') + = render_if_exists 'layouts/nav/project_insights_link' + - if project_nav_tab? :files = nav_link(controller: sidebar_repository_paths) do = link_to project_tree_path(@project), class: 'shortcuts-tree qa-project-menu-repo' do diff --git a/app/views/notify/new_merge_request_email.html.haml b/app/views/notify/new_merge_request_email.html.haml index db23447dd392a7a97cdff7ac7602baa40ac55b13..78de5548dad7c84e259abdcdd9ba4056d1ff425a 100644 --- a/app/views/notify/new_merge_request_email.html.haml +++ b/app/views/notify/new_merge_request_email.html.haml @@ -3,7 +3,7 @@ #{link_to @merge_request.author_name, user_url(@merge_request.author)} created a merge request: %p.details - != merge_path_description(@merge_request, '→') + = merge_path_description(@merge_request, '→') - if @merge_request.assignee_id.present? %p diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 9a7064f4ff5a9ea8310ab8e7ffebd6ae53b97618..26ab89da3a67a2a929e7b4e66bcaac6ce3bfb9dc 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -15,7 +15,7 @@ .issuable-status-box.status-box.status-box-issue-closed{ class: issue_button_visibility(@issue, false) } = sprite_icon('mobile-issue-close', size: 16, css_class: 'd-block d-sm-none') .d-none.d-sm-block - - if @issue.moved? + - if @issue.moved? && can?(current_user, :read_issue, @issue.moved_to) - moved_link_start = "".html_safe - moved_link_end = ''.html_safe = s_('IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})').html_safe % {moved_link_start: moved_link_start, @@ -90,8 +90,9 @@ #merge-requests{ data: { url: referenced_merge_requests_project_issue_path(@project, @issue) } } // This element is filled in using JavaScript. - #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } } - // This element is filled in using JavaScript. + - if can?(current_user, :download_code, @project) + #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } } + // This element is filled in using JavaScript. .content-block.emoji-block.emoji-block-sticky .row diff --git a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml index 8181267184a0857fd6034a9c52901ad7a9cbbdca..55c89f137c519b07bcaa07afaf179b76d8fa68c8 100644 --- a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml +++ b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml @@ -6,7 +6,7 @@ .form-group.row .col-md-4 %h4= _('Resolve conflicts on source branch') - .resolve-info + .resolve-info{ "v-pre": true } = translation.html_safe .col-md-8 %label.label-bold{ "for" => "commit-message" } diff --git a/app/views/projects/mirrors/_authentication_method.html.haml b/app/views/projects/mirrors/_authentication_method.html.haml index 293a2e3ebfe871606e67129e8a4e44ce4be180e2..ef6db07a1bb3b57a36216e26ed36d71f82322da2 100644 --- a/app/views/projects/mirrors/_authentication_method.html.haml +++ b/app/views/projects/mirrors/_authentication_method.html.haml @@ -9,6 +9,7 @@ = f.select :auth_method, options_for_select(auth_options, mirror.auth_method), {}, { class: "form-control js-mirror-auth-type qa-authentication-method" } + = f.hidden_field :auth_method, value: "password", class: "js-hidden-mirror-auth-type" .form-group .collapse.js-well-changing-auth diff --git a/app/views/projects/protected_branches/shared/_index.html.haml b/app/views/projects/protected_branches/shared/_index.html.haml index 4997770321edd304e154cfec138f7cdf163d27f2..539b184e5c23fb95a9cd307194a2757d77e870d8 100644 --- a/app/views/projects/protected_branches/shared/_index.html.haml +++ b/app/views/projects/protected_branches/shared/_index.html.haml @@ -12,7 +12,7 @@ %p By default, protected branches are designed to: %ul - %li prevent their creation, if not already created, from everybody except users who are allowed to merge + %li prevent their creation, if not already created, from everybody except Maintainers %li prevent pushes from everybody except Maintainers %li prevent anyone from force pushing to the branch %li prevent anyone from deleting the branch diff --git a/app/views/projects/settings/operations/_error_tracking.html.haml b/app/views/projects/settings/operations/_error_tracking.html.haml index 6b15331db01e1b74a3ecdb0772ef995a521f3c3b..451a79becc3ea1a94ac7e51c5821edc43a08b0eb 100644 --- a/app/views/projects/settings/operations/_error_tracking.html.haml +++ b/app/views/projects/settings/operations/_error_tracking.html.haml @@ -2,7 +2,7 @@ - setting = error_tracking_setting -%section.settings.expanded.border-0.no-animate +%section.settings.expanded.no-animate .settings-header %h4 = _('Error Tracking') diff --git a/app/views/projects/settings/operations/show.html.haml b/app/views/projects/settings/operations/show.html.haml index 2822debe426b80f3a68220d0a028fa404dd03183..6f777305a549a4b71081766fe07e368bea517af3 100644 --- a/app/views/projects/settings/operations/show.html.haml +++ b/app/views/projects/settings/operations/show.html.haml @@ -2,5 +2,6 @@ - page_title _('Operations Settings') - breadcrumb_title _('Operations Settings') += render_if_exists 'projects/settings/operations/incidents' = render 'projects/settings/operations/error_tracking', expanded: true = render_if_exists 'projects/settings/operations/tracing' diff --git a/app/views/sent_notifications/unsubscribe.html.haml b/app/views/sent_notifications/unsubscribe.html.haml index ca392e1adfc99a8414ee563e8428af89d29dc9ec..22fcfcda297f4f4ef54cdc0d44b627f8dbce890d 100644 --- a/app/views/sent_notifications/unsubscribe.html.haml +++ b/app/views/sent_notifications/unsubscribe.html.haml @@ -1,6 +1,6 @@ - noteable = @sent_notification.noteable - noteable_type = @sent_notification.noteable_type.titleize.downcase -- noteable_text = %(#{noteable.title} (#{noteable.to_reference})) +- noteable_text = show_unsubscribe_title?(noteable) ? %(#{noteable.title} (#{noteable.to_reference})) : %(#{noteable.to_reference}) - page_title _("Unsubscribe"), noteable_text, noteable_type.pluralize, @sent_notification.project.full_name %h3.page-title diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb index bcbe1234362db1b46b35c6010ff6bfef7442bc4e..18f4402d18358ad61d4e617b624f37a602fe6fbf 100644 --- a/app/workers/project_cache_worker.rb +++ b/app/workers/project_cache_worker.rb @@ -26,6 +26,7 @@ def perform(project_id, files = [], statistics = []) # rubocop: enable CodeReuse/ActiveRecord def update_statistics(project, statistics = []) + return if Gitlab::Database.read_only? return unless try_obtain_lease_for(project.id, :update_statistics) Rails.logger.info("Updating statistics for project #{project.id}") diff --git a/changelogs/unreleased/10095-job-getters.yml b/changelogs/unreleased/10095-job-getters.yml deleted file mode 100644 index f12fc8b26ec82494a99fff110efe7bc989fcaf65..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/10095-job-getters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes EE differences for jobs/getters.js -merge_request: -author: -type: other diff --git a/changelogs/unreleased/10097-number-utils.yml b/changelogs/unreleased/10097-number-utils.yml deleted file mode 100644 index 417008f65395769ac760789ebb7577d35dec08ec..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/10097-number-utils.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moves EE util into the CE file -merge_request: 25680 -author: -type: other diff --git a/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml b/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml deleted file mode 100644 index 5c3b6833235c0e3637818fa67108a5c7f2620d5b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for masking CI variables. -merge_request: 25293 -author: -type: added diff --git a/changelogs/unreleased/20084-update-the-spinner-component.yml b/changelogs/unreleased/20084-update-the-spinner-component.yml deleted file mode 100644 index c93648e4f54e2c4cd9bbae4f1b3bcad93ec2641a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/20084-update-the-spinner-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a spinner icon which is rendered using pure css -merge_request: 25186 -author: -type: changed diff --git a/changelogs/unreleased/24642-activity_service_optimization.yml b/changelogs/unreleased/24642-activity_service_optimization.yml deleted file mode 100644 index bdfa769959e53a72b3a480d81120417f9ad55d85..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/24642-activity_service_optimization.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Optimize Redis usage in User::ActivityService -merge_request: 25005 -author: -type: performance diff --git a/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml b/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml deleted file mode 100644 index 8c5f05c35750e30284c43c7d7a85a09c6474dc84..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Confirmation Modal to Rollback on Environment -merge_request: 25110 -author: -type: added diff --git a/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml b/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml deleted file mode 100644 index 27ad151cd061f49612df1363ba0b3ca8bbc775ee..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Remove the possibility to share a project with a group that a user is not a member - of -merge_request: -author: -type: security diff --git a/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml b/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml deleted file mode 100644 index d0bb4225ce48206f42386b592c19eddb71d9063e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed "Copying comment with ordered list includes extraneous newlines" -merge_request: 25695 -author: -type: fixed diff --git a/changelogs/unreleased/34555-empty-state-for-starred-projects.yml b/changelogs/unreleased/34555-empty-state-for-starred-projects.yml deleted file mode 100644 index 926d3a2eecfe6525891c81d4fd243291e0a6ea61..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/34555-empty-state-for-starred-projects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve empty state for starred projects -merge_request: 25138 -author: -type: changed diff --git a/changelogs/unreleased/35638-move-language-setting-to-preferences.yml b/changelogs/unreleased/35638-move-language-setting-to-preferences.yml deleted file mode 100644 index d8658218676adfb1b5cac781fd9d1955cea31ad8..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/35638-move-language-setting-to-preferences.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move language setting to preferences -merge_request: 25427 -author: Fabian Schneider @fabsrc -type: changed diff --git a/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml b/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml deleted file mode 100644 index a470f917d539114decf68ee5cd2e9d42cd0b2d98..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix username escaping when using assign to me for issues -merge_request: 24673 -author: -type: fixed diff --git a/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml b/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml deleted file mode 100644 index 758b97deb3b5c0e462eae636c22d98ad30dad806..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add left margin to 1st time contributor badge -merge_request: 25216 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml b/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml deleted file mode 100644 index 1af49fb6a2caa06f01152ef68175fc80fd16ee0f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Require only one parameter when updating a wiki' -merge_request: 25191 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/40396-sidekiq-in-process-group.yml b/changelogs/unreleased/40396-sidekiq-in-process-group.yml deleted file mode 100644 index e41557e20d0771d88e20463724e7451ef9733daa..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/40396-sidekiq-in-process-group.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'sidekiq: terminate child processes at shutdown' -merge_request: 25669 -author: -type: added diff --git a/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml b/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml deleted file mode 100644 index 578c780e1a1d6098dba347599deb9e716d5feda3..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'If chpst is available, make fron-source installations run sidekiq as a process group leader' -merge_request: 25654 -author: -type: other diff --git a/changelogs/unreleased/40795-set-project-name-on-fork-api.yml b/changelogs/unreleased/40795-set-project-name-on-fork-api.yml deleted file mode 100644 index 742184bbe1edec53215d02d0b12e3ffe5e1d3cd4..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/40795-set-project-name-on-fork-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ability to set path and name for project on fork using API -merge_request: 25363 -author: -type: added diff --git a/changelogs/unreleased/41888-access-personal-snippets-by-api.yml b/changelogs/unreleased/41888-access-personal-snippets-by-api.yml deleted file mode 100644 index 3561a01ec5fdabc169ba9e78ef55d012d332afe0..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/41888-access-personal-snippets-by-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow all snippets to be accessed by API -merge_request: 25772 -author: -type: added diff --git a/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml b/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml deleted file mode 100644 index f2c4f88b7467cbd2be7e4b235d30ad8894609afc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project fetch statistics -merge_request: 23596 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml b/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml deleted file mode 100644 index 1c739130fccb87eac8c476a7a0795f90bcc28485..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose if the current user can merge a MR' -merge_request: 25207 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/45035-force-push-api.yml b/changelogs/unreleased/45035-force-push-api.yml deleted file mode 100644 index 05f5a36ac38ae1423943e66c87d8221a86ad9071..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/45035-force-push-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Accept force option to overwrite branch on commit via API -merge_request: 25286 -author: -type: added diff --git a/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml b/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml deleted file mode 100644 index 64ab76a2b05f5a8be4546874b3eb07d4de0b094c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix pipeline status icon mismatch -merge_request: 25407 -author: -type: fixed diff --git a/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml b/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml deleted file mode 100644 index 541acdc56a7e4fc7990c2b92acab2ccb836bedfd..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show pipeline ID, commit, and branch name on modal while stopping pipeline -merge_request: 25059 -author: -type: changed diff --git a/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml b/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml deleted file mode 100644 index d052a28ab51a176265cc6818e2a1ff5e7926f830..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sort Environments by Last Updated -merge_request: 25260 -author: -type: added diff --git a/changelogs/unreleased/47150-update-sshkey.yml b/changelogs/unreleased/47150-update-sshkey.yml deleted file mode 100644 index 342bdb1e2bcfa9593b4d8c48de820ac56c72eecf..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/47150-update-sshkey.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix validation of certain ed25519 keys -merge_request: 25115 -author: Merlijn B. W. Wajer -type: fixed diff --git a/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml b/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml deleted file mode 100644 index e08d2a9936990e19481b16358ae38089fc14ef16..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Jobs tab border top in pipeline's page is 1px off -merge_request: 24878 -author: -type: fixed diff --git a/changelogs/unreleased/48798-keybinding-mr-diff.yml b/changelogs/unreleased/48798-keybinding-mr-diff.yml deleted file mode 100644 index 3ef3f07f27c1926b02af89933cf4af1e84426650..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/48798-keybinding-mr-diff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Next/previous navigation between files in MR review -merge_request: 25355 -author: -type: added \ No newline at end of file diff --git a/changelogs/unreleased/49397-move-files-in-ide.yml b/changelogs/unreleased/49397-move-files-in-ide.yml deleted file mode 100644 index 488091d383c04fab76b61e9ad6a3c52315b457d5..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/49397-move-files-in-ide.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Move files in the Web IDE -merge_request: 25431 -author: -type: added diff --git a/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml b/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml deleted file mode 100644 index 8393cb9d282e0a956d46a641fbcfd40e4177a422..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add API endpoint to get a commit's GPG signature -merge_request: 25032 -author: -type: added diff --git a/changelogs/unreleased/49663-branch-to-mr-connection.yml b/changelogs/unreleased/49663-branch-to-mr-connection.yml deleted file mode 100644 index d92ed6fd3bfb76988ce54f8c9cb349a7c4f59974..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/49663-branch-to-mr-connection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Link to most recent MR from a branch -merge_request: 25689 -author: -type: added diff --git a/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml b/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml deleted file mode 100644 index 3c8b58f30014f61c3e8625a2a81b849dda93701f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose text_color for project and group labels' -merge_request: 25172 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml b/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml deleted file mode 100644 index 0188df7fce7c79fd1e4ce6cf7d1caf1424e883eb..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use auto-build-image for build job in Auto-DevOps.gitlab-ci.yml -merge_request: 24279 -author: -type: changed diff --git a/changelogs/unreleased/50433-make-emoji-picker-bigger.yml b/changelogs/unreleased/50433-make-emoji-picker-bigger.yml deleted file mode 100644 index 8fcf41df09db0603e13f259eeaa3924aaf39167d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/50433-make-emoji-picker-bigger.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make emoji picker bigger -merge_request: 25187 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml b/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml deleted file mode 100644 index 76ea4149c56b6ae597d9cf789d510897c410fe51..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for toggling discussion filter from notes section -merge_request: 25426 -author: -type: added diff --git a/changelogs/unreleased/51971-milestones-visibility.yml b/changelogs/unreleased/51971-milestones-visibility.yml deleted file mode 100644 index 818f0071e6c421be98e329717f6443e533249597..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/51971-milestones-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check if desired milestone for an issue is available -merge_request: -author: -type: security diff --git a/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml b/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml deleted file mode 100644 index 84062c6db91783243cd9a17a2b641f4b6075d29a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Timer and action name aligned vertically for delayed jobs in pipeline actions' -merge_request: 25117 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/52424-goodbye-hipchat.yml b/changelogs/unreleased/52424-goodbye-hipchat.yml deleted file mode 100644 index 26dc904af5f4c64f7a0754641a05a74714baf997..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52424-goodbye-hipchat.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove HipChat integration from GitLab -merge_request: 22223 -author: -type: removed diff --git a/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml b/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml deleted file mode 100644 index 816fee1ccfc12026446ccfad731fc1306caf0f1d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display job names consistently on pipelines and environments list -merge_request: 24984 -author: -type: fixed diff --git a/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml b/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml deleted file mode 100644 index 9329e81eb83e1b4184b359bfbd827ee51a35b36e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add rectangular project and group avatars -merge_request: 25098 -author: -type: other diff --git a/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml b/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml deleted file mode 100644 index 7fa01e2835a5ab266ca346e3652e60af09e2af00..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide pipeline status when pipelines are disabled on project. -merge_request: 25204 -author: -type: fixed diff --git a/changelogs/unreleased/52792-align-mirror-repository-button.yml b/changelogs/unreleased/52792-align-mirror-repository-button.yml deleted file mode 100644 index e8ce9ee0a4ef816ccf446a69de5966cc7e4e42b4..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52792-align-mirror-repository-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add right padding to the repository mirror action buttons -merge_request: 25606 -author: -type: fixed diff --git a/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml b/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml deleted file mode 100644 index 13529348c6003bcd37f3b2d03db0cd981f3ea641..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add iOS-fastlane template for .gitlab-ci.yml -merge_request: 25395 -author: -type: changed diff --git a/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml b/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml deleted file mode 100644 index e0ed38fc2fab9bd99e4332be6a43f0d24c345c13..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use limited counter for runner build count in admin page. -merge_request: 25220 -author: -type: fixed diff --git a/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml b/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml deleted file mode 100644 index 65439f5a6c232e71112d8e83e032f59e526364ad..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve Web IDE launch performance -merge_request: 25700 -author: -type: performance diff --git a/changelogs/unreleased/53361-fresh-protected-branches.yml b/changelogs/unreleased/53361-fresh-protected-branches.yml deleted file mode 100644 index 55080e719b7e1ccda7bf6c89be8621fcc72fe661..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53361-fresh-protected-branches.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow creation of branches that match a wildcard protection, except directly through git -merge_request: 24969 -author: -type: added diff --git a/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml b/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml deleted file mode 100644 index 32cca07f58d1d88baa48b667378e1187f7bad1b2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove undigested token column from personal_access_tokens table from the database -merge_request: 22743 -author: -type: changed diff --git a/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml b/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml deleted file mode 100644 index c460760c10b2710a157240dee56cd376e3aac2d2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize markdown toolbar buttons tooltips -merge_request: 25529 -author: -type: fixed diff --git a/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml b/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml deleted file mode 100644 index 6c621763e2e2ce8c0899a32c4e413fe78e8c5ecd..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Promote project milestone to a group milestone' -merge_request: 25203 -author: Nermin Vehabovic -type: added diff --git a/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml b/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml deleted file mode 100644 index 556a238ff7d4511bba1a9a34feb4a71c7fb4a638..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hashed Storage rollback mechanism -merge_request: 23955 -author: -type: added diff --git a/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml b/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml deleted file mode 100644 index f7f8e4d0e1f25573b729e63467bbbef543d1ffb9..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Speed up group issue search counts -merge_request: 25411 -author: -type: performance diff --git a/changelogs/unreleased/54725-fix-emoji-button-active-state.yml b/changelogs/unreleased/54725-fix-emoji-button-active-state.yml deleted file mode 100644 index 4f0a436cc87a582010805bf564e145f6fe33d2e4..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/54725-fix-emoji-button-active-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix hover and active state colors of award emoji button -merge_request: 25295 -author: -type: fixed diff --git a/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml b/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml deleted file mode 100644 index 92b27f63f823536b83e12acd40c75a2516cd31fb..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Sort tie breaker with id DESC' -merge_request: 25311 -author: Nermin Vehabovic -type: changed diff --git a/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml b/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml deleted file mode 100644 index 41761213d7b11672f90e99775bd7d1d7f1afc1fc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Require maintainer access to show pages domain settings -merge_request: 24926 -author: -type: fixed diff --git a/changelogs/unreleased/54924-refactor-notes-actions-params.yml b/changelogs/unreleased/54924-refactor-notes-actions-params.yml deleted file mode 100644 index b608382040168278e07654045487f5ca4682e8c1..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/54924-refactor-notes-actions-params.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix commenting on commits having SHA1 starting with a large number -merge_request: 25278 -author: -type: fixed diff --git a/changelogs/unreleased/55057-system-message-to-core.yml b/changelogs/unreleased/55057-system-message-to-core.yml deleted file mode 100644 index 3381879eb4acc0b02bd2aa36b6ed5ba5172761b1..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55057-system-message-to-core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Port System Header and Footer feature to Core -merge_request: 25241 -author: -type: added diff --git a/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml b/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml deleted file mode 100644 index c58cdc195558a92414afd930060062dd22baa677..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Support Jira transition ID as string' -merge_request: 24400 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml b/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml deleted file mode 100644 index 44ea414163230763251ca51cccbc3727b0a9a612..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Close More Actions tooltip when menu opens -merge_request: 24285 -author: -type: fixed diff --git a/changelogs/unreleased/55312-svg.yml b/changelogs/unreleased/55312-svg.yml deleted file mode 100644 index a6260aeaf2ae2b8781196e2be66670ae3919cd9a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55312-svg.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use export-import svgs from gitlab-svgs -merge_request: 24954 -author: -type: other diff --git a/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml b/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml deleted file mode 100644 index d2f24d6f4994a6179efd6f8f7f605a8fb7955b06..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Ensure that related merge requests are referenced cross-project' -merge_request: 25222 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/55447-validate-k8s-ca-cert.yml b/changelogs/unreleased/55447-validate-k8s-ca-cert.yml deleted file mode 100644 index e0448d403da48056db3a8dd2c7ced0272d89f86d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55447-validate-k8s-ca-cert.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate kubernetes cluster CA certificate -merge_request: 24990 -author: -type: changed diff --git a/changelogs/unreleased/55703-md-image-borders.yml b/changelogs/unreleased/55703-md-image-borders.yml deleted file mode 100644 index 94297a42f6d409535c08b3ca0fbaad5242b175af..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55703-md-image-borders.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only show borders for markdown images in notes -merge_request: 25448 -author: -type: fixed diff --git a/changelogs/unreleased/55893-artifacts-download.yml b/changelogs/unreleased/55893-artifacts-download.yml deleted file mode 100644 index 30c118b70942d7e914177c9ad50f7c7506cd2a41..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55893-artifacts-download.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes not working dropdowns in pipelines page -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml b/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml deleted file mode 100644 index ef3d9844acb3571301a414f5e89cc893eab336c5..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Review App Link to Changed Page if Only One Change Present -merge_request: 25048 -author: -type: changed diff --git a/changelogs/unreleased/56237-api-truncated-commit-title.yml b/changelogs/unreleased/56237-api-truncated-commit-title.yml deleted file mode 100644 index 1a48d0fda1b27017d0b2d259f94ccf943b9f27a8..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56237-api-truncated-commit-title.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose full commit title' -merge_request: 25189 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml b/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml deleted file mode 100644 index bedc488ebd4201d14a974f11dca036adfb01d62d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix weekday shift in issue board cards for UTC+X timezones by removing local timezone to UTC conversion" -merge_request: 25512 -author: Elias Werberich -type: fixed diff --git a/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml b/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml deleted file mode 100644 index 7febe175fafd8dd5c786be609844abd53d5eb994..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicate units from metrics graph -merge_request: 25485 -author: -type: fixed diff --git a/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml b/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml deleted file mode 100644 index 5362ac6503811153d25b391ed0c63b10208b02c2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add field mergeRequests for project in GraphQL -merge_request: 24805 -author: -type: added diff --git a/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml b/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml deleted file mode 100644 index 9b7aed82d49ad9595d8f74b6baefc8197af59c39..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Implement new arguments `state`, `closed_before` and `closed_after` for `IssuesResolver` in GraphQL" -merge_request: 24910 -author: -type: changed diff --git a/changelogs/unreleased/56618-hashed-storage-skip-validation.yml b/changelogs/unreleased/56618-hashed-storage-skip-validation.yml deleted file mode 100644 index c6b32d0bfec6238bc6623cc8167eae58cc7cb59a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56618-hashed-storage-skip-validation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Skip Project validation during Hashed Storage migration or rollback -merge_request: 25753 -author: -type: fixed diff --git a/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml b/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml deleted file mode 100644 index ae2d9e18e0bac6988bef219c36ae443293d3f15a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Indicate if label is a project label' -merge_request: 25219 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml b/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml deleted file mode 100644 index 3eb9e4846476a045cecf7741d07d729bb8780b36..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix N+1 query in Issues and MergeRequest API when issuable_metadata is present -merge_request: 25042 -author: Alex Koval -type: other diff --git a/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml b/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml deleted file mode 100644 index cc3a60479d3c48d542b8d4d71e34bf8ffccdf84c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add realtime validation for user fullname and username on validation -merge_request: 25017 -author: Ehsan Abdulqader @EhsanZ -type: added diff --git a/changelogs/unreleased/56809-graphql-version-api.yml b/changelogs/unreleased/56809-graphql-version-api.yml deleted file mode 100644 index 72a4b4e58199ff54285f16bbf34adf1d82aa5193..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56809-graphql-version-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add metadata about the GitLab server to GraphQL -merge_request: 24636 -author: -type: added diff --git a/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml b/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml deleted file mode 100644 index 5b9253793be75c4fdb0624886d08ecbccdd0499f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow empty values such as [] to be stored in reactive cache -merge_request: 25283 -author: -type: fixed diff --git a/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml b/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml deleted file mode 100644 index ff4aebb93818065abe2df327671ba5d0d51f2268..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error tracking list page -merge_request: 24806 -author: -type: fixed diff --git a/changelogs/unreleased/56863-system-messages-in-email.yml b/changelogs/unreleased/56863-system-messages-in-email.yml deleted file mode 100644 index 21a90aa95ee13b92cae7e793e900bae4facd5e1b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56863-system-messages-in-email.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show header and footer system messages in email -merge_request: 25474 -author: -type: added diff --git a/changelogs/unreleased/56871-list-issues-error.yml b/changelogs/unreleased/56871-list-issues-error.yml deleted file mode 100644 index af5585c6b5d07515dde8ba240251333092e3839f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56871-list-issues-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display error message when API call to list Sentry issues fails -merge_request: 24936 -author: -type: fixed diff --git a/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml b/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml deleted file mode 100644 index a7af8994852ad58c874dc903860e0db986f23aae..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only load syntax highlight CSS of selected theme -merge_request: 25232 -author: -type: performance diff --git a/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml b/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml deleted file mode 100644 index 11d93b347003e336bcba093871b105f2b8a17d6c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes functions finder for upgraded Knative app -merge_request: 25067 -author: -type: fixed diff --git a/changelogs/unreleased/56937-edit-knative-domain.yml b/changelogs/unreleased/56937-edit-knative-domain.yml deleted file mode 100644 index 7147a4e06b12a2a8f143b9f46f45c04620ed07a8..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/56937-edit-knative-domain.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Edit Knative domain after it has been deployed -merge_request: 25386 -author: -type: added diff --git a/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml b/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml deleted file mode 100644 index 1d07666dfb1efb4cef4d365b8739f29a437e0511..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add zoom and scroll to metrics dashboard -merge_request: 25388 -author: -type: added diff --git a/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml b/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml deleted file mode 100644 index 2e0ae9c37320b4fea7bd3f4c304affff0c036795..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Fix docs and parameters for hangouts-chat service' -merge_request: 25180 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/57223-wiki-finder.yml b/changelogs/unreleased/57223-wiki-finder.yml deleted file mode 100644 index 5ddf197568d6be27f7e3457ab3d0e2e73faa0c61..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57223-wiki-finder.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove BATCH_SIZE from WikiFileFinder -merge_request: 24933 -author: -type: other diff --git a/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml b/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml deleted file mode 100644 index 46f82afda62105dcda31aa045dc179237e0a5881..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provide expires_in in LFS authentication payload -merge_request: 25082 -author: -type: fixed diff --git a/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml b/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml deleted file mode 100644 index 6be6a2115b950dd5c5a541be47c08a972de34085..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for FTP assets for releases -merge_request: 25071 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/57534_filter_impersonated_sessions.yml b/changelogs/unreleased/57534_filter_impersonated_sessions.yml deleted file mode 100644 index 80aea0ab1bcfea868ff8c22b6fa309e115a7c15b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57534_filter_impersonated_sessions.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Do not display impersonated sessions under active sessions and remove ability - to revoke session -merge_request: -author: -type: security diff --git a/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml b/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml deleted file mode 100644 index 9d9158ca4aff41720da5d6fd8ff36d5643356b83..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not show file templates when creating a new directory in WebIDE -merge_request: !25119 -author: -type: fixed diff --git a/changelogs/unreleased/57564-contributing-button-border.yml b/changelogs/unreleased/57564-contributing-button-border.yml deleted file mode 100644 index e5875ef1c0fc8c715633ac41d127ab7f5f000f2e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57564-contributing-button-border.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix the border style of CONTRIBUTING button when it exists -merge_request: 25124 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml b/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml deleted file mode 100644 index f7d6a6c48639a67896cdcbdfdc8100fbd7b209c4..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix import_jid error on project import -merge_request: 25239 -author: -type: fixed diff --git a/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml b/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml deleted file mode 100644 index 5681309cb9e56f71b548229bc8aa5493feafe9b3..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix alignment of dropdown icon on issuable on mobile -merge_request: 25205 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml b/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml deleted file mode 100644 index 0d5cd057adee712742707317f5f06d8e9fb7544f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Capture due date when importing milestones from Github -merge_request: 25182 -author: dstanley -type: changed diff --git a/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml b/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml deleted file mode 100644 index d89819eee6016f5d8fb7ff3bf6a9ee7bd3a8d12f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ensure the base pipeline of a Merge Request belongs to its target branch -merge_request: 25226 -author: -type: fixed diff --git a/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml b/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml deleted file mode 100644 index 6fb198e155276c60354184906ff0c8315d558d93..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project import error importing releases -merge_request: 25495 -author: -type: fixed diff --git a/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml b/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml deleted file mode 100644 index 781446b86d7ca20e36e8a1a78bb61141abffde95..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve label select rendering -merge_request: 25281 -author: -type: performance diff --git a/changelogs/unreleased/57768-remove-vertical-line.yml b/changelogs/unreleased/57768-remove-vertical-line.yml deleted file mode 100644 index b73b0fa229e5dc40e9a6ddfdbcdcf5caab304b14..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57768-remove-vertical-line.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove vertical connecting line placeholder from diff discussion notes -merge_request: 25292 -author: -type: fixed diff --git a/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml b/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml deleted file mode 100644 index 2775d9f4e36da8bf74dc6e3d597b3d4a90c1778e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Link from Closed (moved) Issues to Moved Issue -merge_request: 25300 -author: -type: added diff --git a/changelogs/unreleased/57785-create-project-template-for-netlify.yml b/changelogs/unreleased/57785-create-project-template-for-netlify.yml deleted file mode 100644 index 78e9e3dece5ab211a09881fedfac788075f9b724..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57785-create-project-template-for-netlify.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Create Project Template for Netlify -merge_request: 25453 -author: -type: changed diff --git a/changelogs/unreleased/57788-project-labels-tooltip-missing.yml b/changelogs/unreleased/57788-project-labels-tooltip-missing.yml deleted file mode 100644 index 9146af0e0f371509b14ee87cc97c36dd8cf08bc9..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57788-project-labels-tooltip-missing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug where project topics truncate -merge_request: 25398 -author: -type: fixed diff --git a/changelogs/unreleased/57794-project-template-for-net.yml b/changelogs/unreleased/57794-project-template-for-net.yml deleted file mode 100644 index bc05ac10aff630071a8100c8286d4efa37a9cc0a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57794-project-template-for-net.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Project template for .NET Core -merge_request: 25486 -author: -type: changed diff --git a/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml b/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml deleted file mode 100644 index b4b305e76d06afbef8d072d635c84d6f0f46ee13..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix author layouts in issuable meta line UIs on mobile -merge_request: 25332 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml b/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml deleted file mode 100644 index 046ef8ee99ea579d77d74394dcef3adcdb217474..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix ETag caching not being used for AJAX requests -merge_request: 25400 -author: -type: fixed diff --git a/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml b/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml deleted file mode 100644 index 2e18377a4cff1994252c8e898e02662f772fbe3a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Improve the JS pagination to handle the case when the `X-Total` and `X-Total-Pages` headers aren't present" -merge_request: 25601 -author: -type: fixed diff --git a/changelogs/unreleased/58010-mask-the-existing-variables.yml b/changelogs/unreleased/58010-mask-the-existing-variables.yml deleted file mode 100644 index cc5fdb29686334e1440c5a0e587e656343fdba7e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58010-mask-the-existing-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Mask all TOKEN and PASSWORD CI variables. -merge_request: 25868 -author: -type: changed diff --git a/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml b/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml deleted file mode 100644 index 7cfeb4a0cd7cf08a3c7497e0d577840103d26cb3..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Respect the should_remove_source_branch parameter to the merge API -merge_request: 25525 -author: -type: fixed diff --git a/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml b/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml deleted file mode 100644 index 69d927dc5e4ec2fa252ce43e58ebd41d75e00b5c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Saturday to Localization first day of the week -merge_request: 25509 -author: Ahmad Haghighi -type: added diff --git a/changelogs/unreleased/58082-project-template-for-go-micro.yml b/changelogs/unreleased/58082-project-template-for-go-micro.yml deleted file mode 100644 index 63a70cda0b8353546870756156bf260a4b288f4d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58082-project-template-for-go-micro.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Project template for go-micro -merge_request: 25553 -author: -type: changed diff --git a/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml b/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml deleted file mode 100644 index a7a87f60c286381826ee0444e7ffd1c6b097e1f0..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow configuring POSTGRES_VERSION in Auto DevOps -merge_request: 25500 -author: -type: added diff --git a/changelogs/unreleased/58149-fix-read-list-board-policy.yml b/changelogs/unreleased/58149-fix-read-list-board-policy.yml deleted file mode 100644 index 964813f4c9a1b9ba46e6bb7639c9a63af8c65299..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58149-fix-read-list-board-policy.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix error when viewing group issue boards when user doesn't have explicit group - permissions -merge_request: 25524 -author: -type: fixed diff --git a/changelogs/unreleased/58274-folder-icon-in-tags-page.yml b/changelogs/unreleased/58274-folder-icon-in-tags-page.yml deleted file mode 100644 index db8128b8dfd6727be1a4b6e8253d4fb49b46986a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58274-folder-icon-in-tags-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use 'folder-open' from sprite icons for Browse Files button in Tag page -merge_request: 25635 -author: -type: fixed diff --git a/changelogs/unreleased/58369-hide-squash-commit.yml b/changelogs/unreleased/58369-hide-squash-commit.yml deleted file mode 100644 index e44b483b3a18852dfc7e5053c853878a926ae787..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58369-hide-squash-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve showing squash commit edit issue when only single commit is present -merge_request: 25807 -author: -type: fixed diff --git a/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml b/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml deleted file mode 100644 index b81dc151b4401afd15416e67e62f014fcd7fc62a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clean up vendored templates -merge_request: 25794 -author: -type: changed diff --git a/changelogs/unreleased/58648-project-template-for-ios.yml b/changelogs/unreleased/58648-project-template-for-ios.yml deleted file mode 100644 index 708ecb4d3dcc8d2e7fe0afce609beb69fb861c3a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58648-project-template-for-ios.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add iOS project template -merge_request: 25872 -author: -type: changed diff --git a/changelogs/unreleased/58649-project-template-for-android.yml b/changelogs/unreleased/58649-project-template-for-android.yml deleted file mode 100644 index 130992272ec3329dc3c63c46c2e2689585fa6014..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/58649-project-template-for-android.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project template for Android -merge_request: 25870 -author: -type: changed diff --git a/changelogs/unreleased/8711-prep-frontend-single-repo.yml b/changelogs/unreleased/8711-prep-frontend-single-repo.yml deleted file mode 100644 index 9c16e16a84bd91ee217aa5b2e9c41554e24e62d2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/8711-prep-frontend-single-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates a helper function to check if repo is EE -merge_request: 25647 -author: -type: other diff --git a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml deleted file mode 100644 index c014edf9c096a0571c521aa87694edfd8606450c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow users to compare branches on a read-only instance -merge_request: 25414 -author: -type: fixed diff --git a/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml b/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml deleted file mode 100644 index 39d7ead9af4c8faf3baaecd57f4192eeca884c1a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project level config for merge pipelines -merge_request: 25385 -author: -type: added diff --git a/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml b/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml deleted file mode 100644 index 7438053a84f586774647a608e5b1edf637547391..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add related merge request count to api response -merge_request: 24974 -author: -type: added diff --git a/changelogs/unreleased/add-title-attribute-to-file-row.yml b/changelogs/unreleased/add-title-attribute-to-file-row.yml deleted file mode 100644 index c68d3d544e7870a90e52ce90e95260672554baff..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/add-title-attribute-to-file-row.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: add title attribute to display file name -merge_request: 25154 -author: Satoshi Nakamatsu @satoshicano -type: added diff --git a/changelogs/unreleased/add-youtrack-integration.yml b/changelogs/unreleased/add-youtrack-integration.yml deleted file mode 100644 index f500e62514548c074e4071a7a44fc1c7897e29e1..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/add-youtrack-integration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add YouTrack integration service -merge_request: 25361 -author: Yauhen Kotau @bessorion -type: added diff --git a/changelogs/unreleased/add_ldap_tls_options.yml b/changelogs/unreleased/add_ldap_tls_options.yml deleted file mode 100644 index c3678cb8fb66bf6c0d300da4607a84d46cd934d6..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/add_ldap_tls_options.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow raw `tls_options` to be passed in LDAP configuration -merge_request: 20678 -author: -type: changed diff --git a/changelogs/unreleased/allow-maintainers-to-remove-pages.yml b/changelogs/unreleased/allow-maintainers-to-remove-pages.yml deleted file mode 100644 index 6e344dbe0e99c57e0e56211e85e63202ce23d00f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/allow-maintainers-to-remove-pages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow maintainers to remove pages -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/allow-to-recursively-include.yml b/changelogs/unreleased/allow-to-recursively-include.yml deleted file mode 100644 index edfbfcb01461b633ec6fa562540e298a2215a1a7..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/allow-to-recursively-include.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow to recursively expand includes -merge_request: 24356 -author: -type: added diff --git a/changelogs/unreleased/an-peek-jaeger.yml b/changelogs/unreleased/an-peek-jaeger.yml deleted file mode 100644 index 8659ee4f9e0b9493dc23f5b8f30db5da0e84cd7c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/an-peek-jaeger.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provide a performance bar link to the Jaeger UI -merge_request: 24902 -author: -type: other diff --git a/changelogs/unreleased/auto-devops-tags.yml b/changelogs/unreleased/auto-devops-tags.yml deleted file mode 100644 index 1b96d4577760a934111674f9e88ae62cb6aa4d27..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/auto-devops-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds Auto DevOps build job for tags -merge_request: 25718 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/bvl-graphql-csrf.yml b/changelogs/unreleased/bvl-graphql-csrf.yml deleted file mode 100644 index d1e5b56c7515d8cf7c2add1ddc4aa1d2cfc978da..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/bvl-graphql-csrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow GraphQL requests without CSRF token -merge_request: 25719 -author: -type: fixed diff --git a/changelogs/unreleased/change-badges-example-to-pipeline.yml b/changelogs/unreleased/change-badges-example-to-pipeline.yml deleted file mode 100644 index 8ed4d77fd6c144c7f3ffe0a1ff86269032025636..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/change-badges-example-to-pipeline.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change badges.svg example to pipeline.svg -merge_request: 25157 -author: Aviad Levy -type: fixed diff --git a/changelogs/unreleased/changelogs-readme.yml b/changelogs/unreleased/changelogs-readme.yml deleted file mode 100644 index 9f3916995759a11ee03a62c064807d0d4472b6b1..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/changelogs-readme.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: add readme to changelogs directory -merge_request: 25209 -author: "@glensc" -type: added diff --git a/changelogs/unreleased/consistent-pagination.yml b/changelogs/unreleased/consistent-pagination.yml deleted file mode 100644 index 95eefaeb31d24d6c9940f8fbd233f23cee11046e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/consistent-pagination.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix inconsistent pagination styles -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/deprecated-migration-inheritance.yml b/changelogs/unreleased/deprecated-migration-inheritance.yml deleted file mode 100644 index 814c511195b758172ee79990151adfabd380d813..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/deprecated-migration-inheritance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Directly inheriting from ActiveRecord::Migration is deprecated -merge_request: 25066 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/diff-tree-resizable.yml b/changelogs/unreleased/diff-tree-resizable.yml deleted file mode 100644 index 7411640aea558b54317c5b491e5d5c706b7ee0a9..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/diff-tree-resizable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make file tree in merge requests resizable -merge_request: -author: -type: added diff --git a/changelogs/unreleased/dz-sort-labels-alphabetically.yml b/changelogs/unreleased/dz-sort-labels-alphabetically.yml deleted file mode 100644 index acfde3de99903c4b4af7c57f8d7057936332674b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/dz-sort-labels-alphabetically.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sort labels alphabetically on issues and merge requests list -merge_request: 25470 -author: -type: changed diff --git a/changelogs/unreleased/enable-markup-highlighting.yml b/changelogs/unreleased/enable-markup-highlighting.yml deleted file mode 100644 index 33fcf784f7dca57bda1d1f968ab866014c5af02f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/enable-markup-highlighting.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable syntax highlighting to other supported markups -merge_request: 25761 -author: -type: other diff --git a/changelogs/unreleased/expand-diff-to-full-file.yml b/changelogs/unreleased/expand-diff-to-full-file.yml deleted file mode 100644 index f41a6be22e8c7fe0c415e8e66057161b2e5899cf..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/expand-diff-to-full-file.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow expanding a diff to display full file -merge_request: 24406 -author: -type: added diff --git a/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml b/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml deleted file mode 100644 index 399f60ef219dffde0855ee407166ebb78bfcd8ef..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose additional merge request pipeline variables -merge_request: 24595 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/expose-merge-ref-to-runner.yml b/changelogs/unreleased/expose-merge-ref-to-runner.yml deleted file mode 100644 index 945f4f6e05a14ca511702f5532861642facb0b1c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/expose-merge-ref-to-runner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose refspecs and depth to runner -merge_request: 25233 -author: -type: added diff --git a/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml b/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml deleted file mode 100644 index e5cbc87ba249f9f5164dbdd9afa1ec217d6121a7..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose merge request entity for pipelines -merge_request: 25679 -author: -type: added diff --git a/changelogs/unreleased/fast-destroy-uploads.yml b/changelogs/unreleased/fast-destroy-uploads.yml deleted file mode 100644 index ee3363a6ae9eb66a0c7df73c740ec387037bed27..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fast-destroy-uploads.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: File uploads are deleted asynchronously when deleting a project or group. -merge_request: -author: -type: added diff --git a/changelogs/unreleased/feature-api-delete-job-artifacts.yml b/changelogs/unreleased/feature-api-delete-job-artifacts.yml deleted file mode 100644 index ddbbe3c2650c2ceb53566c3c489114701d73345c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/feature-api-delete-job-artifacts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extend the Gitlab API for deletion of job_artifacts of a single job. -merge_request: 25522 -author: rroger -type: added diff --git a/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml b/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml deleted file mode 100644 index ebb71f00c4b5ca35659bf3993da860475b427fa2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Simplify CI/CD configuration on serverless projects -merge_request: 25523 -author: -type: added diff --git a/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml b/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml deleted file mode 100644 index ad92135d40163a47ffd3ae9108f4e65445263e53..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable persisted pipeline stages by default -merge_request: 25347 -author: -type: performance diff --git a/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml b/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml deleted file mode 100644 index 86df4595e7b80df1679de041f6c7229feaedaf70..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a tag filter to the admin runners view -merge_request: 19740 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/filter-confidential-issues.yml b/changelogs/unreleased/filter-confidential-issues.yml deleted file mode 100644 index 83f19a57aabee84d7bf2579eaa961a1b7b71d39a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/filter-confidential-issues.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ability to filter confidential issues -merge_request: 24960 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/filter-note-parameters.yml b/changelogs/unreleased/filter-note-parameters.yml deleted file mode 100644 index fca2a39482013bc3f7ba04ec5b3e9d33c0a65cdd..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/filter-note-parameters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include note in the Rails filter_parameters configuration -merge_request: 25238 -author: -type: other diff --git a/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml b/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml deleted file mode 100644 index af80a069fde8ca1b9347bb1ab7b7226d03512624..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed navigation sidebar flashing open on page load -merge_request: 24555 -author: -type: fixed diff --git a/changelogs/unreleased/fix-badges-logs.yml b/changelogs/unreleased/fix-badges-logs.yml deleted file mode 100644 index 6236e7b046dcba1e5c93c1e32893a872563109ab..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix-badges-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Doc - fix the url of pipeline status badge -merge_request: 25404 -author: Aviad Levy -type: fixed diff --git a/changelogs/unreleased/fix-blob-editor-deleting-content.yml b/changelogs/unreleased/fix-blob-editor-deleting-content.yml deleted file mode 100644 index d5b7bbc7b1c5c724501b2bd85e8477229d01206b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix-blob-editor-deleting-content.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed blob editor deleting file content for certain file paths -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml b/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml deleted file mode 100644 index 8a98a39fdc26f849efbcf101379d5acce64709cc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bridge jobs only/except variables policy -merge_request: 25710 -author: -type: fixed diff --git a/changelogs/unreleased/fix-group-without-owner.yml b/changelogs/unreleased/fix-group-without-owner.yml deleted file mode 100644 index 884f1b3a08a0a5d9da2bcf45e4d0a83472ebf13c..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix-group-without-owner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: fix group without owner after transfer -merge_request: 25573 -author: Peter Marko -type: fixed diff --git a/changelogs/unreleased/fix_-56347.yml b/changelogs/unreleased/fix_-56347.yml deleted file mode 100644 index 1d03ed8864c67ae445c7fd21417d7528d8b7e5fa..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/fix_-56347.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix overlapping empty-header logo -merge_request: 24868 -author: Jonas L. -type: fixed diff --git a/changelogs/unreleased/gitaly-version-v1.26.0.yml b/changelogs/unreleased/gitaly-version-v1.26.0.yml deleted file mode 100644 index cc91b13c3c14b17887ad6e75e281c98eda4319cf..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gitaly-version-v1.26.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.26.0 -merge_request: 25890 -author: -type: changed diff --git a/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml b/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml deleted file mode 100644 index b8668d338deb134c54ae17739ecaa44f72ba4e2d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump Helm and kubectl used in Kubernetes integration to 2.12.3 and 1.11.7 respectively -merge_request: 25268 -author: -type: other diff --git a/changelogs/unreleased/gokhanap-master-patch-03762.yml b/changelogs/unreleased/gokhanap-master-patch-03762.yml deleted file mode 100644 index 22ab453e3599637deb53c763870f96f2f68eb61b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gokhanap-master-patch-03762.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'commit page info-well overflow fix #56436' -merge_request: 24799 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml b/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml deleted file mode 100644 index 29dbf2367b7b5cab567bb2d8b48c4e1191d8b434..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/commit` -merge_request: 24668 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-update-activity-filter-for-issues.yml b/changelogs/unreleased/gt-update-activity-filter-for-issues.yml deleted file mode 100644 index f9be54ea8a9d5cfbce9002cfd623d31d53b1b8ec..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gt-update-activity-filter-for-issues.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update activity filter for issues -merge_request: 23423 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-update-new-password-breadcrumb.yml b/changelogs/unreleased/gt-update-new-password-breadcrumb.yml deleted file mode 100644 index 43ea2f0d44b0f201dfc463f87f7e04eae58670ee..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gt-update-new-password-breadcrumb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update new password breadcrumb -merge_request: 25037 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml b/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml deleted file mode 100644 index f7b10ea5c172938fb6b80486f56c79a8616edeba..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update operations settings breadcrumb trail -merge_request: 25539 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/helm-2-12-3.yml b/changelogs/unreleased/helm-2-12-3.yml deleted file mode 100644 index 0d0d904a9cbe52fc716be9624a135f360ca5a8f2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/helm-2-12-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump Helm and kubectl in Auto DevOps to 2.12.3 and 1.11.7 respectively -merge_request: 25072 -author: -type: other diff --git a/changelogs/unreleased/import-go-to-project-cta.yml b/changelogs/unreleased/import-go-to-project-cta.yml deleted file mode 100644 index ae719f087901a55774579de9ea082783f78c3fd6..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/import-go-to-project-cta.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve GitHub and Gitea project import table UI -merge_request: 24606 -author: -type: other diff --git a/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml b/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml deleted file mode 100644 index 76ff15cba5b4c9475e0faafa7f94d03e04a0d9de..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance for diverging commit counts -merge_request: 24287 -author: -type: performance diff --git a/changelogs/unreleased/improve-snippets-empty-state.yml b/changelogs/unreleased/improve-snippets-empty-state.yml deleted file mode 100644 index 9859243a81f013581f91494945314f6b168e4bcc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/improve-snippets-empty-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve snippets empty state -merge_request: 18348 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/include-ci-yaml.yml b/changelogs/unreleased/include-ci-yaml.yml deleted file mode 100644 index 5909950ef0bc1f039f0780bd215eba4a7a2bf900..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/include-ci-yaml.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate 'include' keywords in gitlab-ci.yml configuration files. -merge_request: 24098 -author: Paul Bonaud -type: fixed diff --git a/changelogs/unreleased/ingress-hostnames.yml b/changelogs/unreleased/ingress-hostnames.yml deleted file mode 100644 index 6672111376950421e65610a3593dc2497167ed71..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/ingress-hostnames.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added support for ingress hostnames -merge_request: 25181 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/jc-fix-set-project-writable.yml b/changelogs/unreleased/jc-fix-set-project-writable.yml deleted file mode 100644 index 0bfd90c3967fce36f3831785f0869ff64695adb2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/jc-fix-set-project-writable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix method to mark a project repository as writable -merge_request: 25546 -author: -type: fixed diff --git a/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml b/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml deleted file mode 100644 index ba882112f700eedabab0ebaa7e8493a506321cbf..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow setting feature flags per GitLab group through the API -merge_request: 25022 -author: -type: added diff --git a/changelogs/unreleased/jira-link-mention-compact.yml b/changelogs/unreleased/jira-link-mention-compact.yml deleted file mode 100644 index f75f3ce183c4cd09c94287d354f6574d5e38f77f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/jira-link-mention-compact.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Jira: make issue links title compact" -merge_request: 25609 -author: Elan Ruusamäe @glensc -type: changed diff --git a/changelogs/unreleased/kinolaev-master-patch-87865.yml b/changelogs/unreleased/kinolaev-master-patch-87865.yml deleted file mode 100644 index b4dbc2c0e1f4f6870c7b3da2b157af9a06140152..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/kinolaev-master-patch-87865.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix rollout status for statefulsets and daemonsets -merge_request: 24972 -author: Sergej Nikolaev -type: fixed diff --git a/changelogs/unreleased/move_chatops_to_core.yml b/changelogs/unreleased/move_chatops_to_core.yml deleted file mode 100644 index 7a75efedfa8e0edc343117b6b5c398be5668bd42..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/move_chatops_to_core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move ChatOps to Core -merge_request: 24780 -author: -type: changed diff --git a/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml b/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml deleted file mode 100644 index 012b547a6304eceae2fa503d0f5dc3296fbfc4cc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support merge ref writing (without merging to target branch) -merge_request: 24692 -author: -type: added diff --git a/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml b/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml deleted file mode 100644 index 4e01a13d78111aff25be6648e86ae5207c18bf14..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Always fetch MR latest version when creating suggestions -merge_request: 25441 -author: -type: fixed diff --git a/changelogs/unreleased/osw-merge-refs-refreshing-api.yml b/changelogs/unreleased/osw-merge-refs-refreshing-api.yml deleted file mode 100644 index 095600cd088e2604849c4676cae4bfd257a0d845..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/osw-merge-refs-refreshing-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: API support for MR merge to temporary merge ref path -merge_request: 24918 -author: -type: added diff --git a/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml b/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml deleted file mode 100644 index dfccd6194d4a41ff33a055afb82b1270d29216b8..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make merge to refs/merge-requests/:iid/merge not raise when FF-only enabled -merge_request: 25653 -author: -type: fixed diff --git a/changelogs/unreleased/patch-45.yml b/changelogs/unreleased/patch-45.yml deleted file mode 100644 index 94fa1d29b329cbca60d25a3660d70f7b81be7352..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/patch-45.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix incorrect Pages Domains checkbox description. -merge_request: 25392 -author: Anton Melser -type: other diff --git a/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml b/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml deleted file mode 100644 index 6957d156161bfedcfb67ad1c75dc2128937cadc0..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Persist source sha and target sha for merge pipelines -merge_request: 25417 -author: -type: added diff --git a/changelogs/unreleased/ravlen-fix-spaces-unicode.yml b/changelogs/unreleased/ravlen-fix-spaces-unicode.yml deleted file mode 100644 index fbcbdc53cfece5436976da5fc8c187e8eda0b5c5..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/ravlen-fix-spaces-unicode.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correct non-standard unicode spaces to regular unicode -merge_request: 24795 -author: Marcel Amirault -type: other diff --git a/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml b/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml deleted file mode 100644 index 082075506c0a227f20d08151351ff67e3a5bb5e9..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extracted ResolveWithIssueButton to its own component -merge_request: 25093 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml b/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml deleted file mode 100644 index bf78f8d84a61ad05f9f6dfd82bc257c997690923..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add suffix (`_event`) to merge request source -merge_request: 25508 -author: -type: other diff --git a/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml b/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml deleted file mode 100644 index 045fbbb48b771afdfb4b0d52a3f17ecbe82e3063..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove second primary button on wiki edit -merge_request: 19959 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/restrict-jupyter-login.yml b/changelogs/unreleased/restrict-jupyter-login.yml deleted file mode 100644 index 2c20ef3d7acfd201ac1a1d0dc92f94748715252b..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/restrict-jupyter-login.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Project level filtering for JupyterHub -merge_request: 25684 -author: Amit Rathi (amit1rrr) -type: changed diff --git a/changelogs/unreleased/rs-admin-user-case-insensitive.yml b/changelogs/unreleased/rs-admin-user-case-insensitive.yml deleted file mode 100644 index 40398c46a1e6a0d59e341d52f432924e0a31a0de..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/rs-admin-user-case-insensitive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Admin section finds users case-insensitively -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/security-2774-milestones-detail.yml b/changelogs/unreleased/security-2774-milestones-detail.yml deleted file mode 100644 index faf56fee01eb3ed1005f8fb373775586d763e78e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-2774-milestones-detail.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display only information visible to current user on the Milestone page -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2797-milestone-mrs.yml b/changelogs/unreleased/security-2797-milestone-mrs.yml deleted file mode 100644 index 5bb104ec403ae0741ce927000bc67cf60f54530e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-2797-milestone-mrs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show only merge requests visible to user on milestone detail page -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2798-fix-boards-policy.yml b/changelogs/unreleased/security-2798-fix-boards-policy.yml deleted file mode 100644 index 10e8ac3a78738c96457d45ee4237c1505d81ddd2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-2798-fix-boards-policy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable issue boards API when issues are disabled -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2799-emails.yml b/changelogs/unreleased/security-2799-emails.yml deleted file mode 100644 index dbf1207810e76b418687753d77c505a78b011cb3..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-2799-emails.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't show new issue link after move when a user does not have permissions -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-50334.yml b/changelogs/unreleased/security-50334.yml deleted file mode 100644 index 828ef82b517d04e3adbcc4751911b0716b5ca20a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-50334.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix git clone revealing private repo's presence -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-55468-check-validity-before-querying.yml b/changelogs/unreleased/security-55468-check-validity-before-querying.yml deleted file mode 100644 index 8bb11a97f525d0004daa8c57d43592e4ab2458d7..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-55468-check-validity-before-querying.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix blind SSRF in Prometheus integration by checking URL before querying -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-56348.yml b/changelogs/unreleased/security-56348.yml deleted file mode 100644 index a289e4e90772d0b3c99abef455906ffa0204808d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-56348.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check snippet attached file to be moved is within designated directory -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-commit-private-related-mr.yml b/changelogs/unreleased/security-commit-private-related-mr.yml deleted file mode 100644 index c4de200b0d8156e96a65720b94cf29a460eb2d05..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-commit-private-related-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't allow non-members to see private related MRs. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml b/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml deleted file mode 100644 index e98d4e89712e98049de37562e8f9c5e7f431de6d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix arbitrary file read via diffs during import -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-id-fix-mr-visibility.yml b/changelogs/unreleased/security-id-fix-mr-visibility.yml deleted file mode 100644 index 8f41d191acce8916d718df55b59a1c3b70456b57..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-id-fix-mr-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display the correct number of MRs a user has access to -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml b/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml deleted file mode 100644 index 7d7478d297b8322b8c6efaf92c4cdd29f00066bc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Forbid creating discussions for users with restricted access -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-issue_54789_2.yml b/changelogs/unreleased/security-issue_54789_2.yml deleted file mode 100644 index 8ecb72a2ae31f5180f499b9de7b2c720f568f603..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-issue_54789_2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not disclose milestone titles for unauthorized users -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-kubernetes-google-login-csrf.yml b/changelogs/unreleased/security-kubernetes-google-login-csrf.yml deleted file mode 100644 index 2f87100a8ddf133fdd233e5c2a9d79b9c7b561d6..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-kubernetes-google-login-csrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate session key when authorizing with GCP to create a cluster -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-kubernetes-local-ssrf.yml b/changelogs/unreleased/security-kubernetes-local-ssrf.yml deleted file mode 100644 index 7a2ad09233950da7085876ec9950d2e6b48e75da..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-kubernetes-local-ssrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Block local URLs for Kubernetes integration -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-mermaid.yml b/changelogs/unreleased/security-mermaid.yml deleted file mode 100644 index ec42b5a1615070bb52f308b6093d186807444806..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-mermaid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Limit mermaid rendering to 5K characters -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-osw-stop-linking-to-packages.yml b/changelogs/unreleased/security-osw-stop-linking-to-packages.yml deleted file mode 100644 index 078f06140feed6fc76f584ea38cf3ff97b0ed74d..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-osw-stop-linking-to-packages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Stop linking to unrecognized package sources -merge_request: 55518 -author: -type: security diff --git a/changelogs/unreleased/security-protect-private-repo-information.yml b/changelogs/unreleased/security-protect-private-repo-information.yml deleted file mode 100644 index 8b1a528206d79ba6776eb3a4145086a12592593e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-protect-private-repo-information.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix leaking private repository information in API -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-shared-project-private-group.yml b/changelogs/unreleased/security-shared-project-private-group.yml deleted file mode 100644 index 3b21daa5491286f1b71f673ef07b663dd55bbaad..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-shared-project-private-group.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed ability to see private groups by users not belonging to given group -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-tags-oracle.yml b/changelogs/unreleased/security-tags-oracle.yml deleted file mode 100644 index eb8ad6f646cdd7963b931cbc24bbdeb04fcd26d4..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/security-tags-oracle.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent releases links API to leak tag existance -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-bump-fog-gem.yml b/changelogs/unreleased/sh-bump-fog-gem.yml deleted file mode 100644 index 6a26d5c648893f5e1b688e8ef464e1c7e9e55973..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-bump-fog-gem.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes issue with AWS V4 signatures not working with some S3 providers -merge_request: 21788 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-cpp-templates-404.yml b/changelogs/unreleased/sh-fix-cpp-templates-404.yml deleted file mode 100644 index ac958d84099a23781d0ff625653b4ab3d2c4dc84..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-fix-cpp-templates-404.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 404s when C++ .gitignore template selected -merge_request: 25416 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml b/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml deleted file mode 100644 index e6c762f1d473fda68af61d5c93ee5361545de922..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicate XHR request when requesting new pipeline page -merge_request: 25506 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-58103.yml b/changelogs/unreleased/sh-fix-issue-58103.yml deleted file mode 100644 index 1599af23fedc1811a4269a24dacd77c16e56bd52..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-fix-issue-58103.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Properly handle multiple X-Forwarded-For addresses in runner IP -merge_request: 25511 -author: -type: fixed diff --git a/changelogs/unreleased/sh-include-project-path-for-internal-api.yml b/changelogs/unreleased/sh-include-project-path-for-internal-api.yml deleted file mode 100644 index 1973049e9e3cef6bb0fb09e2a75beb64f6b267df..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-include-project-path-for-internal-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include gl_project_path in API /internal/allowed response -merge_request: 25314 -author: -type: other diff --git a/changelogs/unreleased/sh-log-rails-queue-duration.yml b/changelogs/unreleased/sh-log-rails-queue-duration.yml deleted file mode 100644 index 89390aef108bc23710329016c6ab4d5ff2bcbc03..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-log-rails-queue-duration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Log queue duration in production_json.log -merge_request: 25075 -author: -type: other diff --git a/changelogs/unreleased/sh-optimize-calendar-activities.yml b/changelogs/unreleased/sh-optimize-calendar-activities.yml deleted file mode 100644 index b8500357e17c8993af2d99a47056a662c9f30030..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-optimize-calendar-activities.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate most N+1 queries loading UserController#calendar_activities -merge_request: 25697 -author: -type: performance diff --git a/changelogs/unreleased/sh-optimize-todos-api.yml b/changelogs/unreleased/sh-optimize-todos-api.yml deleted file mode 100644 index 936ac31b8532744658b4e5fe6bdcdc90cca21330..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-optimize-todos-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Significantly reduce N+1 queries in /api/v4/todos endpoint -merge_request: 25711 -author: -type: performance diff --git a/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml b/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml deleted file mode 100644 index f8ac345bc958b16e3d63f10b11dc6127b3744468..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove N+1 query for tags in /admin/runners page -merge_request: 25572 -author: -type: performance diff --git a/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml b/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml deleted file mode 100644 index 0f62176b4a51396a3db902e8dc7a0cd6fb435ea8..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of CommitIsAncestor -merge_request: 25702 -author: -type: other diff --git a/changelogs/unreleased/sh-rugged-find-commit.yml b/changelogs/unreleased/sh-rugged-find-commit.yml deleted file mode 100644 index 85b5936c9bad0e48e3eed385bab3c77ae3d97017..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-rugged-find-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of find_commit -merge_request: 25477 -author: -type: fixed diff --git a/changelogs/unreleased/sh-rugged-get-tree-entry.yml b/changelogs/unreleased/sh-rugged-get-tree-entry.yml deleted file mode 100644 index 4d46b764022a25c0df683d3a7c8c1b63f002a4b0..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-rugged-get-tree-entry.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of TreeEntry -merge_request: 25706 -author: -type: other diff --git a/changelogs/unreleased/sh-rugged-tree-entries.yml b/changelogs/unreleased/sh-rugged-tree-entries.yml deleted file mode 100644 index fca1f204b9b5d1bae99bc8ea26d7624dbfe55d57..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-rugged-tree-entries.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of GetTreeEntries -merge_request: 25674 -author: -type: other diff --git a/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml b/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml deleted file mode 100644 index e7900e2230df11c936a7907f444722a9099ac978..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix pagination and duplicate requests in environments page -merge_request: 25582 -author: -type: fixed diff --git a/changelogs/unreleased/shell-8-7.yml b/changelogs/unreleased/shell-8-7.yml deleted file mode 100644 index c2dd0c1f1bba2f63b4335406e5b337997bffbf16..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/shell-8-7.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Shell to v8.7.1 -merge_request: 25801 -author: -type: other diff --git a/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml b/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml deleted file mode 100644 index fbab898b79963fbbf7b1cb9f08304389f14493d3..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Support `only: changes:` on MR pipelines' -merge_request: 24490 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/table-fix-scroll-and-block.yml b/changelogs/unreleased/table-fix-scroll-and-block.yml deleted file mode 100644 index e6def0468b8677a2594badc5fc731a2b8fca0709..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/table-fix-scroll-and-block.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix large table horizontal scroll and prevent side-by-side tables -merge_request: 25520 -author: Dany Jupille -type: fixed diff --git a/changelogs/unreleased/tr-error-tracking-project-selection.yml b/changelogs/unreleased/tr-error-tracking-project-selection.yml deleted file mode 100644 index 36cfe4556bb64470c101dd18b8e3718bb5ad4ca2..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/tr-error-tracking-project-selection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Error tracking configuration - add a Sentry project selection dropdown -merge_request: 24701 -author: -type: changed diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml deleted file mode 100644 index 3bf55630c4d4d3f0e6d88eb5791f70844e3e7e22..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.2.0 -merge_request: 25493 -author: -type: other diff --git a/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml b/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml deleted file mode 100644 index 06c638a65225d78ce2186b297c752fd27a61713a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix upcoming milestone when there are milestones with far-future due dates -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/use-encrypted-runner-tokens.yml b/changelogs/unreleased/use-encrypted-runner-tokens.yml deleted file mode 100644 index e01978557bf951badb53f9c289bdf74b49638806..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/use-encrypted-runner-tokens.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use encrypted runner tokens -merge_request: 25532 -author: -type: security diff --git a/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml b/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml deleted file mode 100644 index 7a6bda1580dc2fea2b57c6bb3bf2ec20b68baf65..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed alignment of changed icon in Web IDE -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/web-ide-default-editor.yml b/changelogs/unreleased/web-ide-default-editor.yml deleted file mode 100644 index b98be5c16c282f414d86e8cd274b24b03ee143fe..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/web-ide-default-editor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make the Web IDE the default editor -merge_request: -author: -type: added diff --git a/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml b/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml deleted file mode 100644 index a9c280320dcf239907bd3c3939019b8b3a87b87f..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add button to start discussion from single comment -merge_request: 25575 -author: -type: added diff --git a/changelogs/unreleased/zj-load-languages-from-database.yml b/changelogs/unreleased/zj-load-languages-from-database.yml deleted file mode 100644 index 1688829b42c2efd075fd363b274acd81794d3777..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/zj-load-languages-from-database.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Load repository language from the database if detected before -merge_request: 25518 -author: -type: performance diff --git a/config/application.rb b/config/application.rb index ead1ac2d4bc75d2d96654382b23e52e76b4c8be2..62f7275d8c8f9196158f7bfbab5403240b946e2f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -111,6 +111,7 @@ class Application < Rails::Application # - Webhook URLs (:hook) # - Sentry DSN (:sentry_dsn) # - File content from Web Editor (:content) + # - Jira shared secret (:sharedSecret) # # NOTE: It is **IMPORTANT** to also update gitlab-workhorse's filter when adding parameters here to not # introduce another security vulnerability: https://gitlab.com/gitlab-org/gitlab-workhorse/issues/182 @@ -125,6 +126,7 @@ class Application < Rails::Application trace variables content + sharedSecret ) # Enable escaping HTML in JSON. diff --git a/config/initializers/hipchat_client_patch.rb b/config/initializers/hipchat_client_patch.rb new file mode 100644 index 0000000000000000000000000000000000000000..51bd48af320db6d0833880788a8f5a9bbc1afa5e --- /dev/null +++ b/config/initializers/hipchat_client_patch.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This monkey patches the HTTParty used in https://github.com/hipchat/hipchat-rb. +module HipChat + class Client + connection_adapter ::Gitlab::HTTPConnectionAdapter + end + + class Room + connection_adapter ::Gitlab::HTTPConnectionAdapter + end + + class User + connection_adapter ::Gitlab::HTTPConnectionAdapter + end +end diff --git a/config/initializers/http_hostname_override.rb b/config/initializers/http_hostname_override.rb new file mode 100644 index 0000000000000000000000000000000000000000..58dd380326f81dbcc361ee1ba18768e16eea74ab --- /dev/null +++ b/config/initializers/http_hostname_override.rb @@ -0,0 +1,49 @@ +# This override allows passing `@hostname_override` to the SNI protocol, +# which is used to lookup the correct SSL certificate in the +# request handshake process. +# +# Given we've forced the HTTP request to be sent to the resolved +# IP address in a few scenarios (e.g.: `Gitlab::HTTP` through +# `Gitlab::UrlBlocker.validate!`), we need to provide the _original_ +# hostname via SNI in order to have a clean connection setup. +# +# This is ultimately needed in order to avoid DNS rebinding attacks +# through HTTP requests. +# +class OpenSSL::SSL::SSLContext + attr_accessor :hostname_override +end + +class OpenSSL::SSL::SSLSocket + module HostnameOverride + # rubocop: disable Gitlab/ModuleWithInstanceVariables + def hostname=(hostname) + super(@context.hostname_override || hostname) + end + + def post_connection_check(hostname) + super(@context.hostname_override || hostname) + end + # rubocop: enable Gitlab/ModuleWithInstanceVariables + end + + prepend HostnameOverride +end + +class Net::HTTP + attr_accessor :hostname_override + SSL_IVNAMES << :@hostname_override + SSL_ATTRIBUTES << :hostname_override + + module HostnameOverride + def addr_port + return super unless hostname_override + + addr = hostname_override + default_port = use_ssl? ? Net::HTTP.https_default_port : Net::HTTP.http_default_port + default_port == port ? addr : "#{addr}:#{port}" + end + end + + prepend HostnameOverride +end diff --git a/config/initializers/zz_metrics.rb b/config/initializers/zz_metrics.rb index 16509264913acdf599720593a47fe896c14419a4..b190012d5353b669d918cd57b2f124e936851af7 100644 --- a/config/initializers/zz_metrics.rb +++ b/config/initializers/zz_metrics.rb @@ -31,7 +31,6 @@ def instrument_classes(instrumentation) # are included. %w(app services [^concerns]**) => %w(app services), %w(lib gitlab conflicts) => ['lib'], - %w(lib gitlab diff) => ['lib'], %w(lib gitlab email message) => ['lib'], %w(lib gitlab checks) => ['lib'] } diff --git a/config/routes.rb b/config/routes.rb index 5c53f9a3872585dfe00202972deea84f78b7b832..b7fbb0fadd2ebd47b883c66dfea4ac5054c372ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -90,6 +90,7 @@ draw :operations draw :instance_statistics draw :smartcard + draw :jira_connect if ENV['GITLAB_ENABLE_CHAOS_ENDPOINTS'] get '/chaos/leakmem' => 'chaos#leakmem' diff --git a/config/routes/group.rb b/config/routes/group.rb index b3015529c6ecd9fdcb7450976e1aa35fa8c4ae8a..3ae7e6e8bcb0c2d524b9b1d8f7890cfc20d0609f 100644 --- a/config/routes/group.rb +++ b/config/routes/group.rb @@ -14,6 +14,7 @@ get :issues, as: :issues_group get :merge_requests, as: :merge_requests_group get :projects, as: :projects_group + get :details, as: :details_group # needed for EE but left here to provide helpers for CE partials get :activity, as: :activity_group put :transfer, as: :transfer_group # TODO: Remove as part of refactor in https://gitlab.com/gitlab-org/gitlab-ce/issues/49693 diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml index 5031a6684d379e42edb8617e00f51680510fa98c..81b7531ca39ec7f0fc71fdeb23b2ad155564e21d 100644 --- a/config/sidekiq_queues.yml +++ b/config/sidekiq_queues.yml @@ -103,6 +103,7 @@ - [elastic_indexer, 1] - [elastic_commit_indexer, 1] - [export_csv, 1] + - [incident_management, 2] # Deprecated queues: Remove after 10.7 - geo_base_scheduler diff --git a/db/migrate/20190107151029_remove_hipchat_services.rb b/db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb similarity index 54% rename from db/migrate/20190107151029_remove_hipchat_services.rb rename to db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb index 4741ec88907a5a3eab10d45c31d74070d4c9e5f2..5ce0ca19888b64863eb21dfe813bcccd038f7f53 100644 --- a/db/migrate/20190107151029_remove_hipchat_services.rb +++ b/db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb @@ -3,14 +3,10 @@ # See http://doc.gitlab.com/ce/development/migration_style_guide.html # for more information on how to write migrations for GitLab. -class RemoveHipchatServices < ActiveRecord::Migration[5.0] +class AddDetectedRepositoryLanguagesToProjects < ActiveRecord::Migration[5.0] DOWNTIME = false - def up - execute "DELETE FROM services WHERE type = 'HipchatService'" - end - - def down - # no-op + def change + add_column :projects, :detected_repository_languages, :boolean end end diff --git a/db/migrate/20190529142545_add_dns_rebinding_protection_enabled_to_application_settings.rb b/db/migrate/20190529142545_add_dns_rebinding_protection_enabled_to_application_settings.rb new file mode 100644 index 0000000000000000000000000000000000000000..eeb4b69b603e43086c6f2064be4c9fe41e91deb8 --- /dev/null +++ b/db/migrate/20190529142545_add_dns_rebinding_protection_enabled_to_application_settings.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddDnsRebindingProtectionEnabledToApplicationSettings < ActiveRecord::Migration[5.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_column_with_default(:application_settings, :dns_rebinding_protection_enabled, + :boolean, + default: true, + allow_null: false) + end + + def down + remove_column(:application_settings, :dns_rebinding_protection_enabled) + end +end diff --git a/db/schema.rb b/db/schema.rb index e5d1ea56a73b7c3f0dabb915290ad198f8e96571..a5fffdf2c6969052dd5754bf6d2f5013e9e96c16 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190301182457) do +ActiveRecord::Schema.define(version: 20190529142545) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -217,6 +217,7 @@ t.string "runners_registration_token_encrypted" t.integer "local_markdown_version", default: 0, null: false t.integer "first_day_of_week", default: 0, null: false + t.boolean "dns_rebinding_protection_enabled", default: true, null: false t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id", using: :btree t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id", using: :btree t.index ["usage_stats_set_by_user_id"], name: "index_application_settings_on_usage_stats_set_by_user_id", using: :btree @@ -290,6 +291,7 @@ t.datetime "created_at" t.datetime "updated_at" t.index ["merge_request_id"], name: "index_approvals_on_merge_request_id", using: :btree + t.index ["user_id", "merge_request_id"], name: "index_approvals_on_user_id_and_merge_request_id", unique: true, using: :btree end create_table "approver_groups", force: :cascade do |t| @@ -1581,6 +1583,14 @@ t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree end + create_table "jira_connect_installations", id: :bigserial, force: :cascade do |t| + t.string "client_key" + t.string "encrypted_shared_secret" + t.string "encrypted_shared_secret_iv" + t.string "base_url" + t.index ["client_key"], name: "index_jira_connect_installations_on_client_key", unique: true, using: :btree + end + create_table "keys", force: :cascade do |t| t.integer "user_id" t.datetime "created_at" @@ -2445,6 +2455,7 @@ t.string "runners_token_encrypted" t.string "bfg_object_map" t.boolean "merge_requests_require_code_owner_approval" + t.boolean "detected_repository_languages" t.index ["ci_id"], name: "index_projects_on_ci_id", using: :btree t.index ["created_at"], name: "index_projects_on_created_at", using: :btree t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree diff --git a/doc/administration/auth/google_secure_ldap.md b/doc/administration/auth/google_secure_ldap.md new file mode 100644 index 0000000000000000000000000000000000000000..65a51fc4aa0c641fba24c0d2808e818344a12c89 --- /dev/null +++ b/doc/administration/auth/google_secure_ldap.md @@ -0,0 +1,207 @@ +# Google Secure LDAP **[CORE ONLY]** + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/46391) in GitLab 11.9. + +[Google Cloud Identity](https://cloud.google.com/identity/) provides a Secure +LDAP service that can be configured with GitLab for authentication and group sync. + +Secure LDAP requires a slightly different configuration than standard LDAP servers. +The steps below cover: + +- Configuring the Secure LDAP Client in the Google Admin console. +- Required GitLab configuration. + +## Configuring Google LDAP client + +1. Navigate to https://admin.google.com and sign in as a GSuite domain administrator. + +1. Go to **Apps > LDAP > Add Client**. + +1. Provide an `LDAP client name` and an optional `Description`. Any descriptive + values are acceptable. For example, the name could be 'GitLab' and the + description could be 'GitLab LDAP Client'. Click the **Continue** button. + + ![Add LDAP Client Step 1](img/google_secure_ldap_add_step_1.png) + +1. Set **Access Permission** according to your needs. You must choose either + 'Entire domain (GitLab)' or 'Selected organizational units' for both 'Verify user + credentials' and 'Read user information'. Select 'Add LDAP Client' + + TIP: **Tip:** If you plan to use GitLab [LDAP Group Sync](https://docs.gitlab.com/ee/administration/auth/ldap-ee.html#group-sync) + , turn on 'Read group information'. + + ![Add LDAP Client Step 2](img/google_secure_ldap_add_step_2.png) + +1. Download the generated certificate. This is required for GitLab to + communicate with the Google Secure LDAP service. Save the downloaded certificates + for later use. After downloading, click the **Continue to Client Details** button. + +1. Expand the **Service Status** section and turn the LDAP client 'ON for everyone'. + After selecting 'Save', click on the 'Service Status' bar again to collapse + and return to the rest of the settings. + +1. Expand the **Authentication** section and choose 'Generate New Credentials'. + Copy/note these credentials for later use. After selecting 'Close', click + on the 'Authentication' bar again to collapse and return to the rest of the settings. + +Now the Google Secure LDAP Client configuration is finished. The screenshot below +shows an example of the final settings. Continue on to configure GitLab. + +![LDAP Client Settings](img/google_secure_ldap_client_settings.png) + +## Configuring GitLab + +Edit GitLab configuration, inserting the access credentials and certificate +obtained earlier. + +The following are the configuration keys that need to be modified using the +values obtained during the LDAP client configuration earlier: + +- `bind_dn`: The access credentials username +- `password`: The access credentials password +- `cert`: The `.crt` file text from the downloaded certificate bundle +- `key`: The `.key` file text from the downloaded certificate bundle + +**For Omnibus installations** + +1. Edit `/etc/gitlab/gitlab.rb`: + + ```ruby + gitlab_rails['ldap_enabled'] = true + gitlab_rails['ldap_servers'] = YAML.load <<-EOS # remember to close this block with 'EOS' below + main: # 'main' is the GitLab 'provider ID' of this LDAP server + label: 'Google Secure LDAP' + + host: 'ldap.google.com' + port: 636 + uid: 'uid' + bind_dn: 'DizzyHorse' + password: 'd6V5H8nhMUW9AuDP25abXeLd' + encryption: 'simple_tls' + verify_certificates: true + + tls_options: + cert: | + -----BEGIN CERTIFICATE----- + MIIDbDCCAlSgAwIBAgIGAWlzxiIfMA0GCSqGSIb3DQEBCwUAMHcxFDASBgNVBAoTC0dvb2dsZSBJ + bmMuMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQDEwtMREFQIENsaWVudDEPMA0GA1UE + CxMGR1N1aXRlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTAeFw0xOTAzMTIyMTE5 + MThaFw0yMjAzMTEyMTE5MThaMHcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRYwFAYDVQQHEw1Nb3Vu + dGFpbiBWaWV3MRQwEgYDVQQDEwtMREFQIENsaWVudDEPMA0GA1UECxMGR1N1aXRlMQswCQYDVQQG + EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB + ALOTy4aC38dyjESk6N8fRsKk8DN23ZX/GaNFL5OUmmA1KWzrvVC881OzNdtGm3vNOIxr9clteEG/ + tQwsmsJvQT5U+GkBt+tGKF/zm7zueHUYqTP7Pg5pxAnAei90qkIRFi17ulObyRHPYv1BbCt8pxNB + 4fG/gAXkFbCNxwh1eiQXXRTfruasCZ4/mHfX7MVm8JmWU9uAVIOLW+DSWOFhrDQduJdGBXJOyC2r + Gqoeg9+tkBmNH/jjxpnEkFW8q7io9DdOUqqNgoidA1h9vpKTs3084sy2DOgUvKN9uXWx14uxIyYU + Y1DnDy0wczcsuRt7l+EgtCEgpsLiLJQbKW+JS1UCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAf60J + yazhbHkDKIH2gFxfm7QLhhnqsmafvl4WP7JqZt0u0KdnvbDPfokdkM87yfbKJU1MTI86M36wEC+1 + P6bzklKz7kXbzAD4GggksAzxsEE64OWHC+Y64Tkxq2NiZTw/76POkcg9StiIXjG0ZcebHub9+Ux/ + rTncip92nDuvgEM7lbPFKRIS/YMhLCk09B/U0F6XLsf1yYjyf5miUTDikPkov23b/YGfpc8kh6hq + 1kqdi6a1cYPP34eAhtRhMqcZU9qezpJF6s9EeN/3YFfKzLODFSsVToBRAdZgGHzj//SAtLyQTD4n + KCSvK1UmaMxNaZyTHg8JnMf0ZuRpv26iSg== + -----END CERTIFICATE----- + + key: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzk8uGgt/HcoxEpOjfH0bCpPAz + dt2V/xmjRS+TlJpgNSls671QvPNTszXbRpt7zTiMa/XJbXhBv7UMLJrCb0E+VPhpAbfrRihf85u8 + 7nh1GKkz+z4OacQJwHovdKpCERYte7pTm8kRz2L9QWwrfKcTQeHxv4AF5BWwjccIdXokF10U367m + rAmeP5h31+zFZvCZllPbgFSDi1vg0ljhYaw0HbiXRgVyTsgtqxqqHoPfrZAZjR/448aZxJBVvKu4 + qPQ3TlKqjYKInQNYfb6Sk7N9POLMtgzoFLyjfbl1sdeLsSMmFGNQ5w8tMHM3LLkbe5fhILQhIKbC + 4iyUGylviUtVAgMBAAECggEAIPb0CQy0RJoX+q/lGbRVmnyJpYDf+115WNnl+mrwjdGkeZyqw4v0 + BPzkWYzUFP1esJRO6buBNFybQRFdFW0z5lvVv/zzRKq71aVUBPInxaMRyHuJ8D5lIL8nDtgVOwyE + 7DOGyDtURUMzMjdUwoTe7K+O6QBU4X/1pVPZYgmissYSMmt68LiP8k0p601F4+r5xOi/QEy44aVp + aOJZBUOisKB8BmUXZqmQ4Cy05vU9Xi1rLyzkn9s7fxnZ+JO6Sd1r0Thm1mE0yuPgxkDBh/b4f3/2 + GsQNKKKCiij/6TfkjnBi8ZvWR44LnKpu760g/K7psVNrKwqJG6C/8RAcgISWQQKBgQDop7BaKGhK + 1QMJJ/vnlyYFTucfGLn6bM//pzTys5Gop0tpcfX/Hf6a6Dd+zBhmC3tBmhr80XOX/PiyAIbc0lOI + 31rafZuD/oVx5mlIySWX35EqS14LXmdVs/5vOhsInNgNiE+EPFf1L9YZgG/zA7OUBmqtTeYIPDVC + 7ViJcydItQKBgQDFmK0H0IA6W4opGQo+zQKhefooqZ+RDk9IIZMPOAtnvOM7y3rSVrfsSjzYVuMS + w/RP/vs7rwhaZejnCZ8/7uIqwg4sdUBRzZYR3PRNFeheW+BPZvb+2keRCGzOs7xkbF1mu54qtYTa + HZGZj1OsD83AoMwVLcdLDgO1kw32dkS8IQKBgFRdgoifAHqqVah7VFB9se7Y1tyi5cXWsXI+Wufr + j9U9nQ4GojK52LqpnH4hWnOelDqMvF6TQTyLIk/B+yWWK26Ft/dk9wDdSdystd8L+dLh4k0Y+Whb + +lLMq2YABw+PeJUnqdYE38xsZVHoDjBsVjFGRmbDybeQxauYT7PACy3FAoGBAK2+k9bdNQMbXp7I + j8OszHVkJdz/WXlY1cmdDAxDwXOUGVKIlxTAf7TbiijILZ5gg0Cb+hj+zR9/oI0WXtr+mAv02jWp + W8cSOLS4TnBBpTLjIpdu+BwbnvYeLF6MmEjNKEufCXKQbaLEgTQ/XNlchBSuzwSIXkbWqdhM1+gx + EjtBAoGARAdMIiDMPWIIZg3nNnFebbmtBP0qiBsYohQZ+6i/8s/vautEHBEN6Q0brIU/goo+nTHc + t9VaOkzjCmAJSLPUanuBC8pdYgLu5J20NXUZLD9AE/2bBT3OpezKcdYeI2jqoc1qlWHlNtVtdqQ2 + AcZSFJQjdg5BTyvdEDhaYUKGdRw= + -----END PRIVATE KEY----- + EOS + ``` + +1. Save the file and [reconfigure] GitLab for the changes to take effect. + +--- + +**For installations from source** + +1. Edit `config/gitlab.yml`: + + ```yaml + ldap: + enabled: true + servers: + main: # 'main' is the GitLab 'provider ID' of this LDAP server + label: 'Google Secure LDAP' + + host: 'ldap.google.com' + port: 636 + uid: 'uid' + bind_dn: 'DizzyHorse' + password: 'd6V5H8nhMUW9AuDP25abXeLd' + encryption: 'simple_tls' + verify_certificates: true + + tls_options: + cert: | + -----BEGIN CERTIFICATE----- + MIIDbDCCAlSgAwIBAgIGAWlzxiIfMA0GCSqGSIb3DQEBCwUAMHcxFDASBgNVBAoTC0dvb2dsZSBJ + bmMuMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQDEwtMREFQIENsaWVudDEPMA0GA1UE + CxMGR1N1aXRlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTAeFw0xOTAzMTIyMTE5 + MThaFw0yMjAzMTEyMTE5MThaMHcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRYwFAYDVQQHEw1Nb3Vu + dGFpbiBWaWV3MRQwEgYDVQQDEwtMREFQIENsaWVudDEPMA0GA1UECxMGR1N1aXRlMQswCQYDVQQG + EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB + ALOTy4aC38dyjESk6N8fRsKk8DN23ZX/GaNFL5OUmmA1KWzrvVC881OzNdtGm3vNOIxr9clteEG/ + tQwsmsJvQT5U+GkBt+tGKF/zm7zueHUYqTP7Pg5pxAnAei90qkIRFi17ulObyRHPYv1BbCt8pxNB + 4fG/gAXkFbCNxwh1eiQXXRTfruasCZ4/mHfX7MVm8JmWU9uAVIOLW+DSWOFhrDQduJdGBXJOyC2r + Gqoeg9+tkBmNH/jjxpnEkFW8q7io9DdOUqqNgoidA1h9vpKTs3084sy2DOgUvKN9uXWx14uxIyYU + Y1DnDy0wczcsuRt7l+EgtCEgpsLiLJQbKW+JS1UCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAf60J + yazhbHkDKIH2gFxfm7QLhhnqsmafvl4WP7JqZt0u0KdnvbDPfokdkM87yfbKJU1MTI86M36wEC+1 + P6bzklKz7kXbzAD4GggksAzxsEE64OWHC+Y64Tkxq2NiZTw/76POkcg9StiIXjG0ZcebHub9+Ux/ + rTncip92nDuvgEM7lbPFKRIS/YMhLCk09B/U0F6XLsf1yYjyf5miUTDikPkov23b/YGfpc8kh6hq + 1kqdi6a1cYPP34eAhtRhMqcZU9qezpJF6s9EeN/3YFfKzLODFSsVToBRAdZgGHzj//SAtLyQTD4n + KCSvK1UmaMxNaZyTHg8JnMf0ZuRpv26iSg== + -----END CERTIFICATE----- + + key: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzk8uGgt/HcoxEpOjfH0bCpPAz + dt2V/xmjRS+TlJpgNSls671QvPNTszXbRpt7zTiMa/XJbXhBv7UMLJrCb0E+VPhpAbfrRihf85u8 + 7nh1GKkz+z4OacQJwHovdKpCERYte7pTm8kRz2L9QWwrfKcTQeHxv4AF5BWwjccIdXokF10U367m + rAmeP5h31+zFZvCZllPbgFSDi1vg0ljhYaw0HbiXRgVyTsgtqxqqHoPfrZAZjR/448aZxJBVvKu4 + qPQ3TlKqjYKInQNYfb6Sk7N9POLMtgzoFLyjfbl1sdeLsSMmFGNQ5w8tMHM3LLkbe5fhILQhIKbC + 4iyUGylviUtVAgMBAAECggEAIPb0CQy0RJoX+q/lGbRVmnyJpYDf+115WNnl+mrwjdGkeZyqw4v0 + BPzkWYzUFP1esJRO6buBNFybQRFdFW0z5lvVv/zzRKq71aVUBPInxaMRyHuJ8D5lIL8nDtgVOwyE + 7DOGyDtURUMzMjdUwoTe7K+O6QBU4X/1pVPZYgmissYSMmt68LiP8k0p601F4+r5xOi/QEy44aVp + aOJZBUOisKB8BmUXZqmQ4Cy05vU9Xi1rLyzkn9s7fxnZ+JO6Sd1r0Thm1mE0yuPgxkDBh/b4f3/2 + GsQNKKKCiij/6TfkjnBi8ZvWR44LnKpu760g/K7psVNrKwqJG6C/8RAcgISWQQKBgQDop7BaKGhK + 1QMJJ/vnlyYFTucfGLn6bM//pzTys5Gop0tpcfX/Hf6a6Dd+zBhmC3tBmhr80XOX/PiyAIbc0lOI + 31rafZuD/oVx5mlIySWX35EqS14LXmdVs/5vOhsInNgNiE+EPFf1L9YZgG/zA7OUBmqtTeYIPDVC + 7ViJcydItQKBgQDFmK0H0IA6W4opGQo+zQKhefooqZ+RDk9IIZMPOAtnvOM7y3rSVrfsSjzYVuMS + w/RP/vs7rwhaZejnCZ8/7uIqwg4sdUBRzZYR3PRNFeheW+BPZvb+2keRCGzOs7xkbF1mu54qtYTa + HZGZj1OsD83AoMwVLcdLDgO1kw32dkS8IQKBgFRdgoifAHqqVah7VFB9se7Y1tyi5cXWsXI+Wufr + j9U9nQ4GojK52LqpnH4hWnOelDqMvF6TQTyLIk/B+yWWK26Ft/dk9wDdSdystd8L+dLh4k0Y+Whb + +lLMq2YABw+PeJUnqdYE38xsZVHoDjBsVjFGRmbDybeQxauYT7PACy3FAoGBAK2+k9bdNQMbXp7I + j8OszHVkJdz/WXlY1cmdDAxDwXOUGVKIlxTAf7TbiijILZ5gg0Cb+hj+zR9/oI0WXtr+mAv02jWp + W8cSOLS4TnBBpTLjIpdu+BwbnvYeLF6MmEjNKEufCXKQbaLEgTQ/XNlchBSuzwSIXkbWqdhM1+gx + EjtBAoGARAdMIiDMPWIIZg3nNnFebbmtBP0qiBsYohQZ+6i/8s/vautEHBEN6Q0brIU/goo+nTHc + t9VaOkzjCmAJSLPUanuBC8pdYgLu5J20NXUZLD9AE/2bBT3OpezKcdYeI2jqoc1qlWHlNtVtdqQ2 + AcZSFJQjdg5BTyvdEDhaYUKGdRw= + -----END PRIVATE KEY----- + ``` + +1. Save the file and [restart] GitLab for the changes to take effect. + + +[reconfigure]: ../restart_gitlab.md#omnibus-gitlab-reconfigure +[restart]: ../restart_gitlab.md#installations-from-source diff --git a/doc/administration/auth/img/google_secure_ldap_add_step_1.png b/doc/administration/auth/img/google_secure_ldap_add_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd254443d75ad41a3119e1c571495476bda60a89 Binary files /dev/null and b/doc/administration/auth/img/google_secure_ldap_add_step_1.png differ diff --git a/doc/administration/auth/img/google_secure_ldap_add_step_2.png b/doc/administration/auth/img/google_secure_ldap_add_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..611a21ae03cc5819d3b76bfea7a279b56e14b76a Binary files /dev/null and b/doc/administration/auth/img/google_secure_ldap_add_step_2.png differ diff --git a/doc/administration/auth/img/google_secure_ldap_client_settings.png b/doc/administration/auth/img/google_secure_ldap_client_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0b3f3d4bdc7acb362b77c627f46d9bca248bbd Binary files /dev/null and b/doc/administration/auth/img/google_secure_ldap_client_settings.png differ diff --git a/doc/administration/auth/ldap.md b/doc/administration/auth/ldap.md index 90406bf0f5b06e62e6e136e77bd62de5c9e484bb..c26604741a146eafd8f4ed327a43aaad693d0dd7 100644 --- a/doc/administration/auth/ldap.md +++ b/doc/administration/auth/ldap.md @@ -48,6 +48,14 @@ LDAP-enabled users can always authenticate with Git using their GitLab username or email and LDAP password, even if password authentication for Git is disabled in the application settings. +## Google Secure LDAP **[CORE ONLY]** + +> Introduced in GitLab 11.9. + +[Google Cloud Identity](https://cloud.google.com/identity/) provides a Secure +LDAP service that can be configured with GitLab for authentication and group sync. +See [Google Secure LDAP](google_secure_ldap.md) for detailed configuration instructions. + ## Configuration NOTE: **Note**: diff --git a/doc/administration/raketasks/storage.md b/doc/administration/raketasks/storage.md index d0e6540d067d3e982b9a6b30fd708d9b39e87b89..a268b48ca5bfa87500744541cd238a26628bc2f6 100644 --- a/doc/administration/raketasks/storage.md +++ b/doc/administration/raketasks/storage.md @@ -1,17 +1,17 @@ # Repository Storage Rake Tasks -This is a collection of rake tasks you can use to help you list and migrate -existing projects and attachments associated with it from Legacy storage to +This is a collection of rake tasks you can use to help you list and migrate +existing projects and attachments associated with it from Legacy storage to the new Hashed storage type. You can read more about the storage types [here][storage-types]. ## Migrate existing projects to Hashed storage -Before migrating your existing projects, you should +Before migrating your existing projects, you should [enable hashed storage][storage-migration] for the new projects as well. -This task will schedule all your existing projects and attachments associated with it to be migrated to the +This task will schedule all your existing projects and attachments associated with it to be migrated to the **Hashed** storage type: **Omnibus Installation** @@ -30,17 +30,18 @@ They both also accept a range as environment variable: ```bash # to migrate any non migrated project from ID 20 to 50. -export ID_FROM=20 +export ID_FROM=20 export ID_TO=50 ``` -You can monitor the progress in the _Admin > Monitoring > Background jobs_ screen. -There is a specific Queue you can watch to see how long it will take to finish: **project_migrate_hashed_storage** +You can monitor the progress in the **Admin Area > Monitoring > Background Jobs** page. +There is a specific Queue you can watch to see how long it will take to finish: +`hashed_storage:hashed_storage_project_migrate` -After it reaches zero, you can confirm every project has been migrated by running the commands bellow. +After it reaches zero, you can confirm every project has been migrated by running the commands bellow. If you find it necessary, you can run this migration script again to schedule missing projects. -Any error or warning will be logged in the sidekiq's log file. +Any error or warning will be logged in Sidekiq's log file. NOTE: **Note:** If Geo is enabled, each project that is successfully migrated generates an event to replicate the changes on any **secondary** nodes. @@ -48,6 +49,47 @@ If Geo is enabled, each project that is successfully migrated generates an event You only need the `gitlab:storage:migrate_to_hashed` rake task to migrate your repositories, but we have additional commands below that helps you inspect projects and attachments in both legacy and hashed storage. +## Rollback from Hashed storage to Legacy storage + +If you need to rollback the storage migration for any reason, you can follow the steps described here. + +NOTE: **Note:** Hashed Storage will be required in future version of GitLab. + +To prevent new projects from being created in the Hashed storage, +you need to undo the [enable hashed storage][storage-migration] changes. + +This task will schedule all your existing projects and associated attachments to be rolled back to the +Legacy storage type. + +For Omnibus installations, run the following: + +```bash +sudo gitlab-rake gitlab:storage:rollback_to_legacy +``` + +For source installations, run the following: + +```bash +sudo -u git -H bundle exec rake gitlab:storage:rollback_to_legacy RAILS_ENV=production +``` + +Both commands accept a range as environment variable: + +```bash +# to rollback any migrated project from ID 20 to 50. +export ID_FROM=20 +export ID_TO=50 +``` + +You can monitor the progress in the **Admin Area > Monitoring > Background Jobs** page. +On the **Queues** tab, you can watch the `hashed_storage:hashed_storage_project_rollback` queue to see how long the process will take to finish. + + +After it reaches zero, you can confirm every project has been rolled back by running the commands bellow. +If some projects weren't rolled back, you can run this rollback script again to schedule further rollbacks. + +Any error or warning will be logged in Sidekiq's log file. + ## List projects on Legacy storage To have a simple summary of projects using **Legacy** storage: diff --git a/doc/administration/raketasks/uploads/sanitize.md b/doc/administration/raketasks/uploads/sanitize.md new file mode 100644 index 0000000000000000000000000000000000000000..54a423b9571524ee99f2c4f4de040cfa8fff6100 --- /dev/null +++ b/doc/administration/raketasks/uploads/sanitize.md @@ -0,0 +1,62 @@ +# Uploads Sanitize tasks + +## Requirements + +You need `exiftool` installed on your system. If you installed GitLab: + +- Using the Omnibus package, you're all set. +- From source, make sure `exiftool` is installed: + + ```sh + # Debian/Ubuntu + sudo apt-get install libimage-exiftool-perl + + # RHEL/CentOS + sudo yum install perl-Image-ExifTool + ``` + +## Remove EXIF data from existing uploads + +Since 11.9 EXIF data are automatically stripped from JPG or TIFF image uploads. +Because EXIF data may contain sensitive information (e.g. GPS location), you +can remove EXIF data also from existing images which were uploaded before +with the following command: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif +``` + +This command by default runs in dry mode and it doesn't remove EXIF data. It can be used for +checking if (and how many) images should be sanitized. + +The rake task accepts following parameters. + +Parameter | Type | Description +--------- | ---- | ----------- +`start_id` | integer | Only uploads with equal or greater ID will be processed +`stop_id` | integer | Only uploads with equal or smaller ID will be processed +`dry_run` | boolean | Do not remove EXIF data, only check if EXIF data are present or not, default: true +`sleep_time` | float | Pause for number of seconds after processing each image, default: 0.3 seconds + +If you have too many uploads, you can speed up sanitization by setting +`sleep_time` to a lower value or by running multiple rake tasks in parallel, +each with a separate range of upload IDs (by setting `start_id` and `stop_id`). + +To run the command without dry mode and remove EXIF data from all uploads, you can use: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log +``` + +To run the command without dry mode on uploads with ID between 100 and 5000 and pause for 0.1 second, you can use: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log +``` + +Because the output of commands will be probably long, the output is written also into exif.log file. + +If sanitization fails for an upload, an error message should be in the output of the rake task (typical reasons may +be that the file is missing in the storage or it's not a valid image). Please +[report](https://gitlab.com/gitlab-org/gitlab-ce/issues/new) any issues at `gitlab.com` and use +prefix 'EXIF' in issue title with the error output and (if possible) the image. diff --git a/doc/administration/repository_storage_types.md b/doc/administration/repository_storage_types.md index 7249dbf5897b420ca4edbc657812b91529784845..aac71643112ced54d67e59d880037810d1a2633f 100644 --- a/doc/administration/repository_storage_types.md +++ b/doc/administration/repository_storage_types.md @@ -2,6 +2,24 @@ > [Introduced][ce-28283] in GitLab 10.0. +Two different storage layouts can be used +to store the repositories on disk and their characteristics. + +GitLab can be configured to use one or multiple repository shard locations +that can be: + +- Mounted to the local disk +- Exposed as an NFS shared volume +- Acessed via [gitaly] on its own machine. + +In GitLab, this is configured in `/etc/gitlab/gitlab.rb` by the `git_data_dirs({})` +configuration hash. The storage layouts discussed here will apply to any shard +defined in it. + +The `default` repository shard that is available in any installations +that haven't customized it, points to the local folder: `/var/opt/gitlab/git-data`. +Anything discussed below is expected to be part of that folder. + ## Legacy Storage Legacy Storage is the storage behavior prior to version 10.0. For historical @@ -66,34 +84,12 @@ by another folder with the next 2 characters. They are both stored in a special "@hashed/#{hash[0..1]}/#{hash[2..3]}/#{hash}.wiki.git" ``` -### How to migrate to Hashed Storage - -In GitLab, go to **Admin > Settings**, find the **Repository Storage** section -and select "_Use hashed storage paths for newly created and renamed projects_". - -To migrate your existing projects to the new storage type, check the specific -[rake tasks]. - -[ce-28283]: https://gitlab.com/gitlab-org/gitlab-ce/issues/28283 -[rake tasks]: raketasks/storage.md#migrate-existing-projects-to-hashed-storage -[storage-paths]: repository_storage_types.md - -#### Rollback - -There is no automated rollback implemented. Below are the steps required to rollback -from each storage migration. - -The rollback has to be performed in the reverse order. To get into "Legacy" state, -you need to rollback Attachments first, then Project. +### Hashed object pools -Also note that if Geo is enabled, after the migration was triggered, an event is generated -to replicate the operation on any **secondary** node. That means the [on disk changes](#project) will -need to be performed on these nodes as well. Database changes will propagate without issues. - -You must make sure the migration event was already processed or otherwise it may migrate -the files back to Hashed state again. - -#### Hashed object pools +CAUTION: **Beta:** +Hashed objects pools are considered beta, and are not ready for production use. +Follow [gitaly#1548](https://gitlab.com/gitlab-org/gitaly/issues/1548) for +updates. For deduplication of public forks and their parent repository, objects are pooled in an object pool. These object pools are a third repository where shared objects @@ -110,36 +106,60 @@ enabled for individual projects by executing be on hashed storage, should not be a fork itself, and hashed storage should be enabled for all new projects. -##### Attachments +### How to migrate to Hashed Storage -To rollback single Attachment migration, rename `aa/bb/abcdef1234567890...` folder back to `namespace/project`. +To start a migration, enable Hashed Storage for new projects: + +1. Go to **Admin > Settings** and expand the **Repository Storage** section. +2. Select the **Use hashed storage paths for newly created and renamed projects** checkbox. -Both folder names can be generated by the `FileUploader.absolute_base_dir(project)`, you -just need to switch the version from the `project` back to the previous one. +Check if the change breaks any existing integration you may have that +either runs on the same machine as your repositories are located, or may login to that machine +to access data (for example, a remote backup solution). -```ruby -project.storage_version -# => 2 +To schedule a complete rollout, see the +[rake task documentation for storage migration][rake/migrate-to-hashed] for instructions. -FileUploader.absolute_base_dir(project) -# => "/opt/gitlab/embedded/service/gitlab-rails/public/uploads/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35" +If you do have any existing integration, you may want to do a small rollout first, +to validate. You can do so by specifying a range with the operation. -project.storage_version = 1 +This is an example of how to limit the rollout to Project IDs 50 to 100, running in +an Omnibus Gitlab installation: -FileUploader.absolute_base_dir(project) -# => "/opt/gitlab/embedded/service/gitlab-rails/public/uploads/gitlab/gitlab-shell-renamed" +```bash +sudo gitlab-rake gitlab:storage:migrate_to_hashed ID_FROM=50 ID_TO=100 ``` -##### Project +Check the [documentation][rake/migrate-to-hashed] for additional information and instructions for +source-based installation. + +#### Rollback + +Similar to the migration, to disable Hashed Storage for new +projects: -To rollback single Project migration, move `@hashed/aa/bb/aabbcdef1234567890abcdef.git` and `@hashed/aa/bb/aabbcdef1234567890abcdef.wiki.git` -back to `namespace/project.git` and `namespace/project.wiki.git` respectively and switch the version from the `project` back to `null`. +1. Go to **Admin > Settings** and expand the **Repository Storage** section. +2. Uncheck the **Use hashed storage paths for newly created and renamed projects** checkbox. + +To schedule a complete rollback, see the +[rake task documentation for storage rollback][rake/rollback-to-legacy] for instructions. + +The rollback task also supports specifying a range of Project IDs. Here is an example +of limiting the rollout to Project IDs 50 to 100, in an Omnibus Gitlab installation: + +```bash +sudo gitlab-rake gitlab:storage:rollback_to_legacy ID_FROM=50 ID_TO=100 +``` + +If you have a Geo setup, please note that the rollback will not be reflected automatically +on the **secondary** node. You may need to wait for a backfill operation to kick-in and remove +the remaining repositories from the special `@hashed/` folder manually. ### Hashed Storage coverage We are incrementally moving every storable object in GitLab to the Hashed Storage pattern. You can check the current coverage status below (and also see -the [issue](https://gitlab.com/gitlab-com/infrastructure/issues/2821)). +the [issue][ce-2821]). Note that things stored in an S3 compatible endpoint will not have the downsides mentioned earlier, if they are not prefixed with `#{namespace}/#{project_name}`, @@ -156,6 +176,7 @@ which is true for CI Cache and LFS Objects. | CI Artifacts | No | No | Yes | 9.4 / 10.6 | | CI Cache | No | No | Yes | - | | LFS Objects | Yes | Similar | Yes | 10.0 / 10.7 | +| Repository pools| No | Yes | - | 11.6 | #### Implementation Details @@ -180,3 +201,10 @@ LFS Objects implements a similar storage pattern using 2 chars, 2 level folders, ``` They are also S3 compatible since **10.0** (GitLab Premium), and available in GitLab Core since **10.7**. + +[ce-2821]: https://gitlab.com/gitlab-com/infrastructure/issues/2821 +[ce-28283]: https://gitlab.com/gitlab-org/gitlab-ce/issues/28283 +[rake/migrate-to-hashed]: raketasks/storage.md#migrate-existing-projects-to-hashed-storage +[rake/rollback-to-legacy]: raketasks/storage.md#rollback +[storage-paths]: repository_storage_types.md +[gitaly]: gitaly/index.md diff --git a/doc/api/group_boards.md b/doc/api/group_boards.md index 5cb4e46179b5480fae5c3c7eb820229902fddd35..692aa7b77dafedec02b4b8dd4e251e55f3369c3f 100644 --- a/doc/api/group_boards.md +++ b/doc/api/group_boards.md @@ -31,32 +31,7 @@ Example response: "group": { "id": 5, "name": "Documentcloud", - "path": "documentcloud", - "owner_id": null, - "created_at": "2018-05-07T06:52:45.788Z", - "updated_at": "2018-07-03T06:48:17.005Z", - "description": "Consequatur aut a aperiam ut.", - "avatar": { - "url": null - }, - "membership_lock": false, - "share_with_group_lock": false, - "visibility_level": 20, - "request_access_enabled": false, - "ldap_sync_status": "ready", - "ldap_sync_error": null, - "ldap_sync_last_update_at": null, - "ldap_sync_last_successful_update_at": null, - "ldap_sync_last_sync_at": null, - "lfs_enabled": null, - "parent_id": null, - "shared_runners_minutes_limit": null, - "repository_size_limit": null, - "require_two_factor_authentication": false, - "two_factor_grace_period": 48, - "plan_id": null, - "project_creation_level": 2, - "runners_token": "rgeeL-nv4wa9YdRvuMid" + "web_url": "http://example.com/groups/documentcloud" }, "milestone": { "id": 12 @@ -121,32 +96,7 @@ Example response: "group": { "id": 5, "name": "Documentcloud", - "path": "documentcloud", - "owner_id": null, - "created_at": "2018-05-07T06:52:45.788Z", - "updated_at": "2018-07-03T06:48:17.005Z", - "description": "Consequatur aut a aperiam ut.", - "avatar": { - "url": null - }, - "membership_lock": false, - "share_with_group_lock": false, - "visibility_level": 20, - "request_access_enabled": false, - "ldap_sync_status": "ready", - "ldap_sync_error": null, - "ldap_sync_last_update_at": null, - "ldap_sync_last_successful_update_at": null, - "ldap_sync_last_sync_at": null, - "lfs_enabled": null, - "parent_id": null, - "shared_runners_minutes_limit": null, - "repository_size_limit": null, - "require_two_factor_authentication": false, - "two_factor_grace_period": 48, - "plan_id": null, - "project_creation_level": 2, - "runners_token": "rgeeL-nv4wa9YdRvuMid" + "web_url": "http://example.com/groups/documentcloud" }, "milestone": { "id": 12 @@ -210,32 +160,7 @@ Example response: "group": { "id": 5, "name": "Documentcloud", - "path": "documentcloud", - "owner_id": null, - "created_at": "2018-05-07T06:52:45.788Z", - "updated_at": "2018-07-03T06:48:17.005Z", - "description": "Consequatur aut a aperiam ut.", - "avatar": { - "url": null - }, - "membership_lock": false, - "share_with_group_lock": false, - "visibility_level": 20, - "request_access_enabled": false, - "ldap_sync_status": "ready", - "ldap_sync_error": null, - "ldap_sync_last_update_at": null, - "ldap_sync_last_successful_update_at": null, - "ldap_sync_last_sync_at": null, - "lfs_enabled": null, - "parent_id": null, - "shared_runners_minutes_limit": null, - "repository_size_limit": null, - "require_two_factor_authentication": false, - "two_factor_grace_period": 48, - "plan_id": null, - "project_creation_level": 2, - "runners_token": "rgeeL-nv4wa9YdRvuMid" + "web_url": "http://example.com/groups/documentcloud" }, "milestone": { "id": 12 @@ -309,32 +234,7 @@ Example response: "group": { "id": 5, "name": "Documentcloud", - "path": "documentcloud", - "owner_id": null, - "created_at": "2018-05-07T06:52:45.788Z", - "updated_at": "2018-07-03T06:48:17.005Z", - "description": "Consequatur aut a aperiam ut.", - "avatar": { - "url": null - }, - "membership_lock": false, - "share_with_group_lock": false, - "visibility_level": 20, - "request_access_enabled": false, - "ldap_sync_status": "ready", - "ldap_sync_error": null, - "ldap_sync_last_update_at": null, - "ldap_sync_last_successful_update_at": null, - "ldap_sync_last_sync_at": null, - "lfs_enabled": null, - "parent_id": null, - "shared_runners_minutes_limit": null, - "repository_size_limit": null, - "require_two_factor_authentication": false, - "two_factor_grace_period": 48, - "plan_id": null, - "project_creation_level": 2, - "runners_token": "rgeeL-nv3wa6YdRvuMid" + "web_url": "http://example.com/groups/documentcloud" }, "milestone": { "id": 44, diff --git a/doc/api/license.md b/doc/api/license.md index db50b4b6d7784afdf61932449a849a43624ffe96..2a8de64bdbfc7b15486e2bd2015c52b8adfda79e 100644 --- a/doc/api/license.md +++ b/doc/api/license.md @@ -11,21 +11,83 @@ GET /license ```json { - "starts_at": "2015-10-24", - "expires_at": "2016-10-24", + "id": 2, + "plan": "gold", + "created_at": "2018-02-27T23:21:58.674Z", + "starts_at": "2018-01-27", + "expires_at": "2022-01-27", + "historical_max": 300, + "expired": false, + "overage": 200, + "user_limit": 100, + "active_users": 300, "licensee": { - "Name": "John Doe", - "Company": "Doe, Inc.", - "Email": "john@doe.com" + "Name": "John Doe1" }, - "user_limit": 100, - "active_users": 60, "add_ons": { - "GitLab_FileLocks": 100 + "GitLab_FileLocks": 1, + "GitLab_Auditor_User": 1 } } ``` +## Retrieve information about all licenses + +``` +GET /licenses +``` + +```json +[ + { + "id": 1, + "plan": "silver", + "created_at": "2018-02-27T23:21:58.674Z", + "starts_at": "2018-01-27", + "expires_at": "2022-01-27", + "historical_max": 300, + "expired": false, + "overage": 200, + "user_limit": 100, + "licensee": { + "Name": "John Doe1" + }, + "add_ons": { + "GitLab_FileLocks": 1, + "GitLab_Auditor_User": 1 + } + }, + { + "id": 2, + "plan": "gold", + "created_at": "2018-02-27T23:21:58.674Z", + "starts_at": "2018-01-27", + "expires_at": "2022-01-27", + "historical_max": 300, + "expired": false, + "overage": 200, + "user_limit": 100, + "licensee": { + "Name": "Doe John" + }, + "add_ons": { + "GitLab_FileLocks": 1, + } + } +] +``` + +Overage is the difference between the number of active users and the licensed number of users. +This is calculated differently depending on whether the license has expired or not. + +- If the license has expired, it uses the historical maximum active user count (`historical_max`). +- If the license has not expired, it uses the current active users count. + +Returns: + +- `200 OK` with response containing the licenses in JSON format. This will be an empty JSON array if there are no licenses. +- `403 Forbidden` if the current user in not permitted to read the licenses. + ## Add a new license ``` @@ -44,20 +106,71 @@ Example response: ```json { - "starts_at": "2015-10-24", - "expires_at": "2016-10-24", + "id": 1, + "plan": "gold", + "created_at": "2018-02-27T23:21:58.674Z", + "starts_at": "2018-01-27", + "expires_at": "2022-01-27", + "historical_max": 300, + "expired": false, + "overage": 200, + "user_limit": 100, + "active_users": 300, "licensee": { - "Name": "John Doe", - "Company": "Doe, Inc.", - "Email": "john@doe.com" + "Name": "John Doe1" }, + "add_ons": { + "GitLab_FileLocks": 1, + "GitLab_Auditor_User": 1 + } +} +``` + +Returns: + +- `201 Created` if the license is successfully added. +- `400 Bad Request` if the license couldn't be added, with an error message explaining the reason. + + +## Delete a license + +``` +DELETE /license/:id +``` + +| Attribute | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `id` | integer | yes | ID of the GitLab license. | + +```bash +curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/license/:id" +``` + +Example response: + +```json +{ + "id": 2, + "plan": "gold", + "created_at": "2018-02-27T23:21:58.674Z", + "starts_at": "2018-01-27", + "expires_at": "2022-01-27", + "historical_max": 300, + "expired": false, + "overage": 200, "user_limit": 100, - "active_users": 60, + "licensee": { + "Name": "John Doe" + }, "add_ons": { - "GitLab_FileLocks": 100 + "GitLab_FileLocks": 1, + "GitLab_Auditor_User": 1 } } ``` -It returns `201` if it succeeds or `400` if failed with an error message -explaining the reason. +Returns: + +- `204 No Content` if the license is successfully deleted. +- `403 Forbidden` if the current user in not permitted to delete the license. +- `404 Not Found` if the license to delete could not be found. diff --git a/doc/api/services.md b/doc/api/services.md index a8117dfb51fa95acc5c9659fb28a4002a52c8dae..e7925d4cc74d028016d3715593f58d7dfa21e213 100644 --- a/doc/api/services.md +++ b/doc/api/services.md @@ -449,6 +449,45 @@ Get Hangouts Chat service settings for a project. GET /projects/:id/services/hangouts-chat ``` +## HipChat + +Private group chat and IM + +### Create/Edit HipChat service + +Set HipChat service for a project. + +``` +PUT /projects/:id/services/hipchat +``` + +Parameters: + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `token` | string | true | Room token | +| `color` | string | false | The room color | +| `notify` | boolean | false | Enable notifications | +| `room` | string | false |Room name or ID | +| `api_version` | string | false | Leave blank for default (v2) | +| `server` | string | false | Leave blank for default. For example, `https://hipchat.example.com`. | + +### Delete HipChat service + +Delete HipChat service for a project. + +``` +DELETE /projects/:id/services/hipchat +``` + +### Get HipChat service settings + +Get HipChat service settings for a project. + +``` +GET /projects/:id/services/hipchat +``` + ## Irker (IRC gateway) Send IRC messages, on update, to a list of recipients through an Irker gateway. @@ -523,7 +562,7 @@ Parameters: | `username` | string | yes | The username of the user created to be used with GitLab/JIRA. | | `password` | string | yes | The password of the user created to be used with GitLab/JIRA. | | `active` | boolean | no | Activates or deactivates the service. Defaults to false (deactivated). | -| `jira_issue_transition_id` | integer | no | The ID of a transition that moves issues to a closed state. You can find this number under the JIRA workflow administration (**Administration > Issues > Workflows**) by selecting **View** under **Operations** of the desired workflow of your project. The ID of each state can be found inside the parenthesis of each transition name under the **Transitions (id)** column ([see screenshot][trans]). By default, this ID is set to `2`. | +| `jira_issue_transition_id` | string | no | The ID of a transition that moves issues to a closed state. You can find this number under the JIRA workflow administration (**Administration > Issues > Workflows**) by selecting **View** under **Operations** of the desired workflow of your project. The ID of each state can be found inside the parenthesis of each transition name under the **Transitions (id)** column ([see screenshot][trans]). By default, this ID is set to `2`. | ### Delete JIRA service diff --git a/doc/ci/examples/dast.md b/doc/ci/examples/dast.md index 52c4147e2453518f355438cb618be32434d7aafe..d8c2e07e7b61430b805f99b2da50925aedc8ecf0 100644 --- a/doc/ci/examples/dast.md +++ b/doc/ci/examples/dast.md @@ -16,8 +16,8 @@ It can be very useful combined with [Review Apps](../review_apps/index.md). ## Example -First, you need GitLab Runner with -[docker executor](https://docs.gitlab.com/runner/executors/docker.html). +To run a DAST job, you need GitLab Runner with +[docker-in-docker executor](https://docs.gitlab.com/runner/executors/docker.html#use-docker-in-docker-with-privileged-mode). Once you set up the Runner, add a new job to `.gitlab-ci.yml` that generates the expected report: diff --git a/doc/ci/examples/license_management.md b/doc/ci/examples/license_management.md index c45f1c0404ab1e2704e6bea561de9e5a9c9b9008..ab78b3c0b53ac50bbe1694b4d8be3277fe93a1bd 100644 --- a/doc/ci/examples/license_management.md +++ b/doc/ci/examples/license_management.md @@ -1,40 +1,46 @@ # Dependencies license management with GitLab CI/CD **[ULTIMATE]** -CAUTION: **Caution:** -The job definition shown below is supported on GitLab 11.5 and later versions. -It also requires the GitLab Runner 11.5 or later. -For earlier versions, use the [previous job definitions](#previous-job-definitions). +These examples show how to run License Management scanning on your project's dependencies by using GitLab CI/CD. + +## Prerequisites + +To run a License Management scanning job, you need GitLab Runner with +[docker executor](https://docs.gitlab.com/runner/executors/docker.html). -This example shows how to run the License Management tool on your -project's dependencies by using GitLab CI/CD. +## Configuring with templates -First, you need GitLab Runner with -[docker-in-docker executor](../docker/using_docker_build.md#use-docker-in-docker-executor). +Since GitLab 11.9, a CI/CD template with the default License Management scanning job definition is provided as a part of your GitLab installation. +This section describes how to use it and customize its execution. -Once you set up the Runner, add a new job to `.gitlab-ci.yml` that -generates the expected report: +### Using job definition template + +CAUTION: **Caution:** +The CI/CD template for job definition is supported on GitLab 11.9 and later versions. +For earlier versions, use the [manual job definition](#manual-job-definition). + +Once you set up the Runner, add a new job to `.gitlab-ci.yml` using [the CI/CD template](../../ci/yaml/README.md#includetemplate) for License Management: ```yaml -license_management: - image: - name: "registry.gitlab.com/gitlab-org/security-products/license-management:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable" - entrypoint: [""] - stage: test - allow_failure: true - script: - - /run.sh analyze . - artifacts: - reports: - license_management: gl-license-management-report.json +include: + template: License-Management.gitlab-ci.yml ``` +### Scanning results + The above example will create a `license_management` job in your CI/CD pipeline and scan your dependencies to find their licenses. The report will be saved as a [License Management report artifact](../../ci/yaml/README.md#artifactsreportslicense_management-ultimate) that you can later download and analyze. Due to implementation limitations we always take the latest License Management artifact available. -## Install custom project dependencies +TIP: **Tip:** +For [GitLab Ultimate][ee] users, this information will +be automatically extracted and shown right in the merge request widget. +[Learn more on License Management in merge requests](../../user/project/merge_requests/license_management.md). + +### Customizing the template + +#### Install custom project dependencies > Introduced in GitLab Ultimate 11.4. @@ -50,14 +56,45 @@ of your application (ex: for a project with a `Gemfile`, the setup step will be Example: +```yaml +include: + template: License-Management.gitlab-ci.yml + +variables: + LICENSE_MANAGEMENT_SETUP_CMD: ./my-custom-install-script.sh +``` + +In this example, `my-custom-install-script.sh` is a shell script at the root of the project. + +#### Overriding job definition + +If you want to override the job definition (for example, change properties like `variables` or `dependencies`), you need to declare +its definition after the template inclusion and specify any additional keys under it. For example: + +```yaml +include: + template: License-Management.gitlab-ci.yml + +license_management: + stage: my-custom-stage +``` + +## Manual job definition + +CAUTION: **Caution:** +The job definition shown below is supported on GitLab 11.5 and later versions _(although it's preferred to use +[the job definition template](#using-job-definition-template) since 11.9)_. +It also requires the GitLab Runner 11.5 or later. +For earlier versions, use the [previous job definitions](#previous-job-definitions). + +If you are using GitLab prior to 11.9, you can define it manually using the following snippet: + ```yaml license_management: image: name: "registry.gitlab.com/gitlab-org/security-products/license-management:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable" entrypoint: [""] stage: test - variables: - SETUP_CMD: ./my-custom-install-script.sh allow_failure: true script: - /run.sh analyze . @@ -66,12 +103,23 @@ license_management: license_management: gl-license-management-report.json ``` -In this example, `my-custom-install-script.sh` is a shell script at the root of the project. +Install custom project dependencies via `SETUP_CMD` variable: -TIP: **Tip:** -For [GitLab Ultimate][ee] users, this information will -be automatically extracted and shown right in the merge request widget. -[Learn more on License Management in merge requests](../../user/project/merge_requests/license_management.md). +```yaml +license_management: + image: + name: "registry.gitlab.com/gitlab-org/security-products/license-management:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable" + entrypoint: [""] + stage: test + variables: + SETUP_CMD: ./my-custom-install-script.sh + allow_failure: true + script: + - /run.sh analyze . + artifacts: + reports: + license_management: gl-license-management-report.json +``` ## Previous job definitions diff --git a/doc/ci/introduction/index.md b/doc/ci/introduction/index.md index eeb89f80e09b8518846e185ab940f2fec1bd4829..317e2009c266c1b0a103059e54a9c4bcb562a905 100644 --- a/doc/ci/introduction/index.md +++ b/doc/ci/introduction/index.md @@ -78,10 +78,10 @@ scripts to be specified in a file called [`.gitlab-ci.yml`](../yaml/README.md), located in the root path of your repository. In this file, you can define the scripts you want to run, define include and -cache dependencies, choose what commands you want to run in sequence +cache dependencies, choose commands you want to run in sequence and those you want to run in parallel, define where you want to -deploy your app, and choose if you want to run the script automatically -or if you want to trigger it manually. Once you're familiar with +deploy your app, and specify whether you will want to run the scripts automatically +or trigger any of them manually. Once you're familiar with GitLab CI/CD you can add more advanced steps into the configuration file. To add scripts to that file, you'll need to organize them in a @@ -175,7 +175,7 @@ file, so we recommend you read through it to understand GitLab's CI/CD logic, and learn how to write your own script (or tweak an existing one) for any application. -For an deep view of GitLab's CI/CD configuration options, check the +For a deep view of GitLab's CI/CD configuration options, check the [`.gitlab-ci.yml` full reference](../yaml/README.md). ### GitLab CI/CD feature set diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index bf1ac48bb1794bb0bd4d3ba8912688fcaacff5b8..302f6c8b658c2553b37aaa361d8293c67704259f 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -340,6 +340,19 @@ job: - branches ``` +Pattern matching is case-sensitive by default. Use `i` flag modifier, like +`/pattern/i` to make a pattern case-insensitive: + +```yaml +job: + # use regexp + only: + - /^issue-.*$/i + # use special keyword + except: + - branches +``` + In this example, `job` will run only for refs that are tagged, or if a build is explicitly requested via an API trigger or a [Pipeline Schedule][schedules]: @@ -384,6 +397,27 @@ job: only: ['branches', 'tags'] ``` +### Supported `only`/`except` regexp syntax + +CAUTION: **Warning:** +This is a breaking change that was introduced with GitLab 11.9.4. + +In GitLab 11.9.4, GitLab begun internally converting regexp used +in `only` and `except` parameters to [RE2](https://github.com/google/re2/wiki/Syntax). + +This means that only subset of features provided by [Ruby Regexp](https://ruby-doc.org/core/Regexp.html) +is supported. [RE2](https://github.com/google/re2/wiki/Syntax) limits the set of features +provided due to computational complexity, which means some features became unavailable in GitLab 11.9.4. +For example, negative lookaheads. + +For GitLab versions from 11.9.7 and up to GitLab 12.0, GitLab provides a feature flag that can be +enabled by administrators that allows users to use unsafe regexp syntax. This brings compatibility +with previously allowed syntax version and allows users to gracefully migrate to the new syntax. + +```ruby +Feature.enable(:allow_unsafe_ruby_regexp) +``` + ### `only`/`except` (advanced) > - `refs` and `kubernetes` policies introduced in GitLab 10.0. diff --git a/doc/development/gitaly.md b/doc/development/gitaly.md index b1785e6f803fe3cb659a5f0c5a7b4962271829c7..48d87605f50e8d4d04fdfba523c094b4b0cfcba3 100644 --- a/doc/development/gitaly.md +++ b/doc/development/gitaly.md @@ -74,6 +74,8 @@ most commonly-used RPCs can be enabled via feature flags: * `rugged_get_tree_entries` * `rugged_tree_entry` * `rugged_commit_is_ancestor` +* `rugged_commit_tree_entry` +* `rugged_list_commits_by_oid` A convenience Rake task can be used to enable or disable these flags all together. To enable: diff --git a/doc/integration/README.md b/doc/integration/README.md index 56fe51fadc2922318a9d0c38624f137e760eae41..1fea6a32c28e998521a494eb13b4b55ddbd2cb5d 100644 --- a/doc/integration/README.md +++ b/doc/integration/README.md @@ -31,8 +31,8 @@ See the documentation below for details on how to configure these services. ## Project services -Integration with services such as Campfire, Flowdock, Pivotal Tracker, and Slack -are available in the form of a [Project Service][]. +Integration with services such as Campfire, Flowdock, HipChat, +Pivotal Tracker, and Slack are available in the form of a [Project Service][]. [Project Service]: ../user/project/integrations/project_services.md diff --git a/doc/project_services/hipchat.md b/doc/project_services/hipchat.md new file mode 100644 index 0000000000000000000000000000000000000000..4ae9f6c6b2e4dab73105602a3cdf6bcd1a4e09c3 --- /dev/null +++ b/doc/project_services/hipchat.md @@ -0,0 +1 @@ +This document was moved to [user/project/integrations/hipchat.md](../user/project/integrations/hipchat.md). diff --git a/doc/raketasks/README.md b/doc/raketasks/README.md index 90187617c419f4e02b177340145c9ad1cd90ae50..0729875daf8d84d17a187b7e302821c7798ed856 100644 --- a/doc/raketasks/README.md +++ b/doc/raketasks/README.md @@ -15,3 +15,4 @@ comments: false - [Import](import.md) of git repositories in bulk - [Rebuild authorized_keys file](http://docs.gitlab.com/ce/raketasks/maintenance.html#rebuild-authorized_keys-file) task for administrators - [Migrate Uploads](../administration/raketasks/uploads/migrate.md) +- [Sanitize Uploads](../administration/raketasks/uploads/sanitize.md) diff --git a/doc/university/glossary/README.md b/doc/university/glossary/README.md index 254e234a22cd0245604e95a5b281070e1d620df5..0af2f8d2f542fff266bb8f7bf48b8b2dd8dc0c2e 100644 --- a/doc/university/glossary/README.md +++ b/doc/university/glossary/README.md @@ -41,7 +41,7 @@ Objects (usually binary and large) created by a build process. These can include ### Atlassian -A [company](https://www.atlassian.com) that develops software products for developers and project managers including Bitbucket, Jira, Confluence, Bamboo. +A [company](https://www.atlassian.com) that develops software products for developers and project managers including Bitbucket, Jira, Hipchat, Confluence, Bamboo. ### Audit Log diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 3fc5225a23a271d8c95a8116825160131674f09c..9b58483af2fa0e030aea7283fd3632585e690251 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -203,22 +203,23 @@ Get an overview of the vulnerabilities of all the projects in a group and its su ## Insights **[ULTIMATE]** -Placeholder. +> Introduced in [GitLab Ultimate][ee] 11.9 behind the `insights` feature flag. -## Transfer groups to another group +## Transferring groups -From 10.5 there are two different ways to transfer a group: +From GitLab 10.5, groups can be transferred in the following ways: -- Either by transferring a group into another group (making it a subgroup of that group). -- Or by converting a subgroup into a root group (a group with no parent). +- Top-level groups can be transferred to a group, converting them into subgroups. +- Subgroups can be transferred to a new parent group. +- Subgroups can be transferred out from a parent group, converting them into top-level groups. -Please make sure to understand that: +When transferring groups, note: -- Changing a group's parent can have unintended side effects. See [Redirects when changing repository paths](https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths) -- You can only transfer the group to a group you manage. +- Changing a group's parent can have unintended side effects. See [Redirects when changing repository paths](../project/index.md#redirects-when-changing-repository-paths). +- You can only transfer groups to groups you manage. - You will need to update your local repositories to point to the new location. -- If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility. -- Only explicit group membership is transferred, not the inherited membership. If this would leave the group without an owner, the transferring user is added as owner instead. +- If the parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility. +- Only explicit group membership is transferred, not inherited membership. If the group's owners have only inherited membership, this would leave the group without an owner. In this case, the user transferring the group becomes the group's owner. ## Group settings diff --git a/doc/user/group/security_dashboard/img/dashboard.png b/doc/user/group/security_dashboard/img/dashboard.png index 8785db3dd0a0e518a7d562bbe9325e799d58791a..d52a6dacdbf92d840e2f21321c591d70c89d2c70 100644 Binary files a/doc/user/group/security_dashboard/img/dashboard.png and b/doc/user/group/security_dashboard/img/dashboard.png differ diff --git a/doc/user/group/security_dashboard/index.md b/doc/user/group/security_dashboard/index.md index 79b75a70998bc7af3fefc9076330e696c2c5427b..21c43109b9bcec8d5536cd0835171f74aaa604d9 100644 --- a/doc/user/group/security_dashboard/index.md +++ b/doc/user/group/security_dashboard/index.md @@ -23,6 +23,8 @@ the risk. You can also action these vulnerabilities by creating an issue for the Having your vulnerabilities in GitLab allows you to keep track of them and action them, all in the same application. +![dashboard with action buttons and metrics](img/dashboard.png) + ## Use cases You want to measure how secure your projects are without having to look into @@ -30,7 +32,9 @@ each one separately. ## Supported features -The group security dashboard supports [SAST](../../project/merge_requests/sast.md), and [Dependency Scanning](../../project/merge_requests/dependency_scanning.md) reports. +The group security dashboard supports [SAST](../../project/merge_requests/sast.md), +[Dependency Scanning](../../project/merge_requests/dependency_scanning.md), +and [Container Scanning](../../project/merge_requests/container_scanning.md). ## Requirements @@ -61,14 +65,12 @@ Once you're on the dashboard, at the top you should see a series of filters for: - Report type - Project -Selecting one or more of these will filter -the results in the sectons below. The first section is an overview of all the -vulnerabilities, grouped by severity. Underneath these overviews is a timeline -chart that shows how many open vulnerabilities you had at various points in time. -You can hover over the chart to get more details about the open vulnerabilities -at that time. - -![dashboard with action buttons and metrics](img/dashboard.png) +Selecting one or more filters will filter the results in this page. +The first section is an overview of all the vulnerabilities, grouped by severity. +Underneath this overview is a timeline chart that shows how many open +vulnerabilities your projects had at various points in time. You can filter among 30, 60, and +90 days, with the default being 90. Hover over the chart to get more details about +the open vulnerabilities at a specific time. Finally, there is a list of all the vulnerabilities in the group, sorted by severity. In that list, you can see the severity of the vulnerability, its name, its @@ -86,7 +88,8 @@ If you hover over a row, there will appear some actions you can take: Clicking the "More info" button opens a modal with more information about the selected vulnerability where you can get a better description, as well as the file it came from, and a possible solution. You get access to the -["Dismiss vulnerability"](#dismissing-a-vulnerability) and +["Dismiss vulnerability"](#dismissing-a-vulnerability), +["Create merge request"](#create-a-merge-request-from-a-vulnerability), and ["Create issue"](#creating-an-issue-for-a-vulnerability) buttons inside this modal as well. @@ -108,6 +111,21 @@ will now have an associated issue next to the name. You can get the same result if you select the **Create issue** button from inside the "More info" modal. +### Create a Merge Request from a vulnerability + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9224) in + [GitLab Ultimate](https://about.gitlab.com/pricing) 11.9. + +In certain cases, GitLab will allow you to create a merge request that will +automatically remediate the vulnerability. + +Clicking on the "Create merge request" button inside the more info modal will create +a merge request onto the default branch, then redirect you to that merge request. + +CAUTION: **Warning:** Automatic Patch creation is only available for a subset of +[Dependency Scanning](../../project/merge_requests/dependency_scanning.md). At the moment only Node.JS projects +managed with yarn are supported. + ### Dismissing a vulnerability You can also dismiss vulnerabilities by clicking the "Dismiss vulnerability" button. diff --git a/doc/user/index.md b/doc/user/index.md index 1b38a0eb466afead8788285f4a8299d4b6143c5d..267cc8fcca8f2e0ca5667b3d7e65535cef53cfcb 100644 --- a/doc/user/index.md +++ b/doc/user/index.md @@ -66,9 +66,7 @@ With GitLab Enterprise Edition, you can also: - Leverage continuous delivery method with [Canary Deployments](https://docs.gitlab.com/ee/user/project/canary_deployments.html) - Scan your code for vulnerabilities and [display them in merge requests](project/merge_requests/sast.md). -You can also [integrate](project/integrations/project_services.md) GitLab with -numerous third-party applications, such as Mattermost, Microsoft Teams, Trello, -Slack, Bamboo CI, JIRA, and a lot more. +You can also [integrate](project/integrations/project_services.md) GitLab with numerous third-party applications, such as Mattermost, Microsoft Teams, HipChat, Trello, Slack, Bamboo CI, JIRA, and a lot more. ## Projects diff --git a/doc/user/project/badges.md b/doc/user/project/badges.md index 19eb95099ce3af5497679fdcf3bd863d74cbd4dd..025f3af0af5a6c459fffa7cdb5d0f6ee7d4e4fdc 100644 --- a/doc/user/project/badges.md +++ b/doc/user/project/badges.md @@ -63,6 +63,12 @@ are available: - `%{commit_sha}`: ID of the most recent commit to the default branch of a project's repository +NOTE: **NOTE** +Placeholders allow badges to expose otherwise-private information, such as the +default branch or commit SHA when the project is configured to have a private +repository. This is by design, as badges are intended to be used publicly. Avoid +using these placeholders if the information is sensitive. + ## API You can also configure badges via the GitLab API. As in the settings, there is diff --git a/doc/user/project/integrations/hipchat.md b/doc/user/project/integrations/hipchat.md new file mode 100644 index 0000000000000000000000000000000000000000..0fd847d415f9ceaf536899741a19c4728d769dc2 --- /dev/null +++ b/doc/user/project/integrations/hipchat.md @@ -0,0 +1,53 @@ +# Atlassian HipChat + +GitLab provides a way to send HipChat notifications upon a number of events, +such as when a user pushes code, creates a branch or tag, adds a comment, and +creates a merge request. + +## Setup + +GitLab requires the use of a HipChat v2 API token to work. v1 tokens are +not supported at this time. Note the differences between v1 and v2 tokens: + +HipChat v1 API (legacy) supports "API Auth Tokens" in the Group API menu. A v1 +token is allowed to send messages to *any* room. + +HipChat v2 API has tokens that are can be created using the Integrations tab +in the Group or Room admin page. By design, these are lightweight tokens that +allow GitLab to send messages only to *one* room. + +### Complete these steps in HipChat + +1. Go to: +1. Click on "Group Admin" -> "Integrations". +1. Find "Build Your Own!" and click "Create". +1. Select the desired room, name the integration "GitLab", and click "Create". +1. In the "Send messages to this room by posting this URL" column, you should +see a URL in the format: + +``` +https://api.hipchat.com/v2/room//notification?auth_token= +``` + +HipChat is now ready to accept messages from GitLab. Next, set up the HipChat +service in GitLab. + +### Complete these steps in GitLab + +1. Navigate to the project you want to configure for notifications. +1. Navigate to the [Integrations page](project_services.md#accessing-the-project-services) +1. Click "HipChat". +1. Select the "Active" checkbox. +1. Insert the `token` field from the URL into the `Token` field on the Web page. +1. Insert the `room` field from the URL into the `Room` field on the Web page. +1. Save or optionally click "Test Settings". + +## Troubleshooting + +If you do not see notifications, make sure you are using a HipChat v2 API +token, not a v1 token. + +Note that the v2 token is tied to a specific room. If you want to be able to +specify arbitrary rooms, you can create an API token for a specific user in +HipChat under "Account settings" and "API access". Use the `XXX` value under +`auth_token=XXX`. diff --git a/doc/user/project/integrations/project_services.md b/doc/user/project/integrations/project_services.md index 6e4b1ea6b119cf86e5b7b900b2b990fa10d22c12..71cafb6a67d6ba3f7946f8ea56312d231f29c4c4 100644 --- a/doc/user/project/integrations/project_services.md +++ b/doc/user/project/integrations/project_services.md @@ -37,6 +37,7 @@ Click on the service links to see further configuration instructions and details | Flowdock | Flowdock is a collaboration web app for technical teams | | [GitHub](github.md) | Sends pipeline notifications to GitHub | | [Hangouts Chat](hangouts_chat.md) | Receive events notifications in Google Hangouts Chat | +| [HipChat](hipchat.md) | Private group chat and IM | | [Irker (IRC gateway)](irker.md) | Send IRC messages, on update, to a list of recipients through an Irker gateway | | [JIRA](jira.md) | JIRA issue tracker | | [Jenkins](../../../integration/jenkins.md) | An extendable open source continuous integration server | diff --git a/doc/user/project/integrations/prometheus.md b/doc/user/project/integrations/prometheus.md index 30a1b1d050e014d2b352217939f3564d6625d986..712200b05eafa663f7b7d30e9c2c691a74ff207a 100644 --- a/doc/user/project/integrations/prometheus.md +++ b/doc/user/project/integrations/prometheus.md @@ -131,9 +131,6 @@ will appear, with options to set the threshold and operator. Click **Add** to sa ![Adding an alert](img/prometheus_alert.png) -If the metric exceeds the threshold of the alert for over 5 minutes, an email -will be sent to all [Maintainers and Owners](../../permissions.md#project-members-permissions) of the project. - To remove the alert, click back on the alert icon for the desired metric, and click **Delete**. #### External Prometheus instances @@ -157,6 +154,41 @@ receivers: ... ``` +### Taking action on an alert **[ULTIMATE]** + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/4925) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.9. + +Alerts can be used to trigger actions, like open an issue automatically. To configure the actions: + +1. Navigate to your project's **Settings > Operations > Incidents**. +1. Enable the option to create issues. +1. Choose the [issue template](../description_templates.md) to create the issue from. +1. Optionally, select whether to send an email notification to the developers of the project. +1. Click **Save changes**. + +Once enabled, an issue will be opened automatically when an alert is triggered. To further customize the issue, you can add labels, mentions, or any other supported [quick action](../quick_actions.md) in the selected issue template. + +If the metric exceeds the threshold of the alert for over 5 minutes, an email will be sent to all [Maintainers and Owners](../../permissions.md#project-members-permissions) of the project. + +NOTE: **Note:** +If you are running a self-managed instance, the new interface shown on +this page will not be available unless the feature flag +`incident_management` is enabled, which can be done from the Rails console by +instance administrators. + +Use these commands to start the Rails console: + +```sh +# Omnibus GitLab +gitlab-rails console + +# Installation from source +cd /home/git/gitlab +sudo -u git -H bin/rails console RAILS_ENV=production +``` + +Then run `Feature.enable(:incident_management)` to enable the feature flag. + ## Determining the performance impact of a merge > [Introduced][ce-10408] in GitLab 9.2. diff --git a/doc/user/project/merge_requests/img/create-issue-with-list-hover.png b/doc/user/project/merge_requests/img/create-issue-with-list-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..7d70e8299f52612d8de0a0a8b97effa174028b80 Binary files /dev/null and b/doc/user/project/merge_requests/img/create-issue-with-list-hover.png differ diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md index 0d7a9446a1a81d2ad71b77a5c000645365db6664..d1d3adf0571c831042c4d6b1fb61b1ed030d80dc 100644 --- a/doc/user/project/merge_requests/index.md +++ b/doc/user/project/merge_requests/index.md @@ -376,6 +376,19 @@ Some Vulnerabilities can be fixed by applying a patch that is automatically gene ![Solutions for dependency scanning](img/vulnerability_solution.png) +### Create a merge request from a vulnerability **[ULTIMATE]** + +> Introduced in [GitLab Ultimate][products] 11.9. + +CAUTION: **Warning:** Automatic Patch creation is only available for a subset of [Dependency Scanning](dependency_scanning.md). At the moment only Node.JS projects managed with yarn are supported. + +Any vulnerability that has a [solution](#solutions-for-dependency-scanning-ultimate) can have a merge request created to automatically solve the issue. + +If this action is available there will be a "Create merge request" button in the vulnerability modal. +Clicking on this button will create a merge request to apply the solution onto the source branch. + +![Create merge request from vulnerability](img/create-issue-with-list-hover.png) + ## Live preview with Review Apps If you configured [Review Apps](https://about.gitlab.com/features/review-apps/) for your project, diff --git a/doc/user/project/merge_requests/merge_request_approvals.md b/doc/user/project/merge_requests/merge_request_approvals.md index b91e07b98129d3fac599122d00b00483a27a31ab..dcdf66f59ffd7234dc965a43e7ddae9692ba7be8 100644 --- a/doc/user/project/merge_requests/merge_request_approvals.md +++ b/doc/user/project/merge_requests/merge_request_approvals.md @@ -293,6 +293,8 @@ Approvers are suggested for merge requests based on the previous authors of the ## Filtering merge requests by approvers +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/9468) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.9. + To filter merge requests by an individual approver, you can type (or select from the dropdown) `approver` and select the user. diff --git a/doc/user/project/merge_requests/sast.md b/doc/user/project/merge_requests/sast.md index 7ebf5ad69aca59c10fd549f9cba96b22816f4b43..0b2ca0c090fb97826565630d3f8bcc0e101a5733 100644 --- a/doc/user/project/merge_requests/sast.md +++ b/doc/user/project/merge_requests/sast.md @@ -35,7 +35,6 @@ The following languages and frameworks are supported. | Language / framework | Scan tool | |-------------------------|----------------------------------------------------------------------------------------| | .NET | [Security Code Scan](https://security-code-scan.github.io) | -| Any | [Gitleaks](https://github.com/zricethezav/gitleaks), [TruffleHog](https://github.com/dxa4481/truffleHog) and [Diffence](https://github.com/techjacker/diffence) (secret detectors) | | C/C++ | [Flawfinder](https://www.dwheeler.com/flawfinder/) | | Go | [Gosec](https://github.com/securego/gosec) | | Groovy (Ant, Gradle, Maven and SBT) | [find-sec-bugs](https://find-sec-bugs.github.io/) | @@ -48,6 +47,17 @@ The following languages and frameworks are supported. | Scala (Ant, Gradle, Maven and SBT) | [find-sec-bugs](https://find-sec-bugs.github.io/) | | Typescript | [TSLint Config Security](https://github.com/webschik/tslint-config-security/) | +## Secret Detection + +GitLab is also able to detect secrets and credentials that have been unintentionally pushed to the repository. +For example, an API key that allows write access to third-party deployment environments. + +This check is performed by a specific analyzer during the `sast` job. It runs regardless of the programming +language of your app, and you don't need to change anything to your +CI/CD configuration file to turn it on. Results are available in the SAST report. + +GitLab currently includes [Gitleaks](https://github.com/zricethezav/gitleaks), [TruffleHog](https://github.com/dxa4481/truffleHog), and [Diffence](https://github.com/techjacker/diffence). + ## How it works First of all, you need to define a job in your `.gitlab-ci.yml` file that generates the diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md index 91a85a36a535485fe53257862099e0b4f67bcb7b..56e8f1731aeb33155705998f497526cd23a4f4b8 100644 --- a/doc/user/project/protected_branches.md +++ b/doc/user/project/protected_branches.md @@ -10,7 +10,7 @@ created protected branches. By default, a protected branch does four simple things: - it prevents its creation, if not already created, from everybody except users - who are allowed to merge + with Maintainer permission - it prevents pushes from everybody except users with Maintainer permission - it prevents **anyone** from force pushing to the branch - it prevents **anyone** from deleting the branch @@ -109,7 +109,7 @@ all matching branches: ## Creating a protected branch -> [Introduced][https://gitlab.com/gitlab-org/gitlab-ce/issues/53361] in GitLab 11.9. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/53361) in GitLab 11.9. When a protected branch or wildcard protected branches are set to [**No one** is **Allowed to push**](#using-the-allowed-to-merge-and-allowed-to-push-settings), diff --git a/ee/app/assets/javascripts/approvals/components/app.vue b/ee/app/assets/javascripts/approvals/components/app.vue index d76487e3cd41e679cbedff75ca027978f6065022..0b934d9cbfbebc6419f46b30880a488ba9049574 100644 --- a/ee/app/assets/javascripts/approvals/components/app.vue +++ b/ee/app/assets/javascripts/approvals/components/app.vue @@ -38,7 +38,7 @@ export default {