summaryrefslogtreecommitdiff
path: root/spec
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch '18590-banzai-filter-relativelinkfilter-is-slow' into 'master' Yorick Peterse2016-06-212-5/+14
|\ | | | | | | | | Optimize Banzai::Filter::RelativeLinkFilter See merge request !4813
| * Optimize Banzai::Filter::RelativeLinkFilterAlejandro Rodríguez2016-06-212-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | A lot of git operations were being repeated, for example, to build a url you would ask if the path was a Tree, which would call a recursive routine in Gitlab::Git::Tree#where, then ask if the path was a Blob, which would call a recursive routine at Gitlab::Git::Blob#find, making reference to the same git objects several times. Now we call Rugged::Tree#path, which allows us to determine the type of the path in one pass. Some other minor improvement added, like saving commonly used references instead of calculating them each time.
* | Merge branch 'blank-state' into 'master' Jacob Schatz2016-06-211-3/+3
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Updated blank state for environments and deployments ## What does this MR do? Adds a designed blank state to environments and deployments. @markpundsack do we want to hide the new environments when empty? Looks weird otherwise with the green button at the top. ## What are the relevant issue numbers? Closes #18661 ## Screenshots (if relevant) ![Screen_Shot_2016-06-21_at_09.55.03](/uploads/cf768aba3fd85a596d24b7be4fe6a6c0/Screen_Shot_2016-06-21_at_09.55.03.png) ![Screen_Shot_2016-06-21_at_09.55.10](/uploads/b7b7dba90b613cfa867b084661b36b06/Screen_Shot_2016-06-21_at_09.55.10.png) See merge request !4818
| * | Tests updateblank-statePhil Hughes2016-06-211-2/+2
| | |
| * | Moved new environment link to below blank state textPhil Hughes2016-06-211-3/+3
| |/
* | Merge branch 'fix/builds-api-nil-commit' into 'master' Rémy Coutable2016-06-213-8/+35
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix builds API response that did not include commit data ## What does this MR do? This is fix for problem with builds API response not including information about commit this build is created for. ## What are the relevant issue numbers? Closes #18476 ## Does this MR meet the acceptance criteria? - [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [x] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md) - [x] API support added - Tests - [x] Added for this feature/bug - [x] All builds are passing - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !4827
| * | Fix builds API response not including commit dataGrzegorz Bizon2016-06-213-8/+35
| | |
* | | Merge branch 'show-image-id-on-registry-page' into 'master' Rémy Coutable2016-06-212-2/+18
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Show proper image ID on registry page ## What does this MR do? Display the container registry image ID (from the config blob) instead of the first image layer ID ## Are there points in the code the reviewer needs to double check? ## Why was this MR needed? To show proper image ID on container_registry page. This only supports manifest V2, since the manifest V1 doesn't expose information about Image ID. ## What are the relevant issue numbers? Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/18159. ## Screenshots (if relevant) ![Screen_Shot_2016-06-21_at_13.16.44](/uploads/db0d3ed8c8b90fafc8dbf1644c2354b0/Screen_Shot_2016-06-21_at_13.16.44.png) - [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - Tests - [x] Added for this feature/bug - [ ] All builds are passing - [ ] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [ ] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !4821
| * | | Show proper image ID on registry pageKamil Trzcinski2016-06-212-2/+18
| | | |
* | | | Merge branch 'ci-lfs-fetch' into 'master' Rémy Coutable2016-06-211-298/+263
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow to fetch LFS from CI ## What does this MR do? This adds support for fetching LFS object from CI jobs (mostly it's made for supporting GitLab CI). ## What is left? - [x] Write tests covering a new authorization mechanism cc @grzesiek @marin See merge request !4465
| * | | | Add test coverage to LFS fetchingci-lfs-fetchKamil Trzcinski2016-06-211-289/+240
| | | | |
| * | | | Merge remote-tracking branch 'origin/master' into ci-lfs-fetchKamil Trzcinski2016-06-21141-535/+11271
| |\ \ \ \ | | |/ / /
| * | | | Merge remote-tracking branch 'origin/master' into ci-lfs-fetchKamil Trzcinski2016-06-10138-1416/+5390
| |\ \ \ \
| * | | | | WIPKamil Trzcinski2016-06-031-11/+25
| | | | | |
* | | | | | Merge branch '18792-cache-participants-call' into 'master' Yorick Peterse2016-06-211-0/+10
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | | | | | | | | | | | | | Cache Participable#participants in instance variable See merge request !4803
| * | | | | Cache Participable#participants in instance variablePaco Guzman2016-06-211-0/+10
| | | | | |
* | | | | | Merge branch '17521-gitlab-ci-yml-templates' into 'master' Jacob Schatz2016-06-214-32/+85
|\ \ \ \ \ \ | |/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GitLab CI Yaml template dropdown ## What does this MR do? Make it possible to select a dropdown for an easy start with GitLab CI. ## What are the relevant issue numbers? Closes #17521 ## TODO - [ ] Backend - [x] CHANGELOG item - [x] Fix rubocop failure - [x] API Support - [x] New tests - [x] Add disclaimer to the top of the gitlab-ci.yml - [ ] Frontend - [x] New tests See merge request !4411
| * | | | | Add feature test for gitab CI dropdownAlfredo Sumaran2016-06-201-0/+30
| | | | | |
| * | | | | Incorporate reviewZ.J. van de Weg2016-06-201-0/+9
| | | | | |
| * | | | | Implement backend gitlab ci dropdownZ.J. van de Weg2016-06-202-29/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit builds on the groundwork in ee008e300b1ec0abcc90e6a30816ec0754cea0dd, which refactored the backend so the same code could be used for new dropdowns. In this commit its used for templates for the `.gitlab-ci.yml` files.
| * | | | | Refactor Gitlab::GitignoresZJ van de Weg2016-06-202-4/+4
| | |_|_|/ | |/| | |
* | | | | Merge branch 'feature/runner-lock-on-project' into 'master' Rémy Coutable2016-06-215-87/+326
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make it possible to lock runner on a specific project Make it possible to lock runner on a specific project. ![Screen_Shot_2016-06-20_at_4.03.08_PM](/uploads/186378643a20106ff0b67b6fd8bd7f28/Screen_Shot_2016-06-20_at_4.03.08_PM.png) ---- ![Screen_Shot_2016-06-20_at_9.54.52_PM](/uploads/c479abdffaf19f383bb6b5a42bdd6cc3/Screen_Shot_2016-06-20_at_9.54.52_PM.png) ---- ![Screen_Shot_2016-06-20_at_9.56.26_PM](/uploads/6ad838679b0c28a1fe2e20e9224387ea/Screen_Shot_2016-06-20_at_9.56.26_PM.png) Closes #3407 See merge request !4093
| * \ \ \ \ Merge remote-tracking branch 'upstream/master' into ↵Lin Jen-Shin2016-06-2048-160/+7256
| |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | feature/runner-lock-on-project * upstream/master: (353 commits) Put some admin settings in dropdown Add styleguide on configuration settings documentation Remove Duplicated keys add UNIQUE index to fingerprint Avoid autoload issue such as 'Mail::Parsers::AddressStruct' Move appearance settings as sub tab to application settings use rails root join fixed a couple of errors spotted in production Fix RangeError exceptions when referring to issues or merge requests outside of max database values Fix bug in `WikiLinkFilter`. Grammar and typographic changes to artifacts documentation Tweak grammar Small frontend code fixes and restore 8a2d88f commit Warn about admin privilege to disable GitHub Webhooks Listing GH Webhooks doesn't stop import process for non GH admin users fixup! updated docs for api endpoint award emoji Update CHANGELOG Ensure Todos counters doesn't count Todos for projects pending delete Add endpoints for award emoji on notes Sort API endpoints and implement feedback Add endpoints for Award Emoji ...
| * | | | | | Rename according to:Lin Jen-Shin2016-06-201-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12563922 For clarification and consistency
| * | | | | | Test for enabling/disabling runners from admin runner pageLin Jen-Shin2016-06-171-0/+34
| | | | | | |
| * | | | | | Merge remote-tracking branch 'upstream/master' into ↵Lin Jen-Shin2016-06-1796-307/+3542
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | feature/runner-lock-on-project * upstream/master: (337 commits) Update CHANGELOG for !4659 Center the header logo for all Devise emails Add previews for all customized Devise emails Customize the Devise `unlock_instructions` email Customize the Devise `reset_password_instructions` email Customize the Devise `password_change` emails Use gitlab-git 10.2.0 Use Git cached counters on project show page Fix indentation scss-lint errors Added title attribute to enties in tree view Closes #18353 Banzai::Filter::ExternalLinkFilter use XPath Reduce queries in IssueReferenceFilter Use gitlab_git 10.1.4 Fixed ordering in Project.find_with_namespace Fix images in emails Banzai::Filter::UploadLinkFilter use XPath Turn Group#owners into a has_many association Make project_id nullable CHANGELOG [ci skip] CHANGELOG [ci skip] ...
| * | | | | | | Use active tense, feedback from:test-merge-request-4093Lin Jen-Shin2016-06-161-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12501303
| * | | | | | | blank line between setup and expectation, feedback:Lin Jen-Shin2016-06-161-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093/diffs#note_12501266 and: https://robots.thoughtbot.com/four-phase-test
| * | | | | | | Adopt the rename from ci_commits to ci_pipelinesLin Jen-Shin2016-06-152-2/+2
| | | | | | | |
| * | | | | | | Merge branch 'prefer-assign_to' into feature/runner-lock-on-projectLin Jen-Shin2016-06-141-1/+1
| |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * prefer-assign_to: Give 409 Conflict whenever the runner was already enabled We're checking return value rather than rescuing exceptions Prefer Runner#assign_to instead of creating directly
| | * | | | | | | Give 409 Conflict whenever the runner was already enabledprefer-assign_toLin Jen-Shin2016-06-141-1/+1
| | | | | | | | |
| * | | | | | | | Merge branch 'master' into feature/runner-lock-on-projectLin Jen-Shin2016-06-1452-236/+1211
| |\ \ \ \ \ \ \ \ | | |/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * master: (147 commits) Update CHANGELOG Remove deprecated issues_tracker and issues_tracker_id from project Schema doesn’t reflect the changes of the last 3 migrations Revert CHANGELOG Also rename "find" in the specs Change to new Notes styleguide Add guide on changing a document's location Change logs.md location in README Move logs/logs.md to administration/logs.md Make "four phase test" Only show branches for revert / cherry-pick Instrument all Banzai::ReferenceParser classes Removed old comment from update_column_in_batches Update columns in batches until no rows are left Remove counters from Pipeline navigation Handle NULL migration errors in migration helpers Fix typo causing related branches to Error 500 Improved SVG sanitizer specs to include smoke tests for clean. Refactored SVG sanitizer Added SVG sanitizer fix to the changelog ...
| * | | | | | | | Avoid enabling locked runners. Give 403 in this caseLin Jen-Shin2016-06-141-2/+14
| | | | | | | | |
| * | | | | | | | Rename specific_for to available_for:Lin Jen-Shin2016-06-141-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Feedback from: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12413950
| * | | | | | | | Extra tests inside shared_examples:Lin Jen-Shin2016-06-091-13/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Feedback from: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12321421 The advantage of this is that tests are less about logic and more straightforward, thus could be easier to reason about each individual tests. The disadvantage of this is that we write more duplicated codes and once something changed we might need to change all places and it's harder to reason all tests as a whole. Because now we need to look at more places to figure out how it should work under another option!
| * | | | | | | | Remove Build#can_be_served? and rename Runner#can_serve? to can_pick?Lin Jen-Shin2016-06-092-117/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This also moves tests from build_spec.rb to runner_spec.rb
| * | | | | | | | Prefer string for describe, feedback from:Lin Jen-Shin2016-06-091-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12321029
| * | | | | | | | Use block for before/after as we preferredLin Jen-Shin2016-06-091-22/+67
| | | | | | | | |
| * | | | | | | | Prefer attributes_for_keys so that it ignores nilsLin Jen-Shin2016-06-091-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also add a test for setting locked.
| * | | | | | | | Prefer do and end for before/after:Lin Jen-Shin2016-06-091-11/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Feedback: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4404#note_12217415
| * | | | | | | | Introduced Ci::Runner.specific_for for getting specific runners:Lin Jen-Shin2016-06-091-0/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for a particular project.
| * | | | | | | | Implement the logic for locking runnerLin Jen-Shin2016-06-091-2/+53
| | | | | | | | |
* | | | | | | | | Unify check branch name existPaco Guzman2016-06-201-1/+1
| |_|_|_|/ / / / |/| | | | | | |
* | | | | | | | Merge branch 'async-refs-dropdown' into 'master' Jacob Schatz2016-06-203-48/+25
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Refs dropdown is now loaded async ## What does this MR do? The refs dropdown is loaded async so not to block the page. ## What are the relevant issue numbers? Part of #18202 ## Screenshots (if relevant) ![Screen_Shot_2016-06-07_at_14.41.21](/uploads/8fea12655f96fe7f7008a32677bff037/Screen_Shot_2016-06-07_at_14.41.21.png) See merge request !4508
| * | | | | | | | Fixed issue with returning ref in commits JSONasync-refs-dropdownPhil Hughes2016-06-201-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added tests to project controller
| * | | | | | | | Correctly adds commit ID into dropdownPhil Hughes2016-06-181-45/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removes un-used method Fixes other Ruby issues
| * | | | | | | | Tests fix for ref switcherPhil Hughes2016-06-181-3/+5
| | | | | | | | |
* | | | | | | | | Merge branch '18757-fix' into 'master' Stan Hu2016-06-201-14/+47
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fallback to group's owners/masters when a project has none for the "access requested email" ## What does this MR do? From b31c5052f9acf5d9118b2b81b556199279e7ca30: Fallback to group's owners/masters when a project has none A project in a group can have no explicit owners/masters, in that case we fallbacks to the group's owners/masters. ## Are there points in the code the reviewer needs to double check? No. ## Why was this MR needed? Because of #18757. ## What are the relevant issue numbers? Fixes #18757. ## Does this MR meet the acceptance criteria? - [x] No need for CHANGELOG. - [x] No need for documentation. - [x] No API support added. - [x] Tests - [x] Added for this feature/bug - [x] All builds are passing - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !4791
| * | | | | | | | | Fallback to group's owners/masters when a project has none18757-fixRémy Coutable2016-06-201-14/+47
| | |_|_|_|_|_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A project in a group can have no explicit owners/masters, in that case we fallbacks to the group's owners/masters. Signed-off-by: Rémy Coutable <remy@rymai.me>
* | | | | | | | | Merge branch 'markdowner' into 'master' Jacob Schatz2016-06-202-7/+8
|\ \ \ \ \ \ \ \ \ | |_|_|_|_|_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | POC: Markdown shortcut buttons ## What does this MR do? Adds markdown shortcut buttons to text area for comments. ## Are there points in the code the reviewer needs to double check? Because changing `textarea.val('something')` kills the natural browser undo stack, I had to implement a custom undo stack using state. You can't use the "undoable" state undo pattern because you need to go back to a previous state regardless of cursor position. The undo also adds an undo history item once you delete stuff or press enter. You can also edit multiple textareas at once and it will keep an undo history for each textarea individually, so the undo state should not collide between textareas. ## Why was this MR needed? It has been requested multiple times and the competition has it. https://gitlab.com/gitlab-org/gitlab-ce/issues/17185#note_12073433 Libraries are available that already implement this functionality but they are enormous and bloaty. I implemented this in very few lines of code and kept it very simple and as minimal as possible. This was also some competitions approach. I believe so as to not include too much JS. Adding extra buttons with new functionality **should only need new HTML and no new JS**. Only extra complex thing was adding a overridden undo stack, which was made as simple as possible as well. ## What are the relevant issue numbers? https://gitlab.com/gitlab-org/gitlab-ce/issues/17185#note_12073433 ## Screenshots (if relevant) **NOTE:** One thing you cannot see in this screenshot is that I am pressing <kbd>Cmd</kbd><kbd>Z</kbd> to undo and <kbd>Cmd</kbd><kbd>Shift</kbd><kbd>Z</kbd> to redo which is the undo/redo stack I implemented. <kbd>Ctrl</kbd><kbd>Y</kbd> also works for redo. ![markdown-editor](/uploads/2517bfb1a7b4269da7fcc4003c88b7f6/markdown-editor.gif) cc @dzaporozhets for UI cc @iamphill @alfredo1 for JS review cc @JobV if you like the idea. Fixes: #17185 See merge request !4305