diff --git a/extensions/markdown/js/src/forum/index.js b/extensions/markdown/js/src/forum/index.js index 9ee2c8ab4..1cb9a8f46 100644 --- a/extensions/markdown/js/src/forum/index.js +++ b/extensions/markdown/js/src/forum/index.js @@ -8,13 +8,14 @@ */ import app from 'flarum/forum/app'; -import { extend } from 'flarum/common/extend'; +import { extend, override } from 'flarum/common/extend'; import TextEditor from 'flarum/common/components/TextEditor'; import BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver'; import styleSelectedText from 'flarum/common/utils/styleSelectedText'; import MarkdownToolbar from './components/MarkdownToolbar'; import MarkdownButton from './components/MarkdownButton'; +import ItemList from 'flarum/common/utils/ItemList'; const modifierKey = navigator.userAgent.match(/Macintosh/) ? '⌘' : 'ctrl'; @@ -48,35 +49,57 @@ function makeShortcut(id, key, editorDriver) { }; } +function markdownToolbarItems(oldFunc) { + const items = typeof oldFunc === 'function' ? oldFunc() : new ItemList(); + + function tooltip(name, hotkey) { + return app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : ''); + } + + const makeApplyStyle = (id) => { + return () => applyStyle(id, this.attrs.composer.editor); + }; + + items.add('header', , 1000); + items.add('bold', , 900); + items.add('italic', , 800); + items.add( + 'strikethrough', + , + 700 + ); + items.add('quote', , 600); + items.add('spoiler', , 500); + items.add('code', , 400); + items.add('link', , 300); + items.add('image', , 200); + items.add( + 'unordered_list', + , + 100 + ); + items.add('ordered_list', , 0); + + return items; +} + app.initializers.add('flarum-markdown', function (app) { extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) { items.add('bold', makeShortcut('bold', 'b', this)); items.add('italic', makeShortcut('italic', 'i', this)); }); + if (TextEditor.prototype.markdownToolbarItems) { + override(TextEditor.prototype, 'markdownToolbarItems', markdownToolbarItems); + } else { + TextEditor.prototype.markdownToolbarItems = markdownToolbarItems; + } + extend(TextEditor.prototype, 'toolbarItems', function (items) { - const tooltip = (name, hotkey) => { - return app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : ''); - }; - - const makeApplyStyle = (id) => { - return () => applyStyle(id, this.attrs.composer.editor); - }; - items.add( 'markdown', (shortcutHandler = handler)}> - - - - - - - - - - - + {this.markdownToolbarItems().toArray()} , 100 );