import { extend } from 'flarum/extend'; import TextEditor from 'flarum/components/TextEditor'; import icon from 'flarum/helpers/icon'; let MarkdownArea; if (window.Reflect) { require('@webcomponents/custom-elements'); require('@github/markdown-toolbar-element'); MarkdownArea = require('mdarea/mdarea.js'); } app.initializers.add('flarum-markdown', function(app) { if (!MarkdownArea) return; let index = 1; extend(TextEditor.prototype, 'init', function() { this.textareaId = 'textarea'+(index++); }); extend(TextEditor.prototype, 'view', function(vdom) { vdom.children[0].attrs.id = this.textareaId; }); extend(TextEditor.prototype, 'configTextarea', function(value, element, isInitialized, context) { if (isInitialized) return; const editor = new MarkdownArea(element); editor.disableInline(); context.onunload = function() { editor.destroy(); }; }); extend(TextEditor.prototype, 'toolbarItems', function(items) { const attrs = { className: 'Button Button--icon Button--link', config: elm => $(elm).tooltip() }; const tooltip = name => app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`); items.add('markdown', ( {icon('fas fa-heading')} '} {...attrs}>{icon('fas fa-bold')} '} {...attrs}>{icon('fas fa-italic')} {icon('fas fa-quote-left')} {icon('fas fa-code')} '} {...attrs}>{icon('fas fa-link')} {icon('fas fa-list-ul')} {icon('fas fa-list-ol')} ), 100); }); });