From e03ca4406ddb830a85174b673f94f98dae3b7019 Mon Sep 17 00:00:00 2001 From: Ian Morland Date: Thu, 6 Jul 2023 12:03:30 +0100 Subject: [PATCH] chore: build js --- extensions/mentions/js/dist/forum.js | 2 +- extensions/mentions/js/dist/forum.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/mentions/js/dist/forum.js b/extensions/mentions/js/dist/forum.js index b694a9e93..1433b11cf 100644 --- a/extensions/mentions/js/dist/forum.js +++ b/extensions/mentions/js/dist/forum.js @@ -1,3 +1,3 @@ /*! For license information please see forum.js.LICENSE.txt */ -(()=>{var t={440:(t,u,e)=>{var n=e(75).default;function r(){"use strict";t.exports=r=function(){return u},t.exports.__esModule=!0,t.exports.default=t.exports;var u={},e=Object.prototype,o=e.hasOwnProperty,i=Object.defineProperty||function(t,u,e){t[u]=e.value},s="function"==typeof Symbol?Symbol:{},a=s.iterator||"@@iterator",D=s.asyncIterator||"@@asyncIterator",c=s.toStringTag||"@@toStringTag";function l(t,u,e){return Object.defineProperty(t,u,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[u]}try{l({},"")}catch(t){l=function(t,u,e){return t[u]=e}}function f(t,u,e,n){var r=u&&u.prototype instanceof d?u:d,o=Object.create(r.prototype),s=new M(n||[]);return i(o,"_invoke",{value:g(t,e,s)}),o}function m(t,u,e){try{return{type:"normal",arg:t.call(u,e)}}catch(t){return{type:"throw",arg:t}}}u.wrap=f;var p={};function d(){}function F(){}function h(){}var C={};l(C,a,(function(){return this}));var A=Object.getPrototypeOf,v=A&&A(A(P([])));v&&v!==e&&o.call(v,a)&&(C=v);var E=h.prototype=d.prototype=Object.create(C);function y(t){["next","throw","return"].forEach((function(u){l(t,u,(function(t){return this._invoke(u,t)}))}))}function B(t,u){function e(r,i,s,a){var D=m(t[r],t,i);if("throw"!==D.type){var c=D.arg,l=c.value;return l&&"object"==n(l)&&o.call(l,"__await")?u.resolve(l.__await).then((function(t){e("next",t,s,a)}),(function(t){e("throw",t,s,a)})):u.resolve(l).then((function(t){c.value=t,s(c)}),(function(t){return e("throw",t,s,a)}))}a(D.arg)}var r;i(this,"_invoke",{value:function(t,n){function o(){return new u((function(u,r){e(t,n,u,r)}))}return r=r?r.then(o,o):o()}})}function g(t,u,e){var n="suspendedStart";return function(r,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===r)throw o;return{value:void 0,done:!0}}for(e.method=r,e.arg=o;;){var i=e.delegate;if(i){var s=b(i,e);if(s){if(s===p)continue;return s}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if("suspendedStart"===n)throw n="completed",e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n="executing";var a=m(t,u,e);if("normal"===a.type){if(n=e.done?"completed":"suspendedYield",a.arg===p)continue;return{value:a.arg,done:e.done}}"throw"===a.type&&(n="completed",e.method="throw",e.arg=a.arg)}}}function b(t,u){var e=t.iterator[u.method];if(void 0===e){if(u.delegate=null,"throw"===u.method){if(t.iterator.return&&(u.method="return",u.arg=void 0,b(t,u),"throw"===u.method))return p;u.method="throw",u.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var n=m(e,t.iterator,u.arg);if("throw"===n.type)return u.method="throw",u.arg=n.arg,u.delegate=null,p;var r=n.arg;return r?r.done?(u[t.resultName]=r.value,u.next=t.nextLoc,"return"!==u.method&&(u.method="next",u.arg=void 0),u.delegate=null,p):r:(u.method="throw",u.arg=new TypeError("iterator result is not an object"),u.delegate=null,p)}function w(t){var u={tryLoc:t[0]};1 in t&&(u.catchLoc=t[1]),2 in t&&(u.finallyLoc=t[2],u.afterLoc=t[3]),this.tryEntries.push(u)}function x(t){var u=t.completion||{};u.type="normal",delete u.arg,t.completion=u}function M(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(w,this),this.reset(!0)}function P(t){if(t){var u=t[a];if(u)return u.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var e=-1,n=function u(){for(;++e=0;--n){var r=this.tryEntries[n],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var s=o.call(r,"catchLoc"),a=o.call(r,"finallyLoc");if(s&&a){if(this.prev=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--u){var e=this.tryEntries[u];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),x(e),p}},catch:function(t){for(var u=this.tryEntries.length-1;u>=0;--u){var e=this.tryEntries[u];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var r=n.arg;x(e)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,u,e){return this.delegate={iterator:P(t),resultName:u,nextLoc:e},"next"===this.method&&(this.arg=void 0),p}},u}t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},75:t=>{function u(e){return t.exports=u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,u(e)}t.exports=u,t.exports.__esModule=!0,t.exports.default=t.exports},507:(t,u,e)=>{var n=e(440)();t.exports=n;try{regeneratorRuntime=n}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}}},u={};function e(n){var r=u[n];if(void 0!==r)return r.exports;var o=u[n]={exports:{}};return t[n](o,o.exports,e),o.exports}e.n=t=>{var u=t&&t.__esModule?()=>t.default:()=>t;return e.d(u,{a:u}),u},e.d=(t,u)=>{for(var n in u)e.o(u,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:u[n]})},e.o=(t,u)=>Object.prototype.hasOwnProperty.call(t,u),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";e.r(n),e.d(n,{extend:()=>su,filterGroupMentions:()=>fu,filterPostMentions:()=>cu,filterTagMentions:()=>pu,filterUserMentions:()=>au,postFilterGroupMentions:()=>mu,postFilterPostMentions:()=>lu,postFilterTagMentions:()=>du,postFilterUserMentions:()=>Du});var t={};e.r(t),e.d(t,{default:()=>J,insertMention:()=>q});var u={};e.r(u),e.d(u,{filterGroupMentions:()=>fu,filterPostMentions:()=>cu,filterTagMentions:()=>pu,filterUserMentions:()=>au,postFilterGroupMentions:()=>mu,postFilterPostMentions:()=>lu,postFilterTagMentions:()=>du,postFilterUserMentions:()=>Du});const r=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/app"];var i=e.n(o);const s=flarum.core.compat["forum/components/NotificationGrid"];var a=e.n(s);const D=flarum.core.compat["common/utils/string"],c=flarum.core.compat["common/helpers/textContrastClass"];var l=e.n(c);const f=flarum.core.compat["forum/components/Post"];var p=e.n(f);const d=flarum.core.compat["forum/components/CommentPost"];var F=e.n(d);const h=flarum.core.compat["forum/components/PostPreview"];var C=e.n(h);const A=flarum.core.compat["common/components/LoadingIndicator"];var v=e.n(A);const E=flarum.core.compat["common/components/Link"];var y=e.n(E);const B=flarum.core.compat["common/helpers/punctuateSeries"];var g=e.n(B);const b=flarum.core.compat["common/helpers/username"];var w=e.n(b);const x=flarum.core.compat["common/helpers/icon"];var M=e.n(x);const P=flarum.core.compat["common/components/Button"];var _=e.n(P);function T(t,u){return T=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,u){return t.__proto__=u,t},T(t,u)}function S(t,u){t.prototype=Object.create(u.prototype),t.prototype.constructor=t,T(t,u)}const k=flarum.core.compat["common/components/Modal"];var L=e.n(k);function j(){return j=Object.assign?Object.assign.bind():function(t){for(var u=1;u "+r+e.trim().replace(/\n/g,"\n> ")+"\n\n":r),!1),n(u)}))}function J(t,u){return i().composer.bodyMatches(W())&&i().composer.body.attrs.post.discussion()===t.discussion()?q(t,i().composer,u):U().replyAction.call(t.discussion()).then((function(e){return q(t,e,u)}))}const z=flarum.core.compat["common/Fragment"];var Y=e.n(z),Q=function(t){function u(u){var e;return(e=t.call(this)||this).post=u,e}S(u,t);var e=u.prototype;return e.view=function(){var t=this;return m("button",{className:"Button PostQuoteButton",onclick:function(){J(t.post,t.content)}},M()("fas fa-quote-left",{className:"Button-icon"}),i().translator.trans("flarum-mentions.forum.post.quote_button"))},e.show=function(t,u){var e=this.$().show(),n=e.offsetParent().offset();e.css("left",t-n.left).css("top",u-n.top),this.hideHandler=this.hide.bind(this),$(document).on("mouseup",this.hideHandler)},e.showStart=function(t,u){var e=this.$();this.show(t,$(window).scrollTop()+u-e.outerHeight()-5)},e.showEnd=function(t,u){var e=this.$();this.show(t-e.outerWidth(),$(window).scrollTop()+u+5)},e.hide=function(){this.$().hide(),$(document).off("mouseup",this.hideHandler)},u}(Y());function X(t){var u=window.getSelection();if(!u.isCollapsed){var e=u.getRangeAt(0),n=e.commonAncestorContainer;if(t[0]===n||$.contains(t[0],n)){var r=$("
").append(e.cloneContents());return r.find("img.emoji").replaceWith((function(){return this.alt})),r.find("img").replaceWith((function(){return"![]("+this.src+")"})),r.find("a").replaceWith((function(){return"["+this.innerText+"]("+this.href+")"})),r.text()}}return""}const K=flarum.core.compat["common/components/TextEditor"];var V=e.n(K);const Z=flarum.core.compat["common/components/TextEditorButton"];var tt=e.n(Z);const ut=flarum.core.compat["common/utils/KeyboardNavigatable"];var et=e.n(ut),nt=function(t){function u(){for(var u,e=arguments.length,n=new Array(e),r=0;r=n.length&&(r=0),this.index=r;var o=n.removeClass("active").eq(r).addClass("active");if(u){var i,s=e.scrollTop(),a=e.offset().top,D=a+e.outerHeight(),c=o.offset().top,l=c+o.outerHeight();cD&&(i=s-D+l+parseInt(e.css("padding-bottom"),10)),void 0!==i&&e.stop(!0).animate({scrollTop:i},100)}}},u}(Y()),rt=function(){function t(){this.instances=void 0,this.mentionables=void 0,this.extendable=void 0}var u=t.prototype;return u.makeMentionables=function(){var t,u=this;return null!=(t=this.instances)?t:this.instances=this.mentionables.map((function(t){return new t(u)}))},u.getMentionable=function(t){var u;return null!=(u=this.makeMentionables().find((function(u){return u.type()===t})))?u:null},u.extend=function(t){if(!this.extendable)throw new Error("This mention format does not allow extending.");this.mentionables.push(t)},t}();function ot(t,u,e,n,r,o,i){try{var s=t[o](i),a=s.value}catch(t){return void e(t)}s.done?u(a):Promise.resolve(a).then(n,r)}function it(t){return function(){var u=this,e=arguments;return new Promise((function(n,r){var o=t.apply(u,e);function i(t){ot(o,n,r,i,s,"next",t)}function s(t){ot(o,n,r,i,s,"throw",t)}i(void 0)}))}}var st=e(507),at=e.n(st);const Dt=flarum.core.compat["common/helpers/avatar"];var ct=e.n(Dt);const lt=flarum.core.compat["common/helpers/highlight"];var ft=e.n(lt),mt=function(t){this.format=void 0,this.format=t};const pt=flarum.core.compat["common/utils/extractText"];var dt=e.n(pt),Ft=function(){return dt()(i().translator.trans("core.lib.username.deleted_text"))};function ht(t,u){return void 0===u&&(u=!0),t?((u?t.displayName():t.username())||Ft()).replace(/"#[a-z]{0,3}[0-9]+/,"_"):Ft().replace(/"#[a-z]{0,3}[0-9]+/,"_")}var Ct=function(t){function u(){return t.apply(this,arguments)||this}S(u,t);var e=u.prototype;return e.type=function(){return"user"},e.initialResults=function(){return Array.from(i().store.all("users"))},e.replacement=function(t){if(i().forum.attribute("allowUsernameMentionFormat")){var u=ht(t,!1);return this.format.format(u)}var e=ht(t);return this.format.format(e,"",t.id())},e.suggestion=function(t,u){var e,n=w()(t);return u&&(n.children=[ft()(null!=(e=n.text)?e:"",u)],delete n.text),m("[",null,ct()(t),n)},e.matches=function(t,u){return!!u&&[t.username(),t.displayName()].some((function(t){return t.toLowerCase().substr(0,u.length)===u}))},e.maxStoreMatchedResults=function(){return null},e.search=function(){var t=it(at().mark((function t(u){return at().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,i().store.find("users",{filter:{q:u},page:{limit:5}});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(u){return t.apply(this,arguments)}}(),e.enabled=function(){return!0},u}(mt);const At=flarum.core.compat["forum/components/ReplyComposer"];var vt=e.n(At),Et=function(t){function u(){return t.apply(this,arguments)||this}S(u,t);var e=u.prototype;return e.type=function(){return"post"},e.initialResults=function(){if(!i().composer.bodyMatches(vt())&&!i().composer.bodyMatches(W()))return[];var t=i().composer.body.attrs,u=t.post;return(u&&u.discussion()||t.discussion).posts().filter((function(t){return t&&"comment"===t.contentType()&&(!u||t.number()t.length)&&(u=t.length);for(var e=0,n=new Array(u);e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.formats);!(u=e()).done;){var n=u.value.getMentionable(t);if(n)return n}return null},u.extend=function(t){this.formats.push(new t)},t}();function St(t,u){if(null==t)return{};var e,n,r={},o=Object.keys(t);for(n=0;n=0||(r[e]=t[e]);return r}const kt=flarum.core.compat["common/Component"];var $t=e.n(kt);const Lt=flarum.core.compat["common/utils/classList"];var jt=e.n(Lt),Nt=["mentionable"],Ot=function(t){function u(){return t.apply(this,arguments)||this}return S(u,t),u.prototype.view=function(t){var u=this.attrs,e=u.mentionable,n=St(u,Nt),r=jt()("MentionsDropdownItem","PostPreview","MentionsDropdown-"+e.type());return m("button",Object.assign({className:r},n),m("span",{className:"PostPreview-content"},t.children))},u}($t());const It=flarum.core.compat["common/utils/throttleDebounce"];var Rt=["onclick"];function Gt(t,u){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,u){if(t){if("string"==typeof t)return Ut(t,u);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Ut(t,u):void 0}}(t))||u&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ut(t,u){(null==u||u>t.length)&&(u=t.length);for(var e=0,n=new Array(u);e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function hu(t,u){(null==u||u>t.length)&&(u=t.length);for(var e=0,n=new Array(u);e');e.append(o);var i=function(){return $('.PostStream-item[data-id="'+r+'"]')},s=function(){var t=i(),s=!1;if(t.length){var a=t.offset().top,D=window.pageYOffset;a>D&&a+t.height()');this.$().append(o);var s=this.$(),a=this.$(".Post-mentionedBy"),D=function(){!o.hasClass("in")&&o.is(":visible")||(m.render(o[0],m("[",null,r.map((function(u){return m("li",{"data-number":u.number()},m(C(),{post:u,onclick:t.bind(e)}))})),r.length4,a=o.slice(0,s?3:4).map((function(u){var n=u.user();return m(y(),{href:i().route.post(u),onclick:t.bind(e),"data-number":u.number()},i().session.user===n?i().translator.trans("flarum-mentions.forum.post.you_text"):w()(n))}));if(s){var D=o.length-a.length;a.push(i().translator.trans("flarum-mentions.forum.post.others_text",{count:D}))}u.add("replies",m("div",{className:"Post-mentionedBy"},m("span",{className:"Post-mentionedBy-summary"},M()("fas fa-reply"),i().translator.trans("flarum-mentions.forum.post.mentioned_by"+(o[0].user()===i().session.user?"_self":"")+"_text",{count:a.length,users:g()(a)}))))}}))}(),(0,r.extend)(F().prototype,"actionItems",(function(t){var u=this.attrs.post;u.isHidden()||i().session.user&&!u.discussion().canReply()||t.add("reply",m(_(),{className:"Button Button--link",onclick:function(){return J(u)}},i().translator.trans("flarum-mentions.forum.post.reply_link")))})),(0,r.extend)(F().prototype,"oncreate",(function(){var t=this.attrs.post;if(!(t.isHidden()||i().session.user&&!t.discussion().canReply())){var u=this.$(".Post-body"),e=$('
'),n=new Q(t),r=function(t){setTimeout((function(){var r=X(u);if(r){n.content=r,m.render(e[0],n.render());var o=window.getSelection().getRangeAt(0).getClientRects(),i=o[0];if(t.clientY
'),u=new nt;(0,r.extend)(V().prototype,"oncreate",(function(){var e=this.$(".TextEditor-editor").wrap('
');this.navigator=new(et()),this.navigator.when((function(){return u.active})).onUp((function(){return u.navigate(-1)})).onDown((function(){return u.navigate(1)})).onSelect(u.complete.bind(u)).onCancel(u.hide.bind(u)).bindTo(e),e.after(t)})),(0,r.extend)(V().prototype,"buildEditorParams",(function(e){var n,r,o,s=this,a=new Ht({onmouseenter:function(){u.setIndex($(this).parent().index())},onclick:function(t){s.attrs.composer.editor.replaceBeforeCursor(r-1,t+" "),u.hide()}});e.inputListeners.push((function(){var e=s.attrs.composer.editor.getSelectionRange(),D=e[0];if(!(e[1]-D>0)){var c=s.attrs.composer.editor.getLastNChars(30);r=0;for(var l=null,f=c.length-1;f>=0;f--){var p=c.substr(f,1);if((l=i().mentionFormats.get(p))&&(0===f||/\s/.test(c.substr(f-1,1)))){n=f+1,r=D-c.length+f+1,a.init(l.makeMentionables());break}}if(u.hide(),u.active=!1,r){var d,F=c.substring(n).toLowerCase();if(!(o=l.queryFromTyped(F)))return;a.typed=o;var h=function(){var e=a.buildSuggestions();if(e.length){u.items=e,m.render(t[0],u.render()),u.show();var n=s.attrs.composer.editor.getCaretCoordinates(r),o=u.$().outerWidth(),i=u.$().outerHeight(),D=u.$().offsetParent(),c=n.left,l=n.top+15;l+i>D.height()&&(l=n.top-i-15),c+o>D.width()&&(c=D.width()-o),l=Math.max(-(D.offset().top-$(document).scrollTop()),l),c=Math.max(-D.offset().left,c),u.show(c,l)}else u.active=!1,u.hide()};u.active=!0,h(),u.setIndex(0),u.$().scrollTop(0),null==(d=a.search())||d.then(h)}}}))})),(0,r.extend)(V().prototype,"toolbarItems",(function(t){var u=this;t.add("mention",m(tt(),{onclick:function(){return u.attrs.composer.editor.insertAtCursor(" @")},icon:"fas fa-at"},i().translator.trans("flarum-mentions.forum.composer.mention_tooltip")))}))}(),i().notificationComponents.postMentioned=Jt,i().notificationComponents.userMentioned=zt,i().notificationComponents.groupMentioned=Yt,(0,r.extend)(a().prototype,"notificationTypes",(function(t){t.add("postMentioned",{name:"postMentioned",icon:"fas fa-reply",label:i().translator.trans("flarum-mentions.forum.settings.notify_post_mentioned_label")}),t.add("userMentioned",{name:"userMentioned",icon:"fas fa-at",label:i().translator.trans("flarum-mentions.forum.settings.notify_user_mentioned_label")}),t.add("groupMentioned",{name:"groupMentioned",icon:"fas fa-at",label:i().translator.trans("flarum-mentions.forum.settings.notify_group_mentioned_label")})})),(0,r.extend)(Xt().prototype,"navItems",(function(t){var u=this.user;t.add("mentions",m(Vt(),{href:i().route("user.mentions",{username:u.slug()}),name:"mentions",icon:"fas fa-at"},i().translator.trans("flarum-mentions.forum.user.mentions_link")),80)})),D.getPlainContent.removeSelectors.push("a.PostMention"),(0,r.extend)(p().prototype,"oncreate",(function(){this.$(".GroupMention--colored, .TagMention--colored").each((function(){this.classList.add(l()(getComputedStyle(this).getPropertyValue("--color")))}))}))})),Object.assign(Au.compat,Cu)})(),module.exports=n})(); +(()=>{var t={440:(t,u,e)=>{var n=e(75).default;function r(){"use strict";t.exports=r=function(){return u},t.exports.__esModule=!0,t.exports.default=t.exports;var u={},e=Object.prototype,o=e.hasOwnProperty,i=Object.defineProperty||function(t,u,e){t[u]=e.value},s="function"==typeof Symbol?Symbol:{},a=s.iterator||"@@iterator",D=s.asyncIterator||"@@asyncIterator",c=s.toStringTag||"@@toStringTag";function l(t,u,e){return Object.defineProperty(t,u,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[u]}try{l({},"")}catch(t){l=function(t,u,e){return t[u]=e}}function f(t,u,e,n){var r=u&&u.prototype instanceof d?u:d,o=Object.create(r.prototype),s=new M(n||[]);return i(o,"_invoke",{value:g(t,e,s)}),o}function m(t,u,e){try{return{type:"normal",arg:t.call(u,e)}}catch(t){return{type:"throw",arg:t}}}u.wrap=f;var p={};function d(){}function F(){}function h(){}var C={};l(C,a,(function(){return this}));var A=Object.getPrototypeOf,v=A&&A(A(P([])));v&&v!==e&&o.call(v,a)&&(C=v);var E=h.prototype=d.prototype=Object.create(C);function y(t){["next","throw","return"].forEach((function(u){l(t,u,(function(t){return this._invoke(u,t)}))}))}function B(t,u){function e(r,i,s,a){var D=m(t[r],t,i);if("throw"!==D.type){var c=D.arg,l=c.value;return l&&"object"==n(l)&&o.call(l,"__await")?u.resolve(l.__await).then((function(t){e("next",t,s,a)}),(function(t){e("throw",t,s,a)})):u.resolve(l).then((function(t){c.value=t,s(c)}),(function(t){return e("throw",t,s,a)}))}a(D.arg)}var r;i(this,"_invoke",{value:function(t,n){function o(){return new u((function(u,r){e(t,n,u,r)}))}return r=r?r.then(o,o):o()}})}function g(t,u,e){var n="suspendedStart";return function(r,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===r)throw o;return{value:void 0,done:!0}}for(e.method=r,e.arg=o;;){var i=e.delegate;if(i){var s=b(i,e);if(s){if(s===p)continue;return s}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if("suspendedStart"===n)throw n="completed",e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n="executing";var a=m(t,u,e);if("normal"===a.type){if(n=e.done?"completed":"suspendedYield",a.arg===p)continue;return{value:a.arg,done:e.done}}"throw"===a.type&&(n="completed",e.method="throw",e.arg=a.arg)}}}function b(t,u){var e=t.iterator[u.method];if(void 0===e){if(u.delegate=null,"throw"===u.method){if(t.iterator.return&&(u.method="return",u.arg=void 0,b(t,u),"throw"===u.method))return p;u.method="throw",u.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var n=m(e,t.iterator,u.arg);if("throw"===n.type)return u.method="throw",u.arg=n.arg,u.delegate=null,p;var r=n.arg;return r?r.done?(u[t.resultName]=r.value,u.next=t.nextLoc,"return"!==u.method&&(u.method="next",u.arg=void 0),u.delegate=null,p):r:(u.method="throw",u.arg=new TypeError("iterator result is not an object"),u.delegate=null,p)}function w(t){var u={tryLoc:t[0]};1 in t&&(u.catchLoc=t[1]),2 in t&&(u.finallyLoc=t[2],u.afterLoc=t[3]),this.tryEntries.push(u)}function x(t){var u=t.completion||{};u.type="normal",delete u.arg,t.completion=u}function M(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(w,this),this.reset(!0)}function P(t){if(t){var u=t[a];if(u)return u.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var e=-1,n=function u(){for(;++e=0;--n){var r=this.tryEntries[n],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var s=o.call(r,"catchLoc"),a=o.call(r,"finallyLoc");if(s&&a){if(this.prev=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--u){var e=this.tryEntries[u];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),x(e),p}},catch:function(t){for(var u=this.tryEntries.length-1;u>=0;--u){var e=this.tryEntries[u];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var r=n.arg;x(e)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,u,e){return this.delegate={iterator:P(t),resultName:u,nextLoc:e},"next"===this.method&&(this.arg=void 0),p}},u}t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},75:t=>{function u(e){return t.exports=u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,u(e)}t.exports=u,t.exports.__esModule=!0,t.exports.default=t.exports},507:(t,u,e)=>{var n=e(440)();t.exports=n;try{regeneratorRuntime=n}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}}},u={};function e(n){var r=u[n];if(void 0!==r)return r.exports;var o=u[n]={exports:{}};return t[n](o,o.exports,e),o.exports}e.n=t=>{var u=t&&t.__esModule?()=>t.default:()=>t;return e.d(u,{a:u}),u},e.d=(t,u)=>{for(var n in u)e.o(u,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:u[n]})},e.o=(t,u)=>Object.prototype.hasOwnProperty.call(t,u),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";e.r(n),e.d(n,{extend:()=>su,filterGroupMentions:()=>fu,filterPostMentions:()=>cu,filterTagMentions:()=>pu,filterUserMentions:()=>au,postFilterGroupMentions:()=>mu,postFilterPostMentions:()=>lu,postFilterTagMentions:()=>du,postFilterUserMentions:()=>Du});var t={};e.r(t),e.d(t,{default:()=>J,insertMention:()=>q});var u={};e.r(u),e.d(u,{filterGroupMentions:()=>fu,filterPostMentions:()=>cu,filterTagMentions:()=>pu,filterUserMentions:()=>au,postFilterGroupMentions:()=>mu,postFilterPostMentions:()=>lu,postFilterTagMentions:()=>du,postFilterUserMentions:()=>Du});const r=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/app"];var i=e.n(o);const s=flarum.core.compat["forum/components/NotificationGrid"];var a=e.n(s);const D=flarum.core.compat["common/utils/string"],c=flarum.core.compat["common/helpers/textContrastClass"];var l=e.n(c);const f=flarum.core.compat["forum/components/Post"];var p=e.n(f);const d=flarum.core.compat["forum/components/CommentPost"];var F=e.n(d);const h=flarum.core.compat["forum/components/PostPreview"];var C=e.n(h);const A=flarum.core.compat["common/components/LoadingIndicator"];var v=e.n(A);const E=flarum.core.compat["common/components/Link"];var y=e.n(E);const B=flarum.core.compat["common/helpers/punctuateSeries"];var g=e.n(B);const b=flarum.core.compat["common/helpers/username"];var w=e.n(b);const x=flarum.core.compat["common/helpers/icon"];var M=e.n(x);const P=flarum.core.compat["common/components/Button"];var _=e.n(P);function T(t,u){return T=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,u){return t.__proto__=u,t},T(t,u)}function S(t,u){t.prototype=Object.create(u.prototype),t.prototype.constructor=t,T(t,u)}const k=flarum.core.compat["common/components/Modal"];var L=e.n(k);function j(){return j=Object.assign?Object.assign.bind():function(t){for(var u=1;u "+r+e.trim().replace(/\n/g,"\n> ")+"\n\n":r),!1),n(u)}))}function J(t,u){return i().composer.bodyMatches(W())&&i().composer.body.attrs.post.discussion()===t.discussion()?q(t,i().composer,u):U().replyAction.call(t.discussion()).then((function(e){return q(t,e,u)}))}const z=flarum.core.compat["common/Fragment"];var Y=e.n(z),Q=function(t){function u(u){var e;return(e=t.call(this)||this).post=u,e}S(u,t);var e=u.prototype;return e.view=function(){var t=this;return m("button",{className:"Button PostQuoteButton",onclick:function(){J(t.post,t.content)}},M()("fas fa-quote-left",{className:"Button-icon"}),i().translator.trans("flarum-mentions.forum.post.quote_button"))},e.show=function(t,u){var e=this.$().show(),n=e.offsetParent().offset();e.css("left",t-n.left).css("top",u-n.top),this.hideHandler=this.hide.bind(this),$(document).on("mouseup",this.hideHandler)},e.showStart=function(t,u){var e=this.$();this.show(t,$(window).scrollTop()+u-e.outerHeight()-5)},e.showEnd=function(t,u){var e=this.$();this.show(t-e.outerWidth(),$(window).scrollTop()+u+5)},e.hide=function(){this.$().hide(),$(document).off("mouseup",this.hideHandler)},u}(Y());function X(t){var u=window.getSelection();if(!u.isCollapsed){var e=u.getRangeAt(0),n=e.commonAncestorContainer;if(t[0]===n||$.contains(t[0],n)){var r=$("
").append(e.cloneContents());return r.find("img.emoji").replaceWith((function(){return this.alt})),r.find("img").replaceWith((function(){return"![]("+this.src+")"})),r.find("a").replaceWith((function(){return"["+this.innerText+"]("+this.href+")"})),r.text()}}return""}const K=flarum.core.compat["common/components/TextEditor"];var V=e.n(K);const Z=flarum.core.compat["common/components/TextEditorButton"];var tt=e.n(Z);const ut=flarum.core.compat["common/utils/KeyboardNavigatable"];var et=e.n(ut),nt=function(t){function u(){for(var u,e=arguments.length,n=new Array(e),r=0;r=n.length&&(r=0),this.index=r;var o=n.removeClass("active").eq(r).addClass("active");if(u){var i,s=e.scrollTop(),a=e.offset().top,D=a+e.outerHeight(),c=o.offset().top,l=c+o.outerHeight();cD&&(i=s-D+l+parseInt(e.css("padding-bottom"),10)),void 0!==i&&e.stop(!0).animate({scrollTop:i},100)}}},u}(Y());function rt(t,u){if(null==t)return{};var e,n,r={},o=Object.keys(t);for(n=0;n=0||(r[e]=t[e]);return r}function ot(t,u,e,n,r,o,i){try{var s=t[o](i),a=s.value}catch(t){return void e(t)}s.done?u(a):Promise.resolve(a).then(n,r)}function it(t){return function(){var u=this,e=arguments;return new Promise((function(n,r){var o=t.apply(u,e);function i(t){ot(o,n,r,i,s,"next",t)}function s(t){ot(o,n,r,i,s,"throw",t)}i(void 0)}))}}var st=e(507),at=e.n(st);const Dt=flarum.core.compat["common/Component"];var ct=e.n(Dt);const lt=flarum.core.compat["common/utils/classList"];var ft=e.n(lt),mt=["mentionable"],pt=function(t){function u(){return t.apply(this,arguments)||this}return S(u,t),u.prototype.view=function(t){var u=this.attrs,e=u.mentionable,n=rt(u,mt),r=ft()("MentionsDropdownItem","PostPreview","MentionsDropdown-"+e.type());return m("button",Object.assign({className:r},n),m("span",{className:"PostPreview-content"},t.children))},u}(ct());const dt=flarum.core.compat["common/utils/throttleDebounce"];var Ft=["onclick"];function ht(t,u){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,u){if(t){if("string"==typeof t)return Ct(t,u);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Ct(t,u):void 0}}(t))||u&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ct(t,u){(null==u||u>t.length)&&(u=t.length);for(var e=0,n=new Array(u);et.length)&&(u=t.length);for(var e=0,n=new Array(u);e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.formats);!(u=e()).done;){var n=u.value.getMentionable(t);if(n)return n}return null},u.extend=function(t){this.formats.push(new t)},t}();const Qt=flarum.core.compat["forum/components/UserPage"];var Xt=e.n(Qt);const Kt=flarum.core.compat["common/components/LinkButton"];var Vt=e.n(Kt);const Zt=flarum.core.compat["common/models/User"];var tu=e.n(Zt);flarum.core.compat["common/Model"];const uu=flarum.core.compat["common/extenders"];var eu=e.n(uu);const nu=flarum.core.compat["common/models/Post"];var ru=e.n(nu);const ou=flarum.core.compat["forum/components/PostsUserPage"];var iu=function(t){function u(){return t.apply(this,arguments)||this}return S(u,t),u.prototype.loadResults=function(t){return i().store.find("posts",{filter:{type:"comment",mentioned:this.user.id()},page:{offset:t,limit:this.loadLimit},sort:"-createdAt"})},u}(e.n(ou)());const su=[(new(eu().Routes)).add("user.mentions","/u/:username/mentions",iu),new(eu().Model)(ru()).hasMany("mentionedBy").attribute("mentionedByCount"),new(eu().Model)(tu()).attribute("canMentionGroups")];function au(t){var u;if(i().forum.attribute("allowUsernameMentionFormat")&&t.hasAttribute("username")?u=i().store.getBy("users","username",t.getAttribute("username")):t.hasAttribute("id")&&(u=i().store.getById("users",t.getAttribute("id"))),u)return t.setAttribute("id",u.id()),t.setAttribute("slug",u.slug()),t.setAttribute("displayname",St()(w()(u))),!0;t.invalidate()}function Du(t){t.setAttribute("deleted",!1)}function cu(t){var u=i().store.getById("posts",t.getAttribute("id"));if(u)return t.setAttribute("discussionid",u.discussion().id()),t.setAttribute("number",u.number()),t.setAttribute("displayname",St()(w()(u.user()))),!0}function lu(t){t.setAttribute("deleted",!1)}function fu(t){var u,e;if(null!=(u=i().session)&&null!=(e=u.user)&&e.canMentionGroups()){var n=i().store.getById("groups",t.getAttribute("id"));if(n)return t.setAttribute("groupname",St()(n.namePlural())),!0}t.invalidate()}function mu(t){var u,e;if(null!=(u=i().session)&&null!=(e=u.user)&&e.canMentionGroups()){var n=i().store.getById("groups",t.getAttribute("id"));t.setAttribute("color",n.color()),t.setAttribute("icon",n.icon()),t.setAttribute("deleted",!1)}}function pu(t){if("flarum-tags"in flarum.extensions){var u=i().store.getBy("tags","slug",t.getAttribute("slug"));if(u)return t.setAttribute("id",u.id()),t.setAttribute("tagname",u.name()),!0}t.invalidate()}function du(t){if("flarum-tags"in flarum.extensions){var u=i().store.getBy("tags","slug",t.getAttribute("slug"));t.setAttribute("icon",u.icon()),t.setAttribute("color",u.color()),t.setAttribute("deleted",!1)}}function Fu(t,u){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,u){if(t){if("string"==typeof t)return hu(t,u);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?hu(t,u):void 0}}(t))||u&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function hu(t,u){(null==u||u>t.length)&&(u=t.length);for(var e=0,n=new Array(u);e');e.append(o);var i=function(){return $('.PostStream-item[data-id="'+r+'"]')},s=function(){var t=i(),s=!1;if(t.length){var a=t.offset().top,D=window.pageYOffset;a>D&&a+t.height()');this.$().append(o);var s=this.$(),a=this.$(".Post-mentionedBy"),D=function(){!o.hasClass("in")&&o.is(":visible")||(m.render(o[0],m("[",null,r.map((function(u){return m("li",{"data-number":u.number()},m(C(),{post:u,onclick:t.bind(e)}))})),r.length4,D=s.slice(0,a?3:4).map((function(u){var n=u.user();return m(y(),{href:i().route.post(u),onclick:t.bind(e),"data-number":u.number()},i().session.user===n?i().translator.trans("flarum-mentions.forum.post.you_text"):w()(n))}));if(a){var c=n.mentionedByCount()-D.length;D.push(i().translator.trans("flarum-mentions.forum.post.others_text",{count:c}))}u.add("replies",m("div",{className:"Post-mentionedBy"},m("span",{className:"Post-mentionedBy-summary"},M()("fas fa-reply"),i().translator.trans("flarum-mentions.forum.post.mentioned_by"+(s[0].user()===i().session.user?"_self":"")+"_text",{count:D.length,users:g()(D)}))))}}))}(),(0,r.extend)(F().prototype,"actionItems",(function(t){var u=this.attrs.post;u.isHidden()||i().session.user&&!u.discussion().canReply()||t.add("reply",m(_(),{className:"Button Button--link",onclick:function(){return J(u)}},i().translator.trans("flarum-mentions.forum.post.reply_link")))})),(0,r.extend)(F().prototype,"oncreate",(function(){var t=this.attrs.post;if(!(t.isHidden()||i().session.user&&!t.discussion().canReply())){var u=this.$(".Post-body"),e=$('
'),n=new Q(t),r=function(t){setTimeout((function(){var r=X(u);if(r){n.content=r,m.render(e[0],n.render());var o=window.getSelection().getRangeAt(0).getClientRects(),i=o[0];if(t.clientY
'),u=new nt,(0,r.extend)(V().prototype,"oncreate",(function(){var e=this.$(".TextEditor-editor").wrap('
');this.navigator=new(et()),this.navigator.when((function(){return u.active})).onUp((function(){return u.navigate(-1)})).onDown((function(){return u.navigate(1)})).onSelect(u.complete.bind(u)).onCancel(u.hide.bind(u)).bindTo(e),e.after(t)})),(0,r.extend)(V().prototype,"buildEditorParams",(function(e){var n,r,o,s=this,a=new At({onmouseenter:function(){u.setIndex($(this).parent().index())},onclick:function(t){s.attrs.composer.editor.replaceBeforeCursor(r-1,t+" "),u.hide()}});e.inputListeners.push((function(){var e=s.attrs.composer.editor.getSelectionRange(),D=e[0];if(!(e[1]-D>0)){var c=s.attrs.composer.editor.getLastNChars(30);r=0;for(var l=null,f=c.length-1;f>=0;f--){var p=c.substr(f,1);if((l=i().mentionFormats.get(p))&&(0===f||/\s/.test(c.substr(f-1,1)))){n=f+1,r=D-c.length+f+1,a.init(l.makeMentionables());break}}if(u.hide(),u.active=!1,r){var d,F=c.substring(n).toLowerCase();if(!(o=l.queryFromTyped(F)))return;a.typed=o;var h=function(){var e=a.buildSuggestions();if(e.length){u.items=e,m.render(t[0],u.render()),u.show();var n=s.attrs.composer.editor.getCaretCoordinates(r),o=u.$().outerWidth(),i=u.$().outerHeight(),D=u.$().offsetParent(),c=n.left,l=n.top+15;l+i>D.height()&&(l=n.top-i-15),c+o>D.width()&&(c=D.width()-o),l=Math.max(-(D.offset().top-$(document).scrollTop()),l),c=Math.max(-D.offset().left,c),u.show(c,l)}else u.active=!1,u.hide()};u.active=!0,h(),u.setIndex(0),u.$().scrollTop(0),null==(d=a.search())||d.then(h)}}}))})),(0,r.extend)(V().prototype,"toolbarItems",(function(t){var u=this;t.add("mention",m(tt(),{onclick:function(){return u.attrs.composer.editor.insertAtCursor(" @")},icon:"fas fa-at"},i().translator.trans("flarum-mentions.forum.composer.mention_tooltip")))})),i().notificationComponents.postMentioned=yt,i().notificationComponents.userMentioned=Bt,i().notificationComponents.groupMentioned=gt,(0,r.extend)(a().prototype,"notificationTypes",(function(t){t.add("postMentioned",{name:"postMentioned",icon:"fas fa-reply",label:i().translator.trans("flarum-mentions.forum.settings.notify_post_mentioned_label")}),t.add("userMentioned",{name:"userMentioned",icon:"fas fa-at",label:i().translator.trans("flarum-mentions.forum.settings.notify_user_mentioned_label")}),t.add("groupMentioned",{name:"groupMentioned",icon:"fas fa-at",label:i().translator.trans("flarum-mentions.forum.settings.notify_group_mentioned_label")})})),(0,r.extend)(Xt().prototype,"navItems",(function(t){var u=this.user;t.add("mentions",m(Vt(),{href:i().route("user.mentions",{username:u.slug()}),name:"mentions",icon:"fas fa-at"},i().translator.trans("flarum-mentions.forum.user.mentions_link")),80)})),D.getPlainContent.removeSelectors.push("a.PostMention"),(0,r.extend)(p().prototype,"oncreate",(function(){this.$(".GroupMention--colored, .TagMention--colored").each((function(){this.classList.add(l()(getComputedStyle(this).getPropertyValue("--color")))}))}))})),Object.assign(Au.compat,Cu)})(),module.exports=n})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/mentions/js/dist/forum.js.map b/extensions/mentions/js/dist/forum.js.map index 076a0b6d9..f551969dd 100644 --- a/extensions/mentions/js/dist/forum.js.map +++ b/extensions/mentions/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/typeof.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/regenerator/index.js","webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/Post']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/PostPreview']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/states/PaginatedListState']\"","webpack://@flarum/mentions/./src/forum/state/MentionedByModalState.ts","webpack://@flarum/mentions/./src/forum/components/MentionedByModal.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/utils/DiscussionControls']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/EditPostComposer']\"","webpack://@flarum/mentions/./src/forum/utils/reply.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Fragment']\"","webpack://@flarum/mentions/./src/forum/fragments/PostQuoteButton.js","webpack://@flarum/mentions/./src/forum/utils/selectedText.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/TextEditorButton']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/KeyboardNavigatable']\"","webpack://@flarum/mentions/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormat.ts","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/highlight']\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModel.ts","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/mentions/./src/forum/utils/getCleanDisplayName.js","webpack://@flarum/mentions/./src/forum/mentionables/UserMention.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/ReplyComposer']\"","webpack://@flarum/mentions/./src/forum/mentionables/PostMention.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/Group']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Badge']\"","webpack://@flarum/mentions/./src/forum/mentionables/GroupMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/AtMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/TagMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/HashMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormats.ts","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/mentions/./src/forum/components/MentionsDropdownItem.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/throttleDebounce']\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModels.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/mentions/./src/forum/components/PostMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/UserMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/GroupMentionedNotification.js","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/UserPage']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/User']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/PostsUserPage']\"","webpack://@flarum/mentions/./src/forum/components/MentionsUserPage.js","webpack://@flarum/mentions/./src/forum/extend.ts","webpack://@flarum/mentions/./src/forum/utils/textFormatter.js","webpack://@flarum/mentions/./src/forum/compat.js","webpack://@flarum/mentions/./src/forum/utils/getMentionText.js","webpack://@flarum/mentions/./src/forum/extenders/Mentionables.ts","webpack://@flarum/mentions/external assign \"flarum.core\"","webpack://@flarum/mentions/./src/forum/index.js","webpack://@flarum/mentions/./src/forum/addPostMentionPreviews.js","webpack://@flarum/mentions/./src/forum/addMentionedByList.js","webpack://@flarum/mentions/./src/forum/addPostReplyAction.js","webpack://@flarum/mentions/./src/forum/addPostQuoteButton.js","webpack://@flarum/mentions/./src/forum/addComposerAutocomplete.js"],"sourcesContent":["var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n return ContinueSentinel;\n }\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) {\n keys.push(key);\n }\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/NotificationGrid'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Post'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/PostPreview'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/punctuateSeries'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/states/PaginatedListState'];","import PaginatedListState, { PaginatedListParams } from 'flarum/common/states/PaginatedListState';\nimport Post from 'flarum/common/models/Post';\n\nexport interface MentionedByModalListParams extends PaginatedListParams {\n filter: {\n mentionedPost: string;\n };\n sort?: string;\n page?: {\n offset?: number;\n limit: number;\n };\n}\n\nexport default class MentionedByModalState

extends PaginatedListState {\n constructor(params: P, page: number = 1) {\n const limit = 10;\n\n params.page = { ...(params.page || {}), limit };\n\n super(params, page, limit);\n }\n\n get type(): string {\n return 'posts';\n }\n}\n","import app from 'flarum/forum/app';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport type Mithril from 'mithril';\nimport type Post from 'flarum/common/models/Post';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModalState from '../state/MentionedByModalState';\n\nexport interface IMentionedByModalAttrs extends IInternalModalAttrs {\n post: Post;\n}\n\nexport default class MentionedByModal extends Modal<\n CustomAttrs,\n MentionedByModalState\n> {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.state = new MentionedByModalState({\n filter: {\n mentionedPost: this.attrs.post.id()!,\n },\n sort: 'number',\n });\n\n this.state.refresh();\n }\n\n className(): string {\n return 'MentionedByModal';\n }\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-mentions.forum.mentioned_by.title');\n }\n\n content(): Mithril.Children {\n return (\n <>\n

\n {this.state.isInitialLoading() ? (\n \n ) : (\n <>\n
    \n {this.state.getPages().map((page) =>\n page.items.map((reply) => (\n
  • \n app.modal.close()} />\n
  • \n ))\n )}\n
\n \n )}\n
\n {this.state.hasNext() && (\n
\n
\n
\n \n
\n
\n
\n )}\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/EditPostComposer'];","import app from 'flarum/forum/app';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport EditPostComposer from 'flarum/forum/components/EditPostComposer';\n\nexport function insertMention(post, composer, quote) {\n return new Promise((resolve) => {\n const mention = app.mentionFormats.mentionable('post').replacement(post) + ' ';\n\n // If the composer is empty, then assume we're starting a new reply.\n // In which case we don't want the user to have to confirm if they\n // close the composer straight away.\n if (!composer.fields.content()) {\n composer.body.attrs.originalContent = mention;\n }\n\n const cursorPosition = composer.editor.getSelectionRange()[0];\n const preceding = composer.fields.content().slice(0, cursorPosition);\n const precedingNewlines = preceding.length == 0 ? 0 : 3 - preceding.match(/(\\n{0,2})$/)[0].length;\n\n composer.editor.insertAtCursor(\n Array(precedingNewlines).join('\\n') + // Insert up to two newlines, depending on preceding whitespace\n (quote ? '> ' + mention + quote.trim().replace(/\\n/g, '\\n> ') + '\\n\\n' : mention),\n false\n );\n return resolve(composer);\n });\n}\n\nexport default function reply(post, quote) {\n if (app.composer.bodyMatches(EditPostComposer) && app.composer.body.attrs.post.discussion() === post.discussion()) {\n // If we're already editing a post in the discussion of post we're quoting,\n // insert the mention directly.\n return insertMention(post, app.composer, quote);\n } else {\n // The default \"Reply\" action behavior will only open a new composer if\n // necessary, but it will always be a ReplyComposer, hence the exceptional\n // case above.\n return DiscussionControls.replyAction.call(post.discussion()).then((composer) => insertMention(post, composer, quote));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Fragment'];","import app from 'flarum/forum/app';\nimport Fragment from 'flarum/common/Fragment';\nimport icon from 'flarum/common/helpers/icon';\n\nimport reply from '../utils/reply';\n\nexport default class PostQuoteButton extends Fragment {\n constructor(post) {\n super();\n\n this.post = post;\n }\n\n view() {\n return (\n {\n reply(this.post, this.content);\n }}\n >\n {icon('fas fa-quote-left', { className: 'Button-icon' })}\n {app.translator.trans('flarum-mentions.forum.post.quote_button')}\n \n );\n }\n\n show(left, top) {\n const $this = this.$().show();\n const parentOffset = $this.offsetParent().offset();\n\n $this.css('left', left - parentOffset.left).css('top', top - parentOffset.top);\n\n this.hideHandler = this.hide.bind(this);\n $(document).on('mouseup', this.hideHandler);\n }\n\n showStart(left, top) {\n const $this = this.$();\n\n this.show(left, $(window).scrollTop() + top - $this.outerHeight() - 5);\n }\n\n showEnd(right, bottom) {\n const $this = this.$();\n\n this.show(right - $this.outerWidth(), $(window).scrollTop() + bottom + 5);\n }\n\n hide() {\n this.$().hide();\n $(document).off('mouseup', this.hideHandler);\n }\n}\n","/**\n * Finds the selected text in the provided composer body.\n */\nexport default function selectedText(body) {\n const selection = window.getSelection();\n\n if (!selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const parent = range.commonAncestorContainer;\n\n if (body[0] === parent || $.contains(body[0], parent)) {\n const clone = $('
').append(range.cloneContents());\n\n // Replace emoji images with their shortcode (found in alt attribute)\n clone.find('img.emoji').replaceWith(function () {\n return this.alt;\n });\n\n // Replace all other images with a Markdown image\n clone.find('img').replaceWith(function () {\n return `![](${this.src})`;\n });\n\n // Replace all links with a Markdown link\n clone.find('a').replaceWith(function () {\n return `[${this.innerText}](${this.href})`;\n });\n\n return clone.text();\n }\n }\n return '';\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditorButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/KeyboardNavigatable'];","import Fragment from 'flarum/common/Fragment';\n\nexport default class AutocompleteDropdown extends Fragment {\n items = [];\n active = false;\n index = 0;\n keyWasJustPressed = false;\n\n view() {\n return (\n
    \n {this.items.map((item) => (\n
  • {item}
  • \n ))}\n
\n );\n }\n\n show(left, top) {\n this.$()\n .show()\n .css({\n left: left + 'px',\n top: top + 'px',\n });\n this.active = true;\n }\n\n hide() {\n this.$().hide();\n this.active = false;\n }\n\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => (this.keyWasJustPressed = false), 500);\n }\n\n complete() {\n this.$('li').eq(this.index).find('button').click();\n }\n\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n\n const $dropdown = this.$();\n const $items = $dropdown.find('li');\n let rangedIndex = index;\n\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n\n this.index = rangedIndex;\n\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({ scrollTop }, 100);\n }\n }\n }\n}\n","import type MentionableModel from '../MentionableModel';\nimport type Model from 'flarum/common/Model';\n\nexport default abstract class MentionFormat {\n protected instances?: MentionableModel[];\n\n public makeMentionables(): MentionableModel[] {\n return this.instances ?? (this.instances = this.mentionables.map((Mentionable) => new Mentionable(this)));\n }\n\n public getMentionable(type: string): MentionableModel | null {\n return this.makeMentionables().find((mentionable) => mentionable.type() === type) ?? null;\n }\n\n public extend(mentionable: new (...args: any[]) => MentionableModel): void {\n if (!this.extendable) throw new Error('This mention format does not allow extending.');\n\n this.mentionables.push(mentionable);\n }\n\n abstract mentionables: (new (...args: any[]) => MentionableModel)[];\n\n protected abstract extendable: boolean;\n\n abstract trigger(): string;\n\n /**\n * Picks the term to search in the API from the typed text.\n * @example:\n * * Full text = `Hello @\"John D`\n * * Typed text = `\"John D`\n * * Query = `John D`\n */\n abstract queryFromTyped(typed: string): string | null;\n\n abstract format(...args: any): string;\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/highlight'];","import type Mithril from 'mithril';\nimport type Model from 'flarum/common/Model';\nimport type MentionFormat from './formats/MentionFormat';\n\nexport default abstract class MentionableModel {\n public format: Format;\n\n public constructor(format: Format) {\n this.format = format;\n }\n\n abstract type(): string;\n abstract initialResults(): M[];\n abstract search(typed: string): Promise;\n abstract replacement(model: M): string;\n abstract suggestion(model: M, typed: string): Mithril.Children;\n abstract matches(model: M, typed: string): boolean;\n abstract maxStoreMatchedResults(): number | null;\n abstract enabled(): boolean;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","import app from 'flarum/forum/app';\nimport extractText from 'flarum/common/utils/extractText';\n\n/**\n * Whether to use the old mentions format.\n *\n * `'@username'` or `'@\"Display name\"'`\n */\nexport const shouldUseOldFormat = () => app.forum.attribute('allowUsernameMentionFormat') || false;\n\nconst getDeletedUserText = () => extractText(app.translator.trans('core.lib.username.deleted_text'));\n\n/**\n * Fetches a user's username or display name.\n *\n * Chooses based on the format option set in the admin settings page.\n *\n * @param user An instance of the User model to fetch the username for\n * @param useDisplayName If `true`, uses `user.displayName()`, otherwise, uses `user.username()`\n */\nexport default function getCleanDisplayName(user, useDisplayName = true) {\n if (!user) return getDeletedUserText().replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n\n const text = (useDisplayName ? user.displayName() : user.username()) || getDeletedUserText();\n\n return text.replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n}\n","import app from 'flarum/forum/app';\nimport type Mithril from 'mithril';\nimport type User from 'flarum/common/models/User';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport avatar from 'flarum/common/helpers/avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nimport getCleanDisplayName, { shouldUseOldFormat } from '../utils/getCleanDisplayName';\nimport AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class UserMention extends MentionableModel {\n type(): string {\n return 'user';\n }\n\n initialResults(): User[] {\n return Array.from(app.store.all('users'));\n }\n\n /**\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @\"Display name\"#UserID or `@username`\n *\n * @example New display name syntax\n * // '@\"user\"#1'\n * forUser(User) // User is ID 1, display name is 'User'\n *\n * @example Using old syntax\n * // '@username'\n * forUser(user) // User's username is 'username'\n */\n public replacement(user: User): string {\n if (shouldUseOldFormat()) {\n const cleanText = getCleanDisplayName(user, false);\n return this.format.format(cleanText);\n }\n\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, '', user.id());\n }\n\n suggestion(model: User, typed: string): Mithril.Children {\n const username = usernameHelper(model);\n\n if (typed) {\n username.children = [highlight((username.text ?? '') as string, typed)];\n delete username.text;\n }\n\n return (\n <>\n {avatar(model)}\n {username}\n \n );\n }\n\n matches(model: User, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.username(), model.displayName()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n async search(typed: string): Promise {\n return await app.store.find('users', { filter: { q: typed }, page: { limit: 5 } });\n }\n\n enabled(): boolean {\n return true;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/ReplyComposer'];","import app from 'flarum/forum/app';\nimport MentionableModel from './MentionableModel';\nimport type Post from 'flarum/common/models/Post';\nimport type Mithril from 'mithril';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport avatar from 'flarum/common/helpers/avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport { truncate } from 'flarum/common/utils/string';\nimport ReplyComposer from 'flarum/forum/components/ReplyComposer';\nimport EditPostComposer from 'flarum/forum/components/EditPostComposer';\nimport getCleanDisplayName from '../utils/getCleanDisplayName';\nimport type AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class PostMention extends MentionableModel {\n type(): string {\n return 'post';\n }\n\n /**\n * If the user is replying to a discussion, or if they are editing a\n * post, then we can suggest other posts in the discussion to mention.\n * We will add the 5 most recent comments in the discussion which\n * match any username characters that have been typed.\n */\n initialResults(): Post[] {\n if (!app.composer.bodyMatches(ReplyComposer) && !app.composer.bodyMatches(EditPostComposer)) {\n return [];\n }\n\n // @ts-ignore\n const composerAttrs = app.composer.body.attrs;\n const composerPost = composerAttrs.post;\n const discussion = (composerPost && composerPost.discussion()) || composerAttrs.discussion;\n\n return (\n discussion\n .posts()\n // Filter to only comment posts, and replies before this message\n .filter((post: Post) => post && post.contentType() === 'comment' && (!composerPost || post.number() < composerPost.number()))\n // Sort by new to old\n .sort((a: Post, b: Post) => b.createdAt().getTime() - a.createdAt().getTime())\n );\n }\n\n /**\n * Generates the syntax for mentioning of a post. Also cleans up the display name.\n *\n * @example Post mention\n * // '@\"User\"#p13'\n * // @\"Display name\"#pPostID\n * forPostMention(user, 13) // User display name is 'User', post ID is 13\n */\n public replacement(post: Post): string {\n const user = post.user();\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, 'p', post.id());\n }\n\n suggestion(model: Post, typed: string): Mithril.Children {\n const user = model.user() || null;\n const username = usernameHelper(user);\n\n if (typed) {\n username.children = [highlight((username.text ?? '') as string, typed)];\n delete username.text;\n }\n\n return (\n <>\n {avatar(user)}\n {username}\n {[\n app.translator.trans('flarum-mentions.forum.composer.reply_to_post_text', { number: model.number() }),\n ' — ',\n truncate(model.contentPlain() ?? '', 200),\n ]}\n \n );\n }\n\n matches(model: Post, typed: string): boolean {\n const user = model.user();\n const userMentionable = app.mentionFormats.mentionable('user')!;\n\n return !typed || (user && userMentionable.matches(user, typed));\n }\n\n maxStoreMatchedResults(): number {\n return 5;\n }\n\n /**\n * Post mention suggestions are only offered from current discussion posts.\n */\n search(typed: string): Promise {\n return Promise.resolve([]);\n }\n\n enabled(): boolean {\n return true;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Group'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Badge'];","import app from 'flarum/forum/app';\nimport Group from 'flarum/common/models/Group';\nimport MentionableModel from './MentionableModel';\nimport type Mithril from 'mithril';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport type AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class GroupMention extends MentionableModel {\n type(): string {\n return 'group';\n }\n\n initialResults(): Group[] {\n return Array.from(\n app.store.all('groups').filter((g: Group) => {\n return g.id() !== Group.GUEST_ID && g.id() !== Group.MEMBER_ID;\n })\n );\n }\n\n /**\n * Generates the mention syntax for a group mention.\n *\n * @\"Name Plural\"#gGroupID\n *\n * @example Group mention\n * // '@\"Mods\"#g4'\n * forGroup(group) // Group display name is 'Mods', group ID is 4\n */\n public replacement(group: Group): string {\n return this.format.format(group.namePlural(), 'g', group.id());\n }\n\n suggestion(model: Group, typed: string): Mithril.Children {\n let groupName: Mithril.Children = model.namePlural();\n\n if (typed) {\n groupName = highlight(groupName, typed);\n }\n\n return (\n <>\n \n {groupName}\n \n );\n }\n\n matches(model: Group, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.namePlural().toLowerCase(), model.nameSingular().toLowerCase()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n /**\n * All groups are already loaded, so we don't need to search for them.\n */\n search(typed: string): Promise {\n return Promise.resolve([]);\n }\n\n enabled(): boolean {\n return app.session?.user?.canMentionGroups() ?? false;\n }\n}\n","import MentionFormat from './MentionFormat';\nimport type MentionableModel from '../MentionableModel';\nimport UserMention from '../UserMention';\nimport PostMention from '../PostMention';\nimport GroupMention from '../GroupMention';\n\nexport default class AtMentionFormat extends MentionFormat {\n public mentionables: (new (...args: any[]) => MentionableModel)[] = [UserMention, PostMention, GroupMention];\n protected extendable: boolean = true;\n\n public trigger(): string {\n return '@';\n }\n\n public queryFromTyped(typed: string): string | null {\n const matchTyped = typed.match(/^[\"“]?((?:(?!\"#).)+)$/);\n\n return matchTyped ? matchTyped[1] : null;\n }\n\n public format(name: string, char: string | null = '', id: string | null = null): string {\n return {\n simple: `@${name}`,\n safe: `@\"${name}\"#${char}${id}`,\n }[id ? 'safe' : 'simple'];\n }\n}\n","import app from 'flarum/forum/app';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport type Tag from 'flarum/tags/common/models/Tag';\nimport type Mithril from 'mithril';\nimport MentionableModel from './MentionableModel';\nimport type HashMentionFormat from './formats/HashMentionFormat';\n\nexport default class TagMention extends MentionableModel {\n type(): string {\n return 'tag';\n }\n\n initialResults(): Tag[] {\n return Array.from(app.store.all('tags'));\n }\n\n /**\n * Generates the mention syntax for a tag mention.\n *\n * ~tagSlug\n *\n * @example Tag mention\n * // ~general\n * forTag(tag) // Tag display name is 'Tag', tag ID is 5\n */\n public replacement(tag: Tag): string {\n return this.format.format(tag.slug());\n }\n\n matches(model: Tag, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.name().toLowerCase()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n async search(typed: string): Promise {\n return await app.store.find('tags', { filter: { q: typed }, page: { limit: 5 } });\n }\n\n suggestion(model: Tag, typed: string): Mithril.Children {\n let tagName: Mithril.Children = model.name();\n\n if (typed) {\n tagName = highlight(tagName, typed);\n }\n\n return (\n <>\n \n {tagName}\n \n );\n }\n\n enabled(): boolean {\n return 'flarum-tags' in flarum.extensions;\n }\n}\n","import MentionFormat from './MentionFormat';\nimport MentionableModel from '../MentionableModel';\nimport TagMention from '../TagMention';\n\nexport default class HashMentionFormat extends MentionFormat {\n public mentionables: (new (...args: any[]) => MentionableModel)[] = [TagMention];\n protected extendable: boolean = false;\n\n public trigger(): string {\n return '#';\n }\n\n public queryFromTyped(typed: string): string | null {\n const matchTyped = typed.match(/^[-_\\p{L}\\p{N}\\p{M}]+$/giu);\n\n return matchTyped ? matchTyped[0] : null;\n }\n\n public format(slug: string): string {\n return `#${slug}`;\n }\n}\n","import AtMentionFormat from './AtMentionFormat';\nimport HashMentionFormat from './HashMentionFormat';\nimport type MentionFormat from './MentionFormat';\nimport MentionableModel from '../MentionableModel';\n\nexport default class MentionFormats {\n protected formats: MentionFormat[] = [new AtMentionFormat(), new HashMentionFormat()];\n\n public get(symbol: string): MentionFormat | null {\n return this.formats.find((f) => f.trigger() === symbol) ?? null;\n }\n\n public mentionable(type: string): MentionableModel | null {\n for (const format of this.formats) {\n const mentionable = format.getMentionable(type);\n\n if (mentionable) return mentionable;\n }\n\n return null;\n }\n\n public extend(format: new () => MentionFormat) {\n this.formats.push(new format());\n }\n}\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\nimport type { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport type MentionableModel from '../mentionables/MentionableModel';\nimport type Mithril from 'mithril';\n\nexport interface IMentionsDropdownItemAttrs extends ComponentAttrs {\n mentionable: MentionableModel;\n onclick: () => void;\n onmouseenter: () => void;\n}\n\nexport default class MentionsDropdownItem extends Component {\n view(vnode: Mithril.Vnode): Mithril.Children {\n const { mentionable, ...attrs } = this.attrs;\n\n const className = classList('MentionsDropdownItem', 'PostPreview', `MentionsDropdown-${mentionable.type()}`);\n\n return (\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/throttleDebounce'];","import type MentionableModel from './MentionableModel';\nimport type Model from 'flarum/common/Model';\nimport type Mithril from 'mithril';\nimport MentionsDropdownItem from '../components/MentionsDropdownItem';\nimport { throttle } from 'flarum/common/utils/throttleDebounce';\n\nexport default class MentionableModels {\n protected mentionables?: MentionableModel[];\n /**\n * We store models returned from an API here to preserve order in which they are returned\n * This prevents the list jumping around while models are returned.\n * We also use a hashmap for model IDs to provide O(1) lookup for the users already in the list.\n */\n private results: Record> = {};\n public typed: string | null = null;\n private searched: string[] = [];\n private dropdownItemAttrs: Record = {};\n\n constructor(dropdownItemAttrs: Record) {\n this.dropdownItemAttrs = dropdownItemAttrs;\n }\n\n public init(mentionables: MentionableModel[]): void {\n this.typed = null;\n this.mentionables = mentionables;\n\n for (const mentionable of this.mentionables) {\n this.results[mentionable.type()] = new Map(mentionable.initialResults().map((result) => [result.id() as string, result]));\n }\n }\n\n /**\n * Don't send API calls searching for models until at least 2 characters have been typed.\n * This focuses the mention results on models already loaded.\n */\n public readonly search = throttle(250, async (): Promise => {\n if (!this.typed || this.typed.length <= 1) return;\n\n const typedLower = this.typed.toLowerCase();\n\n if (this.searched.includes(typedLower)) return;\n\n for (const mentionable of this.mentionables!) {\n for (const model of await mentionable.search(typedLower)) {\n if (!this.results[mentionable.type()].has(model.id() as string)) {\n this.results[mentionable.type()].set(model.id() as string, model);\n }\n }\n }\n\n this.searched.push(typedLower);\n\n return Promise.resolve();\n });\n\n public matches(mentionable: MentionableModel, model: Model): boolean {\n return mentionable.matches(model, this.typed?.toLowerCase() || '');\n }\n\n public makeSuggestion(mentionable: MentionableModel, model: Model): Mithril.Children {\n const content = mentionable.suggestion(model, this.typed!);\n const replacement = mentionable.replacement(model);\n\n const { onclick, ...attrs } = this.dropdownItemAttrs;\n\n return (\n onclick(replacement)} {...attrs}>\n {content}\n \n );\n }\n\n public buildSuggestions(): Mithril.Children {\n const suggestions: Mithril.Children = [];\n\n for (const mentionable of this.mentionables!) {\n if (!mentionable.enabled()) continue;\n\n let matches = Array.from(this.results[mentionable.type()].values()).filter((model) => this.matches(mentionable, model));\n\n const max = mentionable.maxStoreMatchedResults();\n if (max) matches = matches.splice(0, max);\n\n for (const model of matches) {\n const dropdownItem = this.makeSuggestion(mentionable, model);\n suggestions.push(dropdownItem);\n }\n }\n\n return suggestions;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Notification'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostMentionedNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n\n href() {\n const notification = this.attrs.notification;\n const post = notification.subject();\n const content = notification.content();\n\n return app.route.discussion(post.discussion(), content && content.replyNumber);\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.post_mentioned_text', { user, count: 1 });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain() || '', 200);\n }\n}\n","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class UserMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n\n href() {\n const post = this.attrs.notification.subject();\n\n return app.route.discussion(post.discussion(), post.number());\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.user_mentioned_text', { user });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class GroupMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n\n href() {\n const post = this.attrs.notification.subject();\n\n return app.route.discussion(post.discussion(), post.number());\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.group_mentioned_text', { user });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/User'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Post'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/PostsUserPage'];","import app from 'flarum/forum/app';\nimport PostsUserPage from 'flarum/forum/components/PostsUserPage';\n\n/**\n * The `MentionsUserPage` component shows post which user Mentioned at\n */\nexport default class MentionsUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n mentioned: this.user.id(),\n },\n page: { offset, limit: this.loadLimit },\n sort: '-createdAt',\n });\n }\n}\n","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport User from 'flarum/common/models/User';\nimport MentionsUserPage from './components/MentionsUserPage';\n\nexport default [\n new Extend.Routes() //\n .add('user.mentions', '/u/:username/mentions', MentionsUserPage),\n\n new Extend.Model(Post) //\n .hasMany('mentionedBy')\n .attribute('mentionedByCount'),\n\n new Extend.Model(User) //\n .attribute('canMentionGroups'),\n];\n","import app from 'flarum/forum/app';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport function filterUserMentions(tag) {\n let user;\n\n if (app.forum.attribute('allowUsernameMentionFormat') && tag.hasAttribute('username'))\n user = app.store.getBy('users', 'username', tag.getAttribute('username'));\n else if (tag.hasAttribute('id')) user = app.store.getById('users', tag.getAttribute('id'));\n\n if (user) {\n tag.setAttribute('id', user.id());\n tag.setAttribute('slug', user.slug());\n tag.setAttribute('displayname', extractText(username(user)));\n\n return true;\n }\n\n tag.invalidate();\n}\n\nexport function postFilterUserMentions(tag) {\n tag.setAttribute('deleted', false);\n}\n\nexport function filterPostMentions(tag) {\n const post = app.store.getById('posts', tag.getAttribute('id'));\n\n if (post) {\n tag.setAttribute('discussionid', post.discussion().id());\n tag.setAttribute('number', post.number());\n tag.setAttribute('displayname', extractText(username(post.user())));\n\n return true;\n }\n}\n\nexport function postFilterPostMentions(tag) {\n tag.setAttribute('deleted', false);\n}\n\nexport function filterGroupMentions(tag) {\n if (app.session?.user?.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n\n if (group) {\n tag.setAttribute('groupname', extractText(group.namePlural()));\n\n return true;\n }\n }\n\n tag.invalidate();\n}\n\nexport function postFilterGroupMentions(tag) {\n if (app.session?.user?.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n\n tag.setAttribute('color', group.color());\n tag.setAttribute('icon', group.icon());\n tag.setAttribute('deleted', false);\n }\n}\n\nexport function filterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n\n if (model) {\n tag.setAttribute('id', model.id());\n tag.setAttribute('tagname', model.name());\n\n return true;\n }\n }\n\n tag.invalidate();\n}\n\nexport function postFilterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n\n tag.setAttribute('icon', model.icon());\n tag.setAttribute('color', model.color());\n tag.setAttribute('deleted', false);\n }\n}\n","import GroupMentionedNotification from './components/GroupMentionedNotification';\nimport MentionsUserPage from './components/MentionsUserPage';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport getCleanDisplayName from './utils/getCleanDisplayName';\nimport getMentionText from './utils/getMentionText';\nimport * as reply from './utils/reply';\nimport selectedText from './utils/selectedText';\nimport * as textFormatter from './utils/textFormatter';\nimport MentionableModel from './mentionables/MentionableModel';\nimport MentionFormat from './mentionables/formats/MentionFormat';\nimport Mentionables from './extenders/Mentionables';\n\nexport default {\n 'mentions/components/MentionsUserPage': MentionsUserPage,\n 'mentions/components/PostMentionedNotification': PostMentionedNotification,\n 'mentions/components/UserMentionedNotification': UserMentionedNotification,\n 'mentions/components/GroupMentionedNotification': GroupMentionedNotification,\n 'mentions/fragments/AutocompleteDropdown': AutocompleteDropdown,\n 'mentions/fragments/PostQuoteButton': PostQuoteButton,\n 'mentions/utils/getCleanDisplayName': getCleanDisplayName,\n 'mentions/utils/getMentionText': getMentionText,\n 'mentions/utils/reply': reply,\n 'mentions/utils/selectedText': selectedText,\n 'mentions/utils/textFormatter': textFormatter,\n 'mentions/mentionables/MentionableModel': MentionableModel,\n 'mentions/mentionables/formats/MentionFormat': MentionFormat,\n 'mentions/extenders/Mentionables': Mentionables,\n};\n","import app from 'flarum/forum/app';\n\n/**\n * Fetches the mention text for a specified user (and optionally a post ID for replies or group).\n *\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @deprecated Use `app.mentionables.get('user').replacement(user)` instead. Will be removed in 2.0.\n */\nexport default function getMentionText(user, postId, group) {\n if (user !== undefined && postId === undefined) {\n return app.mentionables.get('user').replacement(user);\n } else if (user !== undefined && postId !== undefined) {\n return app.mentionables.get('post').replacement(app.store.getById('posts', postId));\n } else if (group !== undefined) {\n return app.mentionables.get('group').replacement(group);\n }\n\n throw 'No parameters were passed';\n}\n","import type ForumApplication from 'flarum/forum/ForumApplication';\nimport type IExtender from 'flarum/common/extenders/IExtender';\nimport type MentionableModel from '../mentionables/MentionableModel';\nimport type MentionFormat from '../mentionables/formats/MentionFormat';\n\nexport default class Mentionables implements IExtender {\n protected formats: (new () => MentionFormat)[] = [];\n protected mentionables: Record MentionableModel)[]> = {};\n\n /**\n * Register a new mention format.\n * Must extend MentionFormat and have a unique unused trigger symbol.\n */\n format(format: new () => MentionFormat): this {\n this.formats.push(format);\n\n return this;\n }\n\n /**\n * Register a new mentionable model to a mention format.\n * Only works if the format has already been registered,\n * and the format allows using multiple mentionables.\n *\n * @param symbol The trigger symbol of the format to extend (ex: @).\n * @param mentionable The mentionable instance to register.\n * Must extend MentionableModel.\n */\n mentionable(symbol: string, mentionable: new () => MentionableModel): this {\n if (!this.mentionables[symbol]) {\n this.mentionables[symbol] = [];\n }\n\n this.mentionables[symbol].push(mentionable);\n\n return this;\n }\n\n extend(app: ForumApplication): void {\n for (const format of this.formats) {\n app.mentionFormats.extend(format);\n }\n\n for (const symbol in this.mentionables) {\n const format = app.mentionFormats.get(symbol);\n\n if (!format) continue;\n\n for (const mentionable of this.mentionables[symbol]) {\n format.extend(mentionable);\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\nimport { getPlainContent } from 'flarum/common/utils/string';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport Post from 'flarum/forum/components/Post';\n\nimport addPostMentionPreviews from './addPostMentionPreviews';\nimport addMentionedByList from './addMentionedByList';\nimport addPostReplyAction from './addPostReplyAction';\nimport addPostQuoteButton from './addPostQuoteButton';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport GroupMentionedNotification from './components/GroupMentionedNotification';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport User from 'flarum/common/models/User';\nimport Model from 'flarum/common/Model';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-mentions', function () {\n // For every mention of a post inside a post's content, set up a hover handler\n // that shows a preview of the mentioned post.\n addPostMentionPreviews();\n\n // In the footer of each post, show information about who has replied (i.e.\n // who the post has been mentioned by).\n addMentionedByList();\n\n // Add a 'reply' control to the footer of each post. When clicked, it will\n // open up the composer and add a post mention to its contents.\n addPostReplyAction();\n\n // Show a Quote button when Post text is selected\n addPostQuoteButton();\n\n // After typing '@' in the composer, show a dropdown suggesting a bunch of\n // posts or users that the user could mention.\n addComposerAutocomplete();\n\n app.notificationComponents.postMentioned = PostMentionedNotification;\n app.notificationComponents.userMentioned = UserMentionedNotification;\n app.notificationComponents.groupMentioned = GroupMentionedNotification;\n\n // Add notification preferences.\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postMentioned', {\n name: 'postMentioned',\n icon: 'fas fa-reply',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_post_mentioned_label'),\n });\n\n items.add('userMentioned', {\n name: 'userMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_user_mentioned_label'),\n });\n\n items.add('groupMentioned', {\n name: 'groupMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_group_mentioned_label'),\n });\n });\n\n // Add mentions tab in user profile\n extend(UserPage.prototype, 'navItems', function (items) {\n const user = this.user;\n items.add(\n 'mentions',\n \n {app.translator.trans('flarum-mentions.forum.user.mentions_link')}\n ,\n 80\n );\n });\n\n // Remove post mentions when rendering post previews.\n getPlainContent.removeSelectors.push('a.PostMention');\n\n // Apply color contrast fix on group mentions.\n extend(Post.prototype, 'oncreate', function () {\n this.$('.GroupMention--colored, .TagMention--colored').each(function () {\n this.classList.add(textContrastClass(getComputedStyle(this).getPropertyValue('--color')));\n });\n });\n});\n\nexport * from './utils/textFormatter';\n\n// Expose compat API\nimport mentionsCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, mentionsCompat);\n","import { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nexport default function addPostMentionPreviews() {\n function addPreviews() {\n const contentHtml = this.attrs.post.contentHtml();\n\n if (contentHtml === this.oldPostContentHtml || this.isEditing()) return;\n\n this.oldPostContentHtml = contentHtml;\n\n const parentPost = this.attrs.post;\n const $parentPost = this.$();\n\n this.$().on(\n 'click',\n '.UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)',\n function (e) {\n m.route.set(this.getAttribute('href'));\n e.preventDefault();\n }\n );\n\n this.$('.PostMention:not(.PostMention--deleted)').each(function () {\n const $this = $(this);\n const id = $this.data('id');\n let timeout;\n\n // Wrap the mention link in a wrapper element so that we can insert a\n // preview popup as its sibling and relatively position it.\n const $preview = $('
    ');\n $parentPost.append($preview);\n\n const getPostElement = () => {\n return $(`.PostStream-item[data-id=\"${id}\"]`);\n };\n\n const showPreview = () => {\n // When the user hovers their mouse over the mention, look for the\n // post that it's referring to in the stream, and determine if it's\n // in the viewport. If it is, we will \"pulsate\" it.\n const $post = getPostElement();\n let visible = false;\n if ($post.length) {\n const top = $post.offset().top;\n const scrollTop = window.pageYOffset;\n if (top > scrollTop && top + $post.height() < scrollTop + $(window).height()) {\n $post.addClass('pulsate');\n visible = true;\n }\n }\n\n // Otherwise, we will show a popup preview of the post. If the post\n // hasn't yet been loaded, we will need to do that.\n if (!visible) {\n // Position the preview so that it appears above the mention.\n // (The offsetParent should be .Post-body.)\n const positionPreview = () => {\n const previewHeight = $preview.outerHeight(true);\n let offset = 0;\n\n // If the preview goes off the top of the viewport, reposition it to\n // be below the mention.\n if ($this.offset().top - previewHeight < $(window).scrollTop() + $('#header').outerHeight()) {\n offset += $this.outerHeight(true);\n } else {\n offset -= previewHeight;\n }\n\n $preview\n .show()\n .css('top', $this.offset().top - $parentPost.offset().top + offset)\n .css('left', $this.offsetParent().offset().left - $parentPost.offset().left)\n .css('max-width', $this.offsetParent().width());\n };\n\n const showPost = (post) => {\n const discussion = post.discussion();\n\n m.render($preview[0], [\n discussion !== parentPost.discussion() && (\n
  • \n {discussion.title()}\n
  • \n ),\n
  • \n \n
  • ,\n ]);\n positionPreview();\n };\n\n const post = app.store.getById('posts', id);\n if (post && post.discussion()) {\n showPost(post);\n } else {\n m.render($preview[0], );\n app.store.find('posts', id).then(showPost);\n positionPreview();\n }\n\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }\n };\n\n const hidePreview = () => {\n getPostElement().removeClass('pulsate');\n if ($preview.hasClass('in')) {\n $preview.removeClass('in').one('transitionend', () => $preview.hide());\n }\n };\n\n // On a touch (mobile) device we cannot hover the link to reveal the preview.\n // Instead we cancel the navigation so that a click reveals the preview.\n // Users can then click on the preview to go to the post if desired.\n $this.on('touchend', (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n });\n\n $this\n .add($preview)\n .hover(\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n },\n () => {\n clearTimeout(timeout);\n getPostElement().removeClass('pulsate');\n timeout = setTimeout(hidePreview, 250);\n }\n )\n .on('touchend', (e) => {\n showPreview();\n e.stopPropagation();\n });\n\n $(document).on('touchend', hidePreview);\n });\n }\n\n extend(CommentPost.prototype, 'oncreate', addPreviews);\n extend(CommentPost.prototype, 'onupdate', addPreviews);\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModal from './components/MentionedByModal';\n\nexport default function addMentionedByList() {\n function hidePreview() {\n this.$('.Post-mentionedBy-preview')\n .removeClass('in')\n .one('transitionend', function () {\n $(this).hide();\n });\n }\n\n extend(CommentPost.prototype, 'oncreate', function () {\n let timeout;\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n\n if (replies && replies.length) {\n const $preview = $('
      ');\n this.$().append($preview);\n\n const $parentPost = this.$();\n const $this = this.$('.Post-mentionedBy');\n\n const showPreview = () => {\n if (!$preview.hasClass('in') && $preview.is(':visible')) return;\n\n // When the user hovers their mouse over the list of people who have\n // replied to the post, render a list of reply previews into a\n // popup.\n m.render(\n $preview[0],\n <>\n {replies.map((reply) => (\n
    • \n \n
    • \n ))}\n {replies.length < post.mentionedByCount() && (\n
    • \n {\n hidePreview.call(this);\n app.modal.show(MentionedByModal, { post });\n }}\n >\n \n {icon('fas fa-reply-all')}\n \n {app.translator.trans('flarum-mentions.forum.post.mentioned_by_more_text', { count: post.mentionedByCount() - replies.length })}\n \n \n \n
    • \n )}\n \n );\n\n $preview\n .show()\n .css('top', $this.offset().top - $parentPost.offset().top + $this.outerHeight(true))\n .css('left', $this.offsetParent().offset().left - $parentPost.offset().left)\n .css('max-width', $parentPost.width());\n\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n };\n\n $this.add($preview).hover(\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n },\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(hidePreview, 250);\n }\n );\n\n // Whenever the user hovers their mouse over a particular name in the\n // list of repliers, highlight the corresponding post in the preview\n // popup.\n this.$()\n .find('.Post-mentionedBy-summary a')\n .hover(\n function () {\n $preview.find('[data-number=\"' + $(this).data('number') + '\"]').addClass('active');\n },\n function () {\n $preview.find('[data-number]').removeClass('active');\n }\n );\n }\n });\n\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n\n if (replies && replies.length) {\n const users = [];\n const repliers = replies\n .sort((reply) => (reply.user() === app.session.user ? -1 : 0))\n .filter((reply) => {\n const user = reply.user();\n if (users.indexOf(user) === -1) {\n users.push(user);\n return true;\n }\n });\n\n const limit = 4;\n const overLimit = repliers.length > limit;\n\n // Create a list of unique users who have replied. So even if a user has\n // replied twice, they will only be in this array once.\n const names = repliers.slice(0, overLimit ? limit - 1 : limit).map((reply) => {\n const user = reply.user();\n\n return (\n \n {app.session.user === user ? app.translator.trans('flarum-mentions.forum.post.you_text') : username(user)}\n \n );\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = repliers.length - names.length;\n\n names.push(app.translator.trans('flarum-mentions.forum.post.others_text', { count }));\n }\n\n items.add(\n 'replies',\n
      \n \n {icon('fas fa-reply')}\n {app.translator.trans(`flarum-mentions.forum.post.mentioned_by${repliers[0].user() === app.session.user ? '_self' : ''}_text`, {\n count: names.length,\n users: punctuateSeries(names),\n })}\n \n
      \n );\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nimport reply from './utils/reply';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n items.add(\n 'reply',\n \n );\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport selectedText from './utils/selectedText';\n\nexport default function addPostQuoteButton() {\n extend(CommentPost.prototype, 'oncreate', function () {\n const post = this.attrs.post;\n\n if (post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n const $postBody = this.$('.Post-body');\n\n // Wrap the quote button in a wrapper element so that we can render\n // button into it.\n const $container = $('
      ');\n\n const button = new PostQuoteButton(post);\n\n const handler = function (e) {\n setTimeout(() => {\n const content = selectedText($postBody);\n if (content) {\n button.content = content;\n m.render($container[0], button.render());\n\n const rects = window.getSelection().getRangeAt(0).getClientRects();\n const firstRect = rects[0];\n\n if (e.clientY < firstRect.bottom && e.clientX - firstRect.right < firstRect.left - e.clientX) {\n button.showStart(firstRect.left, firstRect.top);\n } else {\n const lastRect = rects[rects.length - 1];\n button.showEnd(lastRect.right, lastRect.bottom);\n }\n }\n }, 1);\n };\n\n this.$().after($container).on('mouseup', handler);\n\n if ('ontouchstart' in window) {\n document.addEventListener('selectionchange', handler, false);\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport TextEditorButton from 'flarum/common/components/TextEditorButton';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\n\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport MentionFormats from './mentionables/formats/MentionFormats';\nimport MentionableModels from './mentionables/MentionableModels';\n\nexport default function addComposerAutocomplete() {\n app.mentionFormats = new MentionFormats();\n\n const $container = $('
      ');\n const dropdown = new AutocompleteDropdown();\n\n extend(TextEditor.prototype, 'oncreate', function () {\n const $editor = this.$('.TextEditor-editor').wrap('
      ');\n\n this.navigator = new KeyboardNavigatable();\n this.navigator\n .when(() => dropdown.active)\n .onUp(() => dropdown.navigate(-1))\n .onDown(() => dropdown.navigate(1))\n .onSelect(dropdown.complete.bind(dropdown))\n .onCancel(dropdown.hide.bind(dropdown))\n .bindTo($editor);\n\n $editor.after($container);\n });\n\n extend(TextEditor.prototype, 'buildEditorParams', function (params) {\n let relMentionStart;\n let absMentionStart;\n let matchTyped;\n\n let mentionables = new MentionableModels({\n onmouseenter: function () {\n dropdown.setIndex($(this).parent().index());\n },\n onclick: (replacement) => {\n this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' ');\n\n dropdown.hide();\n },\n });\n\n const suggestionsInputListener = () => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n\n const cursor = selection[0];\n\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for a mention triggering symbol. If we find one,\n // we will want to show the correct autocomplete dropdown!\n // Check classes implementing the IMentionableModel interface to see triggering symbols.\n const lastChunk = this.attrs.composer.editor.getLastNChars(30);\n absMentionStart = 0;\n let activeFormat = null;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n activeFormat = app.mentionFormats.get(character);\n\n if (activeFormat && (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relMentionStart = i + 1;\n absMentionStart = cursor - lastChunk.length + i + 1;\n mentionables.init(activeFormat.makeMentionables());\n break;\n }\n }\n\n dropdown.hide();\n dropdown.active = false;\n\n if (absMentionStart) {\n const typed = lastChunk.substring(relMentionStart).toLowerCase();\n matchTyped = activeFormat.queryFromTyped(typed);\n\n if (!matchTyped) return;\n\n mentionables.typed = matchTyped;\n\n const buildSuggestions = () => {\n // If the user has started to type a mention,\n // then suggest models matching.\n const suggestions = mentionables.buildSuggestions();\n\n if (suggestions.length) {\n dropdown.items = suggestions;\n m.render($container[0], dropdown.render());\n\n dropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart);\n const width = dropdown.$().outerWidth();\n const height = dropdown.$().outerHeight();\n const parent = dropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n\n dropdown.show(left, top);\n } else {\n dropdown.active = false;\n dropdown.hide();\n }\n };\n\n dropdown.active = true;\n\n buildSuggestions();\n\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n\n mentionables.search()?.then(buildSuggestions);\n }\n };\n\n params.inputListeners.push(suggestionsInputListener);\n });\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'mention',\n this.attrs.composer.editor.insertAtCursor(' @')} icon=\"fas fa-at\">\n {app.translator.trans('flarum-mentions.forum.composer.mention_tooltip')}\n \n );\n });\n}\n"],"names":["_typeof","require","_regeneratorRuntime","module","exports","__esModule","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","undefined","done","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","Function","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","d","a","definition","o","get","prop","r","flarum","core","compat","_setPrototypeOf","p","bind","_inheritsLoose","subClass","superClass","_extends","assign","target","arguments","source","apply","_defineProperties","props","descriptor","MentionedByModalState","params","page","limit","Constructor","protoProps","PaginatedListState","MentionedByModal","oninit","vnode","filter","mentionedPost","attrs","post","id","sort","refresh","className","title","app","content","isInitialLoading","getPages","map","items","reply","number","onclick","hasNext","loadNext","loading","isLoadingNext","Modal","insertMention","composer","quote","mention","replacement","fields","body","originalContent","cursorPosition","editor","getSelectionRange","preceding","precedingNewlines","match","insertAtCursor","Array","join","trim","replace","EditPostComposer","discussion","DiscussionControls","PostQuoteButton","view","icon","show","left","top","$this","$","parentOffset","offsetParent","offset","css","hideHandler","hide","document","on","showStart","window","scrollTop","outerHeight","showEnd","right","bottom","outerWidth","off","Fragment","selectedText","selection","getSelection","isCollapsed","range","getRangeAt","parent","commonAncestorContainer","contains","clone","append","cloneContents","find","replaceWith","alt","src","innerText","href","text","AutocompleteDropdown","active","index","keyWasJustPressed","item","navigate","delta","setIndex","clearTimeout","keyWasJustPressedTimeout","setTimeout","eq","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","parseInt","animate","MentionFormat","instances","mentionables","extendable","makeMentionables","Mentionable","getMentionable","mentionable","extend","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","MentionableModel","format","getDeletedUserText","extractText","getCleanDisplayName","user","useDisplayName","username","UserMention","initialResults","from","cleanText","suggestion","model","typed","usernameHelper","children","highlight","avatar","matches","some","toLowerCase","substr","maxStoreMatchedResults","search","q","enabled","PostMention","ReplyComposer","composerAttrs","composerPost","posts","contentType","b","createdAt","getTime","truncate","contentPlain","userMentionable","GroupMention","g","Group","group","namePlural","groupName","color","nameSingular","canMentionGroups","AtMentionFormat","trigger","queryFromTyped","matchTyped","char","simple","safe","TagMention","tag","slug","tagName","extensions","HashMentionFormat","MentionFormats","formats","symbol","f","_objectWithoutPropertiesLoose","excluded","sourceKeys","indexOf","MentionsDropdownItem","classList","Component","MentionableModels","dropdownItemAttrs","results","searched","throttle","typedLower","includes","has","set","init","Map","makeSuggestion","buildSuggestions","suggestions","max","splice","dropdownItem","PostMentionedNotification","notification","subject","replyNumber","fromUser","count","excerpt","Notification","UserMentionedNotification","GroupMentionedNotification","MentionsUserPage","loadResults","mentioned","loadLimit","PostsUserPage","Extend","add","Post","hasMany","attribute","User","filterUserMentions","hasAttribute","getAttribute","setAttribute","invalidate","postFilterUserMentions","filterPostMentions","postFilterPostMentions","filterGroupMentions","postFilterGroupMentions","filterTagMentions","postFilterTagMentions","postId","textFormatter","mentionFormats","addPreviews","contentHtml","oldPostContentHtml","isEditing","parentPost","$parentPost","e","m","route","preventDefault","each","timeout","data","$preview","getPostElement","showPreview","$post","visible","pageYOffset","height","positionPreview","previewHeight","width","showPost","render","store","getById","hidePreview","hasClass","one","cancelable","hover","stopPropagation","CommentPost","addPostMentionPreviews","replies","mentionedBy","is","mentionedByCount","users","repliers","overLimit","names","punctuateSeries","addMentionedByList","isHidden","canReply","$postBody","$container","button","handler","rects","getClientRects","firstRect","clientY","clientX","lastRect","after","addEventListener","dropdown","TextEditor","$editor","navigator","KeyboardNavigatable","when","onUp","onDown","onSelect","onCancel","bindTo","relMentionStart","absMentionStart","onmouseenter","replaceBeforeCursor","inputListeners","cursor","lastChunk","getLastNChars","activeFormat","character","test","substring","coordinates","getCaretCoordinates","Math","addComposerAutocomplete","NotificationGrid","label","UserPage","getPlainContent","textContrastClass","getComputedStyle","getPropertyValue","mentionsCompat"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/typeof.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/regenerator/index.js","webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/Post']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/PostPreview']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/states/PaginatedListState']\"","webpack://@flarum/mentions/./src/forum/state/MentionedByModalState.ts","webpack://@flarum/mentions/./src/forum/components/MentionedByModal.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/utils/DiscussionControls']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/EditPostComposer']\"","webpack://@flarum/mentions/./src/forum/utils/reply.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Fragment']\"","webpack://@flarum/mentions/./src/forum/fragments/PostQuoteButton.js","webpack://@flarum/mentions/./src/forum/utils/selectedText.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/TextEditorButton']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/KeyboardNavigatable']\"","webpack://@flarum/mentions/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/mentions/../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/mentions/./src/forum/components/MentionsDropdownItem.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/throttleDebounce']\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModels.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/mentions/./src/forum/components/PostMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/UserMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/GroupMentionedNotification.js","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormat.ts","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/helpers/highlight']\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModel.ts","webpack://@flarum/mentions/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/mentions/./src/forum/utils/getCleanDisplayName.js","webpack://@flarum/mentions/./src/forum/mentionables/UserMention.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/ReplyComposer']\"","webpack://@flarum/mentions/./src/forum/mentionables/PostMention.tsx","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/Group']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/Badge']\"","webpack://@flarum/mentions/./src/forum/mentionables/GroupMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/AtMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/TagMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/HashMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormats.ts","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/UserPage']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/User']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/mentions/external root \"flarum.core.compat['forum/components/PostsUserPage']\"","webpack://@flarum/mentions/./src/forum/components/MentionsUserPage.js","webpack://@flarum/mentions/./src/forum/extend.ts","webpack://@flarum/mentions/./src/forum/utils/textFormatter.js","webpack://@flarum/mentions/./src/forum/compat.js","webpack://@flarum/mentions/./src/forum/utils/getMentionText.js","webpack://@flarum/mentions/./src/forum/extenders/Mentionables.ts","webpack://@flarum/mentions/external assign \"flarum.core\"","webpack://@flarum/mentions/./src/forum/index.js","webpack://@flarum/mentions/./src/forum/addComposerAutocomplete.js","webpack://@flarum/mentions/./src/forum/addPostMentionPreviews.js","webpack://@flarum/mentions/./src/forum/addMentionedByList.js","webpack://@flarum/mentions/./src/forum/addPostReplyAction.js","webpack://@flarum/mentions/./src/forum/addPostQuoteButton.js"],"sourcesContent":["var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n return ContinueSentinel;\n }\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) {\n keys.push(key);\n }\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/NotificationGrid'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Post'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/PostPreview'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/punctuateSeries'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/states/PaginatedListState'];","import PaginatedListState, { PaginatedListParams } from 'flarum/common/states/PaginatedListState';\nimport Post from 'flarum/common/models/Post';\n\nexport interface MentionedByModalListParams extends PaginatedListParams {\n filter: {\n mentionedPost: string;\n };\n sort?: string;\n page?: {\n offset?: number;\n limit: number;\n };\n}\n\nexport default class MentionedByModalState

      extends PaginatedListState {\n constructor(params: P, page: number = 1) {\n const limit = 10;\n\n params.page = { ...(params.page || {}), limit };\n\n super(params, page, limit);\n }\n\n get type(): string {\n return 'posts';\n }\n}\n","import app from 'flarum/forum/app';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport type Mithril from 'mithril';\nimport type Post from 'flarum/common/models/Post';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModalState from '../state/MentionedByModalState';\n\nexport interface IMentionedByModalAttrs extends IInternalModalAttrs {\n post: Post;\n}\n\nexport default class MentionedByModal extends Modal<\n CustomAttrs,\n MentionedByModalState\n> {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.state = new MentionedByModalState({\n filter: {\n mentionedPost: this.attrs.post.id()!,\n },\n sort: 'number',\n });\n\n this.state.refresh();\n }\n\n className(): string {\n return 'MentionedByModal';\n }\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-mentions.forum.mentioned_by.title');\n }\n\n content(): Mithril.Children {\n return (\n <>\n

      \n {this.state.isInitialLoading() ? (\n \n ) : (\n <>\n
        \n {this.state.getPages().map((page) =>\n page.items.map((reply) => (\n
      • \n app.modal.close()} />\n
      • \n ))\n )}\n
      \n \n )}\n
      \n {this.state.hasNext() && (\n
      \n
      \n
      \n \n
      \n
      \n
      \n )}\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/EditPostComposer'];","import app from 'flarum/forum/app';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport EditPostComposer from 'flarum/forum/components/EditPostComposer';\n\nexport function insertMention(post, composer, quote) {\n return new Promise((resolve) => {\n const mention = app.mentionFormats.mentionable('post').replacement(post) + ' ';\n\n // If the composer is empty, then assume we're starting a new reply.\n // In which case we don't want the user to have to confirm if they\n // close the composer straight away.\n if (!composer.fields.content()) {\n composer.body.attrs.originalContent = mention;\n }\n\n const cursorPosition = composer.editor.getSelectionRange()[0];\n const preceding = composer.fields.content().slice(0, cursorPosition);\n const precedingNewlines = preceding.length == 0 ? 0 : 3 - preceding.match(/(\\n{0,2})$/)[0].length;\n\n composer.editor.insertAtCursor(\n Array(precedingNewlines).join('\\n') + // Insert up to two newlines, depending on preceding whitespace\n (quote ? '> ' + mention + quote.trim().replace(/\\n/g, '\\n> ') + '\\n\\n' : mention),\n false\n );\n return resolve(composer);\n });\n}\n\nexport default function reply(post, quote) {\n if (app.composer.bodyMatches(EditPostComposer) && app.composer.body.attrs.post.discussion() === post.discussion()) {\n // If we're already editing a post in the discussion of post we're quoting,\n // insert the mention directly.\n return insertMention(post, app.composer, quote);\n } else {\n // The default \"Reply\" action behavior will only open a new composer if\n // necessary, but it will always be a ReplyComposer, hence the exceptional\n // case above.\n return DiscussionControls.replyAction.call(post.discussion()).then((composer) => insertMention(post, composer, quote));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Fragment'];","import app from 'flarum/forum/app';\nimport Fragment from 'flarum/common/Fragment';\nimport icon from 'flarum/common/helpers/icon';\n\nimport reply from '../utils/reply';\n\nexport default class PostQuoteButton extends Fragment {\n constructor(post) {\n super();\n\n this.post = post;\n }\n\n view() {\n return (\n {\n reply(this.post, this.content);\n }}\n >\n {icon('fas fa-quote-left', { className: 'Button-icon' })}\n {app.translator.trans('flarum-mentions.forum.post.quote_button')}\n \n );\n }\n\n show(left, top) {\n const $this = this.$().show();\n const parentOffset = $this.offsetParent().offset();\n\n $this.css('left', left - parentOffset.left).css('top', top - parentOffset.top);\n\n this.hideHandler = this.hide.bind(this);\n $(document).on('mouseup', this.hideHandler);\n }\n\n showStart(left, top) {\n const $this = this.$();\n\n this.show(left, $(window).scrollTop() + top - $this.outerHeight() - 5);\n }\n\n showEnd(right, bottom) {\n const $this = this.$();\n\n this.show(right - $this.outerWidth(), $(window).scrollTop() + bottom + 5);\n }\n\n hide() {\n this.$().hide();\n $(document).off('mouseup', this.hideHandler);\n }\n}\n","/**\n * Finds the selected text in the provided composer body.\n */\nexport default function selectedText(body) {\n const selection = window.getSelection();\n\n if (!selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const parent = range.commonAncestorContainer;\n\n if (body[0] === parent || $.contains(body[0], parent)) {\n const clone = $('
      ').append(range.cloneContents());\n\n // Replace emoji images with their shortcode (found in alt attribute)\n clone.find('img.emoji').replaceWith(function () {\n return this.alt;\n });\n\n // Replace all other images with a Markdown image\n clone.find('img').replaceWith(function () {\n return `![](${this.src})`;\n });\n\n // Replace all links with a Markdown link\n clone.find('a').replaceWith(function () {\n return `[${this.innerText}](${this.href})`;\n });\n\n return clone.text();\n }\n }\n return '';\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditorButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/KeyboardNavigatable'];","import Fragment from 'flarum/common/Fragment';\n\nexport default class AutocompleteDropdown extends Fragment {\n items = [];\n active = false;\n index = 0;\n keyWasJustPressed = false;\n\n view() {\n return (\n
        \n {this.items.map((item) => (\n
      • {item}
      • \n ))}\n
      \n );\n }\n\n show(left, top) {\n this.$()\n .show()\n .css({\n left: left + 'px',\n top: top + 'px',\n });\n this.active = true;\n }\n\n hide() {\n this.$().hide();\n this.active = false;\n }\n\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => (this.keyWasJustPressed = false), 500);\n }\n\n complete() {\n this.$('li').eq(this.index).find('button').click();\n }\n\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n\n const $dropdown = this.$();\n const $items = $dropdown.find('li');\n let rangedIndex = index;\n\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n\n this.index = rangedIndex;\n\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({ scrollTop }, 100);\n }\n }\n }\n}\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\nimport type { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport type MentionableModel from '../mentionables/MentionableModel';\nimport type Mithril from 'mithril';\n\nexport interface IMentionsDropdownItemAttrs extends ComponentAttrs {\n mentionable: MentionableModel;\n onclick: () => void;\n onmouseenter: () => void;\n}\n\nexport default class MentionsDropdownItem extends Component {\n view(vnode: Mithril.Vnode): Mithril.Children {\n const { mentionable, ...attrs } = this.attrs;\n\n const className = classList('MentionsDropdownItem', 'PostPreview', `MentionsDropdown-${mentionable.type()}`);\n\n return (\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/throttleDebounce'];","import type MentionableModel from './MentionableModel';\nimport type Model from 'flarum/common/Model';\nimport type Mithril from 'mithril';\nimport MentionsDropdownItem from '../components/MentionsDropdownItem';\nimport { throttle } from 'flarum/common/utils/throttleDebounce';\n\nexport default class MentionableModels {\n protected mentionables?: MentionableModel[];\n /**\n * We store models returned from an API here to preserve order in which they are returned\n * This prevents the list jumping around while models are returned.\n * We also use a hashmap for model IDs to provide O(1) lookup for the users already in the list.\n */\n private results: Record> = {};\n public typed: string | null = null;\n private searched: string[] = [];\n private dropdownItemAttrs: Record = {};\n\n constructor(dropdownItemAttrs: Record) {\n this.dropdownItemAttrs = dropdownItemAttrs;\n }\n\n public init(mentionables: MentionableModel[]): void {\n this.typed = null;\n this.mentionables = mentionables;\n\n for (const mentionable of this.mentionables) {\n this.results[mentionable.type()] = new Map(mentionable.initialResults().map((result) => [result.id() as string, result]));\n }\n }\n\n /**\n * Don't send API calls searching for models until at least 2 characters have been typed.\n * This focuses the mention results on models already loaded.\n */\n public readonly search = throttle(250, async (): Promise => {\n if (!this.typed || this.typed.length <= 1) return;\n\n const typedLower = this.typed.toLowerCase();\n\n if (this.searched.includes(typedLower)) return;\n\n for (const mentionable of this.mentionables!) {\n for (const model of await mentionable.search(typedLower)) {\n if (!this.results[mentionable.type()].has(model.id() as string)) {\n this.results[mentionable.type()].set(model.id() as string, model);\n }\n }\n }\n\n this.searched.push(typedLower);\n\n return Promise.resolve();\n });\n\n public matches(mentionable: MentionableModel, model: Model): boolean {\n return mentionable.matches(model, this.typed?.toLowerCase() || '');\n }\n\n public makeSuggestion(mentionable: MentionableModel, model: Model): Mithril.Children {\n const content = mentionable.suggestion(model, this.typed!);\n const replacement = mentionable.replacement(model);\n\n const { onclick, ...attrs } = this.dropdownItemAttrs;\n\n return (\n onclick(replacement)} {...attrs}>\n {content}\n \n );\n }\n\n public buildSuggestions(): Mithril.Children {\n const suggestions: Mithril.Children = [];\n\n for (const mentionable of this.mentionables!) {\n if (!mentionable.enabled()) continue;\n\n let matches = Array.from(this.results[mentionable.type()].values()).filter((model) => this.matches(mentionable, model));\n\n const max = mentionable.maxStoreMatchedResults();\n if (max) matches = matches.splice(0, max);\n\n for (const model of matches) {\n const dropdownItem = this.makeSuggestion(mentionable, model);\n suggestions.push(dropdownItem);\n }\n }\n\n return suggestions;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Notification'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostMentionedNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n\n href() {\n const notification = this.attrs.notification;\n const post = notification.subject();\n const content = notification.content();\n\n return app.route.discussion(post.discussion(), content && content.replyNumber);\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.post_mentioned_text', { user, count: 1 });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain() || '', 200);\n }\n}\n","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class UserMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n\n href() {\n const post = this.attrs.notification.subject();\n\n return app.route.discussion(post.discussion(), post.number());\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.user_mentioned_text', { user });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class GroupMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n\n href() {\n const post = this.attrs.notification.subject();\n\n return app.route.discussion(post.discussion(), post.number());\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n\n return app.translator.trans('flarum-mentions.forum.notifications.group_mentioned_text', { user });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","import type MentionableModel from '../MentionableModel';\nimport type Model from 'flarum/common/Model';\n\nexport default abstract class MentionFormat {\n protected instances?: MentionableModel[];\n\n public makeMentionables(): MentionableModel[] {\n return this.instances ?? (this.instances = this.mentionables.map((Mentionable) => new Mentionable(this)));\n }\n\n public getMentionable(type: string): MentionableModel | null {\n return this.makeMentionables().find((mentionable) => mentionable.type() === type) ?? null;\n }\n\n public extend(mentionable: new (...args: any[]) => MentionableModel): void {\n if (!this.extendable) throw new Error('This mention format does not allow extending.');\n\n this.mentionables.push(mentionable);\n }\n\n abstract mentionables: (new (...args: any[]) => MentionableModel)[];\n\n protected abstract extendable: boolean;\n\n abstract trigger(): string;\n\n /**\n * Picks the term to search in the API from the typed text.\n * @example:\n * * Full text = `Hello @\"John D`\n * * Typed text = `\"John D`\n * * Query = `John D`\n */\n abstract queryFromTyped(typed: string): string | null;\n\n abstract format(...args: any): string;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/highlight'];","import type Mithril from 'mithril';\nimport type Model from 'flarum/common/Model';\nimport type MentionFormat from './formats/MentionFormat';\n\nexport default abstract class MentionableModel {\n public format: Format;\n\n public constructor(format: Format) {\n this.format = format;\n }\n\n abstract type(): string;\n abstract initialResults(): M[];\n abstract search(typed: string): Promise;\n abstract replacement(model: M): string;\n abstract suggestion(model: M, typed: string): Mithril.Children;\n abstract matches(model: M, typed: string): boolean;\n abstract maxStoreMatchedResults(): number | null;\n abstract enabled(): boolean;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","import app from 'flarum/forum/app';\nimport extractText from 'flarum/common/utils/extractText';\n\n/**\n * Whether to use the old mentions format.\n *\n * `'@username'` or `'@\"Display name\"'`\n */\nexport const shouldUseOldFormat = () => app.forum.attribute('allowUsernameMentionFormat') || false;\n\nconst getDeletedUserText = () => extractText(app.translator.trans('core.lib.username.deleted_text'));\n\n/**\n * Fetches a user's username or display name.\n *\n * Chooses based on the format option set in the admin settings page.\n *\n * @param user An instance of the User model to fetch the username for\n * @param useDisplayName If `true`, uses `user.displayName()`, otherwise, uses `user.username()`\n */\nexport default function getCleanDisplayName(user, useDisplayName = true) {\n if (!user) return getDeletedUserText().replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n\n const text = (useDisplayName ? user.displayName() : user.username()) || getDeletedUserText();\n\n return text.replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n}\n","import app from 'flarum/forum/app';\nimport type Mithril from 'mithril';\nimport type User from 'flarum/common/models/User';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport avatar from 'flarum/common/helpers/avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nimport getCleanDisplayName, { shouldUseOldFormat } from '../utils/getCleanDisplayName';\nimport AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class UserMention extends MentionableModel {\n type(): string {\n return 'user';\n }\n\n initialResults(): User[] {\n return Array.from(app.store.all('users'));\n }\n\n /**\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @\"Display name\"#UserID or `@username`\n *\n * @example New display name syntax\n * // '@\"user\"#1'\n * forUser(User) // User is ID 1, display name is 'User'\n *\n * @example Using old syntax\n * // '@username'\n * forUser(user) // User's username is 'username'\n */\n public replacement(user: User): string {\n if (shouldUseOldFormat()) {\n const cleanText = getCleanDisplayName(user, false);\n return this.format.format(cleanText);\n }\n\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, '', user.id());\n }\n\n suggestion(model: User, typed: string): Mithril.Children {\n const username = usernameHelper(model);\n\n if (typed) {\n username.children = [highlight((username.text ?? '') as string, typed)];\n delete username.text;\n }\n\n return (\n <>\n {avatar(model)}\n {username}\n \n );\n }\n\n matches(model: User, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.username(), model.displayName()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n async search(typed: string): Promise {\n return await app.store.find('users', { filter: { q: typed }, page: { limit: 5 } });\n }\n\n enabled(): boolean {\n return true;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/ReplyComposer'];","import app from 'flarum/forum/app';\nimport MentionableModel from './MentionableModel';\nimport type Post from 'flarum/common/models/Post';\nimport type Mithril from 'mithril';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport avatar from 'flarum/common/helpers/avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport { truncate } from 'flarum/common/utils/string';\nimport ReplyComposer from 'flarum/forum/components/ReplyComposer';\nimport EditPostComposer from 'flarum/forum/components/EditPostComposer';\nimport getCleanDisplayName from '../utils/getCleanDisplayName';\nimport type AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class PostMention extends MentionableModel {\n type(): string {\n return 'post';\n }\n\n /**\n * If the user is replying to a discussion, or if they are editing a\n * post, then we can suggest other posts in the discussion to mention.\n * We will add the 5 most recent comments in the discussion which\n * match any username characters that have been typed.\n */\n initialResults(): Post[] {\n if (!app.composer.bodyMatches(ReplyComposer) && !app.composer.bodyMatches(EditPostComposer)) {\n return [];\n }\n\n // @ts-ignore\n const composerAttrs = app.composer.body.attrs;\n const composerPost = composerAttrs.post;\n const discussion = (composerPost && composerPost.discussion()) || composerAttrs.discussion;\n\n return (\n discussion\n .posts()\n // Filter to only comment posts, and replies before this message\n .filter((post: Post) => post && post.contentType() === 'comment' && (!composerPost || post.number() < composerPost.number()))\n // Sort by new to old\n .sort((a: Post, b: Post) => b.createdAt().getTime() - a.createdAt().getTime())\n );\n }\n\n /**\n * Generates the syntax for mentioning of a post. Also cleans up the display name.\n *\n * @example Post mention\n * // '@\"User\"#p13'\n * // @\"Display name\"#pPostID\n * forPostMention(user, 13) // User display name is 'User', post ID is 13\n */\n public replacement(post: Post): string {\n const user = post.user();\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, 'p', post.id());\n }\n\n suggestion(model: Post, typed: string): Mithril.Children {\n const user = model.user() || null;\n const username = usernameHelper(user);\n\n if (typed) {\n username.children = [highlight((username.text ?? '') as string, typed)];\n delete username.text;\n }\n\n return (\n <>\n {avatar(user)}\n {username}\n {[\n app.translator.trans('flarum-mentions.forum.composer.reply_to_post_text', { number: model.number() }),\n ' — ',\n truncate(model.contentPlain() ?? '', 200),\n ]}\n \n );\n }\n\n matches(model: Post, typed: string): boolean {\n const user = model.user();\n const userMentionable = app.mentionFormats.mentionable('user')!;\n\n return !typed || (user && userMentionable.matches(user, typed));\n }\n\n maxStoreMatchedResults(): number {\n return 5;\n }\n\n /**\n * Post mention suggestions are only offered from current discussion posts.\n */\n search(typed: string): Promise {\n return Promise.resolve([]);\n }\n\n enabled(): boolean {\n return true;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Group'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Badge'];","import app from 'flarum/forum/app';\nimport Group from 'flarum/common/models/Group';\nimport MentionableModel from './MentionableModel';\nimport type Mithril from 'mithril';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport type AtMentionFormat from './formats/AtMentionFormat';\n\nexport default class GroupMention extends MentionableModel {\n type(): string {\n return 'group';\n }\n\n initialResults(): Group[] {\n return Array.from(\n app.store.all('groups').filter((g: Group) => {\n return g.id() !== Group.GUEST_ID && g.id() !== Group.MEMBER_ID;\n })\n );\n }\n\n /**\n * Generates the mention syntax for a group mention.\n *\n * @\"Name Plural\"#gGroupID\n *\n * @example Group mention\n * // '@\"Mods\"#g4'\n * forGroup(group) // Group display name is 'Mods', group ID is 4\n */\n public replacement(group: Group): string {\n return this.format.format(group.namePlural(), 'g', group.id());\n }\n\n suggestion(model: Group, typed: string): Mithril.Children {\n let groupName: Mithril.Children = model.namePlural();\n\n if (typed) {\n groupName = highlight(groupName, typed);\n }\n\n return (\n <>\n \n {groupName}\n \n );\n }\n\n matches(model: Group, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.namePlural().toLowerCase(), model.nameSingular().toLowerCase()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n /**\n * All groups are already loaded, so we don't need to search for them.\n */\n search(typed: string): Promise {\n return Promise.resolve([]);\n }\n\n enabled(): boolean {\n return app.session?.user?.canMentionGroups() ?? false;\n }\n}\n","import MentionFormat from './MentionFormat';\nimport type MentionableModel from '../MentionableModel';\nimport UserMention from '../UserMention';\nimport PostMention from '../PostMention';\nimport GroupMention from '../GroupMention';\n\nexport default class AtMentionFormat extends MentionFormat {\n public mentionables: (new (...args: any[]) => MentionableModel)[] = [UserMention, PostMention, GroupMention];\n protected extendable: boolean = true;\n\n public trigger(): string {\n return '@';\n }\n\n public queryFromTyped(typed: string): string | null {\n const matchTyped = typed.match(/^[\"“]?((?:(?!\"#).)+)$/);\n\n return matchTyped ? matchTyped[1] : null;\n }\n\n public format(name: string, char: string | null = '', id: string | null = null): string {\n return {\n simple: `@${name}`,\n safe: `@\"${name}\"#${char}${id}`,\n }[id ? 'safe' : 'simple'];\n }\n}\n","import app from 'flarum/forum/app';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport type Tag from 'flarum/tags/common/models/Tag';\nimport type Mithril from 'mithril';\nimport MentionableModel from './MentionableModel';\nimport type HashMentionFormat from './formats/HashMentionFormat';\n\nexport default class TagMention extends MentionableModel {\n type(): string {\n return 'tag';\n }\n\n initialResults(): Tag[] {\n return Array.from(app.store.all('tags'));\n }\n\n /**\n * Generates the mention syntax for a tag mention.\n *\n * ~tagSlug\n *\n * @example Tag mention\n * // ~general\n * forTag(tag) // Tag display name is 'Tag', tag ID is 5\n */\n public replacement(tag: Tag): string {\n return this.format.format(tag.slug());\n }\n\n matches(model: Tag, typed: string): boolean {\n if (!typed) return false;\n\n const names = [model.name().toLowerCase()];\n\n return names.some((name) => name.toLowerCase().substr(0, typed.length) === typed);\n }\n\n maxStoreMatchedResults(): null {\n return null;\n }\n\n async search(typed: string): Promise {\n return await app.store.find('tags', { filter: { q: typed }, page: { limit: 5 } });\n }\n\n suggestion(model: Tag, typed: string): Mithril.Children {\n let tagName: Mithril.Children = model.name();\n\n if (typed) {\n tagName = highlight(tagName, typed);\n }\n\n return (\n <>\n \n {tagName}\n \n );\n }\n\n enabled(): boolean {\n return 'flarum-tags' in flarum.extensions;\n }\n}\n","import MentionFormat from './MentionFormat';\nimport MentionableModel from '../MentionableModel';\nimport TagMention from '../TagMention';\n\nexport default class HashMentionFormat extends MentionFormat {\n public mentionables: (new (...args: any[]) => MentionableModel)[] = [TagMention];\n protected extendable: boolean = true;\n\n public trigger(): string {\n return '#';\n }\n\n public queryFromTyped(typed: string): string | null {\n const matchTyped = typed.match(/^[-_\\p{L}\\p{N}\\p{M}]+$/giu);\n\n return matchTyped ? matchTyped[0] : null;\n }\n\n public format(slug: string): string {\n return `#${slug}`;\n }\n}\n","import AtMentionFormat from './AtMentionFormat';\nimport HashMentionFormat from './HashMentionFormat';\nimport type MentionFormat from './MentionFormat';\nimport MentionableModel from '../MentionableModel';\n\nexport default class MentionFormats {\n protected formats: MentionFormat[] = [new AtMentionFormat(), new HashMentionFormat()];\n\n public get(symbol: string): MentionFormat | null {\n return this.formats.find((f) => f.trigger() === symbol) ?? null;\n }\n\n public mentionable(type: string): MentionableModel | null {\n for (const format of this.formats) {\n const mentionable = format.getMentionable(type);\n\n if (mentionable) return mentionable;\n }\n\n return null;\n }\n\n public extend(format: new () => MentionFormat) {\n this.formats.push(new format());\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/User'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Post'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/PostsUserPage'];","import app from 'flarum/forum/app';\nimport PostsUserPage from 'flarum/forum/components/PostsUserPage';\n\n/**\n * The `MentionsUserPage` component shows post which user Mentioned at\n */\nexport default class MentionsUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n mentioned: this.user.id(),\n },\n page: { offset, limit: this.loadLimit },\n sort: '-createdAt',\n });\n }\n}\n","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport User from 'flarum/common/models/User';\nimport MentionsUserPage from './components/MentionsUserPage';\n\nexport default [\n new Extend.Routes() //\n .add('user.mentions', '/u/:username/mentions', MentionsUserPage),\n\n new Extend.Model(Post) //\n .hasMany('mentionedBy')\n .attribute('mentionedByCount'),\n\n new Extend.Model(User) //\n .attribute('canMentionGroups'),\n];\n","import app from 'flarum/forum/app';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport function filterUserMentions(tag) {\n let user;\n\n if (app.forum.attribute('allowUsernameMentionFormat') && tag.hasAttribute('username'))\n user = app.store.getBy('users', 'username', tag.getAttribute('username'));\n else if (tag.hasAttribute('id')) user = app.store.getById('users', tag.getAttribute('id'));\n\n if (user) {\n tag.setAttribute('id', user.id());\n tag.setAttribute('slug', user.slug());\n tag.setAttribute('displayname', extractText(username(user)));\n\n return true;\n }\n\n tag.invalidate();\n}\n\nexport function postFilterUserMentions(tag) {\n tag.setAttribute('deleted', false);\n}\n\nexport function filterPostMentions(tag) {\n const post = app.store.getById('posts', tag.getAttribute('id'));\n\n if (post) {\n tag.setAttribute('discussionid', post.discussion().id());\n tag.setAttribute('number', post.number());\n tag.setAttribute('displayname', extractText(username(post.user())));\n\n return true;\n }\n}\n\nexport function postFilterPostMentions(tag) {\n tag.setAttribute('deleted', false);\n}\n\nexport function filterGroupMentions(tag) {\n if (app.session?.user?.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n\n if (group) {\n tag.setAttribute('groupname', extractText(group.namePlural()));\n\n return true;\n }\n }\n\n tag.invalidate();\n}\n\nexport function postFilterGroupMentions(tag) {\n if (app.session?.user?.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n\n tag.setAttribute('color', group.color());\n tag.setAttribute('icon', group.icon());\n tag.setAttribute('deleted', false);\n }\n}\n\nexport function filterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n\n if (model) {\n tag.setAttribute('id', model.id());\n tag.setAttribute('tagname', model.name());\n\n return true;\n }\n }\n\n tag.invalidate();\n}\n\nexport function postFilterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n\n tag.setAttribute('icon', model.icon());\n tag.setAttribute('color', model.color());\n tag.setAttribute('deleted', false);\n }\n}\n","import GroupMentionedNotification from './components/GroupMentionedNotification';\nimport MentionsUserPage from './components/MentionsUserPage';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport getCleanDisplayName from './utils/getCleanDisplayName';\nimport getMentionText from './utils/getMentionText';\nimport * as reply from './utils/reply';\nimport selectedText from './utils/selectedText';\nimport * as textFormatter from './utils/textFormatter';\nimport MentionableModel from './mentionables/MentionableModel';\nimport MentionFormat from './mentionables/formats/MentionFormat';\nimport Mentionables from './extenders/Mentionables';\n\nexport default {\n 'mentions/components/MentionsUserPage': MentionsUserPage,\n 'mentions/components/PostMentionedNotification': PostMentionedNotification,\n 'mentions/components/UserMentionedNotification': UserMentionedNotification,\n 'mentions/components/GroupMentionedNotification': GroupMentionedNotification,\n 'mentions/fragments/AutocompleteDropdown': AutocompleteDropdown,\n 'mentions/fragments/PostQuoteButton': PostQuoteButton,\n 'mentions/utils/getCleanDisplayName': getCleanDisplayName,\n 'mentions/utils/getMentionText': getMentionText,\n 'mentions/utils/reply': reply,\n 'mentions/utils/selectedText': selectedText,\n 'mentions/utils/textFormatter': textFormatter,\n 'mentions/mentionables/MentionableModel': MentionableModel,\n 'mentions/mentionables/formats/MentionFormat': MentionFormat,\n 'mentions/extenders/Mentionables': Mentionables,\n};\n","import app from 'flarum/forum/app';\n\n/**\n * Fetches the mention text for a specified user (and optionally a post ID for replies or group).\n *\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @deprecated Use `app.mentionables.get('user').replacement(user)` instead. Will be removed in 2.0.\n */\nexport default function getMentionText(user, postId, group) {\n if (user !== undefined && postId === undefined) {\n return app.mentionables.get('user').replacement(user);\n } else if (user !== undefined && postId !== undefined) {\n return app.mentionables.get('post').replacement(app.store.getById('posts', postId));\n } else if (group !== undefined) {\n return app.mentionables.get('group').replacement(group);\n }\n\n throw 'No parameters were passed';\n}\n","import type ForumApplication from 'flarum/forum/ForumApplication';\nimport type IExtender from 'flarum/common/extenders/IExtender';\nimport type MentionableModel from '../mentionables/MentionableModel';\nimport type MentionFormat from '../mentionables/formats/MentionFormat';\n\nexport default class Mentionables implements IExtender {\n protected formats: (new () => MentionFormat)[] = [];\n protected mentionables: Record MentionableModel)[]> = {};\n\n /**\n * Register a new mention format.\n * Must extend MentionFormat and have a unique unused trigger symbol.\n */\n format(format: new () => MentionFormat): this {\n this.formats.push(format);\n\n return this;\n }\n\n /**\n * Register a new mentionable model to a mention format.\n * Only works if the format has already been registered,\n * and the format allows using multiple mentionables.\n *\n * @param symbol The trigger symbol of the format to extend (ex: @).\n * @param mentionable The mentionable instance to register.\n * Must extend MentionableModel.\n */\n mentionable(symbol: string, mentionable: new (...args: any[]) => MentionableModel): this {\n if (!this.mentionables[symbol]) {\n this.mentionables[symbol] = [];\n }\n\n this.mentionables[symbol].push(mentionable);\n\n return this;\n }\n\n extend(app: ForumApplication): void {\n for (const format of this.formats) {\n app.mentionFormats.extend(format);\n }\n\n for (const symbol in this.mentionables) {\n const format = app.mentionFormats.get(symbol);\n\n if (!format) continue;\n\n for (const mentionable of this.mentionables[symbol]) {\n format.extend(mentionable);\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\nimport { getPlainContent } from 'flarum/common/utils/string';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport Post from 'flarum/forum/components/Post';\n\nimport addPostMentionPreviews from './addPostMentionPreviews';\nimport addMentionedByList from './addMentionedByList';\nimport addPostReplyAction from './addPostReplyAction';\nimport addPostQuoteButton from './addPostQuoteButton';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport GroupMentionedNotification from './components/GroupMentionedNotification';\nimport MentionFormats from './mentionables/formats/MentionFormats';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport User from 'flarum/common/models/User';\nimport Model from 'flarum/common/Model';\n\napp.mentionFormats = new MentionFormats();\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-mentions', function () {\n // For every mention of a post inside a post's content, set up a hover handler\n // that shows a preview of the mentioned post.\n addPostMentionPreviews();\n\n // In the footer of each post, show information about who has replied (i.e.\n // who the post has been mentioned by).\n addMentionedByList();\n\n // Add a 'reply' control to the footer of each post. When clicked, it will\n // open up the composer and add a post mention to its contents.\n addPostReplyAction();\n\n // Show a Quote button when Post text is selected\n addPostQuoteButton();\n\n // After typing '@' in the composer, show a dropdown suggesting a bunch of\n // posts or users that the user could mention.\n addComposerAutocomplete();\n\n app.notificationComponents.postMentioned = PostMentionedNotification;\n app.notificationComponents.userMentioned = UserMentionedNotification;\n app.notificationComponents.groupMentioned = GroupMentionedNotification;\n\n // Add notification preferences.\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postMentioned', {\n name: 'postMentioned',\n icon: 'fas fa-reply',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_post_mentioned_label'),\n });\n\n items.add('userMentioned', {\n name: 'userMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_user_mentioned_label'),\n });\n\n items.add('groupMentioned', {\n name: 'groupMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_group_mentioned_label'),\n });\n });\n\n // Add mentions tab in user profile\n extend(UserPage.prototype, 'navItems', function (items) {\n const user = this.user;\n items.add(\n 'mentions',\n \n {app.translator.trans('flarum-mentions.forum.user.mentions_link')}\n ,\n 80\n );\n });\n\n // Remove post mentions when rendering post previews.\n getPlainContent.removeSelectors.push('a.PostMention');\n\n // Apply color contrast fix on group mentions.\n extend(Post.prototype, 'oncreate', function () {\n this.$('.GroupMention--colored, .TagMention--colored').each(function () {\n this.classList.add(textContrastClass(getComputedStyle(this).getPropertyValue('--color')));\n });\n });\n});\n\nexport * from './utils/textFormatter';\n\n// Expose compat API\nimport mentionsCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, mentionsCompat);\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport TextEditorButton from 'flarum/common/components/TextEditorButton';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\n\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport MentionableModels from './mentionables/MentionableModels';\n\nexport default function addComposerAutocomplete() {\n const $container = $('
      ');\n const dropdown = new AutocompleteDropdown();\n\n extend(TextEditor.prototype, 'oncreate', function () {\n const $editor = this.$('.TextEditor-editor').wrap('
      ');\n\n this.navigator = new KeyboardNavigatable();\n this.navigator\n .when(() => dropdown.active)\n .onUp(() => dropdown.navigate(-1))\n .onDown(() => dropdown.navigate(1))\n .onSelect(dropdown.complete.bind(dropdown))\n .onCancel(dropdown.hide.bind(dropdown))\n .bindTo($editor);\n\n $editor.after($container);\n });\n\n extend(TextEditor.prototype, 'buildEditorParams', function (params) {\n let relMentionStart;\n let absMentionStart;\n let matchTyped;\n\n let mentionables = new MentionableModels({\n onmouseenter: function () {\n dropdown.setIndex($(this).parent().index());\n },\n onclick: (replacement) => {\n this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' ');\n\n dropdown.hide();\n },\n });\n\n const suggestionsInputListener = () => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n\n const cursor = selection[0];\n\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for a mention triggering symbol. If we find one,\n // we will want to show the correct autocomplete dropdown!\n // Check classes implementing the IMentionableModel interface to see triggering symbols.\n const lastChunk = this.attrs.composer.editor.getLastNChars(30);\n absMentionStart = 0;\n let activeFormat = null;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n activeFormat = app.mentionFormats.get(character);\n\n if (activeFormat && (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relMentionStart = i + 1;\n absMentionStart = cursor - lastChunk.length + i + 1;\n mentionables.init(activeFormat.makeMentionables());\n break;\n }\n }\n\n dropdown.hide();\n dropdown.active = false;\n\n if (absMentionStart) {\n const typed = lastChunk.substring(relMentionStart).toLowerCase();\n matchTyped = activeFormat.queryFromTyped(typed);\n\n if (!matchTyped) return;\n\n mentionables.typed = matchTyped;\n\n const buildSuggestions = () => {\n // If the user has started to type a mention,\n // then suggest models matching.\n const suggestions = mentionables.buildSuggestions();\n\n if (suggestions.length) {\n dropdown.items = suggestions;\n m.render($container[0], dropdown.render());\n\n dropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart);\n const width = dropdown.$().outerWidth();\n const height = dropdown.$().outerHeight();\n const parent = dropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n\n dropdown.show(left, top);\n } else {\n dropdown.active = false;\n dropdown.hide();\n }\n };\n\n dropdown.active = true;\n\n buildSuggestions();\n\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n\n mentionables.search()?.then(buildSuggestions);\n }\n };\n\n params.inputListeners.push(suggestionsInputListener);\n });\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'mention',\n this.attrs.composer.editor.insertAtCursor(' @')} icon=\"fas fa-at\">\n {app.translator.trans('flarum-mentions.forum.composer.mention_tooltip')}\n \n );\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nexport default function addPostMentionPreviews() {\n function addPreviews() {\n const contentHtml = this.attrs.post.contentHtml();\n\n if (contentHtml === this.oldPostContentHtml || this.isEditing()) return;\n\n this.oldPostContentHtml = contentHtml;\n\n const parentPost = this.attrs.post;\n const $parentPost = this.$();\n\n this.$().on(\n 'click',\n '.UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)',\n function (e) {\n m.route.set(this.getAttribute('href'));\n e.preventDefault();\n }\n );\n\n this.$('.PostMention:not(.PostMention--deleted)').each(function () {\n const $this = $(this);\n const id = $this.data('id');\n let timeout;\n\n // Wrap the mention link in a wrapper element so that we can insert a\n // preview popup as its sibling and relatively position it.\n const $preview = $('
        ');\n $parentPost.append($preview);\n\n const getPostElement = () => {\n return $(`.PostStream-item[data-id=\"${id}\"]`);\n };\n\n const showPreview = () => {\n // When the user hovers their mouse over the mention, look for the\n // post that it's referring to in the stream, and determine if it's\n // in the viewport. If it is, we will \"pulsate\" it.\n const $post = getPostElement();\n let visible = false;\n if ($post.length) {\n const top = $post.offset().top;\n const scrollTop = window.pageYOffset;\n if (top > scrollTop && top + $post.height() < scrollTop + $(window).height()) {\n $post.addClass('pulsate');\n visible = true;\n }\n }\n\n // Otherwise, we will show a popup preview of the post. If the post\n // hasn't yet been loaded, we will need to do that.\n if (!visible) {\n // Position the preview so that it appears above the mention.\n // (The offsetParent should be .Post-body.)\n const positionPreview = () => {\n const previewHeight = $preview.outerHeight(true);\n let offset = 0;\n\n // If the preview goes off the top of the viewport, reposition it to\n // be below the mention.\n if ($this.offset().top - previewHeight < $(window).scrollTop() + $('#header').outerHeight()) {\n offset += $this.outerHeight(true);\n } else {\n offset -= previewHeight;\n }\n\n $preview\n .show()\n .css('top', $this.offset().top - $parentPost.offset().top + offset)\n .css('left', $this.offsetParent().offset().left - $parentPost.offset().left)\n .css('max-width', $this.offsetParent().width());\n };\n\n const showPost = (post) => {\n const discussion = post.discussion();\n\n m.render($preview[0], [\n discussion !== parentPost.discussion() && (\n
      • \n {discussion.title()}\n
      • \n ),\n
      • \n \n
      • ,\n ]);\n positionPreview();\n };\n\n const post = app.store.getById('posts', id);\n if (post && post.discussion()) {\n showPost(post);\n } else {\n m.render($preview[0], );\n app.store.find('posts', id).then(showPost);\n positionPreview();\n }\n\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }\n };\n\n const hidePreview = () => {\n getPostElement().removeClass('pulsate');\n if ($preview.hasClass('in')) {\n $preview.removeClass('in').one('transitionend', () => $preview.hide());\n }\n };\n\n // On a touch (mobile) device we cannot hover the link to reveal the preview.\n // Instead we cancel the navigation so that a click reveals the preview.\n // Users can then click on the preview to go to the post if desired.\n $this.on('touchend', (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n });\n\n $this\n .add($preview)\n .hover(\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n },\n () => {\n clearTimeout(timeout);\n getPostElement().removeClass('pulsate');\n timeout = setTimeout(hidePreview, 250);\n }\n )\n .on('touchend', (e) => {\n showPreview();\n e.stopPropagation();\n });\n\n $(document).on('touchend', hidePreview);\n });\n }\n\n extend(CommentPost.prototype, 'oncreate', addPreviews);\n extend(CommentPost.prototype, 'onupdate', addPreviews);\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModal from './components/MentionedByModal';\n\nexport default function addMentionedByList() {\n function hidePreview() {\n this.$('.Post-mentionedBy-preview')\n .removeClass('in')\n .one('transitionend', function () {\n $(this).hide();\n });\n }\n\n extend(CommentPost.prototype, 'oncreate', function () {\n let timeout;\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n\n if (replies && replies.length) {\n const $preview = $('
          ');\n this.$().append($preview);\n\n const $parentPost = this.$();\n const $this = this.$('.Post-mentionedBy');\n\n const showPreview = () => {\n if (!$preview.hasClass('in') && $preview.is(':visible')) return;\n\n // When the user hovers their mouse over the list of people who have\n // replied to the post, render a list of reply previews into a\n // popup.\n m.render(\n $preview[0],\n <>\n {replies.map((reply) => (\n
        • \n \n
        • \n ))}\n {replies.length < post.mentionedByCount() && (\n
        • \n {\n hidePreview.call(this);\n app.modal.show(MentionedByModal, { post });\n }}\n >\n \n {icon('fas fa-reply-all')}\n \n {app.translator.trans('flarum-mentions.forum.post.mentioned_by_more_text', { count: post.mentionedByCount() - replies.length })}\n \n \n \n
        • \n )}\n \n );\n\n $preview\n .show()\n .css('top', $this.offset().top - $parentPost.offset().top + $this.outerHeight(true))\n .css('left', $this.offsetParent().offset().left - $parentPost.offset().left)\n .css('max-width', $parentPost.width());\n\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n };\n\n $this.add($preview).hover(\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n },\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(hidePreview, 250);\n }\n );\n\n // Whenever the user hovers their mouse over a particular name in the\n // list of repliers, highlight the corresponding post in the preview\n // popup.\n this.$()\n .find('.Post-mentionedBy-summary a')\n .hover(\n function () {\n $preview.find('[data-number=\"' + $(this).data('number') + '\"]').addClass('active');\n },\n function () {\n $preview.find('[data-number]').removeClass('active');\n }\n );\n }\n });\n\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n\n if (replies && replies.length) {\n const users = [];\n const repliers = replies\n .sort((reply) => (reply.user() === app.session.user ? -1 : 0))\n .filter((reply) => {\n const user = reply.user();\n if (users.indexOf(user) === -1) {\n users.push(user);\n return true;\n }\n });\n\n const limit = 4;\n const overLimit = post.mentionedByCount() > limit;\n\n // Create a list of unique users who have replied. So even if a user has\n // replied twice, they will only be in this array once.\n const names = repliers.slice(0, overLimit ? limit - 1 : limit).map((reply) => {\n const user = reply.user();\n\n return (\n \n {app.session.user === user ? app.translator.trans('flarum-mentions.forum.post.you_text') : username(user)}\n \n );\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = post.mentionedByCount() - names.length;\n\n names.push(app.translator.trans('flarum-mentions.forum.post.others_text', { count }));\n }\n\n items.add(\n 'replies',\n
          \n \n {icon('fas fa-reply')}\n {app.translator.trans(`flarum-mentions.forum.post.mentioned_by${repliers[0].user() === app.session.user ? '_self' : ''}_text`, {\n count: names.length,\n users: punctuateSeries(names),\n })}\n \n
          \n );\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nimport reply from './utils/reply';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n items.add(\n 'reply',\n \n );\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport selectedText from './utils/selectedText';\n\nexport default function addPostQuoteButton() {\n extend(CommentPost.prototype, 'oncreate', function () {\n const post = this.attrs.post;\n\n if (post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n const $postBody = this.$('.Post-body');\n\n // Wrap the quote button in a wrapper element so that we can render\n // button into it.\n const $container = $('
          ');\n\n const button = new PostQuoteButton(post);\n\n const handler = function (e) {\n setTimeout(() => {\n const content = selectedText($postBody);\n if (content) {\n button.content = content;\n m.render($container[0], button.render());\n\n const rects = window.getSelection().getRangeAt(0).getClientRects();\n const firstRect = rects[0];\n\n if (e.clientY < firstRect.bottom && e.clientX - firstRect.right < firstRect.left - e.clientX) {\n button.showStart(firstRect.left, firstRect.top);\n } else {\n const lastRect = rects[rects.length - 1];\n button.showEnd(lastRect.right, lastRect.bottom);\n }\n }\n }, 1);\n };\n\n this.$().after($container).on('mouseup', handler);\n\n if ('ontouchstart' in window) {\n document.addEventListener('selectionchange', handler, false);\n }\n });\n}\n"],"names":["_typeof","require","_regeneratorRuntime","module","exports","__esModule","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","undefined","done","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","Function","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","d","a","definition","o","get","prop","r","flarum","core","compat","_setPrototypeOf","p","bind","_inheritsLoose","subClass","superClass","_extends","assign","target","arguments","source","apply","_defineProperties","props","descriptor","MentionedByModalState","params","page","limit","Constructor","protoProps","PaginatedListState","MentionedByModal","oninit","vnode","filter","mentionedPost","attrs","post","id","sort","refresh","className","title","app","content","isInitialLoading","getPages","map","items","reply","number","onclick","hasNext","loadNext","loading","isLoadingNext","Modal","insertMention","composer","quote","mention","replacement","fields","body","originalContent","cursorPosition","editor","getSelectionRange","preceding","precedingNewlines","match","insertAtCursor","Array","join","trim","replace","EditPostComposer","discussion","DiscussionControls","PostQuoteButton","view","icon","show","left","top","$this","$","parentOffset","offsetParent","offset","css","hideHandler","hide","document","on","showStart","window","scrollTop","outerHeight","showEnd","right","bottom","outerWidth","off","Fragment","selectedText","selection","getSelection","isCollapsed","range","getRangeAt","parent","commonAncestorContainer","contains","clone","append","cloneContents","find","replaceWith","alt","src","innerText","href","text","AutocompleteDropdown","active","index","keyWasJustPressed","item","navigate","delta","setIndex","clearTimeout","keyWasJustPressedTimeout","setTimeout","eq","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","parseInt","animate","_objectWithoutPropertiesLoose","excluded","sourceKeys","indexOf","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","MentionsDropdownItem","mentionable","classList","children","Component","MentionableModels","dropdownItemAttrs","mentionables","results","typed","searched","search","throttle","typedLower","toLowerCase","includes","model","has","set","init","Map","initialResults","matches","makeSuggestion","suggestion","buildSuggestions","suggestions","enabled","from","max","maxStoreMatchedResults","splice","dropdownItem","PostMentionedNotification","notification","subject","replyNumber","user","fromUser","count","excerpt","truncate","contentPlain","Notification","UserMentionedNotification","GroupMentionedNotification","MentionFormat","instances","extendable","makeMentionables","Mentionable","getMentionable","extend","MentionableModel","format","getDeletedUserText","extractText","getCleanDisplayName","useDisplayName","username","UserMention","cleanText","usernameHelper","highlight","avatar","some","substr","q","PostMention","ReplyComposer","composerAttrs","composerPost","posts","contentType","b","createdAt","getTime","userMentionable","GroupMention","g","Group","group","namePlural","groupName","color","nameSingular","canMentionGroups","AtMentionFormat","trigger","queryFromTyped","matchTyped","char","simple","safe","TagMention","tag","slug","tagName","extensions","HashMentionFormat","MentionFormats","formats","symbol","f","MentionsUserPage","loadResults","mentioned","loadLimit","PostsUserPage","Extend","add","Post","hasMany","attribute","User","filterUserMentions","hasAttribute","getAttribute","setAttribute","invalidate","postFilterUserMentions","filterPostMentions","postFilterPostMentions","filterGroupMentions","postFilterGroupMentions","filterTagMentions","postFilterTagMentions","postId","textFormatter","mentionFormats","$container","dropdown","addPreviews","contentHtml","oldPostContentHtml","isEditing","parentPost","$parentPost","e","m","route","preventDefault","each","timeout","data","$preview","getPostElement","showPreview","$post","visible","pageYOffset","height","positionPreview","previewHeight","width","showPost","render","store","getById","hidePreview","hasClass","one","cancelable","hover","stopPropagation","CommentPost","addPostMentionPreviews","replies","mentionedBy","is","mentionedByCount","users","repliers","overLimit","names","punctuateSeries","addMentionedByList","isHidden","canReply","$postBody","button","handler","rects","getClientRects","firstRect","clientY","clientX","lastRect","after","addEventListener","TextEditor","$editor","navigator","KeyboardNavigatable","when","onUp","onDown","onSelect","onCancel","bindTo","relMentionStart","absMentionStart","onmouseenter","replaceBeforeCursor","inputListeners","cursor","lastChunk","getLastNChars","activeFormat","character","test","substring","coordinates","getCaretCoordinates","Math","NotificationGrid","label","UserPage","getPlainContent","textContrastClass","getComputedStyle","getPropertyValue","mentionsCompat"],"sourceRoot":""} \ No newline at end of file