diff --git a/extensions/markdown/js/dist/forum.js.map b/extensions/markdown/js/dist/forum.js.map
index 44ed69261..094354d2e 100644
--- a/extensions/markdown/js/dist/forum.js.map
+++ b/extensions/markdown/js/dist/forum.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack://@flarum/markdown/webpack/bootstrap","webpack://@flarum/markdown/external \"flarum.core.compat['common/Component']\"","webpack://@flarum/markdown/external \"flarum.core.compat['extend']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/utils/BasicEditorDriver']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/utils/styleSelectedText']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/./src/forum/components/MarkdownToolbar.js","webpack://@flarum/markdown/./src/forum/components/MarkdownButton.js","webpack://@flarum/markdown/./src/forum/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","MarkdownToolbar","view","vnode","class","children","Component","MarkdownButton","oncreate","button","className","type","data-hotkey","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","prefix","suffix","trimFirst","multiline","surroundWithNewlines","blockPrefix","blockSuffix","replaceNext","scanFor","orderedList","applyStyle","id","styleSelectedText","app","composer","editor","el","makeShortcut","e","metaKey","ctrlKey","initializers","add","extend","BasicEditorDriver","items","TextEditor","tooltip","translator","trans","makeApplyStyle","for","textareaId","setShortcutHandler","handler","shortcutHandler"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['common/components/TextEditor'];","module.exports = flarum.core.compat['common/utils/BasicEditorDriver'];","module.exports = flarum.core.compat['common/utils/styleSelectedText'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/components/Tooltip'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return
\n {vnode.children}\n
;\n }\n}\n","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n );\n\n if (this.attrs.title) {\n return {button};\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport { extend } from 'flarum/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? '⌘' : 'ctrl';\n\nconst styles = {\n 'header': { prefix: '### ' },\n 'bold': { prefix: '**', suffix: '**', trimFirst: true },\n 'italic': { prefix: '_', suffix: '_', trimFirst: true },\n 'strikethrough': { prefix: '~~', suffix: '~~', trimFirst: true },\n 'quote': { prefix: '> ', multiline: true, surroundWithNewlines: true },\n 'code': { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n 'link': { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n 'image': { prefix: '![', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n 'unordered_list': { prefix: '- ', multiline: true, surroundWithNewlines: true },\n 'ordered_list': { prefix: '1. ', multiline: true, orderedList: true },\n 'spoiler': { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true }\n}\n\nconst applyStyle = (id) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(app.composer.editor.el, styles[id]);\n}\n\nfunction makeShortcut(id, key) {\n return function (e) {\n if (e.key === key && (e.metaKey && modifierKey === '⌘' || e.ctrlKey && modifierKey === 'ctrl')) {\n e.preventDefault();\n applyStyle(id);\n }\n }\n}\n\napp.initializers.add('flarum-markdown', function (app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b'));\n items.add('italic', makeShortcut('italic', 'i'));\n });\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n const tooltip = (name, hotkey) => {\n return app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n };\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id);\n }\n\n items.add('markdown', (\n shortcutHandler = handler}>\n \n \n \n \n \n \n \n \n \n \n \n \n ), 100);\n });\n});\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack://@flarum/markdown/webpack/bootstrap","webpack://@flarum/markdown/external \"flarum.core.compat['common/Component']\"","webpack://@flarum/markdown/external \"flarum.core.compat['extend']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/utils/BasicEditorDriver']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/utils/styleSelectedText']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/markdown/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/./src/forum/components/MarkdownToolbar.js","webpack://@flarum/markdown/./src/forum/components/MarkdownButton.js","webpack://@flarum/markdown/./src/forum/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","MarkdownToolbar","view","vnode","class","children","Component","MarkdownButton","oncreate","button","className","type","data-hotkey","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","header","prefix","bold","suffix","trimFirst","italic","strikethrough","quote","multiline","surroundWithNewlines","code","blockPrefix","blockSuffix","link","replaceNext","scanFor","image","unordered_list","ordered_list","orderedList","spoiler","applyStyle","id","styleSelectedText","app","composer","editor","el","makeShortcut","e","metaKey","ctrlKey","initializers","add","extend","BasicEditorDriver","items","TextEditor","tooltip","translator","trans","makeApplyStyle","for","textareaId","setShortcutHandler","handler","shortcutHandler"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['common/components/TextEditor'];","module.exports = flarum.core.compat['common/utils/BasicEditorDriver'];","module.exports = flarum.core.compat['common/utils/styleSelectedText'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/components/Tooltip'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return {vnode.children}
;\n }\n}\n","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n );\n\n if (this.attrs.title) {\n return {button};\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport { extend } from 'flarum/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? '⌘' : 'ctrl';\n\nconst styles = {\n header: { prefix: '### ' },\n bold: { prefix: '**', suffix: '**', trimFirst: true },\n italic: { prefix: '_', suffix: '_', trimFirst: true },\n strikethrough: { prefix: '~~', suffix: '~~', trimFirst: true },\n quote: { prefix: '> ', multiline: true, surroundWithNewlines: true },\n code: { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n link: { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n image: { prefix: '![', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n unordered_list: { prefix: '- ', multiline: true, surroundWithNewlines: true },\n ordered_list: { prefix: '1. ', multiline: true, orderedList: true },\n spoiler: { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true },\n};\n\nconst applyStyle = (id) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(app.composer.editor.el, styles[id]);\n};\n\nfunction makeShortcut(id, key) {\n return function (e) {\n if (e.key === key && ((e.metaKey && modifierKey === '⌘') || (e.ctrlKey && modifierKey === 'ctrl'))) {\n e.preventDefault();\n applyStyle(id);\n }\n };\n}\n\napp.initializers.add('flarum-markdown', function (app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b'));\n items.add('italic', makeShortcut('italic', 'i'));\n });\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n const tooltip = (name, hotkey) => {\n return app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n };\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id);\n };\n\n items.add(\n 'markdown',\n (shortcutHandler = handler)}>\n \n \n \n \n \n \n \n \n \n \n \n ,\n 100\n );\n });\n});\n"],"sourceRoot":""}
\ No newline at end of file