diff --git a/extensions/markdown/js/src/forum/index.js b/extensions/markdown/js/src/forum/index.js index 3eaba049b..95057ff08 100644 --- a/extensions/markdown/js/src/forum/index.js +++ b/extensions/markdown/js/src/forum/index.js @@ -9,11 +9,10 @@ import { extend, override } from 'flarum/extend'; import TextEditor from 'flarum/components/TextEditor'; -import BasicEditorDriver from 'flarum/utils/BasicEditorDriver'; -import MarkdownArea from 'mdarea'; import MarkdownToolbar from './components/MarkdownToolbar'; import MarkdownButton from './components/MarkdownButton'; +import MarkdownAreaEditorDriver from './util/MarkdownAreaEditorDriver'; let shortcutHandler = () => { }; @@ -24,31 +23,13 @@ app.initializers.add('flarum-markdown', function (app) { this.textareaId = 'textarea' + (index++); }); + override(TextEditor.prototype, 'buildEditor', function (_, dom) { + return new MarkdownAreaEditorDriver(dom, this.buildEditorParams()); + }); + extend(TextEditor.prototype, 'buildEditorParams', function (params) { params.textareaId = this.textareaId; - }); - - extend(BasicEditorDriver.prototype, 'build', function (_, dom, params) { - this.el.id = params.textareaId; - - // We can't bind shortcutHandler directly in case `build` - // runs before MarkdownToolbar's `oninit`. - this.el.addEventListener('keydown', function (e) { - return shortcutHandler(...arguments); - }); - - this.mdarea = new MarkdownArea(this.el, { - keyMap: { - indent: ['Ctrl+m'], - outdent: ['Ctrl+M'], - inline: [] - } - }); - }); - - override(BasicEditorDriver.prototype, 'destroy', function (original) { - this.mdarea.destroy(); - original(); + params.shortcutHandler = shortcutHandler; }); extend(TextEditor.prototype, 'toolbarItems', function (items) { diff --git a/extensions/markdown/js/src/forum/util/MarkdownAreaEditorDriver.js b/extensions/markdown/js/src/forum/util/MarkdownAreaEditorDriver.js new file mode 100644 index 000000000..0fb835671 --- /dev/null +++ b/extensions/markdown/js/src/forum/util/MarkdownAreaEditorDriver.js @@ -0,0 +1,28 @@ +import MarkdownArea from 'mdarea'; +import BasicEditorDriver from 'flarum/utils/BasicEditorDriver'; + +export default class MarkdownAreaEditorDriver extends BasicEditorDriver { + build(dom, params) { + super.build(dom, params); + this.el.id = params.textareaId; + + // We can't bind shortcutHandler directly in case `build` + // runs before MarkdownToolbar's `oninit`. + this.el.addEventListener('keydown', function (e) { + return params.shortcutHandler(...arguments); + }); + + this.mdarea = new MarkdownArea(this.el, { + keyMap: { + indent: ['Ctrl+m'], + outdent: ['Ctrl+M'], + inline: [] + } + }); + } + + destroy() { + this.mdarea.destroy(); + super.destroy(); + } +}