diff --git a/extensions/markdown/js/dist/forum.js b/extensions/markdown/js/dist/forum.js
index f43391f4c..ed937859e 100644
--- a/extensions/markdown/js/dist/forum.js
+++ b/extensions/markdown/js/dist/forum.js
@@ -1,11 +1,2 @@
-module.exports=function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=5)}([function(t,e){t.exports=flarum.core.compat.extend},function(t,e){t.exports=flarum.core.compat["components/TextEditor"]},function(t,e){t.exports=flarum.core.compat.Component},function(t,e,n){var i,r,l;"undefined"!=typeof self&&self,r=[],void 0===(l="function"==typeof(i=function(){var t=/mac|iphone|ipad|ipod/i.test(navigator.platform)?"metaKey":"ctrlKey",e=/[*_]/,n=/^[ \t]*(?:(?:[-+*]|\d+\.)[ \t]+(?:\[[ x]][ \t]+)?|>[ \t]*)*(?::[ \t]*)?/,i=/[-=\s"'`<>\[\](){}+*^$\\.|]$/,r=/(?:[-+*]|\d+\.)[ \t]+(?:\[[ x]][ \t]+)?$/,l=/^(?:\n|$)/,o=/[-+*\[\]x\d.]/g,s=/[^ \t]/g,a=/(\d+)\.(?=[ \t]+$)/,c=/(?:(?:^[ \t]+)?(?:[-+*]|\d+\.|[>:])(?:[ \t]+\[[ x]])?[ \t]*|^[ \t]+)$/,u=/^(?!$)/gm,f={"`":/^``$/m,"~":/^~~$/m},h={"[":"]","(":")","{":"}","<":">"},d={"]":"[",")":"(","}":"{",">":"<"},p={enter:["Enter","Shift+Enter"],indent:["Tab","Cmd+m"],outdent:["Shift+Tab","Cmd+Shift+m"],inline:['"',"'","`","*","_","[","]","(",")","{","}","<",">"]};function m(t,e){var n,i;this._options=((n=e)||(n={}),n.keyMap=function(t){t||(t={});var e={},n=[];for(var i in p)if(p.hasOwnProperty(i)){var r=t[i]||p[i];Array.isArray(r)||(r=r.toString().trim().split(/\s*[|,]\s*/g)),n.push.apply(n,r.map((function(t){return(t=v(t)).key in e||(e[t.key]=0),++e[t.key],{key:t,action:i}})))}return n.forEach((function(t){var n;1<e[t.key.key]&&("ctrlKey"in(n=t.key)||(n.ctrlKey=!1),"altKey"in n||(n.altKey=!1),"shiftKey"in n||(n.shiftKey=!1),"metaKey"in n||(n.metaKey=!1))})),n}(n.keyMap),n.indent=("number"!=typeof(i=n.indent||4)&&(i=(i+"").length),new Array(i+1).join(" ")),n),this._reOutdent=new RegExp("^"+this._options.indent,"mg"),this._handleKey=this._handleKey.bind(this),this.setElement(t)}function v(e){var n={};return e.trim().split(/\s*\+\s*/g).forEach((function(e){switch(e.toLowerCase()){case"cmd":n[t]=!0;break;case"ctrl":case"alt":case"shift":case"meta":n[e.toLowerCase()+"Key"]=!0;break;default:n.key=e}})),n}function y(t,e,n,i){if(t.value=e,t.selectionStart=n,t.selectionEnd=3<arguments.length?i:n,"InputEvent"in window)try{var r=new InputEvent("input");t.dispatchEvent(r)}catch(i){}}function g(t,e){return t.replace(e?s:o," ")}return m.prototype={constructor:m,getElement:function(){return this._elem},setElement:function(t){this._elem&&this._elem.removeEventListener("keydown",this._handleKey),(this._elem=t).addEventListener("keydown",this._handleKey)},getValue:function(){return this._elem.value},setValue:function(t){this._elem.value=t},destroy:function(){this._elem.removeEventListener("keydown",this._handleKey),this._elem=this._options=this._reOutdent=this._handleKey=null},_handleKey:function(t){if(!t.defaultPrevented){var o=this._options.keyMap.find((function(e){return function(t,e){for(var n in e)if(e.hasOwnProperty(n)&&t[n]!==e[n])return!1;return!0}(t,e.key)}));if(o){var s=this._elem.value.substring(0,this._elem.selectionStart),p=this._elem.value.substring(this._elem.selectionStart,this._elem.selectionEnd),m=this._elem.value.substring(this._elem.selectionEnd);switch(o.action){case"enter":!function(t,e,i,o,s,u){var f,d,p,m,v,x=i?null:(d=(f=e).lastIndexOf("\n")+1,{line:p=f.substring(d),offset:d,prefix:(m=n.exec(p))&&m[0]});if(i)e+="\n";else if(x.line&&x.line.charAt(x.line.length-1)in h){var b=x.prefix?g(x.prefix,!0):"";o="\n"+b+o,u||(e+="\n"+b+s)}else x.prefix?!u&&x.prefix===x.line&&l.test(o)?e=e.substring(0,x.offset)+x.prefix.replace(c,""):!u&&(v=x.prefix,r.test(v))?e+="\n"+x.prefix.replace(a,(function(t,e){return parseInt(e)+1+"."})):e+="\n"+g(x.prefix,u):e+="\n";y(t,e+o,e.length)}(this._elem,s,p,m,this._options.indent,t.shiftKey);break;case"indent":!function(t,e,n,i,r){var l=e.length,o=e.lastIndexOf("\n")+1;o<l&&(n=e.substring(o)+n,e=e.substring(0,o)),(o<l||!n)&&(l+=r.length),n?n=n.replace(u,r):e+=r,y(t,e+n+i,l,n?o+n.length:l)}(this._elem,s,p,m,this._options.indent);break;case"outdent":!function(t,e,n,i,r,l){var o=e.length,s=e.lastIndexOf("\n")+1;s<o&&(n=e.substring(s)+n,e=e.substring(0,s),n.substring(0,r.length)===r&&(o-=r.length)),y(t,e+(n=n.replace(l,""))+i,o,s+n.length)}(this._elem,s,p,m,this._options.indent,this._reOutdent);break;case"inline":v=this._elem,x=s,b=p,k=m,E=t.key,b||E in h||k.charAt(0)!==E?b||("'"!==E||i.test(x))&&!(E in d)?!b&&E in f&&f[E].test(x)?y(v,x+E+"language\n"+E+E+E+("\n"!==k.charAt(0)?"\n":"")+k,x.length+1,x.length+9):E===x.slice(-1)&&E===k.slice(0,1)?y(v,x.slice(0,-1)+b+k.slice(1),x.length-1,x.length-1+b.length):y(v,x+(d[E]||E)+b+(h[E]||E)+k,x.length+1,x.length+1+b.length):y(v,x+E+k,x.length+1):y(v,x+(e.test(E)?E+E:"")+k,x.length+1)}t.preventDefault()}}var v,x,b,k,E}},m})?i.apply(e,r):i)||(t.exports=l)},function(t,e){t.exports=flarum.core.compat["helpers/icon"]},function(t,e,n){"use strict";n.r(e);var i=n(0),r=n(1),l=n.n(r),o=n(3),s=n.n(o);function a(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var c=n(2),u=n.n(c),f=navigator.userAgent.match(/Macintosh/)?"Meta":"Control",h=function(t){function e(){return t.apply(this,arguments)||this}a(e,t);var n=e.prototype;return n.oncreate=function(e){t.prototype.oncreate.call(this,e),document.getElementById(this.attrs.for).addEventListener("keydown",this.shortcut.bind(this))},n.view=function(t){return m("div",{id:"MarkdownToolbar","data-for":this.attrs.for,style:{display:"inline-block"}},t.children)},n.shortcut=function(t){if(t.metaKey&&"Meta"===f||t.ctrlKey&&"Control"===f){var e=this.element.querySelector('[data-hotkey="'+t.key+'"]');e&&(e.click(),t.preventDefault())}},e}(u.a),d=n(4),p=n.n(d);function v(){return(v=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}var y=null;function g(t){return t.trim().split("\n").length>1}function x(t,e){return Array(e+1).join(t)}function b(t,e){for(var n=e;t[n]&&null!=t[n-1]&&!t[n-1].match(/\s/);)n--;return n}function k(t,e,n){for(var i=e,r=n?/\n/:/\s/;t[i]&&!t[i].match(r);)i++;return i}function E(t){var e,n,i=t.value.slice(0,t.selectionStart),r=t.value.slice(t.selectionEnd),l=i.match(/\n*$/),o=r.match(/^\n*/),s=l?l[0].length:0,a=o?o[0].length:0;return i.match(/\S/)&&s<2&&(e=x("\n",2-s)),r.match(/\S/)&&a<2&&(n=x("\n",2-a)),null==e&&(e=""),null==n&&(n=""),{newlinesToAppend:e,newlinesToPrepend:n}}var S=function(t,e){var n=e.prefix,i=e.suffix,r=e.blockPrefix,l=e.blockSuffix,o=e.replaceNext,s=e.prefixSpace,a=e.scanFor,c=e.surroundWithNewlines,u=t.selectionStart,f=t.selectionEnd,h=t.value.slice(t.selectionStart,t.selectionEnd),d=g(h)&&r.length>0?r+"\n":n,p=g(h)&&l.length>0?"\n"+l:i;if(s){var m=t.value[t.selectionStart-1];0===t.selectionStart||null==m||m.match(/\s/)||(d=" "+d)}h=function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(t.selectionStart===t.selectionEnd)t.selectionStart=b(t.value,t.selectionStart),t.selectionEnd=k(t.value,t.selectionEnd,i);else{var r=t.selectionStart-e.length,l=t.selectionEnd+n.length,o=t.value.slice(r,t.selectionStart)===e,s=t.value.slice(t.selectionEnd,l)===n;o&&s&&(t.selectionStart=r,t.selectionEnd=l)}return t.value.slice(t.selectionStart,t.selectionEnd)}(t,d,p,e.multiline);var v=t.selectionStart,y=t.selectionEnd,x=o.length>0&&p.indexOf(o)>-1&&h.length>0;if(c){var S=E(t);d=S.newlinesToAppend+n,p+=S.newlinesToPrepend}if(h.startsWith(d)&&h.endsWith(p)){var _=h.slice(d.length,h.length-p.length);if(u===f){var w=u-d.length;w=Math.max(w,v),v=y=w=Math.min(w,v+_.length)}else y=v+_.length;return{text:_,selectionStart:v,selectionEnd:y}}if(x)return a.length>0&&h.match(a)?{text:d+(p=p.replace(o,h)),selectionStart:v=y=v+d.length,selectionEnd:y}:{text:d+h+p,selectionStart:v=v+d.length+h.length+p.indexOf(o),selectionEnd:y=v+o.length};var O=d+h+p;v=u+d.length,y=f+d.length;var j=h.match(/^\s*|\s*$/g);if(e.trimFirst&&j){var K=j[0]||"",M=j[1]||"";O=K+d+h.trim()+p+M,v+=K.length,y-=M.length}return{text:O,selectionStart:v,selectionEnd:y}},_=function(t,e){var n,i=t.value.slice(t.selectionStart,t.selectionEnd);n=e.orderedList?function(t){var e,n,i,r,l=/^\d+\.\s+/,o=t.selectionStart===t.selectionEnd,s=t.value.slice(t.selectionStart,t.selectionEnd),a=s,c=s.split("\n");if(o){var u=t.value.slice(0,t.selectionStart).split(/\n/);i=t.selectionStart-u[u.length-1].length,r=k(t.value,t.selectionStart,!0),a=t.value.slice(i,r)}var f=a.split("\n");if(f.every((function(t){return l.test(t)}))){if(s=(c=f.map((function(t){return t.replace(l,"")}))).join("\n"),o&&i&&r){var h=f[0].length-c[0].length;n=e=t.selectionStart-h,t.selectionStart=i,t.selectionEnd=r}}else{s=(c=function(){var t,e,n,i=[];for(n=t=0,e=c.length;t<e;n=++t){var r=c[n];i.push(n+1+". "+r)}return i}()).join("\n");var d=E(t),p=d.newlinesToAppend,m=d.newlinesToPrepend;e=(n=t.selectionStart+p.length)+s.length,o&&(n=e),s=p+s+m}return{text:s,selectionStart:n,selectionEnd:e}}(t):e.multiline&&g(i)?function(t,e){var n=e.prefix,i=e.suffix,r=e.surroundWithNewlines,l=t.value.slice(t.selectionStart,t.selectionEnd),o=t.selectionStart,s=t.selectionEnd,a=l.split("\n");if(a.every((function(t){return t.startsWith(n)&&t.endsWith(i)})))s=o+(l=a.map((function(t){return t.slice(n.length,t.length-i.length)})).join("\n")).length;else if(l=a.map((function(t){return n+t+i})).join("\n"),r){var c=E(t),u=c.newlinesToAppend,f=c.newlinesToPrepend;s=(o+=u.length)+l.length,l=u+l+f}return{text:l,selectionStart:o,selectionEnd:s}}(t,e):S(t,e),function(t,e){var n=e.text,i=e.selectionStart,r=e.selectionEnd,l=t.selectionStart,o=t.value.slice(0,l),s=t.value.slice(t.selectionEnd);if(null===y||!0===y){t.contentEditable="true";try{y=document.execCommand("insertText",!1,n)}catch(t){y=!1}t.contentEditable="false"}if(y&&!t.value.slice(0,t.selectionStart).endsWith(n)&&(y=!1),!y){try{document.execCommand("ms-beginUndoUnit")}catch(t){}t.value=o+n+s;try{document.execCommand("ms-endUndoUnit")}catch(t){}var a=document.createEvent("Event");a.initEvent("input",!0,!0),t.dispatchEvent(a)}null!=i&&null!=r?t.setSelectionRange(i,r):t.setSelectionRange(l,t.selectionEnd)}(t,n)},w=navigator.userAgent.match(/Macintosh/)?"⌘":"ctrl",O=function(t){function e(){return t.apply(this,arguments)||this}a(e,t);var n=e.prototype;return n.oncreate=function(e){t.prototype.oncreate.call(this,e),this.$().tooltip()},n.view=function(){return m("button",{className:"Button Button--icon Button--link",title:this.title(),"data-hotkey":this.attrs.hotkey,onclick:this.click.bind(this),onkeydown:this.keydown.bind(this)},p()(this.attrs.icon))},n.keydown=function(t){" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.click())},n.click=function(){return t=this.element,e=this.attrs.style,n=t.parentElement,i=v({},{prefix:"",suffix:"",blockPrefix:"",blockSuffix:"",multiline:!1,replaceNext:"",prefixSpace:!1,scanFor:"",surroundWithNewlines:!1,orderedList:!1,trimFirst:!1},e),void((r=document.getElementById(n.dataset.for))&&(r.focus(),_(r,i)));var t,e,n,i,r},n.title=function(){var t=this.attrs.title;return this.attrs.hotkey&&(t+=" <"+w+"-"+this.attrs.hotkey+">"),t},e}(u.a);
-/*!
- * Includes modified code from GitHub Markdown Toolbar Element
- * https://github.com/github/markdown-toolbar-element/
- *
- * Original Copyright GitHub, Inc.
- * Released under the MIT license
- * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE
- */
-app.initializers.add("flarum-markdown",(function(t){var e=1;Object(i.extend)(l.a.prototype,"oninit",(function(){this.textareaId="textarea"+e++})),Object(i.extend)(l.a.prototype,"view",(function(t){t.children[0].attrs.id=this.textareaId})),Object(i.extend)(l.a.prototype,"oncreate",(function(){this.editor=new s.a(this.$("textarea")[0],{keyMap:{indent:["Ctrl+m"],outdent:["Ctrl+M"],inline:[]}})})),Object(i.extend)(l.a.prototype,"onremove",(function(){this.editor.destroy()})),Object(i.extend)(l.a.prototype,"toolbarItems",(function(e){var n=function(e){return t.translator.trans("flarum-markdown.forum.composer."+e+"_tooltip")};e.add("markdown",m(h,{for:this.textareaId},m(O,{title:n("header"),icon:"fas fa-heading",style:{prefix:"### "}}),m(O,{title:n("bold"),icon:"fas fa-bold",style:{prefix:"**",suffix:"**",trimFirst:!0},hotkey:"b"}),m(O,{title:n("italic"),icon:"fas fa-italic",style:{prefix:"_",suffix:"_",trimFirst:!0},hotkey:"i"}),m(O,{title:n("quote"),icon:"fas fa-quote-left",style:{prefix:"> ",multiline:!0,surroundWithNewlines:!0}}),m(O,{title:n("code"),icon:"fas fa-code",style:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"}}),m(O,{title:n("link"),icon:"fas fa-link",style:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"}}),m(O,{title:n("image"),icon:"fas fa-image",style:{prefix:"![",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"}}),m(O,{title:n("unordered_list"),icon:"fas fa-list-ul",style:{prefix:"- ",multiline:!0,surroundWithNewlines:!0}}),m(O,{title:n("ordered_list"),icon:"fas fa-list-ol",style:{prefix:"1. ",multiline:!0,orderedList:!0}})),100)}))}))}]);
+module.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=flarum.core.compat.extend},function(e,t){e.exports=flarum.core.compat.Component},function(e,t){e.exports=flarum.core.compat["components/TextEditor"]},function(e,t){e.exports=flarum.core.compat["utils/BasicEditorDriver"]},function(e,t,n){e.exports=function(){"use strict";const e=/^[ \t]*(?:(?:[-+*]|\d+\.)[ \t]+(?:\[[ x]][ \t]+)?|>[ \t]*)*(?::[ \t]*)?/,t=/(?:[-+*]|\d+\.)[ \t]+(?:\[[ x]][ \t]+)?$/,n=/[-+*\[\]x\d.]/g,i=/[^ \t]/g,r=/(\d+)\.(?=[ \t]+$)/,o=/(?:(?:^[ \t]+)?(?:[-+*]|\d+\.|[>:])(?:[ \t]+\[[ x]])?[ \t]*|^[ \t]+)$/,l=/[*_]/,s=/[-=\s"'`<>\[\](){}+*^$\\.|]$/,c=/^(?:\n|$)/,a=/^(?!$)/gm,u={"`":/^``$/m,"~":/^~~$/m},d={"[":"]","(":")","{":"}","<":">"},f={"]":"[",")":"(","}":"{",">":"<"},h={enter:(n,i,l,s,a)=>{const u=l?null:function(t){const n=t.lastIndexOf("\n")+1,i=t.substring(n),r=e.exec(i);return{line:i,offset:n,prefix:r&&r[0]}}(i);if(u)if(u.line&&u.line.charAt(u.line.length-1)in d){const e=u.prefix?y(u.prefix,!0):"";s="\n"+e+s,a.shiftKey||(i+="\n"+e+n.indent)}else u.prefix?!a.shiftKey&&u.prefix===u.line&&c.test(s)?i=i.substring(0,u.offset)+function(e){return e.replace(o,"")}(u.prefix):!a.shiftKey&&function(e){return t.test(e)}(u.prefix)?i+="\n"+function(e){return e.replace(r,(function(e,t){return parseInt(t)+1+"."}))}(u.prefix):i+="\n"+y(u.prefix,a.shiftKey):i+="\n";else i+="\n";return{v:i+s,s:i.length}},indent:(e,t,n,i)=>{let r=t.length,o=t.lastIndexOf("\n")+1;return o<r&&(n=t.substring(o)+n,t=t.substring(0,o)),(o<r||!n)&&(r+=e.indent.length),n?n=n.replace(a,e.indent):t+=e.indent,{v:t+n+i,s:r,e:n?o+n.length:r}},outdent:(e,t,n,i)=>{let r=t.length,o=t.lastIndexOf("\n")+1;return o<r&&(n=t.substring(o)+n,t=t.substring(0,o),n.substring(0,e.indent.length)===e.indent&&(r-=e.indent.length)),{v:t+(n=n.replace(e.reOutdent,""))+i,s:r,e:o+n.length}},inline:(e,t,n,i,r)=>n||r.key in d||i.charAt(0)!==r.key?n||("'"!==r.key||s.test(t))&&!(r.key in f)?!n&&r.key in u&&u[r.key].test(t)?{v:t+r.key+"language\n"+r.key+r.key+r.key+("\n"!==i.charAt(0)?"\n":"")+i,s:t.length+1,e:t.length+9}:r.key===t.slice(-1)&&r.key===i.slice(0,1)?{v:t.slice(0,-1)+n+i.slice(1),s:t.length-1,e:t.length-1+n.length}:{v:t+(f[r.key]||r.key)+n+(d[r.key]||r.key)+i,s:t.length+1,e:t.length+1+n.length}:{v:t+r.key+i,s:t.length+1}:{v:t+(l.test(r.key)?r.key+r.key:"")+i,s:t.length+1}};class p{constructor(e){this.options=e}handleKey(e,t,n,i){const r=this.options.keyMap.find(e=>function(e,t){for(const n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}(i,e.key));if(r&&h[r.action])return h[r.action](this.options,e,t,n,i)}}function y(e,t){return e.replace(t?i:n," ")}const m=/mac|iphone|ipad|ipod/i.test(navigator.platform),v=/firefox/i.test(navigator.userAgent),x=m?"metaKey":"ctrlKey",g={enter:["Enter","Shift+Enter"],indent:["Tab","Cmd+m"],outdent:["Shift+Tab","Cmd+Shift+m"],inline:['"',"'","`","*","_","[","]","(",")","{","}","<",">"]};function k(e={}){const t={},n=[];for(let i in g)if(g.hasOwnProperty(i)){let r=e[i]||g[i];Array.isArray(r)||(r=r.toString().trim().split(/\s*[|,]\s*/g)),n.push.apply(n,r.map(e=>{const n=b(e);return n.key in t||(t[n.key]=0),++t[n.key],{key:n,action:i}}))}return n.forEach(e=>{var n;t[e.key.key]>1&&("ctrlKey"in(n=e.key)||(n.ctrlKey=!1),"altKey"in n||(n.altKey=!1),"shiftKey"in n||(n.shiftKey=!1),"metaKey"in n||(n.metaKey=!1))}),n}function b(e){const t={};return e.trim().split(/\s*\+\s*/g).forEach((function(e){switch(e.toLowerCase()){case"cmd":t[x]=!0;break;case"ctrl":case"alt":case"shift":case"meta":t[e.toLowerCase()+"Key"]=!0;break;default:t.key=e}})),t}function E(){const e=document.createElement("div");return e.setAttribute("aria-hidden","true"),e.tabIndex=-1,e.contentEditable=!0,e.textContent="0",e.addEventListener("focus",()=>setTimeout(()=>e.blur(),0)),e.style.position="fixed",e.style.overflow="hidden",e.style.left="-1000px",e.style.top="50%",e.style.width=e.style.height="1px",e.style.opacity="0",e}function S(e,t=!1){return{s:e.selectionStart,e:e.selectionEnd,x:e.scrollLeft,y:e.scrollTop,v:e.value.replace(/\u00A0/g," "),c:t}}function w(e,t){e.lock=!0;const n=void 0===t.e?t.s:t.e,i=void 0===t.x?e.elem.scrollLeft:t.x,r=void 0===t.y?e.elem.scrollTop:t.y;T(e,{...t,e:n,x:i,y:r,c:!0},!0),e.lock=!1}function O(e,t){if(!e.elem||t.defaultPrevented)return;if(v&&t[x]&&"z"===t.key)return void e.elem.blur();const n=S(e.elem),i=n.v.substring(0,n.s),r=n.v.substring(n.s,n.e),o=n.v.substring(n.e);for(let n=0,l=e.options.extensions.length;n<l;n++){const l=e.options.extensions[n].handleKey(i,r,o,t);if(l){t.preventDefault(),w(e,l);break}}}function j(e,t){if(e.lock||"insertFromPaste"===t.type)return;e.lock=!0;const n=S(e.elem);document.execCommand("undo"),T(e,n),e.lock=!1}function K(e){e.lock||(e.lock=!0,e.idx=+(e.helper.textContent||"0"),e.state=e.history[e.idx],P(e.elem,e.state),e.lock=!1)}function C(e){e.helper.textContent="0",e.state=S(e.elem),e.history=[e.state],e.idx=0}function T(e,t,n=!1){(e.idx<1||n&&!e.state.c)&&A(e,S(e.elem,!0)),e.state.c?function(e,t){e.history.splice(++e.idx,e.history.length,t),e.state=t,e.helper.focus(),document.execCommand("selectAll"),document.execCommand("insertText",!1,e.idx.toString())}(e,t):A(e,t),P(e.elem,e.state)}function A(e,t){Object.assign(e.state,t)}function P(e,t){e.value=t.v,e.selectionStart=t.s,e.selectionEnd=t.e,e.scrollTo(t.x,t.y),e.focus()}class I{constructor(e,t){const n=function(e={}){const t=function(e=4){return"number"!=typeof e&&(e=(e+"").length),new Array(e+1).join(" ")}(e.indent),n={indent:t,reOutdent:new RegExp("^"+t,"mg"),keyMap:k(e.keyMap),extensions:e.extensions||[]};return n.extensions.push(new p(n)),n}(t),i=this.ed={elem:e,options:n,helper:E(),history:[],state:void 0,idx:-1,lock:!1};i.onKeyDown=O.bind(null,i),i.onInput=j.bind(null,i),i.onUndo=K.bind(null,i),i.helper.addEventListener("input",i.onUndo),document.body.appendChild(i.helper),this.setElement(e)}getElement(){return this.ed.elem}setElement(e){this.ed.elem&&(this.ed.options.extensions.forEach(e=>e.cleanup&&e.cleanup(this)),this.ed.elem.removeEventListener("input",this.ed.onInput),this.ed.elem.removeEventListener("keydown",this.ed.onKeyDown)),this.ed.elem=e,e.addEventListener("keydown",this.ed.onKeyDown),e.addEventListener("input",this.ed.onInput),C(this.ed),this.ed.options.extensions.forEach(e=>e.init&&e.init(this))}getValue(){return this.ed.elem.value.replace(/\u00A0/g," ")}setValue(e,t=!1){this.ed.elem.value=e,t||C(this.ed)}pushState(e){w(this.ed,e)}destroy(){return this.ed.options.extensions.forEach(e=>e.cleanup&&e.cleanup(this)),this.ed.elem.removeEventListener("keydown",this.ed.onKeyDown),this.ed.elem.removeEventListener("input",this.ed.onInput),this.ed.helper.removeEventListener("input",this.ed.onUndo),document.body.removeChild(this.ed.helper),this.ed.options.extensions.forEach(e=>e.destroy&&e.destroy()),Object.assign(this.ed,{elem:null,helper:null,options:null,reOutdent:null,onKeyDown:null,onInput:null,onUndo:null,history:null}),Object.assign(this,{ed:null}),null}}return function(e){e.version="v2.0.9"}(I||(I={})),I}()},function(e,t){e.exports=flarum.core.compat["helpers/icon"]},function(e,t,n){"use strict";n.r(t);var i=n(0),r=n(2),o=n.n(r),l=n(3),s=n.n(l),c=n(4),a=n.n(c);function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var d=n(1),f=n.n(d),h=navigator.userAgent.match(/Macintosh/)?"Meta":"Control",p=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.oncreate=function(t){e.prototype.oncreate.call(this,t),this.attrs.setShortcutHandler(this.shortcut.bind(this))},n.view=function(e){return m("div",{id:"MarkdownToolbar","data-for":this.attrs.for,style:{display:"inline-block"}},e.children)},n.shortcut=function(e){if(e.metaKey&&"Meta"===h||e.ctrlKey&&"Control"===h){var t=this.element.querySelector('[data-hotkey="'+e.key+'"]');t&&(t.click(),e.preventDefault())}},t}(f.a),y=n(5),v=n.n(y);function x(){return(x=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}var g=null;function k(e){return e.trim().split("\n").length>1}function b(e,t){return Array(t+1).join(e)}function E(e,t){for(var n=t;e[n]&&null!=e[n-1]&&!e[n-1].match(/\s/);)n--;return n}function S(e,t,n){for(var i=t,r=n?/\n/:/\s/;e[i]&&!e[i].match(r);)i++;return i}function w(e){var t,n,i=e.value.slice(0,e.selectionStart),r=e.value.slice(e.selectionEnd),o=i.match(/\n*$/),l=r.match(/^\n*/),s=o?o[0].length:0,c=l?l[0].length:0;return i.match(/\S/)&&s<2&&(t=b("\n",2-s)),r.match(/\S/)&&c<2&&(n=b("\n",2-c)),null==t&&(t=""),null==n&&(n=""),{newlinesToAppend:t,newlinesToPrepend:n}}var O=function(e,t){var n=t.prefix,i=t.suffix,r=t.blockPrefix,o=t.blockSuffix,l=t.replaceNext,s=t.prefixSpace,c=t.scanFor,a=t.surroundWithNewlines,u=e.selectionStart,d=e.selectionEnd,f=e.value.slice(e.selectionStart,e.selectionEnd),h=k(f)&&r.length>0?r+"\n":n,p=k(f)&&o.length>0?"\n"+o:i;if(s){var y=e.value[e.selectionStart-1];0===e.selectionStart||null==y||y.match(/\s/)||(h=" "+h)}f=function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.selectionStart===e.selectionEnd)e.selectionStart=E(e.value,e.selectionStart),e.selectionEnd=S(e.value,e.selectionEnd,i);else{var r=e.selectionStart-t.length,o=e.selectionEnd+n.length,l=e.value.slice(r,e.selectionStart)===t,s=e.value.slice(e.selectionEnd,o)===n;l&&s&&(e.selectionStart=r,e.selectionEnd=o)}return e.value.slice(e.selectionStart,e.selectionEnd)}(e,h,p,t.multiline);var m=e.selectionStart,v=e.selectionEnd,x=l.length>0&&p.indexOf(l)>-1&&f.length>0;if(a){var g=w(e);h=g.newlinesToAppend+n,p+=g.newlinesToPrepend}if(f.startsWith(h)&&f.endsWith(p)){var b=f.slice(h.length,f.length-p.length);if(u===d){var O=u-h.length;O=Math.max(O,m),m=v=O=Math.min(O,m+b.length)}else v=m+b.length;return{text:b,selectionStart:m,selectionEnd:v}}if(x)return c.length>0&&f.match(c)?{text:h+(p=p.replace(l,f)),selectionStart:m=v=m+h.length,selectionEnd:v}:{text:h+f+p,selectionStart:m=m+h.length+f.length+p.indexOf(l),selectionEnd:v=m+l.length};var j=h+f+p;m=u+h.length,v=d+h.length;var K=f.match(/^\s*|\s*$/g);if(t.trimFirst&&K){var C=K[0]||"",T=K[1]||"";j=C+h+f.trim()+p+T,m+=C.length,v-=T.length}return{text:j,selectionStart:m,selectionEnd:v}},j=function(e,t){var n,i=e.value.slice(e.selectionStart,e.selectionEnd);n=t.orderedList?function(e){var t,n,i,r,o=/^\d+\.\s+/,l=e.selectionStart===e.selectionEnd,s=e.value.slice(e.selectionStart,e.selectionEnd),c=s,a=s.split("\n");if(l){var u=e.value.slice(0,e.selectionStart).split(/\n/);i=e.selectionStart-u[u.length-1].length,r=S(e.value,e.selectionStart,!0),c=e.value.slice(i,r)}var d=c.split("\n");if(d.every((function(e){return o.test(e)}))){if(s=(a=d.map((function(e){return e.replace(o,"")}))).join("\n"),l&&i&&r){var f=d[0].length-a[0].length;n=t=e.selectionStart-f,e.selectionStart=i,e.selectionEnd=r}}else{s=(a=function(){var e,t,n,i=[];for(n=e=0,t=a.length;e<t;n=++e){var r=a[n];i.push(n+1+". "+r)}return i}()).join("\n");var h=w(e),p=h.newlinesToAppend,y=h.newlinesToPrepend;t=(n=e.selectionStart+p.length)+s.length,l&&(n=t),s=p+s+y}return{text:s,selectionStart:n,selectionEnd:t}}(e):t.multiline&&k(i)?function(e,t){var n=t.prefix,i=t.suffix,r=t.surroundWithNewlines,o=e.value.slice(e.selectionStart,e.selectionEnd),l=e.selectionStart,s=e.selectionEnd,c=o.split("\n");if(c.every((function(e){return e.startsWith(n)&&e.endsWith(i)})))s=l+(o=c.map((function(e){return e.slice(n.length,e.length-i.length)})).join("\n")).length;else if(o=c.map((function(e){return n+e+i})).join("\n"),r){var a=w(e),u=a.newlinesToAppend,d=a.newlinesToPrepend;s=(l+=u.length)+o.length,o=u+o+d}return{text:o,selectionStart:l,selectionEnd:s}}(e,t):O(e,t),function(e,t){var n=t.text,i=t.selectionStart,r=t.selectionEnd,o=e.selectionStart,l=e.value.slice(0,o),s=e.value.slice(e.selectionEnd);if(null===g||!0===g){e.contentEditable="true";try{g=document.execCommand("insertText",!1,n)}catch(e){g=!1}e.contentEditable="false"}if(g&&!e.value.slice(0,e.selectionStart).endsWith(n)&&(g=!1),!g){try{document.execCommand("ms-beginUndoUnit")}catch(e){}e.value=l+n+s;try{document.execCommand("ms-endUndoUnit")}catch(e){}var c=document.createEvent("Event");c.initEvent("input",!0,!0),e.dispatchEvent(c)}null!=i&&null!=r?e.setSelectionRange(i,r):e.setSelectionRange(o,e.selectionEnd)}(e,n)},K=navigator.userAgent.match(/Macintosh/)?"⌘":"ctrl",C=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.oncreate=function(t){e.prototype.oncreate.call(this,t),this.$().tooltip()},n.view=function(){return m("button",{className:"Button Button--icon Button--link",title:this.title(),"data-hotkey":this.attrs.hotkey,onclick:this.click.bind(this),onkeydown:this.keydown.bind(this)},v()(this.attrs.icon))},n.keydown=function(e){" "!==e.key&&"Enter"!==e.key||(e.preventDefault(),this.click())},n.click=function(){return e=this.element,t=this.attrs.style,n=e.parentElement,i=x({},{prefix:"",suffix:"",blockPrefix:"",blockSuffix:"",multiline:!1,replaceNext:"",prefixSpace:!1,scanFor:"",surroundWithNewlines:!1,orderedList:!1,trimFirst:!1},t),void((r=document.getElementById(n.dataset.for))&&(r.focus(),j(r,i)));var e,t,n,i,r},n.title=function(){var e=this.attrs.title;return this.attrs.hotkey&&(e+=" <"+K+"-"+this.attrs.hotkey+">"),e},t}(f.a),T=function(){};app.initializers.add("flarum-markdown",(function(e){var t=1;Object(i.extend)(o.a.prototype,"oninit",(function(){this.textareaId="textarea"+t++})),Object(i.extend)(o.a.prototype,"buildEditorParams",(function(e){e.textareaId=this.textareaId})),Object(i.extend)(s.a.prototype,"build",(function(e,t,n){this.el.id=n.textareaId,this.el.addEventListener("keydown",(function(e){return T.apply(void 0,arguments)})),this.mdarea=new a.a(this.el,{keyMap:{indent:["Ctrl+m"],outdent:["Ctrl+M"],inline:[]}})})),Object(i.override)(s.a.prototype,"destroy",(function(e){this.mdarea.destroy(),e()})),Object(i.extend)(o.a.prototype,"toolbarItems",(function(t){var n=function(t){return e.translator.trans("flarum-markdown.forum.composer."+t+"_tooltip")};t.add("markdown",m(p,{for:this.textareaId,setShortcutHandler:function(e){return T=e}},m(C,{title:n("header"),icon:"fas fa-heading",style:{prefix:"### "}}),m(C,{title:n("bold"),icon:"fas fa-bold",style:{prefix:"**",suffix:"**",trimFirst:!0},hotkey:"b"}),m(C,{title:n("italic"),icon:"fas fa-italic",style:{prefix:"_",suffix:"_",trimFirst:!0},hotkey:"i"}),m(C,{title:n("quote"),icon:"fas fa-quote-left",style:{prefix:"> ",multiline:!0,surroundWithNewlines:!0}}),m(C,{title:n("code"),icon:"fas fa-code",style:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"}}),m(C,{title:n("link"),icon:"fas fa-link",style:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"}}),m(C,{title:n("image"),icon:"fas fa-image",style:{prefix:"![",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"}}),m(C,{title:n("unordered_list"),icon:"fas fa-list-ul",style:{prefix:"- ",multiline:!0,surroundWithNewlines:!0}}),m(C,{title:n("ordered_list"),icon:"fas fa-list-ol",style:{prefix:"1. ",multiline:!0,orderedList:!0}})),100)}))}))}]);
 //# sourceMappingURL=forum.js.map
\ No newline at end of file
diff --git a/extensions/markdown/js/dist/forum.js.map b/extensions/markdown/js/dist/forum.js.map
index ef59ba8ec..381551942 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['extend']\"","webpack://@flarum/markdown/external \"flarum.core.compat['components/TextEditor']\"","webpack://@flarum/markdown/external \"flarum.core.compat['Component']\"","webpack://@flarum/markdown/./node_modules/mdarea/mdarea.min.js","webpack://@flarum/markdown/external \"flarum.core.compat['helpers/icon']\"","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/./src/forum/components/MarkdownToolbar.js","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/markdown/./src/forum/util/insertText.js","webpack://@flarum/markdown/./src/forum/util/styles.js","webpack://@flarum/markdown/./src/forum/util/apply.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","self","test","navigator","platform","u","f","y","g","_","v","k","enter","indent","outdent","inline","e","this","_options","keyMap","Array","isArray","toString","trim","split","push","apply","map","action","forEach","ctrlKey","altKey","shiftKey","metaKey","length","join","_reOutdent","RegExp","_handleKey","setElement","toLowerCase","b","selectionStart","selectionEnd","arguments","window","InputEvent","dispatchEvent","x","replace","constructor","getElement","_elem","removeEventListener","addEventListener","getValue","setValue","destroy","defaultPrevented","find","substring","a","h","lastIndexOf","line","offset","prefix","exec","charAt","parseInt","slice","preventDefault","_inheritsLoose","subClass","superClass","__proto__","modifierKey","userAgent","match","MarkdownToolbar","oncreate","vnode","document","getElementById","attrs","for","shortcut","view","id","data-for","style","display","children","event","button","element","querySelector","click","Component","_extends","assign","target","source","canInsertText","isMultipleLines","string","repeat","wordSelectionStart","text","index","wordSelectionEnd","multiline","breakpoint","newlinesToSurroundSelectedText","textarea","newlinesToAppend","newlinesToPrepend","beforeSelection","afterSelection","breaksBefore","breaksAfter","newlinesBeforeSelection","newlinesAfterSelection","blockStyle","arg","suffix","blockPrefix","blockSuffix","replaceNext","prefixSpace","scanFor","surroundWithNewlines","originalSelectionStart","originalSelectionEnd","selectedText","prefixToUse","suffixToUse","undefined","expandedSelectionStart","expandedSelectionEnd","beginsWithPrefix","endsWithSuffix","expandSelectedText","hasReplaceNext","indexOf","ref","startsWith","endsWith","replacementText","position","Math","max","min","whitespaceEdges","trimFirst","leadingWhitespace","trailingWhitespace","styleSelectedText","styleArgs","result","orderedList","startOfLine","endOfLine","orderedListRegex","noInitialSelection","textToUnstyle","lines","linesBefore","linesToUnstyle","every","lengthDiff","len","results","multilineStyle","before","after","contentEditable","execCommand","error","createEvent","initEvent","setSelectionRange","insertText","MarkdownButton","$","tooltip","className","title","data-hotkey","hotkey","onclick","onkeydown","keydown","icon","stylesToApply","toolbar","parentElement","field","dataset","focus","app","initializers","add","extend","TextEditor","textareaId","vdom","editor","MarkdownArea","items","translator","trans"],"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 = 5);\n","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/TextEditor'];","module.exports = flarum.core.compat['Component'];","!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&module.exports?module.exports=t():e.MarkdownArea=t()}(\"undefined\"!=typeof self?self:this,function(){var n=/mac|iphone|ipad|ipod/i.test(navigator.platform)?\"metaKey\":\"ctrlKey\",u=/[*_]/,d=/^[ \\t]*(?:(?:[-+*]|\\d+\\.)[ \\t]+(?:\\[[ x]][ \\t]+)?|>[ \\t]*)*(?::[ \\t]*)?/,f=/[-=\\s\"'`<>\\[\\](){}+*^$\\\\.|]$/,p=/(?:[-+*]|\\d+\\.)[ \\t]+(?:\\[[ x]][ \\t]+)?$/,y=/^(?:\\n|$)/,i=/[-+*\\[\\]x\\d.]/g,s=/[^ \\t]/g,m=/(\\d+)\\.(?=[ \\t]+$)/,g=/(?:(?:^[ \\t]+)?(?:[-+*]|\\d+\\.|[>:])(?:[ \\t]+\\[[ x]])?[ \\t]*|^[ \\t]+)$/,c=/^(?!$)/gm,_={\"`\":/^``$/m,\"~\":/^~~$/m},v={\"[\":\"]\",\"(\":\")\",\"{\":\"}\",\"<\":\">\"},k={\"]\":\"[\",\")\":\"(\",\"}\":\"{\",\">\":\"<\"},r={enter:[\"Enter\",\"Shift+Enter\"],indent:[\"Tab\",\"Cmd+m\"],outdent:[\"Shift+Tab\",\"Cmd+Shift+m\"],inline:['\"',\"'\",\"`\",\"*\",\"_\",\"[\",\"]\",\"(\",\")\",\"{\",\"}\",\"<\",\">\"]};function e(e,t){var n,i;this._options=((n=t)||(n={}),n.keyMap=function(e){e||(e={});var n={},t=[];for(var i in r)if(r.hasOwnProperty(i)){var s=e[i]||r[i];Array.isArray(s)||(s=s.toString().trim().split(/\\s*[|,]\\s*/g)),t.push.apply(t,s.map(function(e){return(e=l(e)).key in n||(n[e.key]=0),++n[e.key],{key:e,action:i}}))}return t.forEach(function(e){var t;1<n[e.key.key]&&(\"ctrlKey\"in(t=e.key)||(t.ctrlKey=!1),\"altKey\"in t||(t.altKey=!1),\"shiftKey\"in t||(t.shiftKey=!1),\"metaKey\"in t||(t.metaKey=!1))}),t}(n.keyMap),n.indent=(\"number\"!=typeof(i=n.indent||4)&&(i=(i+\"\").length),new Array(i+1).join(\" \")),n),this._reOutdent=new RegExp(\"^\"+this._options.indent,\"mg\"),this._handleKey=this._handleKey.bind(this),this.setElement(e)}function l(e){var t={};return e.trim().split(/\\s*\\+\\s*/g).forEach(function(e){switch(e.toLowerCase()){case\"cmd\":t[n]=!0;break;case\"ctrl\":case\"alt\":case\"shift\":case\"meta\":t[e.toLowerCase()+\"Key\"]=!0;break;default:t.key=e}}),t}function b(e,t,n,i){if(e.value=t,e.selectionStart=n,e.selectionEnd=3<arguments.length?i:n,\"InputEvent\"in window)try{var s=new InputEvent(\"input\");e.dispatchEvent(s)}catch(i){}}function x(e,t){return e.replace(t?s:i,\" \")}return e.prototype={constructor:e,getElement:function(){return this._elem},setElement:function(e){this._elem&&this._elem.removeEventListener(\"keydown\",this._handleKey),(this._elem=e).addEventListener(\"keydown\",this._handleKey)},getValue:function(){return this._elem.value},setValue:function(e){this._elem.value=e},destroy:function(){this._elem.removeEventListener(\"keydown\",this._handleKey),this._elem=this._options=this._reOutdent=this._handleKey=null},_handleKey:function(t){if(!t.defaultPrevented){var e=this._options.keyMap.find(function(e){return function(e,t){for(var n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}(t,e.key)});if(e){var n=this._elem.value.substring(0,this._elem.selectionStart),i=this._elem.value.substring(this._elem.selectionStart,this._elem.selectionEnd),s=this._elem.value.substring(this._elem.selectionEnd);switch(e.action){case\"enter\":!function(e,t,n,i,s,r){var l=n?null:(a=t,o=a.lastIndexOf(\"\\n\")+1,h=a.substring(o),u=d.exec(h),{line:h,offset:o,prefix:u&&u[0]});var a,o,h,u;if(n)t+=\"\\n\";else if(l.line&&l.line.charAt(l.line.length-1)in v){var f=l.prefix?x(l.prefix,!0):\"\";i=\"\\n\"+f+i,r||(t+=\"\\n\"+f+s)}else l.prefix?!r&&l.prefix===l.line&&y.test(i)?t=t.substring(0,l.offset)+l.prefix.replace(g,\"\"):!r&&(c=l.prefix,p.test(c))?t+=\"\\n\"+l.prefix.replace(m,function(e,t){return parseInt(t)+1+\".\"}):t+=\"\\n\"+x(l.prefix,r):t+=\"\\n\";var c;b(e,t+i,t.length)}(this._elem,n,i,s,this._options.indent,t.shiftKey);break;case\"indent\":!function(e,t,n,i,s){var r=t.length,l=t.lastIndexOf(\"\\n\")+1;l<r&&(n=t.substring(l)+n,t=t.substring(0,l));(l<r||!n)&&(r+=s.length);n?n=n.replace(c,s):t+=s;b(e,t+n+i,r,n?l+n.length:r)}(this._elem,n,i,s,this._options.indent);break;case\"outdent\":!function(e,t,n,i,s,r){var l=t.length,a=t.lastIndexOf(\"\\n\")+1;a<l&&(n=t.substring(a)+n,t=t.substring(0,a),n.substring(0,s.length)===s&&(l-=s.length));n=n.replace(r,\"\"),b(e,t+n+i,l,a+n.length)}(this._elem,n,i,s,this._options.indent,this._reOutdent);break;case\"inline\":r=this._elem,l=n,a=i,o=s,h=t.key,a||h in v||o.charAt(0)!==h?!a&&(\"'\"===h&&!f.test(l)||h in k)?b(r,l+h+o,l.length+1):!a&&h in _&&_[h].test(l)?b(r,l+h+\"language\\n\"+h+h+h+(\"\\n\"!==o.charAt(0)?\"\\n\":\"\")+o,l.length+1,l.length+9):h===l.slice(-1)&&h===o.slice(0,1)?b(r,l.slice(0,-1)+a+o.slice(1),l.length-1,l.length-1+a.length):b(r,l+(k[h]||h)+a+(v[h]||h)+o,l.length+1,l.length+1+a.length):b(r,l+(u.test(h)?h+h:\"\")+o,l.length+1)}t.preventDefault()}}var r,l,a,o,h}},e});\n//# sourceMappingURL=mdarea.min.map\n","module.exports = flarum.core.compat['helpers/icon'];","export default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}","import Component from 'flarum/Component';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'Meta' : 'Control';\n\nexport default class MarkdownToolbar extends Component {\n  oncreate(vnode) {\n    super.oncreate(vnode);\n\n    const field = document.getElementById(this.attrs.for);\n\n    field.addEventListener('keydown', this.shortcut.bind(this));\n  }\n\n  view(vnode) {\n    return <div id=\"MarkdownToolbar\" data-for={this.attrs.for} style={{ display: 'inline-block' }}>\n      {vnode.children}\n    </div>;\n  }\n\n  shortcut(event) {\n    if ((event.metaKey && modifierKey === 'Meta') || (event.ctrlKey && modifierKey === 'Control')) {\n      const button = this.element.querySelector(`[data-hotkey=\"${event.key}\"]`);\n\n      if (button) {\n        button.click();\n        event.preventDefault()\n      }\n    }\n  }\n}\n","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nexport let canInsertText = null;\n\nexport default (textarea, { text, selectionStart, selectionEnd }) => {\n  const originalSelectionStart = textarea.selectionStart;\n  const before = textarea.value.slice(0, originalSelectionStart);\n  const after = textarea.value.slice(textarea.selectionEnd);\n\n  if (canInsertText === null || canInsertText === true) {\n    textarea.contentEditable = 'true';\n    try {\n      canInsertText = document.execCommand('insertText', false, text);\n    }\n    catch (error) {\n      canInsertText = false;\n    }\n    textarea.contentEditable = 'false';\n  }\n  if (canInsertText && !textarea.value.slice(0, textarea.selectionStart).endsWith(text)) {\n    canInsertText = false;\n  }\n  if (!canInsertText) {\n    try {\n      document.execCommand('ms-beginUndoUnit');\n    }\n    catch (e) {\n      // Do nothing.\n    }\n    textarea.value = before + text + after;\n    try {\n      document.execCommand('ms-endUndoUnit');\n    }\n    catch (e) {\n      // Do nothing.\n    }\n\n    // fire custom event, works on IE\n    const event = document.createEvent('Event');\n\n    event.initEvent('input', true, true);\n\n    textarea.dispatchEvent(event);\n  }\n  if (selectionStart != null && selectionEnd != null) {\n    textarea.setSelectionRange(selectionStart, selectionEnd);\n  }\n  else {\n    textarea.setSelectionRange(originalSelectionStart, textarea.selectionEnd);\n  }\n};\n","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nexport function isMultipleLines(string) {\n  return string.trim().split('\\n').length > 1;\n}\n\nexport function repeat(string, n) {\n  return Array(n + 1).join(string);\n}\n\nexport function wordSelectionStart(text, i) {\n  let index = i;\n\n  while (text[index] && text[index - 1] != null && !text[index - 1].match(/\\s/)) {\n    index--;\n  }\n\n  return index;\n}\n\nexport function wordSelectionEnd(text, i, multiline) {\n  let index = i;\n  const breakpoint = multiline ? /\\n/ : /\\s/;\n\n  while (text[index] && !text[index].match(breakpoint)) {\n    index++;\n  }\n\n  return index;\n}\n\nexport function expandSelectedText(textarea, prefixToUse, suffixToUse) {\n  let multiline = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n  if (textarea.selectionStart === textarea.selectionEnd) {\n    textarea.selectionStart = wordSelectionStart(textarea.value, textarea.selectionStart);\n    textarea.selectionEnd = wordSelectionEnd(textarea.value, textarea.selectionEnd, multiline);\n  } else {\n    const expandedSelectionStart = textarea.selectionStart - prefixToUse.length;\n    const expandedSelectionEnd = textarea.selectionEnd + suffixToUse.length;\n    const beginsWithPrefix = textarea.value.slice(expandedSelectionStart, textarea.selectionStart) === prefixToUse;\n    const endsWithSuffix = textarea.value.slice(textarea.selectionEnd, expandedSelectionEnd) === suffixToUse;\n\n    if (beginsWithPrefix && endsWithSuffix) {\n      textarea.selectionStart = expandedSelectionStart;\n      textarea.selectionEnd = expandedSelectionEnd;\n    }\n  }\n\n  return textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n}\n\nexport function newlinesToSurroundSelectedText(textarea) {\n  const beforeSelection = textarea.value.slice(0, textarea.selectionStart);\n  const afterSelection = textarea.value.slice(textarea.selectionEnd);\n  const breaksBefore = beforeSelection.match(/\\n*$/);\n  const breaksAfter = afterSelection.match(/^\\n*/);\n  const newlinesBeforeSelection = breaksBefore ? breaksBefore[0].length : 0;\n  const newlinesAfterSelection = breaksAfter ? breaksAfter[0].length : 0;\n  let newlinesToAppend;\n  let newlinesToPrepend;\n\n  if (beforeSelection.match(/\\S/) && newlinesBeforeSelection < 2) {\n    newlinesToAppend = repeat('\\n', 2 - newlinesBeforeSelection);\n  }\n\n  if (afterSelection.match(/\\S/) && newlinesAfterSelection < 2) {\n    newlinesToPrepend = repeat('\\n', 2 - newlinesAfterSelection);\n  }\n\n  if (newlinesToAppend == null) {\n    newlinesToAppend = '';\n  }\n\n  if (newlinesToPrepend == null) {\n    newlinesToPrepend = '';\n  }\n\n  return {\n    newlinesToAppend,\n    newlinesToPrepend\n  };\n}\n\nexport const blockStyle = (textarea, arg) => {\n  let newlinesToAppend;\n  let newlinesToPrepend;\n  const { prefix, suffix, blockPrefix, blockSuffix, replaceNext, prefixSpace, scanFor, surroundWithNewlines } = arg;\n  const originalSelectionStart = textarea.selectionStart;\n  const originalSelectionEnd = textarea.selectionEnd;\n  let selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let prefixToUse = isMultipleLines(selectedText) && blockPrefix.length > 0 ? `${blockPrefix}\\n` : prefix;\n  let suffixToUse = isMultipleLines(selectedText) && blockSuffix.length > 0 ? `\\n${blockSuffix}` : suffix;\n\n  if (prefixSpace) {\n    const beforeSelection = textarea.value[textarea.selectionStart - 1];\n    if (textarea.selectionStart !== 0 && beforeSelection != null && !beforeSelection.match(/\\s/)) {\n      prefixToUse = ` ${prefixToUse}`;\n    }\n  }\n\n  selectedText = expandSelectedText(textarea, prefixToUse, suffixToUse, arg.multiline);\n  let selectionStart = textarea.selectionStart;\n  let selectionEnd = textarea.selectionEnd;\n  const hasReplaceNext = replaceNext.length > 0 && suffixToUse.indexOf(replaceNext) > -1 && selectedText.length > 0;\n\n  if (surroundWithNewlines) {\n    const ref = newlinesToSurroundSelectedText(textarea);\n    newlinesToAppend = ref.newlinesToAppend;\n    newlinesToPrepend = ref.newlinesToPrepend;\n    prefixToUse = newlinesToAppend + prefix;\n    suffixToUse += newlinesToPrepend;\n  }\n\n  if (selectedText.startsWith(prefixToUse) && selectedText.endsWith(suffixToUse)) {\n    const replacementText = selectedText.slice(prefixToUse.length, selectedText.length - suffixToUse.length);\n    if (originalSelectionStart === originalSelectionEnd) {\n      let position = originalSelectionStart - prefixToUse.length;\n      position = Math.max(position, selectionStart);\n      position = Math.min(position, selectionStart + replacementText.length);\n      selectionStart = selectionEnd = position;\n    }\n    else {\n      selectionEnd = selectionStart + replacementText.length;\n    }\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else if (!hasReplaceNext) {\n    let replacementText = prefixToUse + selectedText + suffixToUse;\n    selectionStart = originalSelectionStart + prefixToUse.length;\n    selectionEnd = originalSelectionEnd + prefixToUse.length;\n    const whitespaceEdges = selectedText.match(/^\\s*|\\s*$/g);\n    if (arg.trimFirst && whitespaceEdges) {\n      const leadingWhitespace = whitespaceEdges[0] || '';\n      const trailingWhitespace = whitespaceEdges[1] || '';\n      replacementText = leadingWhitespace + prefixToUse + selectedText.trim() + suffixToUse + trailingWhitespace;\n      selectionStart += leadingWhitespace.length;\n      selectionEnd -= trailingWhitespace.length;\n    }\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else if (scanFor.length > 0 && selectedText.match(scanFor)) {\n    suffixToUse = suffixToUse.replace(replaceNext, selectedText);\n    const replacementText = prefixToUse + suffixToUse;\n    selectionStart = selectionEnd = selectionStart + prefixToUse.length;\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else {\n    const replacementText = prefixToUse + selectedText + suffixToUse;\n    selectionStart = selectionStart + prefixToUse.length + selectedText.length + suffixToUse.indexOf(replaceNext);\n    selectionEnd = selectionStart + replaceNext.length;\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n}\n\nexport const multilineStyle = (textarea, arg) => {\n  const { prefix, suffix, surroundWithNewlines } = arg;\n  let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let selectionStart = textarea.selectionStart;\n  let selectionEnd = textarea.selectionEnd;\n  const lines = text.split('\\n');\n  const undoStyle = lines.every(line => line.startsWith(prefix) && line.endsWith(suffix));\n  if (undoStyle) {\n    text = lines.map(line => line.slice(prefix.length, line.length - suffix.length)).join('\\n');\n    selectionEnd = selectionStart + text.length;\n  }\n  else {\n    text = lines.map(line => prefix + line + suffix).join('\\n');\n    if (surroundWithNewlines) {\n      const { newlinesToAppend, newlinesToPrepend } = newlinesToSurroundSelectedText(textarea);\n      selectionStart += newlinesToAppend.length;\n      selectionEnd = selectionStart + text.length;\n      text = newlinesToAppend + text + newlinesToPrepend;\n    }\n  }\n  return { text, selectionStart, selectionEnd };\n}\n\nexport const orderedList = (textarea) => {\n  const orderedListRegex = /^\\d+\\.\\s+/;\n  const noInitialSelection = textarea.selectionStart === textarea.selectionEnd;\n  let selectionEnd;\n  let selectionStart;\n  let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let textToUnstyle = text;\n  let lines = text.split('\\n');\n  let startOfLine, endOfLine;\n  if (noInitialSelection) {\n    const linesBefore = textarea.value.slice(0, textarea.selectionStart).split(/\\n/);\n    startOfLine = textarea.selectionStart - linesBefore[linesBefore.length - 1].length;\n    endOfLine = wordSelectionEnd(textarea.value, textarea.selectionStart, true);\n    textToUnstyle = textarea.value.slice(startOfLine, endOfLine);\n  }\n  const linesToUnstyle = textToUnstyle.split('\\n');\n  const undoStyling = linesToUnstyle.every(line => orderedListRegex.test(line));\n  if (undoStyling) {\n    lines = linesToUnstyle.map(line => line.replace(orderedListRegex, ''));\n    text = lines.join('\\n');\n    if (noInitialSelection && startOfLine && endOfLine) {\n      const lengthDiff = linesToUnstyle[0].length - lines[0].length;\n      selectionStart = selectionEnd = textarea.selectionStart - lengthDiff;\n      textarea.selectionStart = startOfLine;\n      textarea.selectionEnd = endOfLine;\n    }\n  }\n  else {\n    lines = (function () {\n      let i;\n      let len;\n      let index;\n      const results = [];\n      for (index = i = 0, len = lines.length; i < len; index = ++i) {\n        const line = lines[index];\n        results.push(`${index + 1}. ${line}`);\n      }\n      return results;\n    })();\n    text = lines.join('\\n');\n    const { newlinesToAppend, newlinesToPrepend } = newlinesToSurroundSelectedText(textarea);\n    selectionStart = textarea.selectionStart + newlinesToAppend.length;\n    selectionEnd = selectionStart + text.length;\n    if (noInitialSelection)\n      selectionStart = selectionEnd;\n    text = newlinesToAppend + text + newlinesToPrepend;\n  }\n  return { text, selectionStart, selectionEnd };\n}\n","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nimport insertText from './insertText';\nimport { blockStyle, isMultipleLines, multilineStyle, orderedList } from './styles';\n\nexport const styleSelectedText = (textarea, styleArgs) => {\n  const text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let result;\n  if (styleArgs.orderedList) {\n    result = orderedList(textarea);\n  }\n  else if (styleArgs.multiline && isMultipleLines(text)) {\n    result = multilineStyle(textarea, styleArgs);\n  }\n  else {\n    result = blockStyle(textarea, styleArgs);\n  }\n\n  insertText(textarea, result);\n};\n\nexport default (button, stylesToApply) => {\n  const toolbar = button.parentElement;\n\n  const defaults = {\n    prefix: '',\n    suffix: '',\n    blockPrefix: '',\n    blockSuffix: '',\n    multiline: false,\n    replaceNext: '',\n    prefixSpace: false,\n    scanFor: '',\n    surroundWithNewlines: false,\n    orderedList: false,\n    trimFirst: false\n  };\n\n  const style = Object.assign({}, defaults, stylesToApply);\n\n  const field = document.getElementById(toolbar.dataset.for);\n\n  if (field) {\n    field.focus();\n    styleSelectedText(field, style);\n  }\n}\n","import Component from 'flarum/Component';\nimport icon from 'flarum/helpers/icon';\nimport apply from '../util/apply';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? '⌘' : 'ctrl';\n\nexport default class MarkdownButton extends Component {\n  oncreate(vnode) {\n    super.oncreate(vnode);\n\n    this.$().tooltip();\n  }\n\n  view() {\n    return (\n      <button className=\"Button Button--icon Button--link\" title={this.title()} data-hotkey={this.attrs.hotkey}\n        onclick={this.click.bind(this)} onkeydown={this.keydown.bind(this)}>\n        {icon(this.attrs.icon)}\n      </button>\n    );\n  }\n\n  keydown(event) {\n    if (event.key === ' ' || event.key === 'Enter') {\n      event.preventDefault();\n      this.click();\n    }\n  }\n\n  click() {\n    return apply(this.element, this.attrs.style);\n  }\n\n  title() {\n    let tooltip = this.attrs.title;\n\n    if (this.attrs.hotkey) tooltip += ` <${modifierKey}-${this.attrs.hotkey}>`;\n\n    return tooltip;\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/components/TextEditor';\nimport MarkdownArea from 'mdarea';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\n\napp.initializers.add('flarum-markdown', function(app) {\n  let index = 1;\n\n  extend(TextEditor.prototype, 'oninit', function() {\n    this.textareaId = 'textarea'+(index++);\n  });\n\n  extend(TextEditor.prototype, 'view', function(vdom) {\n    vdom.children[0].attrs.id = this.textareaId;\n  });\n\n  extend(TextEditor.prototype, 'oncreate', function() {\n    this.editor = new MarkdownArea(this.$('textarea')[0], {\n      keyMap: {\n        indent: ['Ctrl+m'],\n        outdent: ['Ctrl+M'],\n        inline: []\n      }\n    });\n  });\n\n  extend(TextEditor.prototype, 'onremove', function () {\n    this.editor.destroy();\n  });\n\n  extend(TextEditor.prototype, 'toolbarItems', function(items) {\n    const tooltip = name => app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`);\n\n    items.add('markdown', (\n      <MarkdownToolbar for={this.textareaId}>\n        <MarkdownButton title={tooltip('header')} icon=\"fas fa-heading\" style={{ prefix: '### ' }} />\n        <MarkdownButton title={tooltip('bold')} icon=\"fas fa-bold\" style={{ prefix: '**', suffix: '**', trimFirst: true }} hotkey=\"b\" />\n        <MarkdownButton title={tooltip('italic')} icon=\"fas fa-italic\" style={{ prefix: '_', suffix: '_', trimFirst: true }} hotkey=\"i\" />\n        <MarkdownButton title={tooltip('quote')} icon=\"fas fa-quote-left\" style={{ prefix: '> ', multiline: true, surroundWithNewlines: true }} />\n        <MarkdownButton title={tooltip('code')} icon=\"fas fa-code\" style={{ prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' }} />\n        <MarkdownButton title={tooltip('link')} icon=\"fas fa-link\" style={{ prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' }} />\n        <MarkdownButton title={tooltip('image')} icon=\"fas fa-image\" style={{ prefix: '![', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' }} />\n        <MarkdownButton title={tooltip('unordered_list')} icon=\"fas fa-list-ul\" style={{ prefix: '- ', multiline: true, surroundWithNewlines: true }} />\n        <MarkdownButton title={tooltip('ordered_list')} icon=\"fas fa-list-ol\" style={{ prefix: '1. ', multiline: true, orderedList: true }} />\n      </MarkdownToolbar>\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['extend']\"","webpack://@flarum/markdown/external \"flarum.core.compat['Component']\"","webpack://@flarum/markdown/external \"flarum.core.compat['components/TextEditor']\"","webpack://@flarum/markdown/external \"flarum.core.compat['utils/BasicEditorDriver']\"","webpack://@flarum/markdown/./node_modules/mdarea/dist/index.min.js","webpack://@flarum/markdown/external \"flarum.core.compat['helpers/icon']\"","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/./src/forum/components/MarkdownToolbar.js","webpack://@flarum/markdown/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/markdown/./src/forum/util/insertText.js","webpack://@flarum/markdown/./src/forum/util/styles.js","webpack://@flarum/markdown/./src/forum/util/apply.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","e","u","a","h","f","enter","lastIndexOf","substring","exec","line","offset","prefix","charAt","length","shiftKey","indent","test","replace","parseInt","v","outdent","reOutdent","inline","slice","y","this","options","keyMap","find","action","navigator","platform","g","userAgent","x","k","b","Array","isArray","toString","trim","split","push","apply","map","E","forEach","ctrlKey","altKey","metaKey","toLowerCase","K","document","createElement","setAttribute","tabIndex","contentEditable","textContent","addEventListener","setTimeout","blur","style","position","overflow","left","top","width","height","opacity","w","selectionStart","selectionEnd","scrollLeft","scrollTop","L","lock","elem","T","A","defaultPrevented","extensions","handleKey","preventDefault","C","type","execCommand","O","idx","helper","state","history","S","I","$","splice","focus","assign","scrollTo","D","join","RegExp","ed","onKeyDown","onInput","onUndo","body","appendChild","setElement","cleanup","removeEventListener","init","removeChild","destroy","version","_inheritsLoose","subClass","superClass","constructor","__proto__","modifierKey","match","MarkdownToolbar","oncreate","vnode","attrs","setShortcutHandler","shortcut","view","id","data-for","for","display","children","event","button","element","querySelector","click","Component","_extends","target","arguments","source","canInsertText","isMultipleLines","string","repeat","wordSelectionStart","text","index","wordSelectionEnd","multiline","breakpoint","newlinesToSurroundSelectedText","textarea","newlinesToAppend","newlinesToPrepend","beforeSelection","afterSelection","breaksBefore","breaksAfter","newlinesBeforeSelection","newlinesAfterSelection","blockStyle","arg","suffix","blockPrefix","blockSuffix","replaceNext","prefixSpace","scanFor","surroundWithNewlines","originalSelectionStart","originalSelectionEnd","selectedText","prefixToUse","suffixToUse","undefined","expandedSelectionStart","expandedSelectionEnd","beginsWithPrefix","endsWithSuffix","expandSelectedText","hasReplaceNext","indexOf","ref","startsWith","endsWith","replacementText","Math","max","min","whitespaceEdges","trimFirst","leadingWhitespace","trailingWhitespace","styleSelectedText","styleArgs","result","orderedList","startOfLine","endOfLine","orderedListRegex","noInitialSelection","textToUnstyle","lines","linesBefore","linesToUnstyle","every","lengthDiff","len","results","multilineStyle","before","after","error","createEvent","initEvent","dispatchEvent","setSelectionRange","insertText","MarkdownButton","tooltip","className","title","data-hotkey","hotkey","onclick","onkeydown","keydown","icon","stylesToApply","toolbar","parentElement","field","getElementById","dataset","shortcutHandler","app","initializers","add","extend","TextEditor","textareaId","params","BasicEditorDriver","_","dom","el","mdarea","MarkdownArea","override","original","items","translator","trans","handler"],"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 = 6);\n","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['components/TextEditor'];","module.exports = flarum.core.compat['utils/BasicEditorDriver'];","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).MarkdownArea=t()}(this,(function(){\"use strict\";const e=/^[ \\t]*(?:(?:[-+*]|\\d+\\.)[ \\t]+(?:\\[[ x]][ \\t]+)?|>[ \\t]*)*(?::[ \\t]*)?/,t=/(?:[-+*]|\\d+\\.)[ \\t]+(?:\\[[ x]][ \\t]+)?$/,n=/[-+*\\[\\]x\\d.]/g,i=/[^ \\t]/g,s=/(\\d+)\\.(?=[ \\t]+$)/,o=/(?:(?:^[ \\t]+)?(?:[-+*]|\\d+\\.|[>:])(?:[ \\t]+\\[[ x]])?[ \\t]*|^[ \\t]+)$/,r=/[*_]/,l=/[-=\\s\"'`<>\\[\\](){}+*^$\\\\.|]$/,u=/^(?:\\n|$)/,c=/^(?!$)/gm,d={\"`\":/^``$/m,\"~\":/^~~$/m},a={\"[\":\"]\",\"(\":\")\",\"{\":\"}\",\"<\":\">\"},h={\"]\":\"[\",\")\":\"(\",\"}\":\"{\",\">\":\"<\"},f={enter:(n,i,r,l,c)=>{const d=r?null:function(t){const n=t.lastIndexOf(\"\\n\")+1,i=t.substring(n),s=e.exec(i);return{line:i,offset:n,prefix:s&&s[0]}}(i);if(d)if(d.line&&d.line.charAt(d.line.length-1)in a){const e=d.prefix?p(d.prefix,!0):\"\";l=\"\\n\"+e+l,c.shiftKey||(i+=\"\\n\"+e+n.indent)}else d.prefix?!c.shiftKey&&d.prefix===d.line&&u.test(l)?i=i.substring(0,d.offset)+function(e){return e.replace(o,\"\")}(d.prefix):!c.shiftKey&&function(e){return t.test(e)}(d.prefix)?i+=\"\\n\"+function(e){return e.replace(s,(function(e,t){return parseInt(t)+1+\".\"}))}(d.prefix):i+=\"\\n\"+p(d.prefix,c.shiftKey):i+=\"\\n\";else i+=\"\\n\";return{v:i+l,s:i.length}},indent:(e,t,n,i)=>{let s=t.length,o=t.lastIndexOf(\"\\n\")+1;return o<s&&(n=t.substring(o)+n,t=t.substring(0,o)),(o<s||!n)&&(s+=e.indent.length),n?n=n.replace(c,e.indent):t+=e.indent,{v:t+n+i,s:s,e:n?o+n.length:s}},outdent:(e,t,n,i)=>{let s=t.length,o=t.lastIndexOf(\"\\n\")+1;return o<s&&(n=t.substring(o)+n,t=t.substring(0,o),n.substring(0,e.indent.length)===e.indent&&(s-=e.indent.length)),{v:t+(n=n.replace(e.reOutdent,\"\"))+i,s:s,e:o+n.length}},inline:(e,t,n,i,s)=>n||s.key in a||i.charAt(0)!==s.key?n||(\"'\"!==s.key||l.test(t))&&!(s.key in h)?!n&&s.key in d&&d[s.key].test(t)?{v:t+s.key+\"language\\n\"+s.key+s.key+s.key+(\"\\n\"!==i.charAt(0)?\"\\n\":\"\")+i,s:t.length+1,e:t.length+9}:s.key===t.slice(-1)&&s.key===i.slice(0,1)?{v:t.slice(0,-1)+n+i.slice(1),s:t.length-1,e:t.length-1+n.length}:{v:t+(h[s.key]||s.key)+n+(a[s.key]||s.key)+i,s:t.length+1,e:t.length+1+n.length}:{v:t+s.key+i,s:t.length+1}:{v:t+(r.test(s.key)?s.key+s.key:\"\")+i,s:t.length+1}};class y{constructor(e){this.options=e}handleKey(e,t,n,i){const s=this.options.keyMap.find((e=>function(e,t){for(const n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}(i,e.key)));if(s&&f[s.action])return f[s.action](this.options,e,t,n,i)}}function p(e,t){return e.replace(t?i:n,\" \")}const m=/mac|iphone|ipad|ipod/i.test(navigator.platform),g=/firefox/i.test(navigator.userAgent),x=m?\"metaKey\":\"ctrlKey\",k={enter:[\"Enter\",\"Shift+Enter\"],indent:[\"Tab\",\"Cmd+m\"],outdent:[\"Shift+Tab\",\"Cmd+Shift+m\"],inline:['\"',\"'\",\"`\",\"*\",\"_\",\"[\",\"]\",\"(\",\")\",\"{\",\"}\",\"<\",\">\"]};function v(e={}){const t=function(e=4){\"number\"!=typeof e&&(e=(e+\"\").length);return new Array(e+1).join(\" \")}(e.indent),n={indent:t,reOutdent:new RegExp(\"^\"+t,\"mg\"),keyMap:b(e.keyMap),extensions:e.extensions||[]};return n.extensions.push(new y(n)),n}function b(e={}){const t={},n=[];for(let i in k)if(k.hasOwnProperty(i)){let s=e[i]||k[i];Array.isArray(s)||(s=s.toString().trim().split(/\\s*[|,]\\s*/g)),n.push.apply(n,s.map((e=>{const n=E(e);return n.key in t||(t[n.key]=0),++t[n.key],{key:n,action:i}})))}return n.forEach((e=>{var n;t[e.key.key]>1&&(\"ctrlKey\"in(n=e.key)||(n.ctrlKey=!1),\"altKey\"in n||(n.altKey=!1),\"shiftKey\"in n||(n.shiftKey=!1),\"metaKey\"in n||(n.metaKey=!1))})),n}function E(e){const t={};return e.trim().split(/\\s*\\+\\s*/g).forEach((function(e){switch(e.toLowerCase()){case\"cmd\":t[x]=!0;break;case\"ctrl\":case\"alt\":case\"shift\":case\"meta\":t[e.toLowerCase()+\"Key\"]=!0;break;default:t.key=e}})),t}function K(){const e=document.createElement(\"div\");return e.setAttribute(\"aria-hidden\",\"true\"),e.tabIndex=-1,e.contentEditable=!0,e.textContent=\"0\",e.addEventListener(\"focus\",(()=>setTimeout((()=>e.blur()),0))),e.style.position=\"fixed\",e.style.overflow=\"hidden\",e.style.left=\"-1000px\",e.style.top=\"50%\",e.style.width=e.style.height=\"1px\",e.style.opacity=\"0\",e}function w(e,t=!1){return{s:e.selectionStart,e:e.selectionEnd,x:e.scrollLeft,y:e.scrollTop,v:e.value.replace(/\\u00A0/g,\" \"),c:t}}function L(e,t){e.lock=!0;const n=void 0===t.e?t.s:t.e,i=void 0===t.x?e.elem.scrollLeft:t.x,s=void 0===t.y?e.elem.scrollTop:t.y;T(e,{...t,e:n,x:i,y:s,c:!0},!0),e.lock=!1}function A(e,t){if(!e.elem||t.defaultPrevented)return;if(g&&t[x]&&\"z\"===t.key)return void e.elem.blur();const n=w(e.elem),i=n.v.substring(0,n.s),s=n.v.substring(n.s,n.e),o=n.v.substring(n.e);for(let n=0,r=e.options.extensions.length;n<r;n++){const r=e.options.extensions[n].handleKey(i,s,o,t);if(r){t.preventDefault(),L(e,r);break}}}function C(e,t){if(e.lock||\"insertFromPaste\"===t.type)return;e.lock=!0;const n=w(e.elem);document.execCommand(\"undo\"),T(e,n),e.lock=!1}function O(e){e.lock||(e.lock=!0,e.idx=+(e.helper.textContent||\"0\"),e.state=e.history[e.idx],S(e.elem,e.state),e.lock=!1)}function I(e){e.helper.textContent=\"0\",e.state=w(e.elem),e.history=[e.state],e.idx=0}function T(e,t,n=!1){(e.idx<1||n&&!e.state.c)&&$(e,w(e.elem,!0)),e.state.c?function(e,t){e.history.splice(++e.idx,e.history.length,t),e.state=t,e.helper.focus(),document.execCommand(\"selectAll\"),document.execCommand(\"insertText\",!1,e.idx.toString())}(e,t):$(e,t),S(e.elem,e.state)}function $(e,t){Object.assign(e.state,t)}function S(e,t){e.value=t.v,e.selectionStart=t.s,e.selectionEnd=t.e,e.scrollTo(t.x,t.y),e.focus()}class D{constructor(e,t){const n=v(t),i=this.ed={elem:e,options:n,helper:K(),history:[],state:void 0,idx:-1,lock:!1};i.onKeyDown=A.bind(null,i),i.onInput=C.bind(null,i),i.onUndo=O.bind(null,i),i.helper.addEventListener(\"input\",i.onUndo),document.body.appendChild(i.helper),this.setElement(e)}getElement(){return this.ed.elem}setElement(e){this.ed.elem&&(this.ed.options.extensions.forEach((e=>e.cleanup&&e.cleanup(this))),this.ed.elem.removeEventListener(\"input\",this.ed.onInput),this.ed.elem.removeEventListener(\"keydown\",this.ed.onKeyDown)),this.ed.elem=e,e.addEventListener(\"keydown\",this.ed.onKeyDown),e.addEventListener(\"input\",this.ed.onInput),I(this.ed),this.ed.options.extensions.forEach((e=>e.init&&e.init(this)))}getValue(){return this.ed.elem.value.replace(/\\u00A0/g,\" \")}setValue(e,t=!1){this.ed.elem.value=e,t||I(this.ed)}pushState(e){L(this.ed,e)}destroy(){return this.ed.options.extensions.forEach((e=>e.cleanup&&e.cleanup(this))),this.ed.elem.removeEventListener(\"keydown\",this.ed.onKeyDown),this.ed.elem.removeEventListener(\"input\",this.ed.onInput),this.ed.helper.removeEventListener(\"input\",this.ed.onUndo),document.body.removeChild(this.ed.helper),this.ed.options.extensions.forEach((e=>e.destroy&&e.destroy())),Object.assign(this.ed,{elem:null,helper:null,options:null,reOutdent:null,onKeyDown:null,onInput:null,onUndo:null,history:null}),Object.assign(this,{ed:null}),null}}return function(e){e.version=\"v2.0.9\"}(D||(D={})),D}));\n//# sourceMappingURL=index.min.js.map\n","module.exports = flarum.core.compat['helpers/icon'];","export default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}","import Component from 'flarum/Component';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'Meta' : 'Control';\n\nexport default class MarkdownToolbar extends Component {\n  oncreate(vnode) {\n    super.oncreate(vnode);\n\n    this.attrs.setShortcutHandler(this.shortcut.bind(this));\n  }\n\n  view(vnode) {\n    return <div id=\"MarkdownToolbar\" data-for={this.attrs.for} style={{ display: 'inline-block' }}>\n      {vnode.children}\n    </div>;\n  }\n\n  shortcut(event) {\n    if ((event.metaKey && modifierKey === 'Meta') || (event.ctrlKey && modifierKey === 'Control')) {\n      const button = this.element.querySelector(`[data-hotkey=\"${event.key}\"]`);\n\n      if (button) {\n        button.click();\n        event.preventDefault()\n      }\n    }\n  }\n}\n","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nexport let canInsertText = null;\n\nexport default (textarea, { text, selectionStart, selectionEnd }) => {\n  const originalSelectionStart = textarea.selectionStart;\n  const before = textarea.value.slice(0, originalSelectionStart);\n  const after = textarea.value.slice(textarea.selectionEnd);\n\n  if (canInsertText === null || canInsertText === true) {\n    textarea.contentEditable = 'true';\n    try {\n      canInsertText = document.execCommand('insertText', false, text);\n    }\n    catch (error) {\n      canInsertText = false;\n    }\n    textarea.contentEditable = 'false';\n  }\n  if (canInsertText && !textarea.value.slice(0, textarea.selectionStart).endsWith(text)) {\n    canInsertText = false;\n  }\n  if (!canInsertText) {\n    try {\n      document.execCommand('ms-beginUndoUnit');\n    }\n    catch (e) {\n      // Do nothing.\n    }\n    textarea.value = before + text + after;\n    try {\n      document.execCommand('ms-endUndoUnit');\n    }\n    catch (e) {\n      // Do nothing.\n    }\n\n    // fire custom event, works on IE\n    const event = document.createEvent('Event');\n\n    event.initEvent('input', true, true);\n\n    textarea.dispatchEvent(event);\n  }\n  if (selectionStart != null && selectionEnd != null) {\n    textarea.setSelectionRange(selectionStart, selectionEnd);\n  }\n  else {\n    textarea.setSelectionRange(originalSelectionStart, textarea.selectionEnd);\n  }\n};\n","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nexport function isMultipleLines(string) {\n  return string.trim().split('\\n').length > 1;\n}\n\nexport function repeat(string, n) {\n  return Array(n + 1).join(string);\n}\n\nexport function wordSelectionStart(text, i) {\n  let index = i;\n\n  while (text[index] && text[index - 1] != null && !text[index - 1].match(/\\s/)) {\n    index--;\n  }\n\n  return index;\n}\n\nexport function wordSelectionEnd(text, i, multiline) {\n  let index = i;\n  const breakpoint = multiline ? /\\n/ : /\\s/;\n\n  while (text[index] && !text[index].match(breakpoint)) {\n    index++;\n  }\n\n  return index;\n}\n\nexport function expandSelectedText(textarea, prefixToUse, suffixToUse) {\n  let multiline = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n  if (textarea.selectionStart === textarea.selectionEnd) {\n    textarea.selectionStart = wordSelectionStart(textarea.value, textarea.selectionStart);\n    textarea.selectionEnd = wordSelectionEnd(textarea.value, textarea.selectionEnd, multiline);\n  } else {\n    const expandedSelectionStart = textarea.selectionStart - prefixToUse.length;\n    const expandedSelectionEnd = textarea.selectionEnd + suffixToUse.length;\n    const beginsWithPrefix = textarea.value.slice(expandedSelectionStart, textarea.selectionStart) === prefixToUse;\n    const endsWithSuffix = textarea.value.slice(textarea.selectionEnd, expandedSelectionEnd) === suffixToUse;\n\n    if (beginsWithPrefix && endsWithSuffix) {\n      textarea.selectionStart = expandedSelectionStart;\n      textarea.selectionEnd = expandedSelectionEnd;\n    }\n  }\n\n  return textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n}\n\nexport function newlinesToSurroundSelectedText(textarea) {\n  const beforeSelection = textarea.value.slice(0, textarea.selectionStart);\n  const afterSelection = textarea.value.slice(textarea.selectionEnd);\n  const breaksBefore = beforeSelection.match(/\\n*$/);\n  const breaksAfter = afterSelection.match(/^\\n*/);\n  const newlinesBeforeSelection = breaksBefore ? breaksBefore[0].length : 0;\n  const newlinesAfterSelection = breaksAfter ? breaksAfter[0].length : 0;\n  let newlinesToAppend;\n  let newlinesToPrepend;\n\n  if (beforeSelection.match(/\\S/) && newlinesBeforeSelection < 2) {\n    newlinesToAppend = repeat('\\n', 2 - newlinesBeforeSelection);\n  }\n\n  if (afterSelection.match(/\\S/) && newlinesAfterSelection < 2) {\n    newlinesToPrepend = repeat('\\n', 2 - newlinesAfterSelection);\n  }\n\n  if (newlinesToAppend == null) {\n    newlinesToAppend = '';\n  }\n\n  if (newlinesToPrepend == null) {\n    newlinesToPrepend = '';\n  }\n\n  return {\n    newlinesToAppend,\n    newlinesToPrepend\n  };\n}\n\nexport const blockStyle = (textarea, arg) => {\n  let newlinesToAppend;\n  let newlinesToPrepend;\n  const { prefix, suffix, blockPrefix, blockSuffix, replaceNext, prefixSpace, scanFor, surroundWithNewlines } = arg;\n  const originalSelectionStart = textarea.selectionStart;\n  const originalSelectionEnd = textarea.selectionEnd;\n  let selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let prefixToUse = isMultipleLines(selectedText) && blockPrefix.length > 0 ? `${blockPrefix}\\n` : prefix;\n  let suffixToUse = isMultipleLines(selectedText) && blockSuffix.length > 0 ? `\\n${blockSuffix}` : suffix;\n\n  if (prefixSpace) {\n    const beforeSelection = textarea.value[textarea.selectionStart - 1];\n    if (textarea.selectionStart !== 0 && beforeSelection != null && !beforeSelection.match(/\\s/)) {\n      prefixToUse = ` ${prefixToUse}`;\n    }\n  }\n\n  selectedText = expandSelectedText(textarea, prefixToUse, suffixToUse, arg.multiline);\n  let selectionStart = textarea.selectionStart;\n  let selectionEnd = textarea.selectionEnd;\n  const hasReplaceNext = replaceNext.length > 0 && suffixToUse.indexOf(replaceNext) > -1 && selectedText.length > 0;\n\n  if (surroundWithNewlines) {\n    const ref = newlinesToSurroundSelectedText(textarea);\n    newlinesToAppend = ref.newlinesToAppend;\n    newlinesToPrepend = ref.newlinesToPrepend;\n    prefixToUse = newlinesToAppend + prefix;\n    suffixToUse += newlinesToPrepend;\n  }\n\n  if (selectedText.startsWith(prefixToUse) && selectedText.endsWith(suffixToUse)) {\n    const replacementText = selectedText.slice(prefixToUse.length, selectedText.length - suffixToUse.length);\n    if (originalSelectionStart === originalSelectionEnd) {\n      let position = originalSelectionStart - prefixToUse.length;\n      position = Math.max(position, selectionStart);\n      position = Math.min(position, selectionStart + replacementText.length);\n      selectionStart = selectionEnd = position;\n    }\n    else {\n      selectionEnd = selectionStart + replacementText.length;\n    }\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else if (!hasReplaceNext) {\n    let replacementText = prefixToUse + selectedText + suffixToUse;\n    selectionStart = originalSelectionStart + prefixToUse.length;\n    selectionEnd = originalSelectionEnd + prefixToUse.length;\n    const whitespaceEdges = selectedText.match(/^\\s*|\\s*$/g);\n    if (arg.trimFirst && whitespaceEdges) {\n      const leadingWhitespace = whitespaceEdges[0] || '';\n      const trailingWhitespace = whitespaceEdges[1] || '';\n      replacementText = leadingWhitespace + prefixToUse + selectedText.trim() + suffixToUse + trailingWhitespace;\n      selectionStart += leadingWhitespace.length;\n      selectionEnd -= trailingWhitespace.length;\n    }\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else if (scanFor.length > 0 && selectedText.match(scanFor)) {\n    suffixToUse = suffixToUse.replace(replaceNext, selectedText);\n    const replacementText = prefixToUse + suffixToUse;\n    selectionStart = selectionEnd = selectionStart + prefixToUse.length;\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n  else {\n    const replacementText = prefixToUse + selectedText + suffixToUse;\n    selectionStart = selectionStart + prefixToUse.length + selectedText.length + suffixToUse.indexOf(replaceNext);\n    selectionEnd = selectionStart + replaceNext.length;\n    return { text: replacementText, selectionStart, selectionEnd };\n  }\n}\n\nexport const multilineStyle = (textarea, arg) => {\n  const { prefix, suffix, surroundWithNewlines } = arg;\n  let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let selectionStart = textarea.selectionStart;\n  let selectionEnd = textarea.selectionEnd;\n  const lines = text.split('\\n');\n  const undoStyle = lines.every(line => line.startsWith(prefix) && line.endsWith(suffix));\n  if (undoStyle) {\n    text = lines.map(line => line.slice(prefix.length, line.length - suffix.length)).join('\\n');\n    selectionEnd = selectionStart + text.length;\n  }\n  else {\n    text = lines.map(line => prefix + line + suffix).join('\\n');\n    if (surroundWithNewlines) {\n      const { newlinesToAppend, newlinesToPrepend } = newlinesToSurroundSelectedText(textarea);\n      selectionStart += newlinesToAppend.length;\n      selectionEnd = selectionStart + text.length;\n      text = newlinesToAppend + text + newlinesToPrepend;\n    }\n  }\n  return { text, selectionStart, selectionEnd };\n}\n\nexport const orderedList = (textarea) => {\n  const orderedListRegex = /^\\d+\\.\\s+/;\n  const noInitialSelection = textarea.selectionStart === textarea.selectionEnd;\n  let selectionEnd;\n  let selectionStart;\n  let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let textToUnstyle = text;\n  let lines = text.split('\\n');\n  let startOfLine, endOfLine;\n  if (noInitialSelection) {\n    const linesBefore = textarea.value.slice(0, textarea.selectionStart).split(/\\n/);\n    startOfLine = textarea.selectionStart - linesBefore[linesBefore.length - 1].length;\n    endOfLine = wordSelectionEnd(textarea.value, textarea.selectionStart, true);\n    textToUnstyle = textarea.value.slice(startOfLine, endOfLine);\n  }\n  const linesToUnstyle = textToUnstyle.split('\\n');\n  const undoStyling = linesToUnstyle.every(line => orderedListRegex.test(line));\n  if (undoStyling) {\n    lines = linesToUnstyle.map(line => line.replace(orderedListRegex, ''));\n    text = lines.join('\\n');\n    if (noInitialSelection && startOfLine && endOfLine) {\n      const lengthDiff = linesToUnstyle[0].length - lines[0].length;\n      selectionStart = selectionEnd = textarea.selectionStart - lengthDiff;\n      textarea.selectionStart = startOfLine;\n      textarea.selectionEnd = endOfLine;\n    }\n  }\n  else {\n    lines = (function () {\n      let i;\n      let len;\n      let index;\n      const results = [];\n      for (index = i = 0, len = lines.length; i < len; index = ++i) {\n        const line = lines[index];\n        results.push(`${index + 1}. ${line}`);\n      }\n      return results;\n    })();\n    text = lines.join('\\n');\n    const { newlinesToAppend, newlinesToPrepend } = newlinesToSurroundSelectedText(textarea);\n    selectionStart = textarea.selectionStart + newlinesToAppend.length;\n    selectionEnd = selectionStart + text.length;\n    if (noInitialSelection)\n      selectionStart = selectionEnd;\n    text = newlinesToAppend + text + newlinesToPrepend;\n  }\n  return { text, selectionStart, selectionEnd };\n}\n","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nimport insertText from './insertText';\nimport { blockStyle, isMultipleLines, multilineStyle, orderedList } from './styles';\n\nexport const styleSelectedText = (textarea, styleArgs) => {\n  const text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n  let result;\n  if (styleArgs.orderedList) {\n    result = orderedList(textarea);\n  }\n  else if (styleArgs.multiline && isMultipleLines(text)) {\n    result = multilineStyle(textarea, styleArgs);\n  }\n  else {\n    result = blockStyle(textarea, styleArgs);\n  }\n\n  insertText(textarea, result);\n};\n\nexport default (button, stylesToApply) => {\n  const toolbar = button.parentElement;\n\n  const defaults = {\n    prefix: '',\n    suffix: '',\n    blockPrefix: '',\n    blockSuffix: '',\n    multiline: false,\n    replaceNext: '',\n    prefixSpace: false,\n    scanFor: '',\n    surroundWithNewlines: false,\n    orderedList: false,\n    trimFirst: false\n  };\n\n  const style = Object.assign({}, defaults, stylesToApply);\n\n  const field = document.getElementById(toolbar.dataset.for);\n\n  if (field) {\n    field.focus();\n    styleSelectedText(field, style);\n  }\n}\n","import Component from 'flarum/Component';\nimport icon from 'flarum/helpers/icon';\nimport apply from '../util/apply';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? '⌘' : 'ctrl';\n\nexport default class MarkdownButton extends Component {\n  oncreate(vnode) {\n    super.oncreate(vnode);\n\n    this.$().tooltip();\n  }\n\n  view() {\n    return (\n      <button className=\"Button Button--icon Button--link\" title={this.title()} data-hotkey={this.attrs.hotkey}\n        onclick={this.click.bind(this)} onkeydown={this.keydown.bind(this)}>\n        {icon(this.attrs.icon)}\n      </button>\n    );\n  }\n\n  keydown(event) {\n    if (event.key === ' ' || event.key === 'Enter') {\n      event.preventDefault();\n      this.click();\n    }\n  }\n\n  click() {\n    return apply(this.element, this.attrs.style);\n  }\n\n  title() {\n    let tooltip = this.attrs.title;\n\n    if (this.attrs.hotkey) tooltip += ` <${modifierKey}-${this.attrs.hotkey}>`;\n\n    return tooltip;\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, override } from 'flarum/extend';\nimport TextEditor from 'flarum/components/TextEditor';\nimport BasicEditorDriver from 'flarum/utils/BasicEditorDriver';\nimport MarkdownArea from 'mdarea';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\n\nlet shortcutHandler = () => { };\n\napp.initializers.add('flarum-markdown', function (app) {\n  let index = 1;\n\n  extend(TextEditor.prototype, 'oninit', function () {\n    this.textareaId = 'textarea' + (index++);\n  });\n\n  extend(TextEditor.prototype, 'buildEditorParams', function (params) {\n    params.textareaId = this.textareaId;\n  });\n\n  extend(BasicEditorDriver.prototype, 'build', function (_, dom, params) {\n    this.el.id = params.textareaId;\n\n    // We can't bind shortcutHandler directly in case `build`\n    // runs before MarkdownToolbar's `oninit`.\n    this.el.addEventListener('keydown', function (e) {\n      return shortcutHandler(...arguments);\n    });\n\n    this.mdarea = new MarkdownArea(this.el, {\n      keyMap: {\n        indent: ['Ctrl+m'],\n        outdent: ['Ctrl+M'],\n        inline: []\n      }\n    });\n  });\n\n  override(BasicEditorDriver.prototype, 'destroy', function (original) {\n    this.mdarea.destroy();\n    original();\n  });\n\n  extend(TextEditor.prototype, 'toolbarItems', function (items) {\n    const tooltip = name => app.translator.trans(`flarum-markdown.forum.composer.${name}_tooltip`);\n\n    items.add('markdown', (\n      <MarkdownToolbar for={this.textareaId} setShortcutHandler={handler => shortcutHandler = handler}>\n        <MarkdownButton title={tooltip('header')} icon=\"fas fa-heading\" style={{ prefix: '### ' }} />\n        <MarkdownButton title={tooltip('bold')} icon=\"fas fa-bold\" style={{ prefix: '**', suffix: '**', trimFirst: true }} hotkey=\"b\" />\n        <MarkdownButton title={tooltip('italic')} icon=\"fas fa-italic\" style={{ prefix: '_', suffix: '_', trimFirst: true }} hotkey=\"i\" />\n        <MarkdownButton title={tooltip('quote')} icon=\"fas fa-quote-left\" style={{ prefix: '> ', multiline: true, surroundWithNewlines: true }} />\n        <MarkdownButton title={tooltip('code')} icon=\"fas fa-code\" style={{ prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' }} />\n        <MarkdownButton title={tooltip('link')} icon=\"fas fa-link\" style={{ prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' }} />\n        <MarkdownButton title={tooltip('image')} icon=\"fas fa-image\" style={{ prefix: '![', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' }} />\n        <MarkdownButton title={tooltip('unordered_list')} icon=\"fas fa-list-ul\" style={{ prefix: '- ', multiline: true, surroundWithNewlines: true }} />\n        <MarkdownButton title={tooltip('ordered_list')} icon=\"fas fa-list-ol\" style={{ prefix: '1. ', multiline: true, orderedList: true }} />\n      </MarkdownToolbar>\n    ), 100);\n  });\n});\n"],"sourceRoot":""}
\ No newline at end of file