• Jacob Schatz's avatar
    Merge branch 'markdowner' into 'master' · a0aaa6a0
    Jacob Schatz authored
    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
    a0aaa6a0
note_form.scss 3.67 KB