Skip to content

POC: Markdown shortcut buttons

Jacob Schatz requested to merge markdowner into master

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 CmdZ to undo and CmdShiftZ to redo which is the undo/redo stack I implemented. CtrlY also works for redo. markdown-editor

cc @dzaporozhets for UI

cc @iamphill @alfredo1 for JS review

cc @JobV if you like the idea.

Fixes: #17185 (closed)

Merge request reports