4,s=e.sort((function(t){return t===r().session.user?-1:1})).slice(0,n?3:4).map((function(t){return m(p(),{href:r().route.user(t)},t===r().session.user?r().translator.trans("flarum-likes.forum.post.you_text"):v()(t))}));if(n){var a=o.likesCount()-s.length,i=r().translator.trans("flarum-likes.forum.post.others_link",{count:a});r().forum.attribute("canSearchUsers")?s.push(m(u(),{className:"Button Button--ua-reset Button--text",onclick:function(t){t.preventDefault(),r().modal.show(C,{post:o})}},i)):s.push(m("span",null,i))}t.add("liked",m("div",{className:"Post-likedBy"},b()("far fa-thumbs-up"),r().translator.trans("flarum-likes.forum.post.liked_by"+(e[0]===r().session.user?"_self":"")+"_text",{count:s.length,users:k()(s)})))}})),(0,e.extend)(z().prototype,"navItems",(function(t){var o=this.user;t.add("likes",m(D(),{href:r().route("user.likes",{username:null==o?void 0:o.slug()}),icon:"far fa-thumbs-up"},r().translator.trans("flarum-likes.forum.user.likes_link")),88)})),(0,e.extend)(a().prototype,"notificationTypes",(function(t){t.add("postLiked",{name:"postLiked",icon:"far fa-thumbs-up",label:r().translator.trans("flarum-likes.forum.settings.notify_post_liked_label")})}))})),Object.assign(W.compat,V)})(),module.exports=o})();
//# sourceMappingURL=forum.js.map
\ No newline at end of file
diff --git a/extensions/likes/js/dist/forum.js.map b/extensions/likes/js/dist/forum.js.map
index c78606f65c..189c2f1cd0 100644
--- a/extensions/likes/js/dist/forum.js.map
+++ b/extensions/likes/js/dist/forum.js.map
@@ -1 +1 @@
-{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,qC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,kC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,2B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAzC,SAASC,EAAgBhB,EAAGiB,GAKzC,OAJAD,EAAkBf,OAAOiB,eAAiBjB,OAAOiB,eAAeC,OAAS,SAAyBnB,EAAGiB,GAEnG,OADAjB,EAAEoB,UAAYH,EACPjB,CACT,EACOgB,EAAgBhB,EAAGiB,EAC5B,CCLe,SAASI,EAAeC,EAAUC,GAC/CD,EAASf,UAAYN,OAAOuB,OAAOD,EAAWhB,WAC9Ce,EAASf,UAAUkB,YAAcH,EACjCJ,EAAeI,EAAUC,EAC3B,CCLA,MAAM,EAA+BV,OAAOC,KAAKC,OAAO,2B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAzC,SAASW,IAYtB,OAXAA,EAAWzB,OAAO0B,OAAS1B,OAAO0B,OAAOR,OAAS,SAAUS,GAC1D,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GACvB,IAAK,IAAI9B,KAAOiC,EACV/B,OAAOM,UAAUC,eAAeC,KAAKuB,EAAQjC,KAC/C6B,EAAO7B,GAAOiC,EAAOjC,GAG3B,CACA,OAAO6B,CACT,EACOF,EAASO,MAAMC,KAAMJ,UAC9B,CCbA,SAASK,EAAkBP,EAAQQ,GACjC,IAAK,IAAIP,EAAI,EAAGA,EAAIO,EAAML,OAAQF,IAAK,CACrC,IAAIQ,EAAaD,EAAMP,GACvBQ,EAAWlC,WAAakC,EAAWlC,aAAc,EACjDkC,EAAWC,cAAe,EACtB,UAAWD,IAAYA,EAAWE,UAAW,GACjDtC,OAAOC,eAAe0B,EAAQS,EAAWtC,IAAKsC,EAChD,CACF,CCRA,MAAM,EAA+BxB,OAAOC,KAAKC,OAAO,oC,ICanCyB,EAAmB,YACtC,WAAYC,EAAWC,GAG2B,YAHf,IAAZA,IAAAA,EAAe,GAGpCD,EAAOC,KAAO,KAAMD,EAAOC,MAAQ,CAAC,EAAC,CAAGC,MAF1B,KAId,YAAMF,EAAQC,EAJA,KAIY,IAC5B,CFXa,IAAsBE,EAAaC,EEe/C,OAXqC,OFJHD,EEWlC,GFX+CC,EEW/C,iBAED,WACE,MAAO,OACT,MFdgBV,EAAkBS,EAAYrC,UAAWsC,GAEzD5C,OAAOC,eAAe0C,EAAa,YAAa,CAC9CL,UAAU,IEWX,EAXqC,C,MAAwEO,ICbhH,MAAM,EAA+BjC,OAAOC,KAAKC,OAAO,sC,aCgBnCgC,EAAc,uFAsDhC,OAtDgC,EACjCC,OAAA,SAAOC,GACL,YAAMD,OAAM,UAACC,GAEbf,KAAKgB,MAAQ,IAAIV,EAAoB,CACnCW,OAAQ,CACNC,MAAOlB,KAAKmB,MAAMC,KAAKC,QAI3BrB,KAAKgB,MAAMM,SACb,EAAC,EAEDC,UAAA,WACE,MAAO,6BACT,EAAC,EAEDC,MAAA,WACE,OAAOC,IAAAA,WAAAA,MAAqB,sCAC9B,EAAC,EAEDC,QAAA,WAAU,WACR,OACE,WACE,SAAKH,UAAU,cACZvB,KAAKgB,MAAMW,mBACV,EAAC,IAAgB,MAEjB,QAAIJ,UAAU,uBACXvB,KAAKgB,MAAMY,WAAWC,KAAI,SAACrB,GAAI,OAC9BA,EAAKsB,MAAMD,KAAI,SAACE,GAAI,OAClB,YACE,EAAC,IAAI,CAACC,KAAMP,IAAAA,MAAAA,KAAeM,IACxBE,IAAOF,GAAK,IAAGG,IAASH,IAExB,GACL,MAKT/B,KAAKgB,MAAMmB,UACV,SAAKZ,UAAU,gBACb,SAAKA,UAAU,uBACb,SAAKA,UAAU,cACb,EAAC,IAAM,CAACA,UAAU,uBAAuBa,QAAS,kBAAM,EAAKpB,MAAMqB,UAAU,EAAEC,QAAStC,KAAKgB,MAAMuB,iBAChGd,IAAAA,WAAAA,MAAqB,sDAK5B,KAGV,EAAC,EAtDgC,CAA0Ee,KChB7G,MAAM,EAA+B7D,OAAOC,KAAKC,OAAO,iC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uBCEF,IAEjC4D,EAAqB,uFAkBvC,OAlBuC,EACxCC,KAAA,WACE,MAAO,kBACT,EAAC,EAEDV,KAAA,WACE,OAAOP,IAAAA,MAAAA,KAAezB,KAAKmB,MAAMwB,aAAaC,UAChD,EAAC,EAEDlB,QAAA,WACE,IACMK,EADe/B,KAAKmB,MAAMwB,aACNE,WAE1B,OAAOpB,IAAAA,WAAAA,MAAqB,mDAAoD,CAAEM,KAAAA,EAAMe,MAAO,GACjG,EAAC,EAEDC,QAAA,WACE,OAAOC,EAAAA,EAAAA,UAAShD,KAAKmB,MAAMwB,aAAaC,UAAUK,eAAgB,IACpE,EAAC,EAlBuC,CAASC,KCJnD,MAAM,EAA+BvE,OAAOC,KAAKC,OAAO,6B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,sB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,kC,ICMnCsE,EAAa,8DAgB/B,OAhB+B,mBAOhCC,YAAA,SAAYC,GACV,OAAO5B,IAAAA,MAAAA,KAAe,QAAS,CAC7BR,OAAQ,CACNqC,KAAM,UACNC,QAASvD,KAAK+B,KAAKV,MAErBb,KAAM,CAAE6C,OAAAA,EAAQ5C,MAAOT,KAAKwD,WAC5BC,KAAM,cAEV,EAAC,EAhB+B,C,MAASC,ICD3C,UACE,IAAIC,IAAAA,SACDC,IAAI,aAAc,qBAAsBT,GAE3C,IAAIQ,IAAAA,OAAaE,KACdC,QAAc,SACdC,UAAkB,cAClBA,UAAmB,YCDxBtC,IAAAA,aAAAA,IAAqB,gBAAgB,WACnCA,IAAAA,uBAAAA,UAAuCgB,GCNvCuB,EAAAA,EAAAA,QAAOC,IAAAA,UAAuB,eAAe,SAAUnC,GACrD,IAAMV,EAAOpB,KAAKmB,MAAMC,KAExB,IAAIA,EAAK8C,YAAe9C,EAAK+C,UAA7B,CAEA,IAAMC,EAAQhD,EAAKgD,QAEfC,EAAU5C,IAAAA,QAAAA,MAAoB2C,GAASA,EAAME,MAAK,SAACvC,GAAI,OAAKA,IAASN,IAAAA,QAAAA,IAAgB,IAEzFK,EAAM8B,IACJ,OACA,EAAC,IAAM,CACLrC,UAAU,sBACVa,QAAS,WACPiC,GAAWA,EAEXjD,EAAKmD,KAAK,CAAEF,QAAAA,IAKZ,IAAMG,EAAOpD,EAAKoD,KAAKC,cAAcL,MAAMI,KAC3CA,EAAKF,MAAK,SAACI,EAAM/E,GACf,GAAI+E,EAAKrD,KAAOI,IAAAA,QAAAA,KAAAA,KAEd,OADA+C,EAAKG,OAAOhF,EAAG,IACR,CAEX,IAEI0E,GACFG,EAAKI,QAAQ,CAAEtB,KAAM,QAASjC,GAAII,IAAAA,QAAAA,KAAAA,MAEtC,GAECA,IAAAA,WAAAA,MAAqB4C,EAAU,sCAAwC,sCA/B9B,CAkChD,KC/BAL,EAAAA,EAAAA,QAAOC,IAAAA,UAAuB,eAAe,SAAUnC,GACrD,IAAMV,EAAOpB,KAAKmB,MAAMC,KAClBgD,EAAQhD,EAAKgD,QAEnB,GAAIA,GAASA,EAAMvE,OAAQ,CACzB,IACMgF,EAAYzD,EAAK0D,aADT,EAKRC,EAAQX,EACXX,MAAK,SAAC/F,GAAC,OAAMA,IAAM+D,IAAAA,QAAAA,MAAoB,EAAI,CAAC,IAC5CuD,MAAM,EAAGH,EAAYpE,EAPV,GAQXoB,KAAI,SAACE,GACJ,OACE,EAAC,IAAI,CAACC,KAAMP,IAAAA,MAAAA,KAAeM,IACxBA,IAASN,IAAAA,QAAAA,KAAmBA,IAAAA,WAAAA,MAAqB,oCAAsCS,IAASH,GAGvG,IAKF,GAAI8C,EAAW,CACb,IAAM/B,EAAQ1B,EAAK0D,aAAeC,EAAMlF,OAClCoF,EAAQxD,IAAAA,WAAAA,MAAqB,sCAAuC,CAAEqB,MAAAA,IAExErB,IAAAA,MAAAA,UAAoB,kBACtBsD,EAAMG,KACJ,EAAC,IAAM,CACL3D,UAAU,uCACVa,QAAS,SAAC+C,GACRA,EAAEC,iBACF3D,IAAAA,MAAAA,KAAeZ,EAAgB,CAAEO,KAAAA,GACnC,GAEC6D,IAILF,EAAMG,KAAK,cAAOD,GAEtB,CAEAnD,EAAM8B,IACJ,QACA,SAAKrC,UAAU,gBACZmB,IAAK,oBACLjB,IAAAA,WAAAA,MAAqB,oCAAmC2C,EAAM,KAAO3C,IAAAA,QAAAA,KAAmB,QAAU,IAAE,QAAS,CAC5GqB,MAAOiC,EAAMlF,OACbwF,MAAOC,IAAgBP,MAI/B,CACF,KC5DAf,EAAAA,EAAAA,QAAOuB,IAAAA,UAAoB,YAAY,SAAUzD,GAC/C,IAAMC,EAAO/B,KAAK+B,KAClBD,EAAM8B,IACJ,QACA,EAAC,IAAU,CAAC5B,KAAMP,IAAAA,MAAU,aAAc,CAAES,SAAc,MAAJH,OAAI,EAAJA,EAAMyD,SAAW9C,KAAK,oBACzEjB,IAAAA,WAAAA,MAAqB,uCAExB,GAEJ,KHCAuC,EAAAA,EAAAA,QAAOyB,IAAAA,UAA4B,qBAAqB,SAAU3D,GAChEA,EAAM8B,IAAI,YAAa,CACrB8B,KAAM,YACNhD,KAAM,mBACNuC,MAAOxD,IAAAA,WAAAA,MAAqB,wDAEhC,GACF,G","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/states/PaginatedListState']\"","webpack://@flarum/likes/./src/forum/states/PostLikesModalState.ts","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/likes/./src/forum/components/PostLikesModal.tsx","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/likes/./src/forum/components/PostLikedNotification.js","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/UserPage']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/PostsUserPage']\"","webpack://@flarum/likes/./src/forum/components/LikesUserPage.tsx","webpack://@flarum/likes/./src/forum/extend.ts","webpack://@flarum/likes/./src/forum/index.js","webpack://@flarum/likes/./src/forum/addLikeAction.js","webpack://@flarum/likes/./src/forum/addLikesList.js","webpack://@flarum/likes/./src/forum/addLikesTabToUserProfile.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","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'];","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'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","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 User from 'flarum/common/models/User';\n\nexport interface PostLikesModalListParams extends PaginatedListParams {\n filter: {\n liked: string;\n };\n page?: {\n offset?: number;\n limit: number;\n };\n}\n\nexport default class PostLikesModalState 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 'users';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport type { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport type Post from 'flarum/common/models/Post';\nimport type Mithril from 'mithril';\nimport PostLikesModalState from '../states/PostLikesModalState';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nexport interface IPostLikesModalAttrs extends IInternalModalAttrs {\n post: Post;\n}\n\nexport default class PostLikesModal extends Modal {\n oninit(vnode: Mithril.VnodeDOM) {\n super.oninit(vnode);\n\n this.state = new PostLikesModalState({\n filter: {\n liked: this.attrs.post.id()!,\n },\n });\n\n this.state.refresh();\n }\n\n className() {\n return 'PostLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-likes.forum.post_likes.title');\n }\n\n content() {\n return (\n <>\n \n {this.state.isInitialLoading() ? (\n
\n ) : (\n
\n {this.state.getPages().map((page) =>\n page.items.map((user) => (\n \n \n {avatar(user)} {username(user)}\n \n \n ))\n )}\n \n )}\n
\n {this.state.hasNext() ? (\n \n
\n
\n this.state.loadNext()} loading={this.state.isLoadingNext()}>\n {app.translator.trans('flarum-likes.forum.post_likes.load_more_button')}\n \n
\n
\n
\n ) : null}\n >\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Notification'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostLikedNotification extends Notification {\n icon() {\n return 'far fa-thumbs-up';\n }\n\n href() {\n return app.route.post(this.attrs.notification.subject());\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-likes.forum.notifications.post_liked_text', { user, count: 1 });\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/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 `LikesUserPage` component shows posts which user the user liked.\n */\nexport default class LikesUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param offset The position to start getting results from.\n * @protected\n */\n loadResults(offset: number) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n likedBy: 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 LikesUserPage from './components/LikesUserPage';\n\nexport default [\n new Extend.Routes() //\n .add('user.likes', '/u/:username/likes', LikesUserPage),\n\n new Extend.Model(Post) //\n .hasMany('likes')\n .attribute('likesCount')\n .attribute('canLike'),\n];\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\n\nimport addLikeAction from './addLikeAction';\nimport addLikesList from './addLikesList';\nimport PostLikedNotification from './components/PostLikedNotification';\nimport addLikesTabToUserProfile from './addLikesTabToUserProfile';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-likes', () => {\n app.notificationComponents.postLiked = PostLikedNotification;\n\n addLikeAction();\n addLikesList();\n addLikesTabToUserProfile();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postLiked', {\n name: 'postLiked',\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.forum.settings.notify_post_liked_label'),\n });\n });\n});\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || !post.canLike()) return;\n\n const likes = post.likes();\n\n let isLiked = app.session.user && likes && likes.some((user) => user === app.session.user);\n\n items.add(\n 'like',\n {\n isLiked = !isLiked;\n\n post.save({ isLiked });\n\n // We've saved the fact that we do or don't like the post, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = post.data.relationships.likes.data;\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n });\n\n if (isLiked) {\n data.unshift({ type: 'users', id: app.session.user.id() });\n }\n }}\n >\n {app.translator.trans(isLiked ? 'flarum-likes.forum.post.unlike_link' : 'flarum-likes.forum.post.like_link')}\n \n );\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\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';\n\nimport PostLikesModal from './components/PostLikesModal';\n\nexport default function () {\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const likes = post.likes();\n\n if (likes && likes.length) {\n const limit = 4;\n const overLimit = post.likesCount() > limit;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes\n .sort((a) => (a === app.session.user ? -1 : 1))\n .slice(0, overLimit ? limit - 1 : limit)\n .map((user) => {\n return (\n \n {user === app.session.user ? app.translator.trans('flarum-likes.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.likesCount() - names.length;\n const label = app.translator.trans('flarum-likes.forum.post.others_link', { count });\n\n if (app.forum.attribute('canSearchUsers')) {\n names.push(\n {\n e.preventDefault();\n app.modal.show(PostLikesModal, { post });\n }}\n >\n {label}\n \n );\n } else {\n names.push({label} );\n }\n }\n\n items.add(\n 'liked',\n \n {icon('far fa-thumbs-up')}\n {app.translator.trans(`flarum-likes.forum.post.liked_by${likes[0] === app.session.user ? '_self' : ''}_text`, {\n count: names.length,\n users: punctuateSeries(names),\n })}\n
\n );\n }\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport type Mithril from 'mithril';\n\nexport default function addLikesTabToUserProfile() {\n extend(UserPage.prototype, 'navItems', function (items: ItemList) {\n const user = this.user;\n items.add(\n 'likes',\n \n {app.translator.trans('flarum-likes.forum.user.likes_link')}\n ,\n 88\n );\n });\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_extends","assign","target","i","arguments","length","source","apply","this","_defineProperties","props","descriptor","configurable","writable","PostLikesModalState","params","page","limit","Constructor","protoProps","PaginatedListState","PostLikesModal","oninit","vnode","state","filter","liked","attrs","post","id","refresh","className","title","app","content","isInitialLoading","getPages","map","items","user","href","avatar","username","hasNext","onclick","loadNext","loading","isLoadingNext","Modal","PostLikedNotification","icon","notification","subject","fromUser","count","excerpt","truncate","contentPlain","Notification","LikesUserPage","loadResults","offset","type","likedBy","loadLimit","sort","PostsUserPage","Extend","add","Post","hasMany","attribute","extend","CommentPost","isHidden","canLike","likes","isLiked","some","save","data","relationships","like","splice","unshift","overLimit","likesCount","names","slice","label","push","e","preventDefault","users","punctuateSeries","UserPage","slug","NotificationGrid","name"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/states/PaginatedListState']\"","webpack://@flarum/likes/./src/forum/states/PostLikesModalState.ts","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/likes/./src/forum/components/PostLikesModal.tsx","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/likes/./src/forum/components/PostLikedNotification.js","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/UserPage']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/PostsUserPage']\"","webpack://@flarum/likes/./src/forum/components/LikesUserPage.tsx","webpack://@flarum/likes/./src/forum/extend.ts","webpack://@flarum/likes/./src/forum/compat.ts","webpack://@flarum/likes/external assign \"flarum.core\"","webpack://@flarum/likes/./src/forum/index.js","webpack://@flarum/likes/./src/forum/addLikeAction.js","webpack://@flarum/likes/./src/forum/addLikesList.js","webpack://@flarum/likes/./src/forum/addLikesTabToUserProfile.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","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'];","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'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","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 User from 'flarum/common/models/User';\n\nexport interface PostLikesModalListParams extends PaginatedListParams {\n filter: {\n liked: string;\n };\n page?: {\n offset?: number;\n limit: number;\n };\n}\n\nexport default class PostLikesModalState 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 'users';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport type { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport type Post from 'flarum/common/models/Post';\nimport type Mithril from 'mithril';\nimport PostLikesModalState from '../states/PostLikesModalState';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nexport interface IPostLikesModalAttrs extends IInternalModalAttrs {\n post: Post;\n}\n\nexport default class PostLikesModal extends Modal {\n oninit(vnode: Mithril.VnodeDOM) {\n super.oninit(vnode);\n\n this.state = new PostLikesModalState({\n filter: {\n liked: this.attrs.post.id()!,\n },\n });\n\n this.state.refresh();\n }\n\n className() {\n return 'PostLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-likes.forum.post_likes.title');\n }\n\n content() {\n return (\n <>\n \n {this.state.isInitialLoading() ? (\n
\n ) : (\n
\n {this.state.getPages().map((page) =>\n page.items.map((user) => (\n \n \n {avatar(user)} {username(user)}\n \n \n ))\n )}\n \n )}\n
\n {this.state.hasNext() ? (\n \n
\n
\n this.state.loadNext()} loading={this.state.isLoadingNext()}>\n {app.translator.trans('flarum-likes.forum.post_likes.load_more_button')}\n \n
\n
\n
\n ) : null}\n >\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Notification'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostLikedNotification extends Notification {\n icon() {\n return 'far fa-thumbs-up';\n }\n\n href() {\n return app.route.post(this.attrs.notification.subject());\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-likes.forum.notifications.post_liked_text', { user, count: 1 });\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/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 `LikesUserPage` component shows posts which user the user liked.\n */\nexport default class LikesUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param offset The position to start getting results from.\n * @protected\n */\n loadResults(offset: number) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n likedBy: 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 LikesUserPage from './components/LikesUserPage';\n\nexport default [\n new Extend.Routes() //\n .add('user.likes', '/u/:username/likes', LikesUserPage),\n\n new Extend.Model(Post) //\n .hasMany('likes')\n .attribute('likesCount')\n .attribute('canLike'),\n];\n","import LikesUserPage from './components/LikesUserPage';\nimport PostLikedNotification from './components/PostLikedNotification';\nimport PostLikesModal from './components/PostLikesModal';\nimport PostLikesModalState from './states/PostLikesModalState';\n\nexport default {\n 'likes/components/LikesUserPage': LikesUserPage,\n 'likes/components/PostLikedNotification': PostLikedNotification,\n 'likes/components/PostLikesModal': PostLikesModal,\n 'likes/states/PostLikesModalState': PostLikesModalState,\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';\n\nimport addLikeAction from './addLikeAction';\nimport addLikesList from './addLikesList';\nimport PostLikedNotification from './components/PostLikedNotification';\nimport addLikesTabToUserProfile from './addLikesTabToUserProfile';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-likes', () => {\n app.notificationComponents.postLiked = PostLikedNotification;\n\n addLikeAction();\n addLikesList();\n addLikesTabToUserProfile();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postLiked', {\n name: 'postLiked',\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.forum.settings.notify_post_liked_label'),\n });\n });\n});\n\n// Expose compat API\nimport likesCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, likesCompat);\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || !post.canLike()) return;\n\n const likes = post.likes();\n\n let isLiked = app.session.user && likes && likes.some((user) => user === app.session.user);\n\n items.add(\n 'like',\n {\n isLiked = !isLiked;\n\n post.save({ isLiked });\n\n // We've saved the fact that we do or don't like the post, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = post.data.relationships.likes.data;\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n });\n\n if (isLiked) {\n data.unshift({ type: 'users', id: app.session.user.id() });\n }\n }}\n >\n {app.translator.trans(isLiked ? 'flarum-likes.forum.post.unlike_link' : 'flarum-likes.forum.post.like_link')}\n \n );\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\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';\n\nimport PostLikesModal from './components/PostLikesModal';\n\nexport default function () {\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const likes = post.likes();\n\n if (likes && likes.length) {\n const limit = 4;\n const overLimit = post.likesCount() > limit;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes\n .sort((a) => (a === app.session.user ? -1 : 1))\n .slice(0, overLimit ? limit - 1 : limit)\n .map((user) => {\n return (\n \n {user === app.session.user ? app.translator.trans('flarum-likes.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.likesCount() - names.length;\n const label = app.translator.trans('flarum-likes.forum.post.others_link', { count });\n\n if (app.forum.attribute('canSearchUsers')) {\n names.push(\n {\n e.preventDefault();\n app.modal.show(PostLikesModal, { post });\n }}\n >\n {label}\n \n );\n } else {\n names.push({label} );\n }\n }\n\n items.add(\n 'liked',\n \n {icon('far fa-thumbs-up')}\n {app.translator.trans(`flarum-likes.forum.post.liked_by${likes[0] === app.session.user ? '_self' : ''}_text`, {\n count: names.length,\n users: punctuateSeries(names),\n })}\n
\n );\n }\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport type Mithril from 'mithril';\n\nexport default function addLikesTabToUserProfile() {\n extend(UserPage.prototype, 'navItems', function (items: ItemList) {\n const user = this.user;\n items.add(\n 'likes',\n \n {app.translator.trans('flarum-likes.forum.user.likes_link')}\n ,\n 88\n );\n });\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_extends","assign","target","i","arguments","length","source","apply","this","_defineProperties","props","descriptor","configurable","writable","PostLikesModalState","params","page","limit","Constructor","protoProps","PaginatedListState","PostLikesModal","oninit","vnode","state","filter","liked","attrs","post","id","refresh","className","title","app","content","isInitialLoading","getPages","map","items","user","href","avatar","username","hasNext","onclick","loadNext","loading","isLoadingNext","Modal","PostLikedNotification","icon","notification","subject","fromUser","count","excerpt","truncate","contentPlain","Notification","LikesUserPage","loadResults","offset","type","likedBy","loadLimit","sort","PostsUserPage","Extend","add","Post","hasMany","attribute","extend","CommentPost","isHidden","canLike","likes","isLiked","some","save","data","relationships","like","splice","unshift","overLimit","likesCount","names","slice","label","push","e","preventDefault","users","punctuateSeries","UserPage","slug","NotificationGrid","name","likesCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/likes/js/src/forum/compat.ts b/extensions/likes/js/src/forum/compat.ts
new file mode 100644
index 0000000000..3e19869258
--- /dev/null
+++ b/extensions/likes/js/src/forum/compat.ts
@@ -0,0 +1,11 @@
+import LikesUserPage from './components/LikesUserPage';
+import PostLikedNotification from './components/PostLikedNotification';
+import PostLikesModal from './components/PostLikesModal';
+import PostLikesModalState from './states/PostLikesModalState';
+
+export default {
+ 'likes/components/LikesUserPage': LikesUserPage,
+ 'likes/components/PostLikedNotification': PostLikedNotification,
+ 'likes/components/PostLikesModal': PostLikesModal,
+ 'likes/states/PostLikesModalState': PostLikesModalState,
+};
diff --git a/extensions/likes/js/src/forum/index.js b/extensions/likes/js/src/forum/index.js
index 29d7a1d653..2fb14404f6 100644
--- a/extensions/likes/js/src/forum/index.js
+++ b/extensions/likes/js/src/forum/index.js
@@ -24,3 +24,9 @@ app.initializers.add('flarum-likes', () => {
});
});
});
+
+// Expose compat API
+import likesCompat from './compat';
+import { compat } from '@flarum/core/forum';
+
+Object.assign(compat, likesCompat);
diff --git a/extensions/lock/js/dist/forum.js b/extensions/lock/js/dist/forum.js
index f20e92706a..1bfb6471b1 100644
--- a/extensions/lock/js/dist/forum.js
+++ b/extensions/lock/js/dist/forum.js
@@ -1,2 +1,2 @@
-(()=>{var o={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return o.d(n,{a:n}),n},d:(t,n)=>{for(var e in n)o.o(n,e)&&!o.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},o:(o,t)=>Object.prototype.hasOwnProperty.call(o,t),r:o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})}},t={};(()=>{"use strict";o.r(t),o.d(t,{extend:()=>j});const n=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/app"];var c=o.n(e);const r=flarum.core.compat["forum/components/NotificationGrid"];var s=o.n(r);function a(o,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(o,t){return o.__proto__=t,o},a(o,t)}function i(o,t){o.prototype=Object.create(t.prototype),o.prototype.constructor=o,a(o,t)}const u=flarum.core.compat["forum/components/Notification"];var f=function(o){function t(){return o.apply(this,arguments)||this}i(t,o);var n=t.prototype;return n.icon=function(){return"fas fa-lock"},n.href=function(){var o=this.attrs.notification;return c().route.discussion(o.subject(),o.content().postNumber)},n.content=function(){return c().translator.trans("flarum-lock.forum.notifications.discussion_locked_text",{user:this.attrs.notification.fromUser()})},t}(o.n(u)());const l=flarum.core.compat["common/models/Discussion"];var d=o.n(l);const p=flarum.core.compat["common/components/Badge"];var k=o.n(p);const y=flarum.core.compat["forum/utils/DiscussionControls"];var b=o.n(y);const _=flarum.core.compat["forum/components/DiscussionPage"];var v=o.n(_);const h=flarum.core.compat["common/components/Button"];var g=o.n(h);const L=flarum.core.compat["common/extenders"];var x=o.n(L);const O=flarum.core.compat["forum/components/EventPost"];var P=function(o){function t(){return o.apply(this,arguments)||this}i(t,o);var n=t.prototype;return n.icon=function(){return this.attrs.post.content().locked?"fas fa-lock":"fas fa-unlock"},n.descriptionKey=function(){return this.attrs.post.content().locked?"flarum-lock.forum.post_stream.discussion_locked_text":"flarum-lock.forum.post_stream.discussion_unlocked_text"},t}(o.n(O)());const j=[(new(x().PostTypes)).add("discussionLocked",P),new(x().Model)(d()).attribute("isLocked").attribute("canLock")];c().initializers.add("flarum-lock",(function(){c().notificationComponents.discussionLocked=f,(0,n.extend)(d().prototype,"badges",(function(o){this.isLocked()&&o.add("locked",m(k(),{type:"locked",label:c().translator.trans("flarum-lock.forum.badge.locked_tooltip"),icon:"fas fa-lock"}))})),(0,n.extend)(b(),"moderationControls",(function(o,t){t.canLock()&&o.add("lock",m(g(),{icon:"fas fa-lock",onclick:this.lockAction.bind(t)},c().translator.trans("flarum-lock.forum.discussion_controls."+(t.isLocked()?"unlock":"lock")+"_button")))})),b().lockAction=function(){this.save({isLocked:!this.isLocked()}).then((function(){c().current.matches(v())&&c().current.get("stream").update(),m.redraw()}))},(0,n.extend)(s().prototype,"notificationTypes",(function(o){o.add("discussionLocked",{name:"discussionLocked",icon:"fas fa-lock",label:c().translator.trans("flarum-lock.forum.settings.notify_discussion_locked_label")})}))}))})(),module.exports=t})();
+(()=>{var o={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return o.d(n,{a:n}),n},d:(t,n)=>{for(var c in n)o.o(n,c)&&!o.o(t,c)&&Object.defineProperty(t,c,{enumerable:!0,get:n[c]})},o:(o,t)=>Object.prototype.hasOwnProperty.call(o,t),r:o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})}},t={};(()=>{"use strict";o.r(t),o.d(t,{extend:()=>j});const n=flarum.core.compat["common/extend"],c=flarum.core.compat["forum/app"];var e=o.n(c);const r=flarum.core.compat["forum/components/NotificationGrid"];var s=o.n(r);function a(o,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(o,t){return o.__proto__=t,o},a(o,t)}function i(o,t){o.prototype=Object.create(t.prototype),o.prototype.constructor=o,a(o,t)}const u=flarum.core.compat["forum/components/Notification"];var l=function(o){function t(){return o.apply(this,arguments)||this}i(t,o);var n=t.prototype;return n.icon=function(){return"fas fa-lock"},n.href=function(){var o=this.attrs.notification;return e().route.discussion(o.subject(),o.content().postNumber)},n.content=function(){return e().translator.trans("flarum-lock.forum.notifications.discussion_locked_text",{user:this.attrs.notification.fromUser()})},t}(o.n(u)());const f=flarum.core.compat["common/models/Discussion"];var d=o.n(f);const p=flarum.core.compat["common/components/Badge"];var k=o.n(p);const y=flarum.core.compat["forum/utils/DiscussionControls"];var b=o.n(y);const _=flarum.core.compat["forum/components/DiscussionPage"];var v=o.n(_);const h=flarum.core.compat["common/components/Button"];var L=o.n(h);const g=flarum.core.compat["common/extenders"];var O=o.n(g);const x=flarum.core.compat["forum/components/EventPost"];var P=function(o){function t(){return o.apply(this,arguments)||this}i(t,o);var n=t.prototype;return n.icon=function(){return this.attrs.post.content().locked?"fas fa-lock":"fas fa-unlock"},n.descriptionKey=function(){return this.attrs.post.content().locked?"flarum-lock.forum.post_stream.discussion_locked_text":"flarum-lock.forum.post_stream.discussion_unlocked_text"},t}(o.n(x)());const j=[(new(O().PostTypes)).add("discussionLocked",P),new(O().Model)(d()).attribute("isLocked").attribute("canLock")],D={"lock/components/DiscussionLockedNotification":l,"lock/components/DiscussionLockedPost":P},S=flarum.core;e().initializers.add("flarum-lock",(function(){e().notificationComponents.discussionLocked=l,(0,n.extend)(d().prototype,"badges",(function(o){this.isLocked()&&o.add("locked",m(k(),{type:"locked",label:e().translator.trans("flarum-lock.forum.badge.locked_tooltip"),icon:"fas fa-lock"}))})),(0,n.extend)(b(),"moderationControls",(function(o,t){t.canLock()&&o.add("lock",m(L(),{icon:"fas fa-lock",onclick:this.lockAction.bind(t)},e().translator.trans("flarum-lock.forum.discussion_controls."+(t.isLocked()?"unlock":"lock")+"_button")))})),b().lockAction=function(){this.save({isLocked:!this.isLocked()}).then((function(){e().current.matches(v())&&e().current.get("stream").update(),m.redraw()}))},(0,n.extend)(s().prototype,"notificationTypes",(function(o){o.add("discussionLocked",{name:"discussionLocked",icon:"fas fa-lock",label:e().translator.trans("flarum-lock.forum.settings.notify_discussion_locked_label")})}))})),Object.assign(S.compat,D)})(),module.exports=t})();
//# sourceMappingURL=forum.js.map
\ No newline at end of file
diff --git a/extensions/lock/js/dist/forum.js.map b/extensions/lock/js/dist/forum.js.map
index 5b5288cd7c..3ca92f445d 100644
--- a/extensions/lock/js/dist/forum.js.map
+++ b/extensions/lock/js/dist/forum.js.map
@@ -1 +1 @@
-{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/lock/webpack/bootstrap","webpack://@flarum/lock/webpack/runtime/compat get default export","webpack://@flarum/lock/webpack/runtime/define property getters","webpack://@flarum/lock/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/lock/webpack/runtime/make namespace object","webpack://@flarum/lock/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/lock/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/lock/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/lock/./src/forum/components/DiscussionLockedNotification.js","webpack://@flarum/lock/external root \"flarum.core.compat['common/models/Discussion']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/components/Badge']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/utils/DiscussionControls']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/DiscussionPage']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/EventPost']\"","webpack://@flarum/lock/./src/forum/components/DiscussionLockedPost.js","webpack://@flarum/lock/./src/forum/extend.ts","webpack://@flarum/lock/./src/forum/index.js","webpack://@flarum/lock/./src/forum/addLockBadge.js","webpack://@flarum/lock/./src/forum/addLockControl.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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'];","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['forum/components/Notification'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\n\nexport default class DiscussionLockedNotification extends Notification {\n icon() {\n return 'fas fa-lock';\n }\n\n href() {\n const notification = this.attrs.notification;\n\n return app.route.discussion(notification.subject(), notification.content().postNumber);\n }\n\n content() {\n return app.translator.trans('flarum-lock.forum.notifications.discussion_locked_text', { user: this.attrs.notification.fromUser() });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Discussion'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Badge'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/EventPost'];","import EventPost from 'flarum/forum/components/EventPost';\n\nexport default class DiscussionLockedPost extends EventPost {\n icon() {\n return this.attrs.post.content().locked ? 'fas fa-lock' : 'fas fa-unlock';\n }\n\n descriptionKey() {\n return this.attrs.post.content().locked\n ? 'flarum-lock.forum.post_stream.discussion_locked_text'\n : 'flarum-lock.forum.post_stream.discussion_unlocked_text';\n }\n}\n","import Extend from 'flarum/common/extenders';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionLockedPost from './components/DiscussionLockedPost';\n\nexport default [\n new Extend.PostTypes() //\n .add('discussionLocked', DiscussionLockedPost),\n\n new Extend.Model(Discussion) //\n .attribute('isLocked')\n .attribute('canLock'),\n];\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\n\nimport DiscussionLockedNotification from './components/DiscussionLockedNotification';\nimport addLockBadge from './addLockBadge';\nimport addLockControl from './addLockControl';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-lock', () => {\n app.notificationComponents.discussionLocked = DiscussionLockedNotification;\n\n addLockBadge();\n addLockControl();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('discussionLocked', {\n name: 'discussionLocked',\n icon: 'fas fa-lock',\n label: app.translator.trans('flarum-lock.forum.settings.notify_discussion_locked_label'),\n });\n });\n});\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Discussion from 'flarum/common/models/Discussion';\nimport Badge from 'flarum/common/components/Badge';\n\nexport default function addLockBadge() {\n extend(Discussion.prototype, 'badges', function (badges) {\n if (this.isLocked()) {\n badges.add('locked', );\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\n\nexport default function addLockControl() {\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canLock()) {\n items.add(\n 'lock',\n \n {app.translator.trans(`flarum-lock.forum.discussion_controls.${discussion.isLocked() ? 'unlock' : 'lock'}_button`)}\n \n );\n }\n });\n\n DiscussionControls.lockAction = function () {\n this.save({ isLocked: !this.isLocked() }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n\n m.redraw();\n });\n };\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","DiscussionLockedNotification","icon","href","notification","this","attrs","app","subject","content","postNumber","user","fromUser","Notification","DiscussionLockedPost","post","locked","descriptionKey","EventPost","Extend","add","Discussion","attribute","extend","badges","isLocked","type","label","DiscussionControls","items","discussion","canLock","onclick","lockAction","save","then","DiscussionPage","update","m","redraw","NotificationGrid","name"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/lock/webpack/bootstrap","webpack://@flarum/lock/webpack/runtime/compat get default export","webpack://@flarum/lock/webpack/runtime/define property getters","webpack://@flarum/lock/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/lock/webpack/runtime/make namespace object","webpack://@flarum/lock/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/lock/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/lock/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/lock/./src/forum/components/DiscussionLockedNotification.js","webpack://@flarum/lock/external root \"flarum.core.compat['common/models/Discussion']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/components/Badge']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/utils/DiscussionControls']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/DiscussionPage']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/lock/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/lock/external root \"flarum.core.compat['forum/components/EventPost']\"","webpack://@flarum/lock/./src/forum/components/DiscussionLockedPost.js","webpack://@flarum/lock/./src/forum/extend.ts","webpack://@flarum/lock/./src/forum/compat.ts","webpack://@flarum/lock/external assign \"flarum.core\"","webpack://@flarum/lock/./src/forum/index.js","webpack://@flarum/lock/./src/forum/addLockBadge.js","webpack://@flarum/lock/./src/forum/addLockControl.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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'];","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['forum/components/Notification'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\n\nexport default class DiscussionLockedNotification extends Notification {\n icon() {\n return 'fas fa-lock';\n }\n\n href() {\n const notification = this.attrs.notification;\n\n return app.route.discussion(notification.subject(), notification.content().postNumber);\n }\n\n content() {\n return app.translator.trans('flarum-lock.forum.notifications.discussion_locked_text', { user: this.attrs.notification.fromUser() });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Discussion'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Badge'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/EventPost'];","import EventPost from 'flarum/forum/components/EventPost';\n\nexport default class DiscussionLockedPost extends EventPost {\n icon() {\n return this.attrs.post.content().locked ? 'fas fa-lock' : 'fas fa-unlock';\n }\n\n descriptionKey() {\n return this.attrs.post.content().locked\n ? 'flarum-lock.forum.post_stream.discussion_locked_text'\n : 'flarum-lock.forum.post_stream.discussion_unlocked_text';\n }\n}\n","import Extend from 'flarum/common/extenders';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionLockedPost from './components/DiscussionLockedPost';\n\nexport default [\n new Extend.PostTypes() //\n .add('discussionLocked', DiscussionLockedPost),\n\n new Extend.Model(Discussion) //\n .attribute('isLocked')\n .attribute('canLock'),\n];\n","import DiscussionLockedNotification from './components/DiscussionLockedNotification';\nimport DiscussionLockedPost from './components/DiscussionLockedPost';\n\nexport default {\n 'lock/components/DiscussionLockedNotification': DiscussionLockedNotification,\n 'lock/components/DiscussionLockedPost': DiscussionLockedPost,\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';\n\nimport DiscussionLockedNotification from './components/DiscussionLockedNotification';\nimport addLockBadge from './addLockBadge';\nimport addLockControl from './addLockControl';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum-lock', () => {\n app.notificationComponents.discussionLocked = DiscussionLockedNotification;\n\n addLockBadge();\n addLockControl();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('discussionLocked', {\n name: 'discussionLocked',\n icon: 'fas fa-lock',\n label: app.translator.trans('flarum-lock.forum.settings.notify_discussion_locked_label'),\n });\n });\n});\n\n// Expose compat API\nimport lockCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, lockCompat);\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Discussion from 'flarum/common/models/Discussion';\nimport Badge from 'flarum/common/components/Badge';\n\nexport default function addLockBadge() {\n extend(Discussion.prototype, 'badges', function (badges) {\n if (this.isLocked()) {\n badges.add('locked', );\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\n\nexport default function addLockControl() {\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canLock()) {\n items.add(\n 'lock',\n \n {app.translator.trans(`flarum-lock.forum.discussion_controls.${discussion.isLocked() ? 'unlock' : 'lock'}_button`)}\n \n );\n }\n });\n\n DiscussionControls.lockAction = function () {\n this.save({ isLocked: !this.isLocked() }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n\n m.redraw();\n });\n };\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","DiscussionLockedNotification","icon","href","notification","this","attrs","app","subject","content","postNumber","user","fromUser","Notification","DiscussionLockedPost","post","locked","descriptionKey","EventPost","Extend","add","Discussion","attribute","extend","badges","isLocked","type","label","DiscussionControls","items","discussion","canLock","onclick","lockAction","save","then","DiscussionPage","update","m","redraw","NotificationGrid","name","assign","lockCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/lock/js/src/forum/compat.ts b/extensions/lock/js/src/forum/compat.ts
new file mode 100644
index 0000000000..240aa91d20
--- /dev/null
+++ b/extensions/lock/js/src/forum/compat.ts
@@ -0,0 +1,7 @@
+import DiscussionLockedNotification from './components/DiscussionLockedNotification';
+import DiscussionLockedPost from './components/DiscussionLockedPost';
+
+export default {
+ 'lock/components/DiscussionLockedNotification': DiscussionLockedNotification,
+ 'lock/components/DiscussionLockedPost': DiscussionLockedPost,
+};
diff --git a/extensions/lock/js/src/forum/index.js b/extensions/lock/js/src/forum/index.js
index 0ac405d3cf..1d9a557ef9 100644
--- a/extensions/lock/js/src/forum/index.js
+++ b/extensions/lock/js/src/forum/index.js
@@ -22,3 +22,9 @@ app.initializers.add('flarum-lock', () => {
});
});
});
+
+// Expose compat API
+import lockCompat from './compat';
+import { compat } from '@flarum/core/forum';
+
+Object.assign(compat, lockCompat);
diff --git a/extensions/markdown/js/dist/admin.js b/extensions/markdown/js/dist/admin.js
index 0bee6a2d1f..8c58bbe438 100644
--- a/extensions/markdown/js/dist/admin.js
+++ b/extensions/markdown/js/dist/admin.js
@@ -1,2 +1,2 @@
-(()=>{var t={n:o=>{var e=o&&o.__esModule?()=>o.default:()=>o;return t.d(e,{a:e}),e},d:(o,e)=>{for(var r in e)t.o(e,r)&&!t.o(o,r)&&Object.defineProperty(o,r,{enumerable:!0,get:e[r]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},o={};(()=>{"use strict";t.r(o);const e=flarum.core.compat["admin/app"];var r=t.n(e);const i=flarum.core.compat["common/app"];var n=t.n(i);const a=flarum.core.compat["common/extend"],c=flarum.core.compat["common/components/TextEditor"];var l=t.n(c);const s=flarum.core.compat["common/utils/BasicEditorDriver"];var d=t.n(s);const u=flarum.core.compat["common/utils/styleSelectedText"];var f=t.n(u);function p(t,o){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,o){return t.__proto__=o,t},p(t,o)}function h(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,p(t,o)}const k=flarum.core.compat["common/Component"];var y=t.n(k),b=function(t){function o(){return t.apply(this,arguments)||this}return h(o,t),o.prototype.view=function(t){return m("div",{className:"MarkdownToolbar"},t.children)},o}(y());const x=flarum.core.compat["common/helpers/icon"];var v=t.n(x);const g=flarum.core.compat["common/components/Tooltip"];var _=t.n(g),w=function(t){function o(){return t.apply(this,arguments)||this}h(o,t);var e=o.prototype;return e.oncreate=function(o){t.prototype.oncreate.call(this,o)},e.view=function(){var t=m("button",{className:"Button Button--icon Button--link",type:"button","data-hotkey":this.attrs.hotkey,onkeydown:this.keydown.bind(this),onclick:this.attrs.onclick},v()(this.attrs.icon));return this.attrs.title?m(_(),{text:this.attrs.title},t):t},e.keydown=function(t){" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.element.click())},o}(y());const O=flarum.core.compat["common/utils/ItemList"];var T=t.n(O),P=navigator.userAgent.match(/Macintosh/)?"โ":"ctrl",S={header:{prefix:"### "},bold:{prefix:"**",suffix:"**",trimFirst:!0},italic:{prefix:"_",suffix:"_",trimFirst:!0},strikethrough:{prefix:"~~",suffix:"~~",trimFirst:!0},quote:{prefix:"> ",multiline:!0,surroundWithNewlines:!0},code:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"},link:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"},image:{prefix:"",replaceNext:"https://",scanFor:"https?://"},unordered_list:{prefix:"- ",multiline:!0,surroundWithNewlines:!0},ordered_list:{prefix:"1. ",multiline:!0,orderedList:!0},spoiler:{prefix:">!",suffix:"!<",blockPrefix:">! ",multiline:!0,trimFirst:!0}},j=function(t,o){f()(o.el,S[t])};function I(t,o,e){return function(r){r.key===o&&(r.metaKey&&"โ"===P||r.ctrlKey&&"ctrl"===P)&&(r.preventDefault(),j(t,e))}}function F(t){var o=this,e="function"==typeof t?t():new(T());function r(t,o){return n().translator.trans("flarum-markdown.lib.composer."+t+"_tooltip")+(o?" <"+P+"-"+o+">":"")}var i=function(t){return function(){return j(t,o.attrs.composer.editor)}};return e.add("header",m(w,{title:r("header"),icon:"fas fa-heading",onclick:i("header")}),1e3),e.add("bold",m(w,{title:r("bold","b"),icon:"fas fa-bold",onclick:i("bold")}),900),e.add("italic",m(w,{title:r("italic","i"),icon:"fas fa-italic",onclick:i("italic")}),800),e.add("strikethrough",m(w,{title:r("strikethrough"),icon:"fas fa-strikethrough",onclick:i("strikethrough")}),700),e.add("quote",m(w,{title:r("quote"),icon:"fas fa-quote-left",onclick:i("quote")}),600),e.add("spoiler",m(w,{title:r("spoiler"),icon:"fas fa-exclamation-triangle",onclick:i("spoiler")}),500),e.add("code",m(w,{title:r("code"),icon:"fas fa-code",onclick:i("code")}),400),e.add("link",m(w,{title:r("link"),icon:"fas fa-link",onclick:i("link")}),300),e.add("image",m(w,{title:r("image"),icon:"fas fa-image",onclick:i("image")}),200),e.add("unordered_list",m(w,{title:r("unordered_list"),icon:"fas fa-list-ul",onclick:i("unordered_list")}),100),e.add("ordered_list",m(w,{title:r("ordered_list"),icon:"fas fa-list-ol",onclick:i("ordered_list")}),0),e}r().initializers.add("flarum-markdown",(function(t){(0,a.extend)(d().prototype,"keyHandlers",(function(t){t.add("bold",I("bold","b",this)),t.add("italic",I("italic","i",this))})),l().prototype.markdownToolbarItems?(0,a.override)(l().prototype,"markdownToolbarItems",F):l().prototype.markdownToolbarItems=F,(0,a.extend)(l().prototype,"toolbarItems",(function(t){t.add("markdown",m(b,{for:this.textareaId,setShortcutHandler:function(t){return shortcutHandler=t}},this.markdownToolbarItems().toArray()),100)}))}))})(),module.exports=o})();
+(()=>{var t={n:o=>{var e=o&&o.__esModule?()=>o.default:()=>o;return t.d(e,{a:e}),e},d:(o,e)=>{for(var r in e)t.o(e,r)&&!t.o(o,r)&&Object.defineProperty(o,r,{enumerable:!0,get:e[r]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},o={};(()=>{"use strict";t.r(o);const e=flarum.core.compat["admin/app"];var r=t.n(e);const n=flarum.core.compat["common/app"];var i=t.n(n);const a=flarum.core.compat["common/extend"],c=flarum.core.compat["common/components/TextEditor"];var l=t.n(c);const s=flarum.core.compat["common/utils/BasicEditorDriver"];var d=t.n(s);const u=flarum.core.compat["common/utils/styleSelectedText"];var f=t.n(u);function p(t,o){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,o){return t.__proto__=o,t},p(t,o)}function h(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,p(t,o)}const k=flarum.core.compat["common/Component"];var y=t.n(k),b=function(t){function o(){return t.apply(this,arguments)||this}return h(o,t),o.prototype.view=function(t){return m("div",{className:"MarkdownToolbar"},t.children)},o}(y());const x=flarum.core.compat["common/helpers/icon"];var v=t.n(x);const g=flarum.core.compat["common/components/Tooltip"];var w=t.n(g),_=function(t){function o(){return t.apply(this,arguments)||this}h(o,t);var e=o.prototype;return e.oncreate=function(o){t.prototype.oncreate.call(this,o)},e.view=function(){var t=m("button",{className:"Button Button--icon Button--link",type:"button","data-hotkey":this.attrs.hotkey,onkeydown:this.keydown.bind(this),onclick:this.attrs.onclick},v()(this.attrs.icon));return this.attrs.title?m(w(),{text:this.attrs.title},t):t},e.keydown=function(t){" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.element.click())},o}(y());const O=flarum.core.compat["common/utils/ItemList"];var j=t.n(O),T=navigator.userAgent.match(/Macintosh/)?"โ":"ctrl",P={header:{prefix:"### "},bold:{prefix:"**",suffix:"**",trimFirst:!0},italic:{prefix:"_",suffix:"_",trimFirst:!0},strikethrough:{prefix:"~~",suffix:"~~",trimFirst:!0},quote:{prefix:"> ",multiline:!0,surroundWithNewlines:!0},code:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"},link:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"},image:{prefix:"",replaceNext:"https://",scanFor:"https?://"},unordered_list:{prefix:"- ",multiline:!0,surroundWithNewlines:!0},ordered_list:{prefix:"1. ",multiline:!0,orderedList:!0},spoiler:{prefix:">!",suffix:"!<",blockPrefix:">! ",multiline:!0,trimFirst:!0}},S=function(t,o){f()(o.el,P[t])};function I(t,o,e){return function(r){r.key===o&&(r.metaKey&&"โ"===T||r.ctrlKey&&"ctrl"===T)&&(r.preventDefault(),S(t,e))}}function M(t){var o=this,e="function"==typeof t?t():new(j());function r(t,o){return i().translator.trans("flarum-markdown.lib.composer."+t+"_tooltip")+(o?" <"+T+"-"+o+">":"")}var n=function(t){return function(){return S(t,o.attrs.composer.editor)}};return e.add("header",m(_,{title:r("header"),icon:"fas fa-heading",onclick:n("header")}),1e3),e.add("bold",m(_,{title:r("bold","b"),icon:"fas fa-bold",onclick:n("bold")}),900),e.add("italic",m(_,{title:r("italic","i"),icon:"fas fa-italic",onclick:n("italic")}),800),e.add("strikethrough",m(_,{title:r("strikethrough"),icon:"fas fa-strikethrough",onclick:n("strikethrough")}),700),e.add("quote",m(_,{title:r("quote"),icon:"fas fa-quote-left",onclick:n("quote")}),600),e.add("spoiler",m(_,{title:r("spoiler"),icon:"fas fa-exclamation-triangle",onclick:n("spoiler")}),500),e.add("code",m(_,{title:r("code"),icon:"fas fa-code",onclick:n("code")}),400),e.add("link",m(_,{title:r("link"),icon:"fas fa-link",onclick:n("link")}),300),e.add("image",m(_,{title:r("image"),icon:"fas fa-image",onclick:n("image")}),200),e.add("unordered_list",m(_,{title:r("unordered_list"),icon:"fas fa-list-ul",onclick:n("unordered_list")}),100),e.add("ordered_list",m(_,{title:r("ordered_list"),icon:"fas fa-list-ol",onclick:n("ordered_list")}),0),e}function F(){return F=Object.assign?Object.assign.bind():function(t){for(var o=1;o {\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['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/BasicEditorDriver'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/styleSelectedText'];","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/Component'];","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return {vnode.children}
;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n {icon(this.attrs.icon)}\n \n );\n\n if (this.attrs.title) {\n return {button} ;\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport app from 'flarum/common/app';\nimport { extend, override } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'โ' : 'ctrl';\n\nconst styles = {\n header: { prefix: '### ' },\n bold: { prefix: '**', suffix: '**', trimFirst: true },\n italic: { prefix: '_', suffix: '_', trimFirst: true },\n strikethrough: { prefix: '~~', suffix: '~~', trimFirst: true },\n quote: { prefix: '> ', multiline: true, surroundWithNewlines: true },\n code: { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n link: { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n image: { prefix: '', replaceNext: 'https://', scanFor: 'https?://' },\n unordered_list: { prefix: '- ', multiline: true, surroundWithNewlines: true },\n ordered_list: { prefix: '1. ', multiline: true, orderedList: true },\n spoiler: { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true },\n};\n\nconst applyStyle = (id, editorDriver) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(editorDriver.el, styles[id]);\n};\n\nfunction makeShortcut(id, key, editorDriver) {\n return function (e) {\n if (e.key === key && ((e.metaKey && modifierKey === 'โ') || (e.ctrlKey && modifierKey === 'ctrl'))) {\n e.preventDefault();\n applyStyle(id, editorDriver);\n }\n };\n}\n\nfunction markdownToolbarItems(oldFunc) {\n const items = typeof oldFunc === 'function' ? oldFunc() : new ItemList();\n\n function tooltip(name, hotkey) {\n return app.translator.trans(`flarum-markdown.lib.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n }\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id, this.attrs.composer.editor);\n };\n\n items.add('header', , 1000);\n items.add('bold', , 900);\n items.add('italic', , 800);\n items.add(\n 'strikethrough',\n ,\n 700\n );\n items.add('quote', , 600);\n items.add('spoiler', , 500);\n items.add('code', , 400);\n items.add('link', , 300);\n items.add('image', , 200);\n items.add(\n 'unordered_list',\n ,\n 100\n );\n items.add('ordered_list', , 0);\n\n return items;\n}\n\nexport function initialize(app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b', this));\n items.add('italic', makeShortcut('italic', 'i', this));\n });\n\n if (TextEditor.prototype.markdownToolbarItems) {\n override(TextEditor.prototype, 'markdownToolbarItems', markdownToolbarItems);\n } else {\n TextEditor.prototype.markdownToolbarItems = markdownToolbarItems;\n }\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'markdown',\n (shortcutHandler = handler)}>\n {this.markdownToolbarItems().toArray()}\n ,\n 100\n );\n });\n}\n","import app from 'flarum/admin/app';\nimport { initialize } from '../common/index';\n\napp.initializers.add('flarum-markdown', initialize);\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","MarkdownToolbar","view","vnode","className","children","Component","MarkdownButton","oncreate","button","type","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","header","prefix","bold","suffix","trimFirst","italic","strikethrough","quote","multiline","surroundWithNewlines","code","blockPrefix","blockSuffix","link","replaceNext","scanFor","image","unordered_list","ordered_list","orderedList","spoiler","applyStyle","id","editorDriver","styleSelectedText","el","makeShortcut","e","metaKey","ctrlKey","markdownToolbarItems","oldFunc","items","ItemList","tooltip","name","app","makeApplyStyle","composer","editor","add","extend","BasicEditorDriver","TextEditor","override","for","textareaId","setShortcutHandler","handler","shortcutHandler","toArray"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/markdown/webpack/bootstrap","webpack://@flarum/markdown/webpack/runtime/compat get default export","webpack://@flarum/markdown/webpack/runtime/define property getters","webpack://@flarum/markdown/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/markdown/webpack/runtime/make namespace object","webpack://@flarum/markdown/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/app']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/BasicEditorDriver']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/styleSelectedText']\"","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/markdown/./src/common/components/MarkdownToolbar.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/markdown/./src/common/components/MarkdownButton.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@flarum/markdown/./src/common/index.js","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/markdown/./src/common/compat.ts","webpack://@flarum/markdown/./src/admin/compat.ts","webpack://@flarum/markdown/external assign \"flarum.core\"","webpack://@flarum/markdown/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/BasicEditorDriver'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/styleSelectedText'];","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/Component'];","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return {vnode.children}
;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n {icon(this.attrs.icon)}\n \n );\n\n if (this.attrs.title) {\n return {button} ;\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport app from 'flarum/common/app';\nimport { extend, override } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'โ' : 'ctrl';\n\nconst styles = {\n header: { prefix: '### ' },\n bold: { prefix: '**', suffix: '**', trimFirst: true },\n italic: { prefix: '_', suffix: '_', trimFirst: true },\n strikethrough: { prefix: '~~', suffix: '~~', trimFirst: true },\n quote: { prefix: '> ', multiline: true, surroundWithNewlines: true },\n code: { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n link: { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n image: { prefix: '', replaceNext: 'https://', scanFor: 'https?://' },\n unordered_list: { prefix: '- ', multiline: true, surroundWithNewlines: true },\n ordered_list: { prefix: '1. ', multiline: true, orderedList: true },\n spoiler: { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true },\n};\n\nconst applyStyle = (id, editorDriver) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(editorDriver.el, styles[id]);\n};\n\nfunction makeShortcut(id, key, editorDriver) {\n return function (e) {\n if (e.key === key && ((e.metaKey && modifierKey === 'โ') || (e.ctrlKey && modifierKey === 'ctrl'))) {\n e.preventDefault();\n applyStyle(id, editorDriver);\n }\n };\n}\n\nfunction markdownToolbarItems(oldFunc) {\n const items = typeof oldFunc === 'function' ? oldFunc() : new ItemList();\n\n function tooltip(name, hotkey) {\n return app.translator.trans(`flarum-markdown.lib.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n }\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id, this.attrs.composer.editor);\n };\n\n items.add('header', , 1000);\n items.add('bold', , 900);\n items.add('italic', , 800);\n items.add(\n 'strikethrough',\n ,\n 700\n );\n items.add('quote', , 600);\n items.add('spoiler', , 500);\n items.add('code', , 400);\n items.add('link', , 300);\n items.add('image', , 200);\n items.add(\n 'unordered_list',\n ,\n 100\n );\n items.add('ordered_list', , 0);\n\n return items;\n}\n\nexport function initialize(app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b', this));\n items.add('italic', makeShortcut('italic', 'i', this));\n });\n\n if (TextEditor.prototype.markdownToolbarItems) {\n override(TextEditor.prototype, 'markdownToolbarItems', markdownToolbarItems);\n } else {\n TextEditor.prototype.markdownToolbarItems = markdownToolbarItems;\n }\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'markdown',\n (shortcutHandler = handler)}>\n {this.markdownToolbarItems().toArray()}\n ,\n 100\n );\n });\n}\n","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}","import MarkdownButton from './components/MarkdownButton';\nimport MarkdownToolbar from './components/MarkdownToolbar';\n\nexport default {\n 'markdown/components/MarkdownButton': MarkdownButton,\n 'markdown/components/MarkdownToolbar': MarkdownToolbar,\n};\n","import commonCompat from '../common/compat';\n\nexport default {\n ...commonCompat,\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/admin/app';\nimport { initialize } from '../common/index';\n\napp.initializers.add('flarum-markdown', initialize);\n\n// Expose compat API\nimport markdownCompat from './compat';\nimport { compat } from '@flarum/core/admin';\n\nObject.assign(compat, markdownCompat);\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","MarkdownToolbar","view","vnode","className","children","Component","MarkdownButton","oncreate","button","type","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","header","prefix","bold","suffix","trimFirst","italic","strikethrough","quote","multiline","surroundWithNewlines","code","blockPrefix","blockSuffix","link","replaceNext","scanFor","image","unordered_list","ordered_list","orderedList","spoiler","applyStyle","id","editorDriver","styleSelectedText","el","makeShortcut","e","metaKey","ctrlKey","markdownToolbarItems","oldFunc","items","ItemList","tooltip","name","app","makeApplyStyle","composer","editor","add","_extends","assign","target","i","arguments","length","source","apply","extend","BasicEditorDriver","TextEditor","override","for","textareaId","setShortcutHandler","handler","shortcutHandler","toArray","markdownCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/markdown/js/dist/forum.js b/extensions/markdown/js/dist/forum.js
index af881fffbc..d0105d67d9 100644
--- a/extensions/markdown/js/dist/forum.js
+++ b/extensions/markdown/js/dist/forum.js
@@ -1,2 +1,2 @@
-(()=>{var t={n:o=>{var e=o&&o.__esModule?()=>o.default:()=>o;return t.d(e,{a:e}),e},d:(o,e)=>{for(var r in e)t.o(e,r)&&!t.o(o,r)&&Object.defineProperty(o,r,{enumerable:!0,get:e[r]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},o={};(()=>{"use strict";t.r(o);const e=flarum.core.compat["forum/app"];var r=t.n(e);const i=flarum.core.compat["common/app"];var n=t.n(i);const a=flarum.core.compat["common/extend"],c=flarum.core.compat["common/components/TextEditor"];var l=t.n(c);const s=flarum.core.compat["common/utils/BasicEditorDriver"];var d=t.n(s);const u=flarum.core.compat["common/utils/styleSelectedText"];var f=t.n(u);function p(t,o){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,o){return t.__proto__=o,t},p(t,o)}function h(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,p(t,o)}const k=flarum.core.compat["common/Component"];var y=t.n(k),b=function(t){function o(){return t.apply(this,arguments)||this}return h(o,t),o.prototype.view=function(t){return m("div",{className:"MarkdownToolbar"},t.children)},o}(y());const x=flarum.core.compat["common/helpers/icon"];var v=t.n(x);const g=flarum.core.compat["common/components/Tooltip"];var _=t.n(g),w=function(t){function o(){return t.apply(this,arguments)||this}h(o,t);var e=o.prototype;return e.oncreate=function(o){t.prototype.oncreate.call(this,o)},e.view=function(){var t=m("button",{className:"Button Button--icon Button--link",type:"button","data-hotkey":this.attrs.hotkey,onkeydown:this.keydown.bind(this),onclick:this.attrs.onclick},v()(this.attrs.icon));return this.attrs.title?m(_(),{text:this.attrs.title},t):t},e.keydown=function(t){" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.element.click())},o}(y());const O=flarum.core.compat["common/utils/ItemList"];var T=t.n(O),P=navigator.userAgent.match(/Macintosh/)?"โ":"ctrl",S={header:{prefix:"### "},bold:{prefix:"**",suffix:"**",trimFirst:!0},italic:{prefix:"_",suffix:"_",trimFirst:!0},strikethrough:{prefix:"~~",suffix:"~~",trimFirst:!0},quote:{prefix:"> ",multiline:!0,surroundWithNewlines:!0},code:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"},link:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"},image:{prefix:"",replaceNext:"https://",scanFor:"https?://"},unordered_list:{prefix:"- ",multiline:!0,surroundWithNewlines:!0},ordered_list:{prefix:"1. ",multiline:!0,orderedList:!0},spoiler:{prefix:">!",suffix:"!<",blockPrefix:">! ",multiline:!0,trimFirst:!0}},j=function(t,o){f()(o.el,S[t])};function I(t,o,e){return function(r){r.key===o&&(r.metaKey&&"โ"===P||r.ctrlKey&&"ctrl"===P)&&(r.preventDefault(),j(t,e))}}function F(t){var o=this,e="function"==typeof t?t():new(T());function r(t,o){return n().translator.trans("flarum-markdown.lib.composer."+t+"_tooltip")+(o?" <"+P+"-"+o+">":"")}var i=function(t){return function(){return j(t,o.attrs.composer.editor)}};return e.add("header",m(w,{title:r("header"),icon:"fas fa-heading",onclick:i("header")}),1e3),e.add("bold",m(w,{title:r("bold","b"),icon:"fas fa-bold",onclick:i("bold")}),900),e.add("italic",m(w,{title:r("italic","i"),icon:"fas fa-italic",onclick:i("italic")}),800),e.add("strikethrough",m(w,{title:r("strikethrough"),icon:"fas fa-strikethrough",onclick:i("strikethrough")}),700),e.add("quote",m(w,{title:r("quote"),icon:"fas fa-quote-left",onclick:i("quote")}),600),e.add("spoiler",m(w,{title:r("spoiler"),icon:"fas fa-exclamation-triangle",onclick:i("spoiler")}),500),e.add("code",m(w,{title:r("code"),icon:"fas fa-code",onclick:i("code")}),400),e.add("link",m(w,{title:r("link"),icon:"fas fa-link",onclick:i("link")}),300),e.add("image",m(w,{title:r("image"),icon:"fas fa-image",onclick:i("image")}),200),e.add("unordered_list",m(w,{title:r("unordered_list"),icon:"fas fa-list-ul",onclick:i("unordered_list")}),100),e.add("ordered_list",m(w,{title:r("ordered_list"),icon:"fas fa-list-ol",onclick:i("ordered_list")}),0),e}r().initializers.add("flarum-markdown",(function(t){(0,a.extend)(d().prototype,"keyHandlers",(function(t){t.add("bold",I("bold","b",this)),t.add("italic",I("italic","i",this))})),l().prototype.markdownToolbarItems?(0,a.override)(l().prototype,"markdownToolbarItems",F):l().prototype.markdownToolbarItems=F,(0,a.extend)(l().prototype,"toolbarItems",(function(t){t.add("markdown",m(b,{for:this.textareaId,setShortcutHandler:function(t){return shortcutHandler=t}},this.markdownToolbarItems().toArray()),100)}))}))})(),module.exports=o})();
+(()=>{var t={n:o=>{var e=o&&o.__esModule?()=>o.default:()=>o;return t.d(e,{a:e}),e},d:(o,e)=>{for(var r in e)t.o(e,r)&&!t.o(o,r)&&Object.defineProperty(o,r,{enumerable:!0,get:e[r]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},o={};(()=>{"use strict";t.r(o);const e=flarum.core.compat["forum/app"];var r=t.n(e);const n=flarum.core.compat["common/app"];var i=t.n(n);const a=flarum.core.compat["common/extend"],c=flarum.core.compat["common/components/TextEditor"];var l=t.n(c);const s=flarum.core.compat["common/utils/BasicEditorDriver"];var d=t.n(s);const u=flarum.core.compat["common/utils/styleSelectedText"];var f=t.n(u);function p(t,o){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,o){return t.__proto__=o,t},p(t,o)}function h(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,p(t,o)}const k=flarum.core.compat["common/Component"];var y=t.n(k),b=function(t){function o(){return t.apply(this,arguments)||this}return h(o,t),o.prototype.view=function(t){return m("div",{className:"MarkdownToolbar"},t.children)},o}(y());const x=flarum.core.compat["common/helpers/icon"];var v=t.n(x);const g=flarum.core.compat["common/components/Tooltip"];var w=t.n(g),_=function(t){function o(){return t.apply(this,arguments)||this}h(o,t);var e=o.prototype;return e.oncreate=function(o){t.prototype.oncreate.call(this,o)},e.view=function(){var t=m("button",{className:"Button Button--icon Button--link",type:"button","data-hotkey":this.attrs.hotkey,onkeydown:this.keydown.bind(this),onclick:this.attrs.onclick},v()(this.attrs.icon));return this.attrs.title?m(w(),{text:this.attrs.title},t):t},e.keydown=function(t){" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.element.click())},o}(y());const O=flarum.core.compat["common/utils/ItemList"];var j=t.n(O),T=navigator.userAgent.match(/Macintosh/)?"โ":"ctrl",P={header:{prefix:"### "},bold:{prefix:"**",suffix:"**",trimFirst:!0},italic:{prefix:"_",suffix:"_",trimFirst:!0},strikethrough:{prefix:"~~",suffix:"~~",trimFirst:!0},quote:{prefix:"> ",multiline:!0,surroundWithNewlines:!0},code:{prefix:"`",suffix:"`",blockPrefix:"```",blockSuffix:"```"},link:{prefix:"[",suffix:"](https://)",replaceNext:"https://",scanFor:"https?://"},image:{prefix:"",replaceNext:"https://",scanFor:"https?://"},unordered_list:{prefix:"- ",multiline:!0,surroundWithNewlines:!0},ordered_list:{prefix:"1. ",multiline:!0,orderedList:!0},spoiler:{prefix:">!",suffix:"!<",blockPrefix:">! ",multiline:!0,trimFirst:!0}},S=function(t,o){f()(o.el,P[t])};function I(t,o,e){return function(r){r.key===o&&(r.metaKey&&"โ"===T||r.ctrlKey&&"ctrl"===T)&&(r.preventDefault(),S(t,e))}}function M(t){var o=this,e="function"==typeof t?t():new(j());function r(t,o){return i().translator.trans("flarum-markdown.lib.composer."+t+"_tooltip")+(o?" <"+T+"-"+o+">":"")}var n=function(t){return function(){return S(t,o.attrs.composer.editor)}};return e.add("header",m(_,{title:r("header"),icon:"fas fa-heading",onclick:n("header")}),1e3),e.add("bold",m(_,{title:r("bold","b"),icon:"fas fa-bold",onclick:n("bold")}),900),e.add("italic",m(_,{title:r("italic","i"),icon:"fas fa-italic",onclick:n("italic")}),800),e.add("strikethrough",m(_,{title:r("strikethrough"),icon:"fas fa-strikethrough",onclick:n("strikethrough")}),700),e.add("quote",m(_,{title:r("quote"),icon:"fas fa-quote-left",onclick:n("quote")}),600),e.add("spoiler",m(_,{title:r("spoiler"),icon:"fas fa-exclamation-triangle",onclick:n("spoiler")}),500),e.add("code",m(_,{title:r("code"),icon:"fas fa-code",onclick:n("code")}),400),e.add("link",m(_,{title:r("link"),icon:"fas fa-link",onclick:n("link")}),300),e.add("image",m(_,{title:r("image"),icon:"fas fa-image",onclick:n("image")}),200),e.add("unordered_list",m(_,{title:r("unordered_list"),icon:"fas fa-list-ul",onclick:n("unordered_list")}),100),e.add("ordered_list",m(_,{title:r("ordered_list"),icon:"fas fa-list-ol",onclick:n("ordered_list")}),0),e}function F(){return F=Object.assign?Object.assign.bind():function(t){for(var o=1;o {\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['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/BasicEditorDriver'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/styleSelectedText'];","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/Component'];","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return {vnode.children}
;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n {icon(this.attrs.icon)}\n \n );\n\n if (this.attrs.title) {\n return {button} ;\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport app from 'flarum/common/app';\nimport { extend, override } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'โ' : 'ctrl';\n\nconst styles = {\n header: { prefix: '### ' },\n bold: { prefix: '**', suffix: '**', trimFirst: true },\n italic: { prefix: '_', suffix: '_', trimFirst: true },\n strikethrough: { prefix: '~~', suffix: '~~', trimFirst: true },\n quote: { prefix: '> ', multiline: true, surroundWithNewlines: true },\n code: { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n link: { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n image: { prefix: '', replaceNext: 'https://', scanFor: 'https?://' },\n unordered_list: { prefix: '- ', multiline: true, surroundWithNewlines: true },\n ordered_list: { prefix: '1. ', multiline: true, orderedList: true },\n spoiler: { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true },\n};\n\nconst applyStyle = (id, editorDriver) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(editorDriver.el, styles[id]);\n};\n\nfunction makeShortcut(id, key, editorDriver) {\n return function (e) {\n if (e.key === key && ((e.metaKey && modifierKey === 'โ') || (e.ctrlKey && modifierKey === 'ctrl'))) {\n e.preventDefault();\n applyStyle(id, editorDriver);\n }\n };\n}\n\nfunction markdownToolbarItems(oldFunc) {\n const items = typeof oldFunc === 'function' ? oldFunc() : new ItemList();\n\n function tooltip(name, hotkey) {\n return app.translator.trans(`flarum-markdown.lib.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n }\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id, this.attrs.composer.editor);\n };\n\n items.add('header', , 1000);\n items.add('bold', , 900);\n items.add('italic', , 800);\n items.add(\n 'strikethrough',\n ,\n 700\n );\n items.add('quote', , 600);\n items.add('spoiler', , 500);\n items.add('code', , 400);\n items.add('link', , 300);\n items.add('image', , 200);\n items.add(\n 'unordered_list',\n ,\n 100\n );\n items.add('ordered_list', , 0);\n\n return items;\n}\n\nexport function initialize(app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b', this));\n items.add('italic', makeShortcut('italic', 'i', this));\n });\n\n if (TextEditor.prototype.markdownToolbarItems) {\n override(TextEditor.prototype, 'markdownToolbarItems', markdownToolbarItems);\n } else {\n TextEditor.prototype.markdownToolbarItems = markdownToolbarItems;\n }\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'markdown',\n (shortcutHandler = handler)}>\n {this.markdownToolbarItems().toArray()}\n ,\n 100\n );\n });\n}\n","import app from 'flarum/forum/app';\nimport { initialize } from '../common/index';\n\napp.initializers.add('flarum-markdown', initialize);\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","MarkdownToolbar","view","vnode","className","children","Component","MarkdownButton","oncreate","button","type","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","header","prefix","bold","suffix","trimFirst","italic","strikethrough","quote","multiline","surroundWithNewlines","code","blockPrefix","blockSuffix","link","replaceNext","scanFor","image","unordered_list","ordered_list","orderedList","spoiler","applyStyle","id","editorDriver","styleSelectedText","el","makeShortcut","e","metaKey","ctrlKey","markdownToolbarItems","oldFunc","items","ItemList","tooltip","name","app","makeApplyStyle","composer","editor","add","extend","BasicEditorDriver","TextEditor","override","for","textareaId","setShortcutHandler","handler","shortcutHandler","toArray"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/markdown/webpack/bootstrap","webpack://@flarum/markdown/webpack/runtime/compat get default export","webpack://@flarum/markdown/webpack/runtime/define property getters","webpack://@flarum/markdown/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/markdown/webpack/runtime/make namespace object","webpack://@flarum/markdown/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/app']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/components/TextEditor']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/BasicEditorDriver']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/styleSelectedText']\"","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/markdown/./src/common/components/MarkdownToolbar.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/markdown/external root \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/markdown/./src/common/components/MarkdownButton.js","webpack://@flarum/markdown/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@flarum/markdown/./src/common/index.js","webpack://@flarum/markdown/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/markdown/./src/common/compat.ts","webpack://@flarum/markdown/./src/forum/compat.ts","webpack://@flarum/markdown/external assign \"flarum.core\"","webpack://@flarum/markdown/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/TextEditor'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/BasicEditorDriver'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/styleSelectedText'];","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/Component'];","import Component from 'flarum/common/Component';\n\nexport default class MarkdownToolbar extends Component {\n view(vnode) {\n return {vnode.children}
;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class MarkdownButton extends Component {\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n view() {\n const button = (\n \n {icon(this.attrs.icon)}\n \n );\n\n if (this.attrs.title) {\n return {button} ;\n }\n\n return button;\n }\n\n keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","/*!\n * Includes modified code from GitHub Markdown Toolbar Element\n * https://github.com/github/markdown-toolbar-element/\n *\n * Original Copyright GitHub, Inc.\n * Released under the MIT license\n * https://github.com/github/markdown-toolbar-element/blob/master/LICENSE\n */\n\nimport app from 'flarum/common/app';\nimport { extend, override } from 'flarum/common/extend';\nimport TextEditor from 'flarum/common/components/TextEditor';\nimport BasicEditorDriver from 'flarum/common/utils/BasicEditorDriver';\nimport styleSelectedText from 'flarum/common/utils/styleSelectedText';\n\nimport MarkdownToolbar from './components/MarkdownToolbar';\nimport MarkdownButton from './components/MarkdownButton';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst modifierKey = navigator.userAgent.match(/Macintosh/) ? 'โ' : 'ctrl';\n\nconst styles = {\n header: { prefix: '### ' },\n bold: { prefix: '**', suffix: '**', trimFirst: true },\n italic: { prefix: '_', suffix: '_', trimFirst: true },\n strikethrough: { prefix: '~~', suffix: '~~', trimFirst: true },\n quote: { prefix: '> ', multiline: true, surroundWithNewlines: true },\n code: { prefix: '`', suffix: '`', blockPrefix: '```', blockSuffix: '```' },\n link: { prefix: '[', suffix: '](https://)', replaceNext: 'https://', scanFor: 'https?://' },\n image: { prefix: '', replaceNext: 'https://', scanFor: 'https?://' },\n unordered_list: { prefix: '- ', multiline: true, surroundWithNewlines: true },\n ordered_list: { prefix: '1. ', multiline: true, orderedList: true },\n spoiler: { prefix: '>!', suffix: '!<', blockPrefix: '>! ', multiline: true, trimFirst: true },\n};\n\nconst applyStyle = (id, editorDriver) => {\n // This is a nasty hack that breaks encapsulation of the editor.\n // In future releases, we'll need to tweak the editor driver interface\n // to support triggering events like this.\n styleSelectedText(editorDriver.el, styles[id]);\n};\n\nfunction makeShortcut(id, key, editorDriver) {\n return function (e) {\n if (e.key === key && ((e.metaKey && modifierKey === 'โ') || (e.ctrlKey && modifierKey === 'ctrl'))) {\n e.preventDefault();\n applyStyle(id, editorDriver);\n }\n };\n}\n\nfunction markdownToolbarItems(oldFunc) {\n const items = typeof oldFunc === 'function' ? oldFunc() : new ItemList();\n\n function tooltip(name, hotkey) {\n return app.translator.trans(`flarum-markdown.lib.composer.${name}_tooltip`) + (hotkey ? ` <${modifierKey}-${hotkey}>` : '');\n }\n\n const makeApplyStyle = (id) => {\n return () => applyStyle(id, this.attrs.composer.editor);\n };\n\n items.add('header', , 1000);\n items.add('bold', , 900);\n items.add('italic', , 800);\n items.add(\n 'strikethrough',\n ,\n 700\n );\n items.add('quote', , 600);\n items.add('spoiler', , 500);\n items.add('code', , 400);\n items.add('link', , 300);\n items.add('image', , 200);\n items.add(\n 'unordered_list',\n ,\n 100\n );\n items.add('ordered_list', , 0);\n\n return items;\n}\n\nexport function initialize(app) {\n extend(BasicEditorDriver.prototype, 'keyHandlers', function (items) {\n items.add('bold', makeShortcut('bold', 'b', this));\n items.add('italic', makeShortcut('italic', 'i', this));\n });\n\n if (TextEditor.prototype.markdownToolbarItems) {\n override(TextEditor.prototype, 'markdownToolbarItems', markdownToolbarItems);\n } else {\n TextEditor.prototype.markdownToolbarItems = markdownToolbarItems;\n }\n\n extend(TextEditor.prototype, 'toolbarItems', function (items) {\n items.add(\n 'markdown',\n (shortcutHandler = handler)}>\n {this.markdownToolbarItems().toArray()}\n ,\n 100\n );\n });\n}\n","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}","import MarkdownButton from './components/MarkdownButton';\nimport MarkdownToolbar from './components/MarkdownToolbar';\n\nexport default {\n 'markdown/components/MarkdownButton': MarkdownButton,\n 'markdown/components/MarkdownToolbar': MarkdownToolbar,\n};\n","import commonCompat from '../common/compat';\n\nexport default {\n ...commonCompat,\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/forum/app';\nimport { initialize } from '../common/index';\n\napp.initializers.add('flarum-markdown', initialize);\n\n// Expose compat API\nimport markdownCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, markdownCompat);\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","MarkdownToolbar","view","vnode","className","children","Component","MarkdownButton","oncreate","button","type","this","attrs","hotkey","onkeydown","keydown","onclick","icon","title","text","event","preventDefault","element","click","modifierKey","navigator","userAgent","match","styles","header","prefix","bold","suffix","trimFirst","italic","strikethrough","quote","multiline","surroundWithNewlines","code","blockPrefix","blockSuffix","link","replaceNext","scanFor","image","unordered_list","ordered_list","orderedList","spoiler","applyStyle","id","editorDriver","styleSelectedText","el","makeShortcut","e","metaKey","ctrlKey","markdownToolbarItems","oldFunc","items","ItemList","tooltip","name","app","makeApplyStyle","composer","editor","add","_extends","assign","target","i","arguments","length","source","apply","extend","BasicEditorDriver","TextEditor","override","for","textareaId","setShortcutHandler","handler","shortcutHandler","toArray","markdownCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/markdown/js/src/admin/compat.ts b/extensions/markdown/js/src/admin/compat.ts
new file mode 100644
index 0000000000..426818c2be
--- /dev/null
+++ b/extensions/markdown/js/src/admin/compat.ts
@@ -0,0 +1,5 @@
+import commonCompat from '../common/compat';
+
+export default {
+ ...commonCompat,
+};
diff --git a/extensions/markdown/js/src/admin/index.js b/extensions/markdown/js/src/admin/index.js
index e655c3e4cf..c315325fa0 100644
--- a/extensions/markdown/js/src/admin/index.js
+++ b/extensions/markdown/js/src/admin/index.js
@@ -2,3 +2,9 @@ import app from 'flarum/admin/app';
import { initialize } from '../common/index';
app.initializers.add('flarum-markdown', initialize);
+
+// Expose compat API
+import markdownCompat from './compat';
+import { compat } from '@flarum/core/admin';
+
+Object.assign(compat, markdownCompat);
diff --git a/extensions/markdown/js/src/common/compat.ts b/extensions/markdown/js/src/common/compat.ts
new file mode 100644
index 0000000000..cc005d2903
--- /dev/null
+++ b/extensions/markdown/js/src/common/compat.ts
@@ -0,0 +1,7 @@
+import MarkdownButton from './components/MarkdownButton';
+import MarkdownToolbar from './components/MarkdownToolbar';
+
+export default {
+ 'markdown/components/MarkdownButton': MarkdownButton,
+ 'markdown/components/MarkdownToolbar': MarkdownToolbar,
+};
diff --git a/extensions/markdown/js/src/forum/compat.ts b/extensions/markdown/js/src/forum/compat.ts
new file mode 100644
index 0000000000..426818c2be
--- /dev/null
+++ b/extensions/markdown/js/src/forum/compat.ts
@@ -0,0 +1,5 @@
+import commonCompat from '../common/compat';
+
+export default {
+ ...commonCompat,
+};
diff --git a/extensions/markdown/js/src/forum/index.js b/extensions/markdown/js/src/forum/index.js
index b38d9916e3..d2d652f39f 100644
--- a/extensions/markdown/js/src/forum/index.js
+++ b/extensions/markdown/js/src/forum/index.js
@@ -2,3 +2,9 @@ import app from 'flarum/forum/app';
import { initialize } from '../common/index';
app.initializers.add('flarum-markdown', initialize);
+
+// Expose compat API
+import markdownCompat from './compat';
+import { compat } from '@flarum/core/forum';
+
+Object.assign(compat, markdownCompat);
diff --git a/extensions/mentions/js/dist/forum.js b/extensions/mentions/js/dist/forum.js
index 1433b11cf7..cb41277ddd 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""})),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})();
+(()=>{var t={440:(t,u,e)=>{var n=e(75).default;function o(){"use strict";t.exports=o=function(){return u},t.exports.__esModule=!0,t.exports.default=t.exports;var u={},e=Object.prototype,r=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 o=u&&u.prototype instanceof d?u:d,r=Object.create(o.prototype),s=new M(n||[]);return i(r,"_invoke",{value:g(t,e,s)}),r}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&&r.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(o,i,s,a){var D=m(t[o],t,i);if("throw"!==D.type){var c=D.arg,l=c.value;return l&&"object"==n(l)&&r.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 o;i(this,"_invoke",{value:function(t,n){function r(){return new u((function(u,o){e(t,n,u,o)}))}return o=o?o.then(r,r):r()}})}function g(t,u,e){var n="suspendedStart";return function(o,r){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw r;return{value:void 0,done:!0}}for(e.method=o,e.arg=r;;){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 o=n.arg;return o?o.done?(u[t.resultName]=o.value,u.next=t.nextLoc,"return"!==u.method&&(u.method="next",u.arg=void 0),u.delegate=null,p):o:(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 o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return e("end");if(o.tryLoc<=this.prev){var s=r.call(o,"catchLoc"),a=r.call(o,"finallyLoc");if(s&&a){if(this.prev=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&r.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 o=n.arg;x(e)}return o}}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=o,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 o=u[n];if(void 0!==o)return o.exports;var r=u[n]={exports:{}};return t[n](r,r.exports,e),r.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 o=flarum.core.compat["common/extend"],r=flarum.core.compat["forum/app"];var i=e.n(r);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 "+o+e.trim().replace(/\n/g,"\n> ")+"\n\n":o),!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 o=$("").append(e.cloneContents());return o.find("img.emoji").replaceWith((function(){return this.alt})),o.find("img").replaceWith((function(){return""})),o.find("a").replaceWith((function(){return"["+this.innerText+"]("+this.href+")"})),o.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),o=0;o
=n.length&&(o=0),this.index=o;var r=n.removeClass("active").eq(o).addClass("active");if(u){var i,s=e.scrollTop(),a=e.offset().top,D=a+e.outerHeight(),c=r.offset().top,l=c+r.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 ot(t,u){if(null==t)return{};var e,n,o={},r=Object.keys(t);for(n=0;n=0||(o[e]=t[e]);return o}function rt(t,u,e,n,o,r,i){try{var s=t[r](i),a=s.value}catch(t){return void e(t)}s.done?u(a):Promise.resolve(a).then(n,o)}function it(t){return function(){var u=this,e=arguments;return new Promise((function(n,o){var r=t.apply(u,e);function i(t){rt(r,n,o,i,s,"next",t)}function s(t){rt(r,n,o,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=ot(u,mt),o=ft()("MentionsDropdownItem","PostPreview","MentionsDropdown-"+e.type());return m("button",Object.assign({className:o},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 ou=e.n(nu);const ru=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(ru)());const su=[(new(eu().Routes)).add("user.mentions","/u/:username/mentions",iu),new(eu().Model)(ou()).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(r);var i=function(){return $('.PostStream-item[data-id="'+o+'"]')},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(r);var s=this.$(),a=this.$(".Post-mentionedBy"),D=function(){!r.hasClass("in")&&r.is(":visible")||(m.render(r[0],m("[",null,o.map((function(u){return m("li",{"data-number":u.number()},m(C(),{post:u,onclick:t.bind(e)}))})),o.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,o.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,o.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),o=function(t){setTimeout((function(){var o=X(u);if(o){n.content=o,m.render(e[0],n.render());var r=window.getSelection().getRangeAt(0).getClientRects(),i=r[0];if(t.clientY '),u=new nt,(0,o.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,o.extend)(V().prototype,"buildEditorParams",(function(e){var n,o,r,s=this,a=new At({onmouseenter:function(){u.setIndex($(this).parent().index())},onclick:function(t){s.attrs.composer.editor.replaceBeforeCursor(o-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);o=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,o=D-c.length+f+1,a.init(l.makeMentionables());break}}if(u.hide(),u.active=!1,o){var d,F=c.substring(n).toLowerCase();if(!(r=l.queryFromTyped(F)))return;a.typed=r;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(o),r=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+r>D.width()&&(c=D.width()-r),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,o.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,o.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,o.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,o.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 f551969dd1..87d33a81dc 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/../../../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 this.state.loadNext()} loading={this.state.isLoadingNext()}>\n {app.translator.trans('flarum-mentions.forum.mentioned_by.load_more_button')}\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 ``;\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 {vnode.children} \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 reply(post)}>\n {app.translator.trans('flarum-mentions.forum.post.reply_link')}\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
+{"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 this.state.loadNext()} loading={this.state.isLoadingNext()}>\n {app.translator.trans('flarum-mentions.forum.mentioned_by.load_more_button')}\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 ``;\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 {vnode.children} \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 MentionedByModal from './components/MentionedByModal';\nimport MentionsDropdownItem from './components/MentionsDropdownItem';\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 GroupMention from './mentionables/GroupMention';\nimport MentionableModel from './mentionables/MentionableModel';\nimport MentionableModels from './mentionables/MentionableModels';\nimport PostMention from './mentionables/PostMention';\nimport TagMention from './mentionables/TagMention';\nimport UserMention from './mentionables/UserMention';\nimport AtMentionFormat from './mentionables/formats/AtMentionFormat';\nimport HashMentionFormat from './mentionables/formats/HashMentionFormat';\nimport MentionFormat from './mentionables/formats/MentionFormat';\nimport MentionFormats from './mentionables/formats/MentionFormats';\nimport Mentionables from './extenders/Mentionables';\nimport MentionedByModalState from './state/MentionedByModalState';\n\nexport default {\n 'mentions/components/MentionsUserPage': MentionsUserPage,\n 'mentions/components/PostMentionedNotification': PostMentionedNotification,\n 'mentions/components/MentionedByModal': MentionedByModal,\n 'mentions/components/MentionsDropdownItem': MentionsDropdownItem,\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/GroupMention': GroupMention,\n 'mentions/mentionables/MentionableModel': MentionableModel,\n 'mentions/mentionables/MentionableModels': MentionableModels,\n 'mentions/mentionables/PostMention': PostMention,\n 'mentions/mentionables/TagMention': TagMention,\n 'mentions/mentionables/UserMention': UserMention,\n 'mentions/mentionables/formats/AtMentionFormat': AtMentionFormat,\n 'mentions/mentionables/formats/HashMentionFormat': HashMentionFormat,\n 'mentions/mentionables/formats/MentionFormat': MentionFormat,\n 'mentions/mentionables/formats/MentionFormats': MentionFormats,\n 'mentions/extenders/Mentionables': Mentionables,\n 'mentions/state/MentionedByModalState': MentionedByModalState,\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 reply(post)}>\n {app.translator.trans('flarum-mentions.forum.post.reply_link')}\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
diff --git a/extensions/mentions/js/src/forum/compat.js b/extensions/mentions/js/src/forum/compat.js
index 8c456f1894..fdb2ba95b9 100644
--- a/extensions/mentions/js/src/forum/compat.js
+++ b/extensions/mentions/js/src/forum/compat.js
@@ -1,4 +1,6 @@
import GroupMentionedNotification from './components/GroupMentionedNotification';
+import MentionedByModal from './components/MentionedByModal';
+import MentionsDropdownItem from './components/MentionsDropdownItem';
import MentionsUserPage from './components/MentionsUserPage';
import PostMentionedNotification from './components/PostMentionedNotification';
import UserMentionedNotification from './components/UserMentionedNotification';
@@ -9,13 +11,24 @@ import getMentionText from './utils/getMentionText';
import * as reply from './utils/reply';
import selectedText from './utils/selectedText';
import * as textFormatter from './utils/textFormatter';
+import GroupMention from './mentionables/GroupMention';
import MentionableModel from './mentionables/MentionableModel';
+import MentionableModels from './mentionables/MentionableModels';
+import PostMention from './mentionables/PostMention';
+import TagMention from './mentionables/TagMention';
+import UserMention from './mentionables/UserMention';
+import AtMentionFormat from './mentionables/formats/AtMentionFormat';
+import HashMentionFormat from './mentionables/formats/HashMentionFormat';
import MentionFormat from './mentionables/formats/MentionFormat';
+import MentionFormats from './mentionables/formats/MentionFormats';
import Mentionables from './extenders/Mentionables';
+import MentionedByModalState from './state/MentionedByModalState';
export default {
'mentions/components/MentionsUserPage': MentionsUserPage,
'mentions/components/PostMentionedNotification': PostMentionedNotification,
+ 'mentions/components/MentionedByModal': MentionedByModal,
+ 'mentions/components/MentionsDropdownItem': MentionsDropdownItem,
'mentions/components/UserMentionedNotification': UserMentionedNotification,
'mentions/components/GroupMentionedNotification': GroupMentionedNotification,
'mentions/fragments/AutocompleteDropdown': AutocompleteDropdown,
@@ -25,7 +38,16 @@ export default {
'mentions/utils/reply': reply,
'mentions/utils/selectedText': selectedText,
'mentions/utils/textFormatter': textFormatter,
+ 'mentions/mentionables/GroupMention': GroupMention,
'mentions/mentionables/MentionableModel': MentionableModel,
+ 'mentions/mentionables/MentionableModels': MentionableModels,
+ 'mentions/mentionables/PostMention': PostMention,
+ 'mentions/mentionables/TagMention': TagMention,
+ 'mentions/mentionables/UserMention': UserMention,
+ 'mentions/mentionables/formats/AtMentionFormat': AtMentionFormat,
+ 'mentions/mentionables/formats/HashMentionFormat': HashMentionFormat,
'mentions/mentionables/formats/MentionFormat': MentionFormat,
+ 'mentions/mentionables/formats/MentionFormats': MentionFormats,
'mentions/extenders/Mentionables': Mentionables,
+ 'mentions/state/MentionedByModalState': MentionedByModalState,
};
diff --git a/extensions/mentions/src/Job/SendMentionsNotificationsJob.php b/extensions/mentions/src/Job/SendMentionsNotificationsJob.php
index f3ed2d7b09..9fea2e5492 100644
--- a/extensions/mentions/src/Job/SendMentionsNotificationsJob.php
+++ b/extensions/mentions/src/Job/SendMentionsNotificationsJob.php
@@ -47,6 +47,8 @@ class SendMentionsNotificationsJob extends AbstractJob
public function __construct(CommentPost $post, array $userMentions, array $postMentions, array $groupMentions)
{
+ parent::__construct();
+
$this->post = $post;
$this->userMentions = $userMentions;
$this->postMentions = $postMentions;
diff --git a/extensions/mentions/tests/integration/api/PostMentionsTest.php b/extensions/mentions/tests/integration/api/PostMentionsTest.php
index 6a21e71b90..25af7f255d 100644
--- a/extensions/mentions/tests/integration/api/PostMentionsTest.php
+++ b/extensions/mentions/tests/integration/api/PostMentionsTest.php
@@ -12,8 +12,8 @@
use Carbon\Carbon;
use Flarum\Extend;
use Flarum\Formatter\Formatter;
-use Flarum\Post\Post;
use Flarum\Post\CommentPost;
+use Flarum\Post\Post;
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
use Flarum\Testing\integration\TestCase;
use Flarum\User\DisplayName\DriverInterface;
@@ -574,7 +574,6 @@ public function rendering_post_mention_without_a_context_works()
$this->assertStringContainsString('TOBY$', $renderedHtml);
}
-
}
class CustomOtherDisplayNameDriver implements DriverInterface
diff --git a/extensions/nicknames/js/dist/forum.js b/extensions/nicknames/js/dist/forum.js
index 5e4d4c2bb5..b3ecad26ac 100644
--- a/extensions/nicknames/js/dist/forum.js
+++ b/extensions/nicknames/js/dist/forum.js
@@ -1,2 +1,2 @@
-(()=>{var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{extend:()=>M});const n=flarum.core.compat["forum/app"];var a=t.n(n);const r=flarum.core.compat["common/extend"],o=flarum.core.compat["common/components/Button"];var i=t.n(o);const s=flarum.core.compat["common/components/EditUserModal"];var c=t.n(s);const u=flarum.core.compat["forum/components/SignUpModal"];var l=t.n(u);const d=flarum.core.compat["forum/components/SettingsPage"];var p=t.n(d);const f=flarum.core.compat["common/utils/extractText"];var k=t.n(f);const h=flarum.core.compat["common/utils/Stream"];var y=t.n(h);function b(t,e){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},b(t,e)}const v=flarum.core.compat["common/components/Modal"];var g=function(t){var e,n;function r(){return t.apply(this,arguments)||this}n=t,(e=r).prototype=Object.create(n.prototype),e.prototype.constructor=e,b(e,n);var o=r.prototype;return o.oninit=function(e){t.prototype.oninit.call(this,e),this.nickname=y()(a().session.user.displayName())},o.className=function(){return"NickameModal Modal--small"},o.title=function(){return a().translator.trans("flarum-nicknames.forum.change_nickname.title")},o.content=function(){return m("div",{className:"Modal-body"},m("div",{className:"Form Form--centered"},m("div",{className:"Form-group"},m("input",{type:"text",autocomplete:"off",name:"nickname",className:"FormControl",bidi:this.nickname,disabled:this.loading})),m("div",{className:"Form-group"},m(i(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading},a().translator.trans("flarum-nicknames.forum.change_nickname.submit_button")))))},o.onsubmit=function(t){var e=this;t.preventDefault(),this.nickname()!==a().session.user.displayName()?(this.loading=!0,a().session.user.save({nickname:this.nickname()},{errorHandler:this.onerror.bind(this)}).then(this.hide.bind(this)).catch((function(){e.loading=!1,m.redraw()}))):this.hide()},r}(t.n(v)());const N=flarum.core.compat["common/extenders"];var _=t.n(N);const x=flarum.core.compat["common/models/User"];var O=t.n(x);const M=[new(_().Model)(O()).attribute("canEditNickname")];a().initializers.add("flarum/nicknames",(function(){(0,r.extend)(p().prototype,"accountItems",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.user.canEditNickname()&&t.add("changeNickname",m(i(),{className:"Button",onclick:function(){return a().modal.show(g)}},a().translator.trans("flarum-nicknames.forum.settings.change_nickname_button")))})),(0,r.extend)(c().prototype,"oninit",(function(){this.nickname=y()(this.attrs.user.displayName())})),(0,r.extend)(c().prototype,"fields",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&t.add("nickname",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-nicknames.forum.edit_user.nicknames_heading")),m("input",{className:"FormControl",placeholder:k()(a().translator.trans("flarum-nicknames.forum.edit_user.nicknames_text")),bidi:this.nickname})),100)})),(0,r.extend)(c().prototype,"data",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&this.nickname()!==this.attrs.user.displayName()&&(t.nickname=this.nickname())})),(0,r.extend)(l().prototype,"oninit",(function(){"nickname"===a().forum.attribute("displayNameDriver")&&(this.nickname=y()(this.attrs.username||""))})),(0,r.extend)(l().prototype,"onready",(function(){"nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&a().forum.attribute("randomizeUsernameOnRegistration")&&this.$("[name=nickname]").select()})),(0,r.extend)(l().prototype,"fields",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&(t.add("nickname",m("div",{className:"Form-group"},m("input",{className:"FormControl",name:"nickname",type:"text",placeholder:k()(a().translator.trans("flarum-nicknames.forum.sign_up.nickname_placeholder")),bidi:this.nickname,disabled:this.loading||this.isProvided("nickname"),required:a().forum.attribute("randomizeUsernameOnRegistration")})),25),a().forum.attribute("randomizeUsernameOnRegistration")&&t.remove("username"))})),(0,r.extend)(l().prototype,"submitData",(function(t){if("nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&(t.nickname=this.nickname(),a().forum.attribute("randomizeUsernameOnRegistration"))){var e=new Uint32Array(2);crypto.getRandomValues(e),t.username=e.join("")}}))}))})(),module.exports=e})();
+(()=>{var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{extend:()=>M});const n=flarum.core.compat["forum/app"];var a=t.n(n);const r=flarum.core.compat["common/extend"],o=flarum.core.compat["common/components/Button"];var i=t.n(o);const s=flarum.core.compat["common/components/EditUserModal"];var c=t.n(s);const u=flarum.core.compat["forum/components/SignUpModal"];var l=t.n(u);const d=flarum.core.compat["forum/components/SettingsPage"];var p=t.n(d);const f=flarum.core.compat["common/utils/extractText"];var k=t.n(f);const h=flarum.core.compat["common/utils/Stream"];var b=t.n(h);function y(t,e){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},y(t,e)}const v=flarum.core.compat["common/components/Modal"];var g=function(t){var e,n;function r(){return t.apply(this,arguments)||this}n=t,(e=r).prototype=Object.create(n.prototype),e.prototype.constructor=e,y(e,n);var o=r.prototype;return o.oninit=function(e){t.prototype.oninit.call(this,e),this.nickname=b()(a().session.user.displayName())},o.className=function(){return"NickameModal Modal--small"},o.title=function(){return a().translator.trans("flarum-nicknames.forum.change_nickname.title")},o.content=function(){return m("div",{className:"Modal-body"},m("div",{className:"Form Form--centered"},m("div",{className:"Form-group"},m("input",{type:"text",autocomplete:"off",name:"nickname",className:"FormControl",bidi:this.nickname,disabled:this.loading})),m("div",{className:"Form-group"},m(i(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading},a().translator.trans("flarum-nicknames.forum.change_nickname.submit_button")))))},o.onsubmit=function(t){var e=this;t.preventDefault(),this.nickname()!==a().session.user.displayName()?(this.loading=!0,a().session.user.save({nickname:this.nickname()},{errorHandler:this.onerror.bind(this)}).then(this.hide.bind(this)).catch((function(){e.loading=!1,m.redraw()}))):this.hide()},r}(t.n(v)());const N=flarum.core.compat["common/extenders"];var _=t.n(N);const O=flarum.core.compat["common/models/User"];var x=t.n(O);const M=[new(_().Model)(x()).attribute("canEditNickname")],j={"nicknames/components/NicknameModal":g},D=flarum.core;a().initializers.add("flarum/nicknames",(function(){(0,r.extend)(p().prototype,"accountItems",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.user.canEditNickname()&&t.add("changeNickname",m(i(),{className:"Button",onclick:function(){return a().modal.show(g)}},a().translator.trans("flarum-nicknames.forum.settings.change_nickname_button")))})),(0,r.extend)(c().prototype,"oninit",(function(){this.nickname=b()(this.attrs.user.displayName())})),(0,r.extend)(c().prototype,"fields",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&t.add("nickname",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-nicknames.forum.edit_user.nicknames_heading")),m("input",{className:"FormControl",placeholder:k()(a().translator.trans("flarum-nicknames.forum.edit_user.nicknames_text")),bidi:this.nickname})),100)})),(0,r.extend)(c().prototype,"data",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&this.nickname()!==this.attrs.user.displayName()&&(t.nickname=this.nickname())})),(0,r.extend)(l().prototype,"oninit",(function(){"nickname"===a().forum.attribute("displayNameDriver")&&(this.nickname=b()(this.attrs.username||""))})),(0,r.extend)(l().prototype,"onready",(function(){"nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&a().forum.attribute("randomizeUsernameOnRegistration")&&this.$("[name=nickname]").select()})),(0,r.extend)(l().prototype,"fields",(function(t){"nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&(t.add("nickname",m("div",{className:"Form-group"},m("input",{className:"FormControl",name:"nickname",type:"text",placeholder:k()(a().translator.trans("flarum-nicknames.forum.sign_up.nickname_placeholder")),bidi:this.nickname,disabled:this.loading||this.isProvided("nickname"),required:a().forum.attribute("randomizeUsernameOnRegistration")})),25),a().forum.attribute("randomizeUsernameOnRegistration")&&t.remove("username"))})),(0,r.extend)(l().prototype,"submitData",(function(t){if("nickname"===a().forum.attribute("displayNameDriver")&&a().forum.attribute("setNicknameOnRegistration")&&(t.nickname=this.nickname(),a().forum.attribute("randomizeUsernameOnRegistration"))){var e=new Uint32Array(2);crypto.getRandomValues(e),t.username=e.join("")}}))})),Object.assign(D.compat,j)})(),module.exports=e})();
//# sourceMappingURL=forum.js.map
\ No newline at end of file
diff --git a/extensions/nicknames/js/dist/forum.js.map b/extensions/nicknames/js/dist/forum.js.map
index c209559dee..5718561c27 100644
--- a/extensions/nicknames/js/dist/forum.js.map
+++ b/extensions/nicknames/js/dist/forum.js.map
@@ -1 +1 @@
-{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/EditUserModal']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/components/SignUpModal']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/components/SettingsPage']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/nicknames/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/nicknames/./src/forum/components/NicknameModal.js","webpack://@flarum/nicknames/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/models/User']\"","webpack://@flarum/nicknames/./src/forum/extend.ts","webpack://@flarum/nicknames/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/EditUserModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/SignUpModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/SettingsPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","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}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\n\nexport default class NicknameModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.nickname = Stream(app.session.user.displayName());\n }\n\n className() {\n return 'NickameModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-nicknames.forum.change_nickname.title');\n }\n\n content() {\n return (\n \n
\n
\n \n
\n
\n \n {app.translator.trans('flarum-nicknames.forum.change_nickname.submit_button')}\n \n
\n
\n
\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n if (this.nickname() === app.session.user.displayName()) {\n this.hide();\n return;\n }\n\n this.loading = true;\n\n app.session.user\n .save(\n { nickname: this.nickname() },\n {\n errorHandler: this.onerror.bind(this),\n }\n )\n .then(this.hide.bind(this))\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\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/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/User'];","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\n\nexport default [\n new Extend.Model(User) //\n .attribute('canEditNickname'),\n];\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport EditUserModal from 'flarum/common/components/EditUserModal';\nimport SignUpModal from 'flarum/forum/components/SignUpModal';\nimport SettingsPage from 'flarum/forum/components/SettingsPage';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport NickNameModal from './components/NicknameModal';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum/nicknames', () => {\n extend(SettingsPage.prototype, 'accountItems', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (this.user.canEditNickname()) {\n items.add(\n 'changeNickname',\n app.modal.show(NickNameModal)}>\n {app.translator.trans('flarum-nicknames.forum.settings.change_nickname_button')}\n \n );\n }\n });\n\n extend(EditUserModal.prototype, 'oninit', function () {\n this.nickname = Stream(this.attrs.user.displayName());\n });\n\n extend(EditUserModal.prototype, 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (!this.attrs.user.canEditNickname()) return;\n\n items.add(\n 'nickname',\n \n {app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_heading')} \n \n
,\n 100\n );\n });\n\n extend(EditUserModal.prototype, 'data', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (!this.attrs.user.canEditNickname()) return;\n\n if (this.nickname() !== this.attrs.user.displayName()) {\n data.nickname = this.nickname();\n }\n });\n\n extend(SignUpModal.prototype, 'oninit', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n this.nickname = Stream(this.attrs.username || '');\n });\n\n extend(SignUpModal.prototype, 'onready', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration') && app.forum.attribute('randomizeUsernameOnRegistration')) {\n this.$('[name=nickname]').select();\n }\n });\n\n extend(SignUpModal.prototype, 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration')) {\n items.add(\n 'nickname',\n \n \n
,\n 25\n );\n\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n items.remove('username');\n }\n }\n });\n\n extend(SignUpModal.prototype, 'submitData', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration')) {\n data.nickname = this.nickname();\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n const arr = new Uint32Array(2);\n crypto.getRandomValues(arr);\n data.username = arr.join('');\n }\n }\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","NicknameModal","subClass","superClass","create","constructor","oninit","vnode","this","nickname","Stream","app","className","title","content","type","autocomplete","name","bidi","disabled","loading","onsubmit","e","preventDefault","errorHandler","onerror","then","hide","m","redraw","Modal","Extend","User","attribute","extend","SettingsPage","items","user","canEditNickname","add","onclick","NickNameModal","EditUserModal","attrs","displayName","placeholder","extractText","data","SignUpModal","username","$","select","isProvided","required","remove","arr","Uint32Array","crypto","getRandomValues","join"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/EditUserModal']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/components/SignUpModal']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['forum/components/SettingsPage']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/nicknames/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/nicknames/./src/forum/components/NicknameModal.js","webpack://@flarum/nicknames/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/extenders']\"","webpack://@flarum/nicknames/external root \"flarum.core.compat['common/models/User']\"","webpack://@flarum/nicknames/./src/forum/extend.ts","webpack://@flarum/nicknames/./src/forum/compat.ts","webpack://@flarum/nicknames/external assign \"flarum.core\"","webpack://@flarum/nicknames/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/EditUserModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/SignUpModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/SettingsPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","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}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\n\nexport default class NicknameModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.nickname = Stream(app.session.user.displayName());\n }\n\n className() {\n return 'NickameModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-nicknames.forum.change_nickname.title');\n }\n\n content() {\n return (\n \n
\n
\n \n
\n
\n \n {app.translator.trans('flarum-nicknames.forum.change_nickname.submit_button')}\n \n
\n
\n
\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n if (this.nickname() === app.session.user.displayName()) {\n this.hide();\n return;\n }\n\n this.loading = true;\n\n app.session.user\n .save(\n { nickname: this.nickname() },\n {\n errorHandler: this.onerror.bind(this),\n }\n )\n .then(this.hide.bind(this))\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\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/extenders'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/User'];","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\n\nexport default [\n new Extend.Model(User) //\n .attribute('canEditNickname'),\n];\n","import NicknameModal from './components/NicknameModal';\n\nexport default {\n 'nicknames/components/NicknameModal': NicknameModal,\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport EditUserModal from 'flarum/common/components/EditUserModal';\nimport SignUpModal from 'flarum/forum/components/SignUpModal';\nimport SettingsPage from 'flarum/forum/components/SettingsPage';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport NickNameModal from './components/NicknameModal';\n\nexport { default as extend } from './extend';\n\napp.initializers.add('flarum/nicknames', () => {\n extend(SettingsPage.prototype, 'accountItems', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (this.user.canEditNickname()) {\n items.add(\n 'changeNickname',\n app.modal.show(NickNameModal)}>\n {app.translator.trans('flarum-nicknames.forum.settings.change_nickname_button')}\n \n );\n }\n });\n\n extend(EditUserModal.prototype, 'oninit', function () {\n this.nickname = Stream(this.attrs.user.displayName());\n });\n\n extend(EditUserModal.prototype, 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (!this.attrs.user.canEditNickname()) return;\n\n items.add(\n 'nickname',\n \n {app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_heading')} \n \n
,\n 100\n );\n });\n\n extend(EditUserModal.prototype, 'data', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (!this.attrs.user.canEditNickname()) return;\n\n if (this.nickname() !== this.attrs.user.displayName()) {\n data.nickname = this.nickname();\n }\n });\n\n extend(SignUpModal.prototype, 'oninit', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n this.nickname = Stream(this.attrs.username || '');\n });\n\n extend(SignUpModal.prototype, 'onready', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration') && app.forum.attribute('randomizeUsernameOnRegistration')) {\n this.$('[name=nickname]').select();\n }\n });\n\n extend(SignUpModal.prototype, 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration')) {\n items.add(\n 'nickname',\n \n \n
,\n 25\n );\n\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n items.remove('username');\n }\n }\n });\n\n extend(SignUpModal.prototype, 'submitData', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n\n if (app.forum.attribute('setNicknameOnRegistration')) {\n data.nickname = this.nickname();\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n const arr = new Uint32Array(2);\n crypto.getRandomValues(arr);\n data.username = arr.join('');\n }\n }\n });\n});\n\n// Expose compat API\nimport nicknamesCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, nicknamesCompat);\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","NicknameModal","subClass","superClass","create","constructor","oninit","vnode","this","nickname","Stream","app","className","title","content","type","autocomplete","name","bidi","disabled","loading","onsubmit","e","preventDefault","errorHandler","onerror","then","hide","m","redraw","Modal","Extend","User","attribute","extend","SettingsPage","items","user","canEditNickname","add","onclick","NickNameModal","EditUserModal","attrs","displayName","placeholder","extractText","data","SignUpModal","username","$","select","isProvided","required","remove","arr","Uint32Array","crypto","getRandomValues","join","assign","nicknamesCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/nicknames/js/src/forum/compat.ts b/extensions/nicknames/js/src/forum/compat.ts
new file mode 100644
index 0000000000..3029d0f1a4
--- /dev/null
+++ b/extensions/nicknames/js/src/forum/compat.ts
@@ -0,0 +1,5 @@
+import NicknameModal from './components/NicknameModal';
+
+export default {
+ 'nicknames/components/NicknameModal': NicknameModal,
+};
diff --git a/extensions/nicknames/js/src/forum/index.js b/extensions/nicknames/js/src/forum/index.js
index 8c353494cc..4d35fe7d60 100644
--- a/extensions/nicknames/js/src/forum/index.js
+++ b/extensions/nicknames/js/src/forum/index.js
@@ -110,3 +110,9 @@ app.initializers.add('flarum/nicknames', () => {
}
});
});
+
+// Expose compat API
+import nicknamesCompat from './compat';
+import { compat } from '@flarum/core/forum';
+
+Object.assign(compat, nicknamesCompat);
diff --git a/extensions/package-manager/js/dist-typings/compat.d.ts b/extensions/package-manager/js/dist-typings/compat.d.ts
new file mode 100644
index 0000000000..76990fe420
--- /dev/null
+++ b/extensions/package-manager/js/dist-typings/compat.d.ts
@@ -0,0 +1,49 @@
+import AuthMethodModal from './components/AuthMethodModal';
+import ConfigureAuth from './components/ConfigureAuth';
+import ConfigureComposer from './components/ConfigureComposer';
+import ConfigureJson from './components/ConfigureJson';
+import ControlSection from './components/ControlSection';
+import ExtensionItem from './components/ExtensionItem';
+import Installer from './components/Installer';
+import Label from './components/Label';
+import MajorUpdater from './components/MajorUpdater';
+import Pagination from './components/Pagination';
+import QueueSection from './components/QueueSection';
+import RepositoryModal from './components/RepositoryModal';
+import SettingsPage from './components/SettingsPage';
+import TaskOutputModal from './components/TaskOutputModal';
+import Updater from './components/Updater';
+import WhyNotModal from './components/WhyNotModal';
+import Task from './models/Task';
+import ControlSectionState from './states/ControlSectionState';
+import ExtensionManagerState from './states/ExtensionManagerState';
+import QueueState from './states/QueueState';
+import errorHandler from './utils/errorHandler';
+import humanDuration from './utils/humanDuration';
+import jumpToQueue from './utils/jumpToQueue';
+declare const _default: {
+ 'extension-manager/components/AuthMethodModal': typeof AuthMethodModal;
+ 'extension-manager/components/ConfigureAuth': typeof ConfigureAuth;
+ 'extension-manager/components/ConfigureComposer': typeof ConfigureComposer;
+ 'extension-manager/components/ConfigureJson': typeof ConfigureJson;
+ 'extension-manager/components/ControlSection': typeof ControlSection;
+ 'extension-manager/components/ExtensionItem': typeof ExtensionItem;
+ 'extension-manager/components/Installer': typeof Installer;
+ 'extension-manager/components/Label': typeof Label;
+ 'extension-manager/components/MajorUpdater': typeof MajorUpdater;
+ 'extension-manager/components/Pagination': typeof Pagination;
+ 'extension-manager/components/QueueSection': typeof QueueSection;
+ 'extension-manager/components/RepositoryModal': typeof RepositoryModal;
+ 'extension-manager/components/SettingsPage': typeof SettingsPage;
+ 'extension-manager/components/TaskOutputModal': typeof TaskOutputModal;
+ 'extension-manager/components/Updater': typeof Updater;
+ 'extension-manager/components/WhyNotModal': typeof WhyNotModal;
+ 'extension-manager/models/Task': typeof Task;
+ 'extension-manager/states/ControlSectionState': typeof ControlSectionState;
+ 'extension-manager/states/ExtensionManagerState': typeof ExtensionManagerState;
+ 'extension-manager/states/QueueState': typeof QueueState;
+ 'extension-manager/utils/errorHandler': typeof errorHandler;
+ 'extension-manager/utils/humanDuration': typeof humanDuration;
+ 'extension-manager/utils/jumpToQueue': typeof jumpToQueue;
+};
+export default _default;
diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js
index ed43a5cc39..6aaa2665d3 100755
--- a/extensions/package-manager/js/dist/admin.js
+++ b/extensions/package-manager/js/dist/admin.js
@@ -1,2 +1,2 @@
-(()=>{var t={3:function(t){t.exports=function(){"use strict";var t,n,e=1e3,a=6e4,s=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,u=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,m={years:i,months:l,days:r,hours:s,minutes:a,seconds:e,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,n,e){return new b(t,e,n.$l)},p=function(t){return n.p(t)+"s"},f=function(t){return t<0},h=function(t){return f(t)?Math.ceil(t):Math.floor(t)},g=function(t){return Math.abs(t)},x=function(t,n){return t?f(t)?{negative:!0,format:""+g(t)+n}:{negative:!1,format:""+t+n}:{negative:!1,format:""}},b=function(){function f(t,n,e){var a=this;if(this.$d={},this.$l=e,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),n)return d(t*m[p(n)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(n){a.$d[p(n)]=t[n]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(u);if(s){var r=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var g=f.prototype;return g.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(n,e){return n+(t.$d[e]||0)*m[e]}),0)},g.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=h(t/i),t%=i,this.$d.months=h(t/l),t%=l,this.$d.days=h(t/r),t%=r,this.$d.hours=h(t/s),t%=s,this.$d.minutes=h(t/a),t%=a,this.$d.seconds=h(t/e),t%=e,this.$d.milliseconds=t},g.toISOString=function(){var t=x(this.$d.years,"Y"),n=x(this.$d.months,"M"),e=+this.$d.days||0;this.$d.weeks&&(e+=7*this.$d.weeks);var a=x(e,"D"),s=x(this.$d.hours,"H"),r=x(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var i=x(o,"S"),l=t.negative||n.negative||a.negative||s.negative||r.negative||i.negative,u=s.format||r.format||i.format?"T":"",m=(l?"-":"")+"P"+t.format+n.format+a.format+u+s.format+r.format+i.format;return"P"===m||"-P"===m?"P0D":m},g.toJSON=function(){return this.toISOString()},g.format=function(t){var e=t||"YYYY-MM-DDTHH:mm:ss",a={Y:this.$d.years,YY:n.s(this.$d.years,2,"0"),YYYY:n.s(this.$d.years,4,"0"),M:this.$d.months,MM:n.s(this.$d.months,2,"0"),D:this.$d.days,DD:n.s(this.$d.days,2,"0"),H:this.$d.hours,HH:n.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:n.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:n.s(this.$d.seconds,2,"0"),SSS:n.s(this.$d.milliseconds,3,"0")};return e.replace(o,(function(t,n){return n||String(a[t])}))},g.as=function(t){return this.$ms/m[p(t)]},g.get=function(t){var n=this.$ms,e=p(t);return"milliseconds"===e?n%=1e3:n="weeks"===e?h(n/m[e]):this.$d[e],0===n?0:n},g.add=function(t,n,e){var a;return a=n?t*m[p(n)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+a*(e?-1:1),this)},g.subtract=function(t,n){return this.add(t,n,!0)},g.locale=function(t){var n=this.clone();return n.$l=t,n},g.clone=function(){return d(this.$ms,this)},g.humanize=function(n){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!n)},g.milliseconds=function(){return this.get("milliseconds")},g.asMilliseconds=function(){return this.as("milliseconds")},g.seconds=function(){return this.get("seconds")},g.asSeconds=function(){return this.as("seconds")},g.minutes=function(){return this.get("minutes")},g.asMinutes=function(){return this.as("minutes")},g.hours=function(){return this.get("hours")},g.asHours=function(){return this.as("hours")},g.days=function(){return this.get("days")},g.asDays=function(){return this.as("days")},g.weeks=function(){return this.get("weeks")},g.asWeeks=function(){return this.as("weeks")},g.months=function(){return this.get("months")},g.asMonths=function(){return this.as("months")},g.years=function(){return this.get("years")},g.asYears=function(){return this.as("years")},f}();return function(e,a,s){t=s,n=s().$utils(),s.duration=function(t,n){var e=s.locale();return d(t,{$l:e},n)},s.isDuration=c;var r=a.prototype.add,o=a.prototype.subtract;a.prototype.add=function(t,n){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,n)},a.prototype.subtract=function(t,n){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,n)}}}()}},n={};function e(a){var s=n[a];if(void 0!==s)return s.exports;var r=n[a]={exports:{}};return t[a].call(r.exports,r,r.exports,e),r.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var a={};(()=>{"use strict";e.r(a);const t=flarum.core.compat["common/extend"],n=flarum.core.compat["admin/app"];var s=e.n(n);const r=flarum.core.compat["admin/components/ExtensionPage"];var o=e.n(r);const i=flarum.core.compat["common/components/Button"];var l=e.n(i);const u=flarum.core.compat["admin/components/LoadingModal"];var c=e.n(u);const d=flarum.core.compat["admin/utils/isExtensionEnabled"];var p=e.n(d);function f(t,n){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},f(t,n)}function h(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,f(t,n)}function g(t,n){if(null==t)return{};var e,a,s={},r=Object.keys(t);for(a=0;a=0||(s[e]=t[e]);return s}const x=flarum.core.compat["common/Component"];var b=e.n(x);const v=flarum.core.compat["common/components/LoadingIndicator"];var y=e.n(v);const _=flarum.core.compat["common/components/Tooltip"];var k=e.n(_);const N=flarum.core.compat["common/helpers/icon"];var M=e.n(N);const w=flarum.core.compat["common/utils/ItemList"];var E=e.n(w);const U=flarum.core.compat["common/utils/extractText"];var B=e.n(U);const S=flarum.core.compat["common/components/Link"];var q=e.n(S);const j=flarum.core.compat["common/utils/classList"];var $=e.n(j),P=["className","type"],T=function(t){function n(){return t.apply(this,arguments)||this}return h(n,t),n.prototype.view=function(t){var n=this.attrs,e=n.className,a=(n.type,g(n,P));return m("span",Object.assign({className:$()(["Label","Label--"+this.attrs.type,e])},a),t.children)},n}(b());const C=flarum.core.compat["common/components/Modal"];var O=e.n(C),F=function(t){function n(){return t.apply(this,arguments)||this}h(n,t);var e=n.prototype;return e.className=function(){return"Modal--large QuickModal"},e.title=function(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations."+this.attrs.task.operation())},e.content=function(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))},n}(O()),A=e(3),L=e.n(A),D=function(t){function n(){return t.apply(this,arguments)||this}return h(n,t),n.prototype.view=function(){var t=this;return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:function(){return t.attrs.list.prev()},icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:function(){return t.attrs.list.next()},icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))},n}(b()),Y=["label","content"],I=function(t){function n(){return t.apply(this,arguments)||this}h(n,t);var e=n.prototype;return e.oninit=function(n){t.prototype.oninit.call(this,n),s().extensionManager.queue.load()},e.view=function(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:function(){return s().extensionManager.queue.load()},"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))},e.columns=function(){var t=this,n=new(E());return n.add("operation",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:function(n){return m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},t.operationIcon(n.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations."+n.operation())))}},80),n.add("package",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:function(t){var n,e=s().data.extensions[null==(n=t.package())?void 0:n.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return e?m(q(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:e.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:e.icon},!!e.icon&&M()(e.icon.name)),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},e.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),n.add("status",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:function(t){return m("[",null,m(T,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses."+t.status())),["pending","running"].includes(t.status())&&m(y(),{size:"small",display:"inline"}))}},70),n.add("elapsedTime",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:function(t){return t.startedAt()&&t.finishedAt()?m(k(),{text:dayjs(t.startedAt()).format("LL LTS")+" "+dayjs(t.finishedAt()).format("LL LTS")},m("span",null,function(t,n){dayjs.extend(L());var e=dayjs(n).diff(t);return dayjs.duration(e).humanize()}(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")}},65),n.add("memoryUsed",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:function(t){return m("span",null,t.peakMemoryUsed())}},60),n.add("details",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:function(t){return m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:function(){return s().modal.show(F,{task:t})},disabled:["pending","running"].includes(t.status())})},className:"Table-controls"},55),n},e.queueTable=function(){var t=s().extensionManager.queue.getItems();if(!t)return m(y(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));var n=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,n.toArray().map((function(t,n){return m("th",{key:n},t.label)})))),m("tbody",null,t.map((function(t,e){return m("tr",{key:e},n.toArray().map((function(n,e){n.label;var a=n.content,s=g(n,Y);return m("td",Object.assign({key:e},s),a(t))})))})))),m(D,{list:s().extensionManager.queue}))},e.operationIcon=function(t){return M()({update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t])},n}(b());const R=flarum.core.compat["common/components/Alert"];var G=e.n(R);const H=flarum.core.compat["common/utils/Stream"];var W=e.n(H),V=function(t){function n(){for(var n,e=arguments.length,a=new Array(e),s=0;s"+n.data.phpVersion+"",folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:n.data["flarum-extension-manager.using_sync_queue"]}).registerSetting({setting:"flarum-extension-manager.task_retention_days",label:n.translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:n.translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}).registerPage(gt),(0,t.extend)(o().prototype,"topItems",(function(t){var e=this;"flarum-extension-manager"===this.extension.id||p()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:function(){n.modal.show(c()),n.request({url:n.forum.attribute("apiUrl")+"/extension-manager/extensions/"+e.extension.id,method:"DELETE"}).then((function(t){null!=t&&t.processing?wt():(n.alerts.show({type:"success"},n.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=n.forum.attribute("adminUrl"))})).finally((function(){n.modal.close()}))}},n.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))}))})(),module.exports=a})();
+(()=>{var t={3:function(t){t.exports=function(){"use strict";var t,n,e=1e3,a=6e4,s=36e5,o=864e5,r=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,u=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,m={years:i,months:l,days:o,hours:s,minutes:a,seconds:e,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,n,e){return new b(t,e,n.$l)},p=function(t){return n.p(t)+"s"},f=function(t){return t<0},g=function(t){return f(t)?Math.ceil(t):Math.floor(t)},h=function(t){return Math.abs(t)},x=function(t,n){return t?f(t)?{negative:!0,format:""+h(t)+n}:{negative:!1,format:""+t+n}:{negative:!1,format:""}},b=function(){function f(t,n,e){var a=this;if(this.$d={},this.$l=e,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),n)return d(t*m[p(n)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(n){a.$d[p(n)]=t[n]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(u);if(s){var o=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=o[0],this.$d.months=o[1],this.$d.weeks=o[2],this.$d.days=o[3],this.$d.hours=o[4],this.$d.minutes=o[5],this.$d.seconds=o[6],this.calMilliseconds(),this}}return this}var h=f.prototype;return h.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(n,e){return n+(t.$d[e]||0)*m[e]}),0)},h.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=g(t/i),t%=i,this.$d.months=g(t/l),t%=l,this.$d.days=g(t/o),t%=o,this.$d.hours=g(t/s),t%=s,this.$d.minutes=g(t/a),t%=a,this.$d.seconds=g(t/e),t%=e,this.$d.milliseconds=t},h.toISOString=function(){var t=x(this.$d.years,"Y"),n=x(this.$d.months,"M"),e=+this.$d.days||0;this.$d.weeks&&(e+=7*this.$d.weeks);var a=x(e,"D"),s=x(this.$d.hours,"H"),o=x(this.$d.minutes,"M"),r=this.$d.seconds||0;this.$d.milliseconds&&(r+=this.$d.milliseconds/1e3);var i=x(r,"S"),l=t.negative||n.negative||a.negative||s.negative||o.negative||i.negative,u=s.format||o.format||i.format?"T":"",m=(l?"-":"")+"P"+t.format+n.format+a.format+u+s.format+o.format+i.format;return"P"===m||"-P"===m?"P0D":m},h.toJSON=function(){return this.toISOString()},h.format=function(t){var e=t||"YYYY-MM-DDTHH:mm:ss",a={Y:this.$d.years,YY:n.s(this.$d.years,2,"0"),YYYY:n.s(this.$d.years,4,"0"),M:this.$d.months,MM:n.s(this.$d.months,2,"0"),D:this.$d.days,DD:n.s(this.$d.days,2,"0"),H:this.$d.hours,HH:n.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:n.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:n.s(this.$d.seconds,2,"0"),SSS:n.s(this.$d.milliseconds,3,"0")};return e.replace(r,(function(t,n){return n||String(a[t])}))},h.as=function(t){return this.$ms/m[p(t)]},h.get=function(t){var n=this.$ms,e=p(t);return"milliseconds"===e?n%=1e3:n="weeks"===e?g(n/m[e]):this.$d[e],0===n?0:n},h.add=function(t,n,e){var a;return a=n?t*m[p(n)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+a*(e?-1:1),this)},h.subtract=function(t,n){return this.add(t,n,!0)},h.locale=function(t){var n=this.clone();return n.$l=t,n},h.clone=function(){return d(this.$ms,this)},h.humanize=function(n){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!n)},h.milliseconds=function(){return this.get("milliseconds")},h.asMilliseconds=function(){return this.as("milliseconds")},h.seconds=function(){return this.get("seconds")},h.asSeconds=function(){return this.as("seconds")},h.minutes=function(){return this.get("minutes")},h.asMinutes=function(){return this.as("minutes")},h.hours=function(){return this.get("hours")},h.asHours=function(){return this.as("hours")},h.days=function(){return this.get("days")},h.asDays=function(){return this.as("days")},h.weeks=function(){return this.get("weeks")},h.asWeeks=function(){return this.as("weeks")},h.months=function(){return this.get("months")},h.asMonths=function(){return this.as("months")},h.years=function(){return this.get("years")},h.asYears=function(){return this.as("years")},f}();return function(e,a,s){t=s,n=s().$utils(),s.duration=function(t,n){var e=s.locale();return d(t,{$l:e},n)},s.isDuration=c;var o=a.prototype.add,r=a.prototype.subtract;a.prototype.add=function(t,n){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,n)},a.prototype.subtract=function(t,n){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,n)}}}()}},n={};function e(a){var s=n[a];if(void 0!==s)return s.exports;var o=n[a]={exports:{}};return t[a].call(o.exports,o,o.exports,e),o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var a={};(()=>{"use strict";e.r(a);const t=flarum.core.compat["common/extend"],n=flarum.core.compat["admin/app"];var s=e.n(n);const o=flarum.core.compat["admin/components/ExtensionPage"];var r=e.n(o);const i=flarum.core.compat["common/components/Button"];var l=e.n(i);const u=flarum.core.compat["admin/components/LoadingModal"];var c=e.n(u);const d=flarum.core.compat["admin/utils/isExtensionEnabled"];var p=e.n(d);function f(t,n){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},f(t,n)}function g(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,f(t,n)}function h(t,n){if(null==t)return{};var e,a,s={},o=Object.keys(t);for(a=0;a=0||(s[e]=t[e]);return s}const x=flarum.core.compat["common/Component"];var b=e.n(x);const v=flarum.core.compat["common/components/LoadingIndicator"];var y=e.n(v);const _=flarum.core.compat["common/components/Tooltip"];var k=e.n(_);const N=flarum.core.compat["common/helpers/icon"];var M=e.n(N);const w=flarum.core.compat["common/utils/ItemList"];var E=e.n(w);const U=flarum.core.compat["common/utils/extractText"];var B=e.n(U);const S=flarum.core.compat["common/components/Link"];var j=e.n(S);const q=flarum.core.compat["common/utils/classList"];var $=e.n(q),P=["className","type"],T=function(t){function n(){return t.apply(this,arguments)||this}return g(n,t),n.prototype.view=function(t){var n=this.attrs,e=n.className,a=(n.type,h(n,P));return m("span",Object.assign({className:$()(["Label","Label--"+this.attrs.type,e])},a),t.children)},n}(b());const C=flarum.core.compat["common/components/Modal"];var O=e.n(C),F=function(t){function n(){return t.apply(this,arguments)||this}g(n,t);var e=n.prototype;return e.className=function(){return"Modal--large QuickModal"},e.title=function(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations."+this.attrs.task.operation())},e.content=function(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))},n}(O()),A=e(3),L=e.n(A);function D(t,n){dayjs.extend(L());var e=dayjs(n).diff(t);return dayjs.duration(e).humanize()}var I=function(t){function n(){return t.apply(this,arguments)||this}return g(n,t),n.prototype.view=function(){var t=this;return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:function(){return t.attrs.list.prev()},icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:function(){return t.attrs.list.next()},icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))},n}(b()),Y=["label","content"],R=function(t){function n(){return t.apply(this,arguments)||this}g(n,t);var e=n.prototype;return e.oninit=function(n){t.prototype.oninit.call(this,n),s().extensionManager.queue.load()},e.view=function(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:function(){return s().extensionManager.queue.load()},"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))},e.columns=function(){var t=this,n=new(E());return n.add("operation",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:function(n){return m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},t.operationIcon(n.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations."+n.operation())))}},80),n.add("package",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:function(t){var n,e=s().data.extensions[null==(n=t.package())?void 0:n.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return e?m(j(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:e.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:e.icon},!!e.icon&&M()(e.icon.name)),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},e.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),n.add("status",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:function(t){return m("[",null,m(T,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses."+t.status())),["pending","running"].includes(t.status())&&m(y(),{size:"small",display:"inline"}))}},70),n.add("elapsedTime",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:function(t){return t.startedAt()&&t.finishedAt()?m(k(),{text:dayjs(t.startedAt()).format("LL LTS")+" "+dayjs(t.finishedAt()).format("LL LTS")},m("span",null,D(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")}},65),n.add("memoryUsed",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:function(t){return m("span",null,t.peakMemoryUsed())}},60),n.add("details",{label:B()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:function(t){return m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:function(){return s().modal.show(F,{task:t})},disabled:["pending","running"].includes(t.status())})},className:"Table-controls"},55),n},e.queueTable=function(){var t=s().extensionManager.queue.getItems();if(!t)return m(y(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));var n=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,n.toArray().map((function(t,n){return m("th",{key:n},t.label)})))),m("tbody",null,t.map((function(t,e){return m("tr",{key:e},n.toArray().map((function(n,e){n.label;var a=n.content,s=h(n,Y);return m("td",Object.assign({key:e},s),a(t))})))})))),m(I,{list:s().extensionManager.queue}))},e.operationIcon=function(t){return M()({update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t])},n}(b());const G=flarum.core.compat["common/components/Alert"];var H=e.n(G);const W=flarum.core.compat["common/utils/Stream"];var Q=e.n(W),J=function(t){function n(){for(var n,e=arguments.length,a=new Array(e),s=0;s"+n.data.phpVersion+"",folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:n.data["flarum-extension-manager.using_sync_queue"]}).registerSetting({setting:"flarum-extension-manager.task_retention_days",label:n.translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:n.translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}).registerPage(xt),(0,t.extend)(r().prototype,"topItems",(function(t){var e=this;"flarum-extension-manager"===this.extension.id||p()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:function(){n.modal.show(c()),n.request({url:n.forum.attribute("apiUrl")+"/extension-manager/extensions/"+e.extension.id,method:"DELETE"}).then((function(t){null!=t&&t.processing?Et():(n.alerts.show({type:"success"},n.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=n.forum.attribute("adminUrl"))})).finally((function(){n.modal.close()}))}},n.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))})),Object.assign($t.compat,qt)})(),module.exports=a})();
//# sourceMappingURL=admin.js.map
\ No newline at end of file
diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map
index b8041ebb83..cbe63f0102 100755
--- a/extensions/package-manager/js/dist/admin.js.map
+++ b/extensions/package-manager/js/dist/admin.js.map
@@ -1 +1 @@
-{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Alert']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Dropdown']\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/AdminPage']\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Select']\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// 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].call(module.exports, 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['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/ExtensionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/LoadingModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/utils/isExtensionEnabled'];","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}","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/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import type Mithril from 'mithril';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\n\ninterface LabelAttrs extends ComponentAttrs {\n type: 'success' | 'error' | 'neutral' | 'warning';\n}\n\nexport default class Label extends Component {\n view(vnode: Mithril.Vnode) {\n const { className, type, ...attrs } = this.attrs;\n\n return (\n \n {vnode.children}\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","import app from 'flarum/admin/app';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Task from '../models/Task';\n\ninterface TaskOutputModalAttrs extends IInternalModalAttrs {\n task: Task;\n}\n\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n\n title() {\n return app.translator.trans(`flarum-extension-manager.admin.sections.queue.operations.${this.attrs.task.operation()}`);\n }\n\n content() {\n return (\n \n
\n {this.attrs.task.status() === 'failure' && (\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')} \n
\n {(this.attrs.task.guessedCause() &&\n app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause())) ||\n app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown')}\n
\n
\n )}\n\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')} \n
\n $ composer {this.attrs.task.command()}
\n
\n
\n\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')} \n
\n
\n {this.attrs.task.output()} \n
\n
\n
\n
\n
\n );\n }\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport QueueState from '../states/QueueState';\n\ninterface PaginationAttrs extends ComponentAttrs {\n list: QueueState;\n}\n\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return (\n \n this.attrs.list.prev()}\n icon=\"fas fa-chevron-left\"\n className=\"Button Button--icon UserListPage-backBtn\"\n />\n \n {app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages(),\n })}\n \n this.attrs.list.next()}\n icon=\"fas fa-chevron-right\"\n className=\"Button Button--icon UserListPage-nextBtn\"\n />\n \n );\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport icon from 'flarum/common/helpers/icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\n\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Task, { TaskOperations } from '../models/Task';\nimport Pagination from './Pagination';\n\ninterface QueueTableColumn extends ComponentAttrs {\n label: string;\n content: (task: Task) => Mithril.Children;\n}\n\nexport default class QueueSection extends Component<{}> {\n oninit(vnode: Mithril.Vnode<{}, this>) {\n super.oninit(vnode);\n\n app.extensionManager.queue.load();\n }\n\n view() {\n return (\n \n \n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.title')} \n app.extensionManager.queue.load()}\n aria-label={app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh')}\n disabled={app.extensionManager.control.isLoading()}\n />\n \n
\n {this.queueTable()}
\n \n );\n }\n\n columns() {\n const items = new ItemList();\n\n items.add(\n 'operation',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: (task) => (\n \n {this.operationIcon(task.operation())} \n \n {app.translator.trans(`flarum-extension-manager.admin.sections.queue.operations.${task.operation()}`)}\n \n
\n ),\n },\n 80\n );\n\n items.add(\n 'package',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: (task) => {\n const extension: Extension | null = app.data.extensions[task.package()?.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n\n return extension ? (\n \n \n {!!extension.icon && icon(extension.icon.name)}\n
\n \n {extension.extra['flarum-extension'].title} \n {task.package()} \n
\n \n ) : (\n task.package()\n );\n },\n },\n 75\n );\n\n items.add(\n 'status',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: (task) => (\n <>\n \n {app.translator.trans(`flarum-extension-manager.admin.sections.queue.statuses.${task.status()}`)}\n \n {['pending', 'running'].includes(task.status()) && }\n >\n ),\n },\n 70\n );\n\n items.add(\n 'elapsedTime',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: (task) =>\n !task.startedAt() || !task.finishedAt() ? (\n app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started')\n ) : (\n \n {humanDuration(task.startedAt(), task.finishedAt())} \n \n ),\n },\n 65\n );\n\n items.add(\n 'memoryUsed',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: (task) => {task.peakMemoryUsed()} ,\n },\n 60\n );\n\n items.add(\n 'details',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: (task) => (\n app.modal.show(TaskOutputModal, { task })}\n disabled={['pending', 'running'].includes(task.status())}\n />\n ),\n className: 'Table-controls',\n },\n 55\n );\n\n return items;\n }\n\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n\n if (!tasks) {\n return ;\n }\n\n if (tasks && !tasks.length) {\n return {app.translator.trans('flarum-extension-manager.admin.sections.queue.none')} ;\n }\n\n const columns = this.columns();\n\n return (\n <>\n \n \n \n {columns.toArray().map((item, index) => (\n {item.label} \n ))}\n \n \n \n {tasks.map((task, index) => (\n \n {columns.toArray().map((item, index) => {\n const { label, content, ...attrs } = item;\n\n return (\n \n {content(task)}\n \n );\n })}\n \n ))}\n \n
\n\n \n >\n );\n }\n\n operationIcon(operation: TaskOperations): Mithril.Children {\n return icon(\n {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle',\n }[operation]\n );\n }\n}\n","import duration from 'dayjs/plugin/duration';\n\nexport default function humanDuration(start: Date, end: Date) {\n dayjs.extend(duration);\n\n const durationTime = dayjs(end).diff(start);\n\n return dayjs.duration(durationTime).humanize();\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Alert'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\n\nexport interface InstallerAttrs extends ComponentAttrs {}\n\nexport type InstallerLoadingTypes = 'extension-install' | null;\n\nexport default class Installer extends Component {\n packageName!: Stream;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n \n
{app.translator.trans('flarum-extension-manager.admin.extensions.install')} \n
\n {app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: extiverse.com ,\n semantic_link: ,\n code:
,\n })}\n
\n
\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.proceed')}\n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","import app from 'flarum/admin/app';\n\nexport default function (e: any) {\n app.extensionManager.control.setLoading(null);\n\n const error = e.response.errors[0];\n\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n\n app.alerts.clear();\n\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({ type: 'error' }, app.translator.trans(`flarum-extension-manager.admin.exceptions.guessed_cause.${error.guessed_cause}`));\n app.modal.close();\n } else {\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n\n case 'extension_already_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n\n case 'extension_not_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nimport errorHandler from '../utils/errorHandler';\n\ntype WhyNotResponse = {\n data: {\n reason: string;\n };\n};\n\nexport interface WhyNotModalAttrs extends IInternalModalAttrs {\n package: string;\n}\n\nexport default class WhyNotModal extends Modal {\n loading: boolean = true;\n whyNot: string | null = null;\n\n className() {\n return 'Modal--large WhyNotModal';\n }\n\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n\n oncreate(vnode: Mithril.VnodeDOM) {\n super.oncreate(vnode);\n\n this.requestWhyNot();\n }\n\n content() {\n return {this.loading ?
:
{this.whyNot} }
;\n }\n\n requestWhyNot(): void {\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/why-not`,\n body: {\n data: {\n package: this.attrs.package,\n },\n },\n })\n .then((response) => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n })\n .catch(errorHandler);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Dropdown'];","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport { Extension } from 'flarum/admin/AdminApplication';\n\nimport { UpdatedPackage } from '../states/ControlSectionState';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\n\nexport interface ExtensionItemAttrs extends ComponentAttrs {\n extension: Extension;\n updates: UpdatedPackage;\n onClickUpdate:\n | CallableFunction\n | {\n soft: CallableFunction;\n hard: CallableFunction;\n };\n whyNotWarning?: boolean;\n isCore?: boolean;\n updatable?: boolean;\n isDanger?: boolean;\n}\n\nexport default class ExtensionItem extends Component {\n view(vnode: Mithril.Vnode): Mithril.Children {\n const { extension, updates, onClickUpdate, whyNotWarning, isCore, isDanger } = this.attrs;\n const latestVersion = updates['latest-minor'] ?? (updates['latest-major'] && !isCore ? updates['latest-major'] : null);\n\n return (\n \n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.extra['flarum-extension'].title}
\n
\n {this.version(updates['version'])} \n {latestVersion ? (\n \n {this.version(latestVersion)}\n \n ) : null}\n
\n
\n
\n {onClickUpdate && typeof onClickUpdate === 'function' ? (\n \n \n \n ) : onClickUpdate ? (\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')}\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label')}\n \n \n ) : null}\n {whyNotWarning ? (\n \n app.modal.show(WhyNotModal, { package: extension.name })}\n aria-label={app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')}\n />\n \n ) : null}\n
\n
\n );\n }\n\n version(v: string): string {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\n\nimport { UpdatedPackage, UpdateState } from '../states/ControlSectionState';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\n\nexport interface MajorUpdaterAttrs extends ComponentAttrs {\n coreUpdate: UpdatedPackage;\n updateState: UpdateState;\n}\n\nexport type MajorUpdaterLoadingTypes = 'major-update' | 'major-update-dry-run';\n\nexport default class MajorUpdater extends Component {\n updateState!: UpdateState;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.updateState = this.attrs.updateState;\n }\n\n view(): Mithril.Children {\n // @todo move Form-group--danger class to core for reuse\n return (\n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.major_updater.title', { version: this.attrs.coreUpdate['latest-major'] })}\n \n
{app.translator.trans('flarum-extension-manager.admin.major_updater.description')}
\n
\n \n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run')}\n \n \n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.update')}\n \n
\n {this.updateState.incompatibleExtensions.length ? (\n
\n {this.updateState.incompatibleExtensions.map((extension: string) => (\n \n ))}\n
\n ) : null}\n {this.updateState.status === 'failure' ? (\n
app.modal.show(WhyNotModal, { package: 'flarum/core' })}\n >\n {app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why')}\n ,\n ]}\n >\n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc')}\n
\n \n ) : null}\n
\n );\n }\n\n update(dryRun: boolean) {\n app.extensionManager.control.majorUpdate({ dryRun });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nexport interface IUpdaterAttrs extends ComponentAttrs {}\n\nexport type UpdaterLoadingTypes = 'check' | 'minor-update' | 'global-update' | 'extension-update' | null;\n\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n\n return [\n \n
{app.translator.trans('flarum-extension-manager.admin.updater.updater_title')} \n
{app.translator.trans('flarum-extension-manager.admin.updater.updater_help')}
\n {this.lastUpdateCheckView()}\n
{this.controlItems().toArray()}
\n {this.availableUpdatesView()}\n
,\n core && core.package['latest-major'] ? (\n \n ) : null,\n ];\n }\n\n lastUpdateCheckView() {\n return (\n (app.extensionManager.control.lastUpdateCheck?.checkedAt && (\n \n \n {app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')}\n \n {humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt)} \n
\n )) ||\n null\n );\n }\n\n availableUpdatesView() {\n const state = app.extensionManager.control;\n\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return (\n \n \n
\n );\n }\n\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return (\n \n {app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')} \n
\n );\n }\n\n return (\n \n
\n {hasMinorCoreUpdate ? (\n state.updateCoreMinor()}\n whyNotWarning={state.lastUpdateRun.limitedPackages().includes('flarum/core')}\n />\n ) : null}\n {state.extensionUpdates.map((extension: Extension) => (\n state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard'),\n }}\n whyNotWarning={state.lastUpdateRun.limitedPackages().includes(extension.name)}\n />\n ))}\n
\n
\n );\n }\n\n controlItems() {\n const items = new ItemList();\n\n items.add(\n 'updateCheck',\n app.extensionManager.control.checkForUpdates()}\n loading={app.extensionManager.control.isLoading('check')}\n disabled={app.extensionManager.control.hasOperationRunning()}\n >\n {app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')}\n ,\n 100\n );\n\n items.add(\n 'globalUpdate',\n app.extensionManager.control.updateGlobally()}\n loading={app.extensionManager.control.isLoading('global-update')}\n disabled={app.extensionManager.control.hasOperationRunning()}\n >\n {app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')}\n \n );\n\n return items;\n }\n}\n","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport { ComponentAttrs } from 'flarum/common/Component';\n\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Mithril from 'mithril';\n\nexport default class ControlSection extends Component {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n }\n\n view() {\n return (\n \n
\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.control.title')} \n \n
\n
\n {app.data['flarum-extension-manager.writable_dirs'] ? (\n <>\n
\n
\n >\n ) : (\n
\n
\n {app.translator.trans('flarum-extension-manager.admin.file_permissions')}\n \n
\n )}\n
\n
\n );\n }\n}\n","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}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/AdminPage'];","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport Component, { type ComponentAttrs } from 'flarum/common/Component';\nimport { CommonSettingsItemOptions, type SettingsComponentOptions } from '@flarum/core/src/admin/components/AdminPage';\nimport AdminPage from 'flarum/admin/components/AdminPage';\nimport type ItemList from 'flarum/common/utils/ItemList';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\nexport interface IConfigureJson extends ComponentAttrs {\n buildSettingComponent: (entry: ((this: this) => Mithril.Children) | SettingsComponentOptions) => Mithril.Children;\n}\n\nexport default abstract class ConfigureJson extends Component {\n protected settings: Record> = {};\n protected initialSettings: Record | null = null;\n protected loading: boolean = false;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.submit(true);\n }\n\n protected abstract type: string;\n abstract title(): Mithril.Children;\n abstract content(): Mithril.Children;\n\n className(): string {\n return '';\n }\n\n view(): Mithril.Children {\n return (\n \n
{this.title()} \n {this.content()}\n
{this.submitButton()}
\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n return [\n this.submit(false)} disabled={!this.isDirty()}>\n {app.translator.trans('core.admin.settings.submit_button')}\n ,\n ];\n }\n\n customSettingComponents(): ItemList<(attributes: CommonSettingsItemOptions) => Mithril.Children> {\n return AdminPage.prototype.customSettingComponents();\n }\n\n setting(key: string) {\n return this.settings[key] ?? (this.settings[key] = Stream());\n }\n\n submit(readOnly: boolean) {\n this.loading = true;\n\n const configuration: any = {};\n\n Object.keys(this.settings).forEach((key) => {\n configuration[key] = this.settings[key]();\n });\n\n app\n .request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration,\n },\n })\n .then(({ data }: any) => {\n Object.keys(data).forEach((key) => {\n this.settings[key] = Stream(data[key]);\n });\n\n this.initialSettings = Array.isArray(data) ? {} : data;\n })\n .finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Select'];","import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport { type Repository } from './ConfigureComposer';\n\nexport interface IRepositoryModalAttrs extends IInternalModalAttrs {\n onsubmit: (repository: Repository, key: string) => void;\n name?: string;\n repository?: Repository;\n}\n\nexport default class RepositoryModal extends Modal {\n protected name!: Stream;\n protected repository!: Stream;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || { type: 'composer', url: '' });\n }\n\n className(): string {\n return 'RepositoryModal Modal--small';\n }\n\n title(): Mithril.Children {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(`flarum-extension-manager.admin.composer.${context}_repository_label`);\n }\n\n content(): Mithril.Children {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path'),\n };\n\n return (\n \n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')} \n this.repository({ ...this.repository(), type: value })}\n />\n
\n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')} \n this.repository({ ...this.repository(), url: (e.target as HTMLInputElement).value })}\n value={this.repository().url}\n />\n
\n
\n \n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button')}\n \n
\n
\n );\n }\n\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\n","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport ConfigureJson, { type IConfigureJson } from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\n\nexport type Repository = {\n type: 'composer' | 'vcs' | 'path';\n url: string;\n};\n\nexport default class ConfigureComposer extends ConfigureJson {\n protected type = 'composer';\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n\n className(): string {\n return 'ConfigureComposer';\n }\n\n content(): Mithril.Children {\n return (\n \n {this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev'),\n },\n })}\n
\n
{app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')} \n
{app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')}
\n
\n {Object.keys(this.setting('repositories')() || {}).map((name) => {\n const repository = this.setting('repositories')()[name] as Repository;\n\n return (\n
\n \n app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository: Repository, newName: string) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n\n this.setting('repositories')(repositories);\n\n this.onchange(repository, newName);\n },\n })\n }\n >\n {name} ({repository.type})\n \n {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = { ...this.setting('repositories')() };\n delete repositories[name];\n\n this.setting('repositories')(repositories);\n }\n }}\n />\n
\n );\n })}\n
\n
\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n const items = super.submitButton();\n\n items.push(\n app.modal.show(RepositoryModal, { onsubmit: this.onchange.bind(this) })}>\n {app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')}\n \n );\n\n return items;\n }\n\n onchange(repository: Repository, name: string) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository,\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport interface IAuthMethodModalAttrs extends IInternalModalAttrs {\n onsubmit: (type: string, host: string, token: string) => void;\n type?: string;\n host?: string;\n token?: string;\n}\n\nexport default class AuthMethodModal extends Modal {\n protected type!: Stream;\n protected host!: Stream;\n protected token!: Stream;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n\n className(): string {\n return 'AuthMethodModal Modal--small';\n }\n\n title(): Mithril.Children {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(`flarum-extension-manager.admin.auth_config.${context}_label`);\n }\n\n content(): Mithril.Children {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer'),\n };\n\n return (\n \n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')} \n \n
\n
\n \n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button')}\n \n
\n
\n );\n }\n\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\n","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport ConfigureJson, { IConfigureJson } from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport default class ConfigureAuth extends ConfigureJson {\n protected type = 'auth';\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n\n className(): string {\n return 'ConfigureAuth';\n }\n\n content(): Mithril.Children {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings =\n authSettings.length &&\n authSettings.every((type) => {\n const data = this.settings[type]();\n\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n\n return (\n \n {hasAuthSettings ? (\n authSettings.map((type) => {\n const hosts = this.settings[type]();\n\n return (\n
\n
{app.translator.trans(`flarum-extension-manager.admin.auth_config.types.${type}`)} \n
\n {Object.keys(hosts).map((host) => {\n const data = hosts[host] as string | Record
;\n\n return (\n \n \n app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host),\n })\n }\n >\n {host}\n \n {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = { ...this.setting(type)() };\n delete newType[host];\n\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }}\n />\n
\n );\n })}\n \n
\n );\n })\n ) : (\n
{app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')} \n )}\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n const items = super.submitButton();\n\n items.push(\n \n app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null),\n })\n }\n >\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')}\n \n );\n\n return items;\n }\n\n onchange(oldHost: string | null, type: string, host: string, token: string) {\n const data = { ...this.setting(type)() };\n\n if (oldHost) {\n delete data[oldHost];\n }\n\n data[host] = token;\n\n this.setting(type)(data);\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport ExtensionPage, { ExtensionPageAttrs } from 'flarum/admin/components/ExtensionPage';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\n\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.extensionData.getSettings(this.extension.id);\n\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n\n return (\n \n
\n
\n {settings ? (\n
\n
\n
{app.translator.trans('flarum-extension-manager.admin.settings.title')} \n
{settings.map(this.buildSettingComponent.bind(this))}
\n
{this.submitButton()}
\n
\n
\n
\n
\n ) : (\n
{app.translator.trans('core.admin.extension.no_settings')} \n )}\n
\n
\n );\n }\n\n sections(vnode: Mithril.VnodeDOM): ItemList {\n const items = super.sections(vnode);\n\n items.setPriority('content', 10);\n\n items.add('control', , 8);\n\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', , 5);\n }\n\n items.remove('permissions');\n\n return items;\n }\n\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\n\nexport type TaskOperations =\n | 'extension_install'\n | 'extension_remove'\n | 'extension_update'\n | 'update_global'\n | 'update_minor'\n | 'update_major'\n | 'update_check'\n | 'why_not';\n\nexport default class Task extends Model {\n status() {\n return Model.attribute<'pending' | 'running' | 'failure' | 'success'>('status').call(this);\n }\n\n operation() {\n return Model.attribute('operation').call(this);\n }\n\n command() {\n return Model.attribute('command').call(this);\n }\n\n package() {\n return Model.attribute('package').call(this);\n }\n\n output() {\n return Model.attribute('output').call(this);\n }\n\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\n","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\n\nexport default function jumpToQueue(): void {\n app.modal.close();\n\n m.route.set(app.route('extension', { id: 'flarum-extension-manager' }));\n\n app.extensionManager.queue.load({}, true);\n\n setTimeout(() => {\n document.getElementById('ExtensionManager-queueSection')?.scrollIntoView({ block: 'nearest' });\n }, 200);\n}\n","import app from 'flarum/admin/app';\nimport Task from '../models/Task';\nimport { ApiQueryParamsPlural } from 'flarum/common/Store';\n\nexport default class QueueState {\n private polling: any = null;\n private tasks: Task[] | null = null;\n private limit = 20;\n private offset = 0;\n private total = 0;\n\n load(params?: ApiQueryParamsPlural, actionTaken = false): Promise {\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...params?.page,\n },\n ...params,\n };\n\n return app.store.find('extension-manager-tasks', params || {}).then((data) => {\n this.tasks = data;\n this.total = data.payload.meta?.total;\n\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data?.find((task) => task.status() === 'pending' || task.status() === 'running');\n\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n\n return data;\n });\n }\n\n getItems() {\n return this.tasks;\n }\n\n getTotalPages(): number {\n return Math.ceil(this.total / this.limit);\n }\n\n pageNumber(): number {\n return Math.ceil(this.offset / this.limit);\n }\n\n hasPrev(): boolean {\n return this.pageNumber() !== 0;\n }\n\n hasNext(): boolean {\n return this.offset + this.limit < this.total;\n }\n\n prev(): void {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n\n next(): void {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n\n pollQueue(actionTaken = false): void {\n if (this.polling) {\n clearTimeout(this.polling);\n }\n\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n\n hasPending() {\n return !!this.tasks?.find((task) => task.status() === 'pending' || task.status() === 'running');\n }\n}\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}","import app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport { UpdaterLoadingTypes } from '../components/Updater';\nimport { InstallerLoadingTypes } from '../components/Installer';\nimport { MajorUpdaterLoadingTypes } from '../components/MajorUpdater';\nimport { AsyncBackendResponse } from '../shims';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport extractText from 'flarum/common/utils/extractText';\nimport RequestError from 'flarum/common/utils/RequestError';\n\nexport type UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n 'latest-minor': string | null;\n 'latest-major': string | null;\n 'latest-status': string;\n 'required-as': string;\n 'direct-dependency': boolean;\n description: string;\n};\n\nexport type ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\nexport type LastUpdateCheck = {\n checkedAt: Date | null;\n updates: ComposerUpdates;\n};\n\ntype UpdateType = 'major' | 'minor' | 'global';\ntype UpdateStatus = 'success' | 'failure' | null;\nexport type UpdateState = {\n ranAt: Date | null;\n status: UpdateStatus;\n limitedPackages: string[];\n incompatibleExtensions: string[];\n};\n\nexport type LastUpdateRun = {\n [key in UpdateType]: UpdateState;\n} & {\n limitedPackages: () => string[];\n};\n\nexport type LoadingTypes = UpdaterLoadingTypes | InstallerLoadingTypes | MajorUpdaterLoadingTypes | 'queued-action';\n\nexport type CoreUpdate = {\n package: UpdatedPackage;\n extension: Extension;\n};\n\nexport default class ControlSectionState {\n loading: LoadingTypes = null;\n\n public packageUpdates: Record = {};\n public lastUpdateCheck!: LastUpdateCheck;\n public extensionUpdates!: Extension[];\n public coreUpdate: CoreUpdate | null = null;\n get lastUpdateRun(): LastUpdateRun {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']) as LastUpdateRun;\n\n lastUpdateRun.limitedPackages = () => [\n ...lastUpdateRun.major.limitedPackages,\n ...lastUpdateRun.minor.limitedPackages,\n ...lastUpdateRun.global.limitedPackages,\n ];\n\n return lastUpdateRun;\n }\n\n constructor() {\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']) as LastUpdateCheck;\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n\n isLoading(name: LoadingTypes = null): boolean {\n return (name && this.loading === name) || (!name && this.loading !== null);\n }\n\n hasOperationRunning(): boolean {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n\n setLoading(name: LoadingTypes): void {\n this.loading = name;\n }\n\n requirePackage(data: any) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions`,\n body: {\n data,\n },\n })\n .then((response) => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', { extension: extensionId })\n );\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n checkForUpdates() {\n this.setLoading('check');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/check-for-updates`,\n })\n .then((response) => {\n if ((response as AsyncBackendResponse).processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response as LastUpdateCheck;\n this.extensionUpdates = this.formatExtensionUpdates(response as LastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(response as LastUpdateCheck);\n this.setLoading(null);\n m.redraw();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n m.redraw();\n });\n }\n\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/minor-update`,\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n\n updateExtension(extension: Extension, updateMode: 'soft' | 'hard') {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n\n app\n .request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions/${extension.id}`,\n body: {\n data: {\n updateMode,\n },\n },\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title,\n })\n );\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/global-update`,\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n formatExtensionUpdates(lastUpdateCheck: LastUpdateCheck): Extension[] {\n this.packageUpdates = {};\n\n lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return (Object.values(app.data.extensions) as Extension[]).filter((extension: Extension) => this.packageUpdates[extension.id]);\n }\n\n formatCoreUpdate(lastUpdateCheck: LastUpdateCheck): CoreUpdate | null {\n const core = lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => composerPackage.name === 'flarum/core').pop();\n\n if (!core) return null;\n\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: `url(${app.data.resources[0]['attributes']['baseUrl']}/assets/extensions/flarum-extension-manager/flarum.svg`,\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum')),\n },\n },\n },\n };\n }\n\n majorUpdate({ dryRun }: { dryRun: boolean }) {\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/major-update`,\n body: {\n data: { dryRun },\n },\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .catch((e: RequestError) => {\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = e.response?.errors?.pop()?.incompatible_extensions as string[];\n })\n .finally(() => {\n m.redraw();\n });\n }\n}\n","import QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\n\nexport default class ExtensionManagerState {\n public queue: QueueState = new QueueState();\n public control: ControlSectionState = new ControlSectionState();\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport SettingsPage from './components/SettingsPage';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nimport { AsyncBackendResponse } from './shims';\nimport ExtensionManagerState from './states/ExtensionManagerState';\n\napp.initializers.add('flarum-extension-manager', (app) => {\n app.store.models['extension-manager-tasks'] = Task;\n\n app.extensionManager = new ExtensionManagerState();\n\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n\n app.extensionData\n .for('flarum-extension-manager')\n .registerSetting({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(\n extractText(\n app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: `${app.data.phpVersion} `,\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership',\n })\n )\n ),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue'],\n })\n .registerSetting({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number',\n })\n .registerPage(SettingsPage);\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app\n .request({\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n })\n .finally(() => {\n app.modal.close();\n });\n }}\n >\n {app.translator.trans('flarum-extension-manager.admin.extensions.remove')}\n \n );\n });\n});\n"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_objectWithoutPropertiesLoose","source","excluded","target","sourceKeys","length","indexOf","Label","view","vnode","attrs","className","type","classList","children","Component","TaskOutputModal","title","app","task","operation","content","status","guessedCause","command","output","Modal","Pagination","disabled","list","hasPrev","onclick","prev","icon","current","pageNumber","total","getTotalPages","hasNext","next","QueueSection","oninit","id","queueTable","columns","items","ItemList","label","extractText","operationIcon","extension","href","style","name","extra","running","failure","pending","success","includes","size","display","startedAt","finishedAt","text","dayjs","start","end","extend","durationTime","diff","humanDuration","peakMemoryUsed","tasks","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","Installer","packageName","Stream","htmlFor","extiverse","semantic_link","code","placeholder","bidi","onsubmit","loading","data","package","error","response","errors","guessed_cause","WhyNotModal","whyNot","oncreate","requestWhyNot","method","url","body","then","reason","redraw","errorHandler","ExtensionItem","updates","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","version","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","updateState","incompatibleExtensions","alt","src","coreUpdate","update","dismissible","controls","dryRun","Updater","lastUpdateCheckView","controlItems","availableUpdatesView","checkedAt","humanTime","state","hasMinorCoreUpdate","extensionUpdates","updateCoreMinor","lastUpdateRun","limitedPackages","packageUpdates","updateExtension","ControlSection","_extends","assign","arguments","apply","ConfigureJson","settings","initialSettings","submit","submitButton","isDirty","customSettingComponents","AdminPage","setting","readOnly","configuration","Array","isArray","JSON","stringify","RepositoryModal","repository","context","types","composer","vcs","path","options","onchange","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","confirm","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","listItems","sections","setPriority","remove","onsaved","ExtensionPage","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","result","Task","Model","createdAt","isFinite","TypeError","UNITS","bits","binary","signed","localeOptions","isNegative","prefix","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","toPrecision","prettyBytes","jumpToQueue","route","set","setTimeout","document","getElementById","scrollIntoView","block","window","QueueState","polling","limit","offset","load","params","actionTaken","page","payload","meta","find","pollQueue","location","reload","getItems","clearTimeout","hasPending","_defineProperties","props","descriptor","configurable","writable","ControlSectionState","lastUpdateCheck","parse","formatExtensionUpdates","formatCoreUpdate","Constructor","protoProps","isLoading","hasOperationRunning","setLoading","requirePackage","LoadingModal","processing","extensionId","checkForUpdates","updateMode","updateGlobally","installed","filter","composerPackage","safeToUpdate","values","pop","backgroundImage","majorUpdate","major","incompatible_extensions","minor","global","ExtensionManagerState","queue","control","store","models","extensionManager","extensionData","registerSetting","translator","trans","trust","basic_impl_link","adv_impl_link","php_version","phpVersion","folder_perms_link","registerPage","isExtensionEnabled","modal","show","request","forum","attribute","alerts","close"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/utils/isExtensionEnabled']\"","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Tooltip']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Alert']\"","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/utils/Stream']\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Dropdown']\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/extension-manager/external root \"flarum.core.compat['admin/components/AdminPage']\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/components/Select']\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/./src/admin/compat.ts","webpack://@flarum/extension-manager/external assign \"flarum.core\"","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// 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].call(module.exports, 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['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/ExtensionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/LoadingModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/utils/isExtensionEnabled'];","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}","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/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Tooltip'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import type Mithril from 'mithril';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\n\ninterface LabelAttrs extends ComponentAttrs {\n type: 'success' | 'error' | 'neutral' | 'warning';\n}\n\nexport default class Label extends Component {\n view(vnode: Mithril.Vnode) {\n const { className, type, ...attrs } = this.attrs;\n\n return (\n \n {vnode.children}\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","import app from 'flarum/admin/app';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Task from '../models/Task';\n\ninterface TaskOutputModalAttrs extends IInternalModalAttrs {\n task: Task;\n}\n\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n\n title() {\n return app.translator.trans(`flarum-extension-manager.admin.sections.queue.operations.${this.attrs.task.operation()}`);\n }\n\n content() {\n return (\n \n
\n {this.attrs.task.status() === 'failure' && (\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')} \n
\n {(this.attrs.task.guessedCause() &&\n app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause())) ||\n app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown')}\n
\n
\n )}\n\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')} \n
\n $ composer {this.attrs.task.command()}
\n
\n
\n\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')} \n
\n
\n {this.attrs.task.output()} \n
\n
\n
\n
\n
\n );\n }\n}\n","import duration from 'dayjs/plugin/duration';\n\nexport default function humanDuration(start: Date, end: Date) {\n dayjs.extend(duration);\n\n const durationTime = dayjs(end).diff(start);\n\n return dayjs.duration(durationTime).humanize();\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport QueueState from '../states/QueueState';\n\ninterface PaginationAttrs extends ComponentAttrs {\n list: QueueState;\n}\n\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return (\n \n this.attrs.list.prev()}\n icon=\"fas fa-chevron-left\"\n className=\"Button Button--icon UserListPage-backBtn\"\n />\n \n {app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages(),\n })}\n \n this.attrs.list.next()}\n icon=\"fas fa-chevron-right\"\n className=\"Button Button--icon UserListPage-nextBtn\"\n />\n \n );\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport icon from 'flarum/common/helpers/icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\n\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Task, { TaskOperations } from '../models/Task';\nimport Pagination from './Pagination';\n\ninterface QueueTableColumn extends ComponentAttrs {\n label: string;\n content: (task: Task) => Mithril.Children;\n}\n\nexport default class QueueSection extends Component<{}> {\n oninit(vnode: Mithril.Vnode<{}, this>) {\n super.oninit(vnode);\n\n app.extensionManager.queue.load();\n }\n\n view() {\n return (\n \n \n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.queue.title')} \n app.extensionManager.queue.load()}\n aria-label={app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh')}\n disabled={app.extensionManager.control.isLoading()}\n />\n \n
\n {this.queueTable()}
\n \n );\n }\n\n columns() {\n const items = new ItemList();\n\n items.add(\n 'operation',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: (task) => (\n \n {this.operationIcon(task.operation())} \n \n {app.translator.trans(`flarum-extension-manager.admin.sections.queue.operations.${task.operation()}`)}\n \n
\n ),\n },\n 80\n );\n\n items.add(\n 'package',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: (task) => {\n const extension: Extension | null = app.data.extensions[task.package()?.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n\n return extension ? (\n \n \n {!!extension.icon && icon(extension.icon.name)}\n
\n \n {extension.extra['flarum-extension'].title} \n {task.package()} \n
\n \n ) : (\n task.package()\n );\n },\n },\n 75\n );\n\n items.add(\n 'status',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: (task) => (\n <>\n \n {app.translator.trans(`flarum-extension-manager.admin.sections.queue.statuses.${task.status()}`)}\n \n {['pending', 'running'].includes(task.status()) && }\n >\n ),\n },\n 70\n );\n\n items.add(\n 'elapsedTime',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: (task) =>\n !task.startedAt() || !task.finishedAt() ? (\n app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started')\n ) : (\n \n {humanDuration(task.startedAt(), task.finishedAt())} \n \n ),\n },\n 65\n );\n\n items.add(\n 'memoryUsed',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: (task) => {task.peakMemoryUsed()} ,\n },\n 60\n );\n\n items.add(\n 'details',\n {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: (task) => (\n app.modal.show(TaskOutputModal, { task })}\n disabled={['pending', 'running'].includes(task.status())}\n />\n ),\n className: 'Table-controls',\n },\n 55\n );\n\n return items;\n }\n\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n\n if (!tasks) {\n return ;\n }\n\n if (tasks && !tasks.length) {\n return {app.translator.trans('flarum-extension-manager.admin.sections.queue.none')} ;\n }\n\n const columns = this.columns();\n\n return (\n <>\n \n \n \n {columns.toArray().map((item, index) => (\n {item.label} \n ))}\n \n \n \n {tasks.map((task, index) => (\n \n {columns.toArray().map((item, index) => {\n const { label, content, ...attrs } = item;\n\n return (\n \n {content(task)}\n \n );\n })}\n \n ))}\n \n
\n\n \n >\n );\n }\n\n operationIcon(operation: TaskOperations): Mithril.Children {\n return icon(\n {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle',\n }[operation]\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Alert'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\n\nexport interface InstallerAttrs extends ComponentAttrs {}\n\nexport type InstallerLoadingTypes = 'extension-install' | null;\n\nexport default class Installer extends Component {\n packageName!: Stream;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n \n
{app.translator.trans('flarum-extension-manager.admin.extensions.install')} \n
\n {app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: extiverse.com ,\n semantic_link: ,\n code:
,\n })}\n
\n
\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.proceed')}\n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","import app from 'flarum/admin/app';\n\nexport default function (e: any) {\n app.extensionManager.control.setLoading(null);\n\n const error = e.response.errors[0];\n\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n\n app.alerts.clear();\n\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({ type: 'error' }, app.translator.trans(`flarum-extension-manager.admin.exceptions.guessed_cause.${error.guessed_cause}`));\n app.modal.close();\n } else {\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n\n case 'extension_already_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n\n case 'extension_not_installed':\n app.alerts.show({ type: 'error' }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\n\nimport errorHandler from '../utils/errorHandler';\n\ntype WhyNotResponse = {\n data: {\n reason: string;\n };\n};\n\nexport interface WhyNotModalAttrs extends IInternalModalAttrs {\n package: string;\n}\n\nexport default class WhyNotModal extends Modal {\n loading: boolean = true;\n whyNot: string | null = null;\n\n className() {\n return 'Modal--large WhyNotModal';\n }\n\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n\n oncreate(vnode: Mithril.VnodeDOM) {\n super.oncreate(vnode);\n\n this.requestWhyNot();\n }\n\n content() {\n return {this.loading ?
:
{this.whyNot} }
;\n }\n\n requestWhyNot(): void {\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/why-not`,\n body: {\n data: {\n package: this.attrs.package,\n },\n },\n })\n .then((response) => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n })\n .catch(errorHandler);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Dropdown'];","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport icon from 'flarum/common/helpers/icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport { Extension } from 'flarum/admin/AdminApplication';\n\nimport { UpdatedPackage } from '../states/ControlSectionState';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\n\nexport interface ExtensionItemAttrs extends ComponentAttrs {\n extension: Extension;\n updates: UpdatedPackage;\n onClickUpdate:\n | CallableFunction\n | {\n soft: CallableFunction;\n hard: CallableFunction;\n };\n whyNotWarning?: boolean;\n isCore?: boolean;\n updatable?: boolean;\n isDanger?: boolean;\n}\n\nexport default class ExtensionItem extends Component {\n view(vnode: Mithril.Vnode): Mithril.Children {\n const { extension, updates, onClickUpdate, whyNotWarning, isCore, isDanger } = this.attrs;\n const latestVersion = updates['latest-minor'] ?? (updates['latest-major'] && !isCore ? updates['latest-major'] : null);\n\n return (\n \n
\n {extension.icon ? icon(extension.icon.name) : ''}\n
\n
\n
{extension.extra['flarum-extension'].title}
\n
\n {this.version(updates['version'])} \n {latestVersion ? (\n \n {this.version(latestVersion)}\n \n ) : null}\n
\n
\n
\n {onClickUpdate && typeof onClickUpdate === 'function' ? (\n \n \n \n ) : onClickUpdate ? (\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')}\n \n \n {app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label')}\n \n \n ) : null}\n {whyNotWarning ? (\n \n app.modal.show(WhyNotModal, { package: extension.name })}\n aria-label={app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')}\n />\n \n ) : null}\n
\n
\n );\n }\n\n version(v: string): string {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\n\nimport { UpdatedPackage, UpdateState } from '../states/ControlSectionState';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\n\nexport interface MajorUpdaterAttrs extends ComponentAttrs {\n coreUpdate: UpdatedPackage;\n updateState: UpdateState;\n}\n\nexport type MajorUpdaterLoadingTypes = 'major-update' | 'major-update-dry-run';\n\nexport default class MajorUpdater extends Component {\n updateState!: UpdateState;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.updateState = this.attrs.updateState;\n }\n\n view(): Mithril.Children {\n // @todo move Form-group--danger class to core for reuse\n return (\n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.major_updater.title', { version: this.attrs.coreUpdate['latest-major'] })}\n \n
{app.translator.trans('flarum-extension-manager.admin.major_updater.description')}
\n
\n \n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run')}\n \n \n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.update')}\n \n
\n {this.updateState.incompatibleExtensions.length ? (\n
\n {this.updateState.incompatibleExtensions.map((extension: string) => (\n \n ))}\n
\n ) : null}\n {this.updateState.status === 'failure' ? (\n
app.modal.show(WhyNotModal, { package: 'flarum/core' })}\n >\n {app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why')}\n ,\n ]}\n >\n \n {app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc')}\n
\n \n ) : null}\n
\n );\n }\n\n update(dryRun: boolean) {\n app.extensionManager.control.majorUpdate({ dryRun });\n }\n}\n","import app from 'flarum/admin/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nexport interface IUpdaterAttrs extends ComponentAttrs {}\n\nexport type UpdaterLoadingTypes = 'check' | 'minor-update' | 'global-update' | 'extension-update' | null;\n\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n\n return [\n \n
{app.translator.trans('flarum-extension-manager.admin.updater.updater_title')} \n
{app.translator.trans('flarum-extension-manager.admin.updater.updater_help')}
\n {this.lastUpdateCheckView()}\n
{this.controlItems().toArray()}
\n {this.availableUpdatesView()}\n
,\n core && core.package['latest-major'] ? (\n \n ) : null,\n ];\n }\n\n lastUpdateCheckView() {\n return (\n (app.extensionManager.control.lastUpdateCheck?.checkedAt && (\n \n \n {app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')}\n \n {humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt)} \n
\n )) ||\n null\n );\n }\n\n availableUpdatesView() {\n const state = app.extensionManager.control;\n\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return (\n \n \n
\n );\n }\n\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return (\n \n {app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')} \n
\n );\n }\n\n return (\n \n
\n {hasMinorCoreUpdate ? (\n state.updateCoreMinor()}\n whyNotWarning={state.lastUpdateRun.limitedPackages().includes('flarum/core')}\n />\n ) : null}\n {state.extensionUpdates.map((extension: Extension) => (\n state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard'),\n }}\n whyNotWarning={state.lastUpdateRun.limitedPackages().includes(extension.name)}\n />\n ))}\n
\n
\n );\n }\n\n controlItems() {\n const items = new ItemList();\n\n items.add(\n 'updateCheck',\n app.extensionManager.control.checkForUpdates()}\n loading={app.extensionManager.control.isLoading('check')}\n disabled={app.extensionManager.control.hasOperationRunning()}\n >\n {app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')}\n ,\n 100\n );\n\n items.add(\n 'globalUpdate',\n app.extensionManager.control.updateGlobally()}\n loading={app.extensionManager.control.isLoading('global-update')}\n disabled={app.extensionManager.control.hasOperationRunning()}\n >\n {app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')}\n \n );\n\n return items;\n }\n}\n","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport { ComponentAttrs } from 'flarum/common/Component';\n\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Mithril from 'mithril';\n\nexport default class ControlSection extends Component {\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n }\n\n view() {\n return (\n \n
\n
\n
{app.translator.trans('flarum-extension-manager.admin.sections.control.title')} \n \n
\n
\n {app.data['flarum-extension-manager.writable_dirs'] ? (\n <>\n
\n
\n >\n ) : (\n
\n
\n {app.translator.trans('flarum-extension-manager.admin.file_permissions')}\n \n
\n )}\n
\n
\n );\n }\n}\n","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}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/AdminPage'];","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport Component, { type ComponentAttrs } from 'flarum/common/Component';\nimport { CommonSettingsItemOptions, type SettingsComponentOptions } from '@flarum/core/src/admin/components/AdminPage';\nimport AdminPage from 'flarum/admin/components/AdminPage';\nimport type ItemList from 'flarum/common/utils/ItemList';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\nexport interface IConfigureJson extends ComponentAttrs {\n buildSettingComponent: (entry: ((this: this) => Mithril.Children) | SettingsComponentOptions) => Mithril.Children;\n}\n\nexport default abstract class ConfigureJson extends Component {\n protected settings: Record> = {};\n protected initialSettings: Record | null = null;\n protected loading: boolean = false;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.submit(true);\n }\n\n protected abstract type: string;\n abstract title(): Mithril.Children;\n abstract content(): Mithril.Children;\n\n className(): string {\n return '';\n }\n\n view(): Mithril.Children {\n return (\n \n
{this.title()} \n {this.content()}\n
{this.submitButton()}
\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n return [\n this.submit(false)} disabled={!this.isDirty()}>\n {app.translator.trans('core.admin.settings.submit_button')}\n ,\n ];\n }\n\n customSettingComponents(): ItemList<(attributes: CommonSettingsItemOptions) => Mithril.Children> {\n return AdminPage.prototype.customSettingComponents();\n }\n\n setting(key: string) {\n return this.settings[key] ?? (this.settings[key] = Stream());\n }\n\n submit(readOnly: boolean) {\n this.loading = true;\n\n const configuration: any = {};\n\n Object.keys(this.settings).forEach((key) => {\n configuration[key] = this.settings[key]();\n });\n\n app\n .request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration,\n },\n })\n .then(({ data }: any) => {\n Object.keys(data).forEach((key) => {\n this.settings[key] = Stream(data[key]);\n });\n\n this.initialSettings = Array.isArray(data) ? {} : data;\n })\n .finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Select'];","import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport { type Repository } from './ConfigureComposer';\n\nexport interface IRepositoryModalAttrs extends IInternalModalAttrs {\n onsubmit: (repository: Repository, key: string) => void;\n name?: string;\n repository?: Repository;\n}\n\nexport default class RepositoryModal extends Modal {\n protected name!: Stream;\n protected repository!: Stream;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || { type: 'composer', url: '' });\n }\n\n className(): string {\n return 'RepositoryModal Modal--small';\n }\n\n title(): Mithril.Children {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(`flarum-extension-manager.admin.composer.${context}_repository_label`);\n }\n\n content(): Mithril.Children {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path'),\n };\n\n return (\n \n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')} \n this.repository({ ...this.repository(), type: value })}\n />\n
\n
\n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')} \n this.repository({ ...this.repository(), url: (e.target as HTMLInputElement).value })}\n value={this.repository().url}\n />\n
\n
\n \n {app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button')}\n \n
\n
\n );\n }\n\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\n","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport ConfigureJson, { type IConfigureJson } from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\n\nexport type Repository = {\n type: 'composer' | 'vcs' | 'path';\n url: string;\n};\n\nexport default class ConfigureComposer extends ConfigureJson {\n protected type = 'composer';\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n\n className(): string {\n return 'ConfigureComposer';\n }\n\n content(): Mithril.Children {\n return (\n \n {this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev'),\n },\n })}\n
\n
{app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')} \n
{app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')}
\n
\n {Object.keys(this.setting('repositories')() || {}).map((name) => {\n const repository = this.setting('repositories')()[name] as Repository;\n\n return (\n
\n \n app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository: Repository, newName: string) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n\n this.setting('repositories')(repositories);\n\n this.onchange(repository, newName);\n },\n })\n }\n >\n {name} ({repository.type})\n \n {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = { ...this.setting('repositories')() };\n delete repositories[name];\n\n this.setting('repositories')(repositories);\n }\n }}\n />\n
\n );\n })}\n
\n
\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n const items = super.submitButton();\n\n items.push(\n app.modal.show(RepositoryModal, { onsubmit: this.onchange.bind(this) })}>\n {app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')}\n \n );\n\n return items;\n }\n\n onchange(repository: Repository, name: string) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository,\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport interface IAuthMethodModalAttrs extends IInternalModalAttrs {\n onsubmit: (type: string, host: string, token: string) => void;\n type?: string;\n host?: string;\n token?: string;\n}\n\nexport default class AuthMethodModal extends Modal {\n protected type!: Stream;\n protected host!: Stream;\n protected token!: Stream;\n\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n\n className(): string {\n return 'AuthMethodModal Modal--small';\n }\n\n title(): Mithril.Children {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(`flarum-extension-manager.admin.auth_config.${context}_label`);\n }\n\n content(): Mithril.Children {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer'),\n };\n\n return (\n \n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')} \n \n
\n
\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')} \n \n
\n
\n \n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button')}\n \n
\n
\n );\n }\n\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\n","import app from 'flarum/admin/app';\nimport type Mithril from 'mithril';\nimport ConfigureJson, { IConfigureJson } from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport default class ConfigureAuth extends ConfigureJson {\n protected type = 'auth';\n\n title(): Mithril.Children {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n\n className(): string {\n return 'ConfigureAuth';\n }\n\n content(): Mithril.Children {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings =\n authSettings.length &&\n authSettings.every((type) => {\n const data = this.settings[type]();\n\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n\n return (\n \n {hasAuthSettings ? (\n authSettings.map((type) => {\n const hosts = this.settings[type]();\n\n return (\n
\n
{app.translator.trans(`flarum-extension-manager.admin.auth_config.types.${type}`)} \n
\n {Object.keys(hosts).map((host) => {\n const data = hosts[host] as string | Record
;\n\n return (\n \n \n app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host),\n })\n }\n >\n {host}\n \n {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = { ...this.setting(type)() };\n delete newType[host];\n\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }}\n />\n
\n );\n })}\n \n
\n );\n })\n ) : (\n
{app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')} \n )}\n
\n );\n }\n\n submitButton(): Mithril.Children[] {\n const items = super.submitButton();\n\n items.push(\n \n app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null),\n })\n }\n >\n {app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')}\n \n );\n\n return items;\n }\n\n onchange(oldHost: string | null, type: string, host: string, token: string) {\n const data = { ...this.setting(type)() };\n\n if (oldHost) {\n delete data[oldHost];\n }\n\n data[host] = token;\n\n this.setting(type)(data);\n }\n}\n","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport ExtensionPage, { ExtensionPageAttrs } from 'flarum/admin/components/ExtensionPage';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\n\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.extensionData.getSettings(this.extension.id);\n\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n\n return (\n \n
\n
\n {settings ? (\n
\n
\n
{app.translator.trans('flarum-extension-manager.admin.settings.title')} \n
{settings.map(this.buildSettingComponent.bind(this))}
\n
{this.submitButton()}
\n
\n
\n
\n
\n ) : (\n
{app.translator.trans('core.admin.extension.no_settings')} \n )}\n
\n
\n );\n }\n\n sections(vnode: Mithril.VnodeDOM): ItemList {\n const items = super.sections(vnode);\n\n items.setPriority('content', 10);\n\n items.add('control', , 8);\n\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', , 5);\n }\n\n items.remove('permissions');\n\n return items;\n }\n\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\n\nexport type TaskOperations =\n | 'extension_install'\n | 'extension_remove'\n | 'extension_update'\n | 'update_global'\n | 'update_minor'\n | 'update_major'\n | 'update_check'\n | 'why_not';\n\nexport default class Task extends Model {\n status() {\n return Model.attribute<'pending' | 'running' | 'failure' | 'success'>('status').call(this);\n }\n\n operation() {\n return Model.attribute('operation').call(this);\n }\n\n command() {\n return Model.attribute('command').call(this);\n }\n\n package() {\n return Model.attribute('package').call(this);\n }\n\n output() {\n return Model.attribute('output').call(this);\n }\n\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\n","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\n\nexport default function jumpToQueue(): void {\n app.modal.close();\n\n m.route.set(app.route('extension', { id: 'flarum-extension-manager' }));\n\n app.extensionManager.queue.load({}, true);\n\n setTimeout(() => {\n document.getElementById('ExtensionManager-queueSection')?.scrollIntoView({ block: 'nearest' });\n }, 200);\n}\n","import app from 'flarum/admin/app';\nimport Task from '../models/Task';\nimport { ApiQueryParamsPlural } from 'flarum/common/Store';\n\nexport default class QueueState {\n private polling: any = null;\n private tasks: Task[] | null = null;\n private limit = 20;\n private offset = 0;\n private total = 0;\n\n load(params?: ApiQueryParamsPlural, actionTaken = false): Promise {\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...params?.page,\n },\n ...params,\n };\n\n return app.store.find('extension-manager-tasks', params || {}).then((data) => {\n this.tasks = data;\n this.total = data.payload.meta?.total;\n\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data?.find((task) => task.status() === 'pending' || task.status() === 'running');\n\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n\n return data;\n });\n }\n\n getItems() {\n return this.tasks;\n }\n\n getTotalPages(): number {\n return Math.ceil(this.total / this.limit);\n }\n\n pageNumber(): number {\n return Math.ceil(this.offset / this.limit);\n }\n\n hasPrev(): boolean {\n return this.pageNumber() !== 0;\n }\n\n hasNext(): boolean {\n return this.offset + this.limit < this.total;\n }\n\n prev(): void {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n\n next(): void {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n\n pollQueue(actionTaken = false): void {\n if (this.polling) {\n clearTimeout(this.polling);\n }\n\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n\n hasPending() {\n return !!this.tasks?.find((task) => task.status() === 'pending' || task.status() === 'running');\n }\n}\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}","import app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport { UpdaterLoadingTypes } from '../components/Updater';\nimport { InstallerLoadingTypes } from '../components/Installer';\nimport { MajorUpdaterLoadingTypes } from '../components/MajorUpdater';\nimport { AsyncBackendResponse } from '../shims';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport { Extension } from 'flarum/admin/AdminApplication';\nimport extractText from 'flarum/common/utils/extractText';\nimport RequestError from 'flarum/common/utils/RequestError';\n\nexport type UpdatedPackage = {\n name: string;\n version: string;\n latest: string;\n 'latest-minor': string | null;\n 'latest-major': string | null;\n 'latest-status': string;\n 'required-as': string;\n 'direct-dependency': boolean;\n description: string;\n};\n\nexport type ComposerUpdates = {\n installed: UpdatedPackage[];\n};\n\nexport type LastUpdateCheck = {\n checkedAt: Date | null;\n updates: ComposerUpdates;\n};\n\ntype UpdateType = 'major' | 'minor' | 'global';\ntype UpdateStatus = 'success' | 'failure' | null;\nexport type UpdateState = {\n ranAt: Date | null;\n status: UpdateStatus;\n limitedPackages: string[];\n incompatibleExtensions: string[];\n};\n\nexport type LastUpdateRun = {\n [key in UpdateType]: UpdateState;\n} & {\n limitedPackages: () => string[];\n};\n\nexport type LoadingTypes = UpdaterLoadingTypes | InstallerLoadingTypes | MajorUpdaterLoadingTypes | 'queued-action';\n\nexport type CoreUpdate = {\n package: UpdatedPackage;\n extension: Extension;\n};\n\nexport default class ControlSectionState {\n loading: LoadingTypes = null;\n\n public packageUpdates: Record = {};\n public lastUpdateCheck!: LastUpdateCheck;\n public extensionUpdates!: Extension[];\n public coreUpdate: CoreUpdate | null = null;\n get lastUpdateRun(): LastUpdateRun {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']) as LastUpdateRun;\n\n lastUpdateRun.limitedPackages = () => [\n ...lastUpdateRun.major.limitedPackages,\n ...lastUpdateRun.minor.limitedPackages,\n ...lastUpdateRun.global.limitedPackages,\n ];\n\n return lastUpdateRun;\n }\n\n constructor() {\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']) as LastUpdateCheck;\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n\n isLoading(name: LoadingTypes = null): boolean {\n return (name && this.loading === name) || (!name && this.loading !== null);\n }\n\n hasOperationRunning(): boolean {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n\n setLoading(name: LoadingTypes): void {\n this.loading = name;\n }\n\n requirePackage(data: any) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions`,\n body: {\n data,\n },\n })\n .then((response) => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', { extension: extensionId })\n );\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n checkForUpdates() {\n this.setLoading('check');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/check-for-updates`,\n })\n .then((response) => {\n if ((response as AsyncBackendResponse).processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response as LastUpdateCheck;\n this.extensionUpdates = this.formatExtensionUpdates(response as LastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(response as LastUpdateCheck);\n this.setLoading(null);\n m.redraw();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n m.redraw();\n });\n }\n\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/minor-update`,\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n\n updateExtension(extension: Extension, updateMode: 'soft' | 'hard') {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n\n app\n .request({\n method: 'PATCH',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions/${extension.id}`,\n body: {\n data: {\n updateMode,\n },\n },\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title,\n })\n );\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/global-update`,\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n\n formatExtensionUpdates(lastUpdateCheck: LastUpdateCheck): Extension[] {\n this.packageUpdates = {};\n\n lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n\n return extension && safeToUpdate;\n });\n\n return (Object.values(app.data.extensions) as Extension[]).filter((extension: Extension) => this.packageUpdates[extension.id]);\n }\n\n formatCoreUpdate(lastUpdateCheck: LastUpdateCheck): CoreUpdate | null {\n const core = lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => composerPackage.name === 'flarum/core').pop();\n\n if (!core) return null;\n\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: `url(${app.data.resources[0]['attributes']['baseUrl']}/assets/extensions/flarum-extension-manager/flarum.svg`,\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum')),\n },\n },\n },\n };\n }\n\n majorUpdate({ dryRun }: { dryRun: boolean }) {\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n\n app\n .request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/extension-manager/major-update`,\n body: {\n data: { dryRun },\n },\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n })\n .catch(errorHandler)\n .catch((e: RequestError) => {\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = e.response?.errors?.pop()?.incompatible_extensions as string[];\n })\n .finally(() => {\n m.redraw();\n });\n }\n}\n","import QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\n\nexport default class ExtensionManagerState {\n public queue: QueueState = new QueueState();\n public control: ControlSectionState = new ControlSectionState();\n}\n","import AuthMethodModal from './components/AuthMethodModal';\nimport ConfigureAuth from './components/ConfigureAuth';\nimport ConfigureComposer from './components/ConfigureComposer';\nimport ConfigureJson from './components/ConfigureJson';\nimport ControlSection from './components/ControlSection';\nimport ExtensionItem from './components/ExtensionItem';\nimport Installer from './components/Installer';\nimport Label from './components/Label';\nimport MajorUpdater from './components/MajorUpdater';\nimport Pagination from './components/Pagination';\nimport QueueSection from './components/QueueSection';\nimport RepositoryModal from './components/RepositoryModal';\nimport SettingsPage from './components/SettingsPage';\nimport TaskOutputModal from './components/TaskOutputModal';\nimport Updater from './components/Updater';\nimport WhyNotModal from './components/WhyNotModal';\n\nimport Task from './models/Task';\n\nimport ControlSectionState from './states/ControlSectionState';\nimport ExtensionManagerState from './states/ExtensionManagerState';\nimport QueueState from './states/QueueState';\n\nimport errorHandler from './utils/errorHandler';\nimport humanDuration from './utils/humanDuration';\nimport jumpToQueue from './utils/jumpToQueue';\n\nexport default {\n 'extension-manager/components/AuthMethodModal': AuthMethodModal,\n 'extension-manager/components/ConfigureAuth': ConfigureAuth,\n 'extension-manager/components/ConfigureComposer': ConfigureComposer,\n 'extension-manager/components/ConfigureJson': ConfigureJson,\n 'extension-manager/components/ControlSection': ControlSection,\n 'extension-manager/components/ExtensionItem': ExtensionItem,\n 'extension-manager/components/Installer': Installer,\n 'extension-manager/components/Label': Label,\n 'extension-manager/components/MajorUpdater': MajorUpdater,\n 'extension-manager/components/Pagination': Pagination,\n 'extension-manager/components/QueueSection': QueueSection,\n 'extension-manager/components/RepositoryModal': RepositoryModal,\n 'extension-manager/components/SettingsPage': SettingsPage,\n 'extension-manager/components/TaskOutputModal': TaskOutputModal,\n 'extension-manager/components/Updater': Updater,\n 'extension-manager/components/WhyNotModal': WhyNotModal,\n 'extension-manager/models/Task': Task,\n 'extension-manager/states/ControlSectionState': ControlSectionState,\n 'extension-manager/states/ExtensionManagerState': ExtensionManagerState,\n 'extension-manager/states/QueueState': QueueState,\n 'extension-manager/utils/errorHandler': errorHandler,\n 'extension-manager/utils/humanDuration': humanDuration,\n 'extension-manager/utils/jumpToQueue': jumpToQueue,\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport SettingsPage from './components/SettingsPage';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nimport { AsyncBackendResponse } from './shims';\nimport ExtensionManagerState from './states/ExtensionManagerState';\n\napp.initializers.add('flarum-extension-manager', (app) => {\n app.store.models['extension-manager-tasks'] = Task;\n\n app.extensionManager = new ExtensionManagerState();\n\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n\n app.extensionData\n .for('flarum-extension-manager')\n .registerSetting({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(\n extractText(\n app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: `${app.data.phpVersion} `,\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership',\n })\n )\n ),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue'],\n })\n .registerSetting({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number',\n })\n .registerPage(SettingsPage);\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app\n .request({\n url: `${app.forum.attribute('apiUrl')}/extension-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n })\n .then((response) => {\n if (response?.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({ type: 'success' }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n })\n .finally(() => {\n app.modal.close();\n });\n }}\n >\n {app.translator.trans('flarum-extension-manager.admin.extensions.remove')}\n \n );\n });\n});\n\n// Expose compat API\nimport packageManagerCompat from './compat';\nimport { compat } from '@flarum/core/admin';\n\nObject.assign(compat, packageManagerCompat);\n"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_objectWithoutPropertiesLoose","source","excluded","target","sourceKeys","length","indexOf","Label","view","vnode","attrs","className","type","classList","children","Component","TaskOutputModal","title","app","task","operation","content","status","guessedCause","command","output","Modal","humanDuration","start","end","dayjs","extend","durationTime","diff","Pagination","disabled","list","hasPrev","onclick","prev","icon","current","pageNumber","total","getTotalPages","hasNext","next","QueueSection","oninit","id","queueTable","columns","items","ItemList","label","extractText","operationIcon","extension","href","style","name","extra","running","failure","pending","success","includes","size","display","startedAt","finishedAt","text","peakMemoryUsed","tasks","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","Installer","packageName","Stream","htmlFor","extiverse","semantic_link","code","placeholder","bidi","onsubmit","loading","data","package","error","response","errors","guessed_cause","WhyNotModal","whyNot","oncreate","requestWhyNot","method","url","body","then","reason","redraw","errorHandler","ExtensionItem","updates","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","version","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","updateState","incompatibleExtensions","alt","src","coreUpdate","update","dismissible","controls","dryRun","Updater","lastUpdateCheckView","controlItems","availableUpdatesView","checkedAt","humanTime","state","hasMinorCoreUpdate","extensionUpdates","updateCoreMinor","lastUpdateRun","limitedPackages","packageUpdates","updateExtension","ControlSection","_extends","assign","arguments","apply","ConfigureJson","settings","initialSettings","submit","submitButton","isDirty","customSettingComponents","AdminPage","setting","readOnly","configuration","Array","isArray","JSON","stringify","RepositoryModal","repository","context","types","composer","vcs","path","options","onchange","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","confirm","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","listItems","sections","setPriority","remove","onsaved","ExtensionPage","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","result","Task","Model","createdAt","isFinite","TypeError","UNITS","bits","binary","signed","localeOptions","isNegative","prefix","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","toPrecision","prettyBytes","jumpToQueue","route","set","setTimeout","document","getElementById","scrollIntoView","block","window","QueueState","polling","limit","offset","load","params","actionTaken","page","payload","meta","find","pollQueue","location","reload","getItems","clearTimeout","hasPending","_defineProperties","props","descriptor","configurable","writable","ControlSectionState","lastUpdateCheck","parse","formatExtensionUpdates","formatCoreUpdate","Constructor","protoProps","isLoading","hasOperationRunning","setLoading","requirePackage","LoadingModal","processing","extensionId","checkForUpdates","updateMode","updateGlobally","installed","filter","composerPackage","safeToUpdate","values","pop","backgroundImage","majorUpdate","major","incompatible_extensions","minor","global","ExtensionManagerState","queue","control","store","models","extensionManager","extensionData","registerSetting","translator","trans","trust","basic_impl_link","adv_impl_link","php_version","phpVersion","folder_perms_link","registerPage","isExtensionEnabled","modal","show","request","forum","attribute","alerts","close","packageManagerCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/package-manager/js/src/admin/compat.ts b/extensions/package-manager/js/src/admin/compat.ts
new file mode 100644
index 0000000000..c4ae103985
--- /dev/null
+++ b/extensions/package-manager/js/src/admin/compat.ts
@@ -0,0 +1,52 @@
+import AuthMethodModal from './components/AuthMethodModal';
+import ConfigureAuth from './components/ConfigureAuth';
+import ConfigureComposer from './components/ConfigureComposer';
+import ConfigureJson from './components/ConfigureJson';
+import ControlSection from './components/ControlSection';
+import ExtensionItem from './components/ExtensionItem';
+import Installer from './components/Installer';
+import Label from './components/Label';
+import MajorUpdater from './components/MajorUpdater';
+import Pagination from './components/Pagination';
+import QueueSection from './components/QueueSection';
+import RepositoryModal from './components/RepositoryModal';
+import SettingsPage from './components/SettingsPage';
+import TaskOutputModal from './components/TaskOutputModal';
+import Updater from './components/Updater';
+import WhyNotModal from './components/WhyNotModal';
+
+import Task from './models/Task';
+
+import ControlSectionState from './states/ControlSectionState';
+import ExtensionManagerState from './states/ExtensionManagerState';
+import QueueState from './states/QueueState';
+
+import errorHandler from './utils/errorHandler';
+import humanDuration from './utils/humanDuration';
+import jumpToQueue from './utils/jumpToQueue';
+
+export default {
+ 'extension-manager/components/AuthMethodModal': AuthMethodModal,
+ 'extension-manager/components/ConfigureAuth': ConfigureAuth,
+ 'extension-manager/components/ConfigureComposer': ConfigureComposer,
+ 'extension-manager/components/ConfigureJson': ConfigureJson,
+ 'extension-manager/components/ControlSection': ControlSection,
+ 'extension-manager/components/ExtensionItem': ExtensionItem,
+ 'extension-manager/components/Installer': Installer,
+ 'extension-manager/components/Label': Label,
+ 'extension-manager/components/MajorUpdater': MajorUpdater,
+ 'extension-manager/components/Pagination': Pagination,
+ 'extension-manager/components/QueueSection': QueueSection,
+ 'extension-manager/components/RepositoryModal': RepositoryModal,
+ 'extension-manager/components/SettingsPage': SettingsPage,
+ 'extension-manager/components/TaskOutputModal': TaskOutputModal,
+ 'extension-manager/components/Updater': Updater,
+ 'extension-manager/components/WhyNotModal': WhyNotModal,
+ 'extension-manager/models/Task': Task,
+ 'extension-manager/states/ControlSectionState': ControlSectionState,
+ 'extension-manager/states/ExtensionManagerState': ExtensionManagerState,
+ 'extension-manager/states/QueueState': QueueState,
+ 'extension-manager/utils/errorHandler': errorHandler,
+ 'extension-manager/utils/humanDuration': humanDuration,
+ 'extension-manager/utils/jumpToQueue': jumpToQueue,
+};
diff --git a/extensions/package-manager/js/src/admin/index.tsx b/extensions/package-manager/js/src/admin/index.tsx
index 0219c91cef..12bd79ce96 100755
--- a/extensions/package-manager/js/src/admin/index.tsx
+++ b/extensions/package-manager/js/src/admin/index.tsx
@@ -82,3 +82,9 @@ app.initializers.add('flarum-extension-manager', (app) => {
);
});
});
+
+// Expose compat API
+import packageManagerCompat from './compat';
+import { compat } from '@flarum/core/admin';
+
+Object.assign(compat, packageManagerCompat);
diff --git a/extensions/package-manager/js/tsconfig.json b/extensions/package-manager/js/tsconfig.json
index 747f61f266..5c0840400e 100755
--- a/extensions/package-manager/js/tsconfig.json
+++ b/extensions/package-manager/js/tsconfig.json
@@ -10,7 +10,8 @@
// This will output typings to `dist-typings`
"declarationDir": "./dist-typings",
"paths": {
- "flarum/*": ["../../../framework/core/js/dist-typings/*"]
+ "flarum/*": ["../../../framework/core/js/dist-typings/*"],
+ "@flarum/core/*": ["../../../framework/core/js/dist-typings/*"],
}
}
}
diff --git a/extensions/package-manager/migrations/2024_01_10_000000_rename_to_extension_manager.php b/extensions/package-manager/migrations/2024_01_10_000000_rename_to_extension_manager.php
index 64f223467f..17879dc0f9 100644
--- a/extensions/package-manager/migrations/2024_01_10_000000_rename_to_extension_manager.php
+++ b/extensions/package-manager/migrations/2024_01_10_000000_rename_to_extension_manager.php
@@ -1,5 +1,12 @@
paths->base);
if ($safeMode) {
- $temporaryVendorDir = $this->paths->base . DIRECTORY_SEPARATOR . 'temp-vendor';
+ $temporaryVendorDir = $this->paths->base.DIRECTORY_SEPARATOR.'temp-vendor';
if (! $this->filesystem->isDirectory($temporaryVendorDir)) {
$this->filesystem->makeDirectory($temporaryVendorDir);
}
diff --git a/extensions/package-manager/src/Composer/ComposerJson.php b/extensions/package-manager/src/Composer/ComposerJson.php
index 8e5738cf18..528ddcd4ec 100644
--- a/extensions/package-manager/src/Composer/ComposerJson.php
+++ b/extensions/package-manager/src/Composer/ComposerJson.php
@@ -10,8 +10,8 @@
namespace Flarum\ExtensionManager\Composer;
use Flarum\Extension\ExtensionManager;
-use Flarum\Foundation\Paths;
use Flarum\ExtensionManager\Support\Util;
+use Flarum\Foundation\Paths;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Str;
diff --git a/extensions/package-manager/src/ExtensionManagerServiceProvider.php b/extensions/package-manager/src/ExtensionManagerServiceProvider.php
index 6af99178c5..dd78693d74 100755
--- a/extensions/package-manager/src/ExtensionManagerServiceProvider.php
+++ b/extensions/package-manager/src/ExtensionManagerServiceProvider.php
@@ -13,15 +13,15 @@
use Composer\Console\Application;
use Composer\Util\Platform;
use Flarum\Extension\ExtensionManager;
-use Flarum\Foundation\AbstractServiceProvider;
-use Flarum\Foundation\Paths;
-use Flarum\Frontend\RecompileFrontendAssets;
-use Flarum\Locale\LocaleManager;
use Flarum\ExtensionManager\Composer\ComposerAdapter;
use Flarum\ExtensionManager\Event\FlarumUpdated;
use Flarum\ExtensionManager\Extension\Event\Updated;
use Flarum\ExtensionManager\Listener\ClearCacheAfterUpdate;
use Flarum\ExtensionManager\Listener\ReCheckForUpdates;
+use Flarum\Foundation\AbstractServiceProvider;
+use Flarum\Foundation\Paths;
+use Flarum\Frontend\RecompileFrontendAssets;
+use Flarum\Locale\LocaleManager;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Filesystem\Filesystem;
diff --git a/extensions/package-manager/src/Job/ComposerCommandJob.php b/extensions/package-manager/src/Job/ComposerCommandJob.php
index 8cd4900180..8b30a45bb9 100644
--- a/extensions/package-manager/src/Job/ComposerCommandJob.php
+++ b/extensions/package-manager/src/Job/ComposerCommandJob.php
@@ -32,6 +32,8 @@ class ComposerCommandJob extends AbstractJob implements ShouldBeUnique
public function __construct(AbstractActionCommand $command, string $phpVersion)
{
+ parent::__construct();
+
$this->command = $command;
$this->phpVersion = $phpVersion;
}
diff --git a/extensions/package-manager/src/Listener/ClearCacheAfterUpdate.php b/extensions/package-manager/src/Listener/ClearCacheAfterUpdate.php
index 5f4575af9a..99b6d231fe 100644
--- a/extensions/package-manager/src/Listener/ClearCacheAfterUpdate.php
+++ b/extensions/package-manager/src/Listener/ClearCacheAfterUpdate.php
@@ -11,8 +11,8 @@
use Composer\Command\ClearCacheCommand;
use Flarum\Database\Console\MigrateCommand;
-use Flarum\Foundation\Console\AssetsPublishCommand;
use Flarum\ExtensionManager\Event\FlarumUpdated;
+use Flarum\Foundation\Console\AssetsPublishCommand;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
diff --git a/extensions/package-manager/tests/integration/TestCase.php b/extensions/package-manager/tests/integration/TestCase.php
index 07a03f9843..9da5731c29 100644
--- a/extensions/package-manager/tests/integration/TestCase.php
+++ b/extensions/package-manager/tests/integration/TestCase.php
@@ -9,10 +9,10 @@
namespace Flarum\ExtensionManager\Tests\integration;
-use Flarum\Foundation\Paths;
use Flarum\ExtensionManager\Composer\ComposerAdapter;
use Flarum\ExtensionManager\Composer\ComposerJson;
use Flarum\ExtensionManager\Support\Util;
+use Flarum\Foundation\Paths;
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
use Illuminate\Support\Arr;
use Psr\Http\Message\ResponseInterface;
diff --git a/extensions/pusher/src/SendPusherNotificationsJob.php b/extensions/pusher/src/SendPusherNotificationsJob.php
index def83ca28f..00187c17a1 100644
--- a/extensions/pusher/src/SendPusherNotificationsJob.php
+++ b/extensions/pusher/src/SendPusherNotificationsJob.php
@@ -28,6 +28,8 @@ class SendPusherNotificationsJob extends AbstractJob
public function __construct(BlueprintInterface $blueprint, array $recipients)
{
+ parent::__construct();
+
$this->blueprint = $blueprint;
$this->recipients = $recipients;
}
diff --git a/extensions/statistics/js/dist-typings/compat.d.ts b/extensions/statistics/js/dist-typings/compat.d.ts
new file mode 100644
index 0000000000..8d6236d5d6
--- /dev/null
+++ b/extensions/statistics/js/dist-typings/compat.d.ts
@@ -0,0 +1,11 @@
+import MiniStatisticsWidget from './components/MiniStatisticsWidget';
+import StatisticsPage from './components/StatisticsPage';
+import StatisticsWidget from './components/StatisticsWidget';
+import StatisticsWidgetDateSelectionModal from './components/StatisticsWidgetDateSelectionModal';
+declare const _default: {
+ 'statistics/components/MiniStatisticsWidget': typeof MiniStatisticsWidget;
+ 'statistics/components/StatisticsPage': typeof StatisticsPage;
+ 'statistics/components/StatisticsWidget': typeof StatisticsWidget;
+ 'statistics/components/StatisticsWidgetDateSelectionModal': typeof StatisticsWidgetDateSelectionModal;
+};
+export default _default;
diff --git a/extensions/statistics/js/dist/admin.js b/extensions/statistics/js/dist/admin.js
index 32b84f6764..6c8a432e23 100644
--- a/extensions/statistics/js/dist/admin.js
+++ b/extensions/statistics/js/dist/admin.js
@@ -1,3 +1,3 @@
/*! For license information please see admin.js.LICENSE.txt */
-(()=>{var t={757:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",a="minute",r="hour",s="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},m=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:m,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),a=i%60;return(e<=0?"+":"-")+m(n,2,"0")+":"+m(a,2,"0")},m:function t(e,i){if(e.date()1)return t(s[0])}else{var o=e.name;b[o]=e,a=o}return!n&&a&&(y=a),a||!n&&y},k=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=w,D.i=x,D.w=function(t,e){return k(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function v(t){this.$L=w(t.locale,null,!0),this.parse(t)}var m=v.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var a=n[2]-1||0,r=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)):new Date(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return D},m.isValid=function(){return!(this.$d.toString()===d)},m.isSame=function(t,e){var i=k(t);return this.startOf(e)<=i&&i<=this.endOf(e)},m.isAfter=function(t,e){return k(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function a(t){return t.titleHeight+t.margins.top+t.paddings.top}function r(t){return t.margins.left+t.paddings.left}function s(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var a=new Array(Math.abs(e)).fill(i);return n?a.concat(t):t.concat(a)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*kt)*e,y:Math.cos(t*kt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function v(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function m(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),a=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*a)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var a=parseInt(i,16),r=b((a>>16)+e),s=b((a>>8&255)+e);return(n?"#":"")+(b((255&a)+e)|s<<8|r<<16).toString(16)}function w(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function k(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var a=e[n];if("inside"===n)w(a).appendChild(i);else if("around"===n){var r=w(a);r.parentNode.insertBefore(i,r),i.appendChild(r)}else"styles"===n?"object"===(void 0===a?"undefined":lt(a))&&Object.keys(a).map((function(t){i.style[t]=a[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=a:i.setAttribute(n,a))}return i}function D(t,e){return k("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return k("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),k("g",i)}function S(t){return k("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function L(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),a=D(t,n),r=[1,.6,.2];return i&&(r=[.4,.2,0]),M(a,"0%",e,r[0]),M(a,"50%",e,r[1]),M(a,"100%",e,r[2]),n}function O(t,e,i,n,a){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},s={className:t,x:e,y:i,width:n,height:n,rx:a,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(r).map((function(t){s[t]=r[t]})),k("rect",s)}function T(t,e,i,n){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},r=a.fontSize||Tt;return k("text",{className:t,x:e,y:i,dy:(void 0!==a.dy?a.dy:r/2)+"px","font-size":r+"px",fill:a.fill||Ct,"text-anchor":a.textAnchor||"start",innerHTML:n})}function A(t,e,i,n){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};a.stroke||(a.stroke=At);var r=k("line",{className:"line-vertical "+a.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:a.stroke}}),s=k("text",{x:0,y:i>n?i+Lt:i-Lt-Tt,dy:Tt+"px","font-size":Tt+"px","text-anchor":"middle",innerHTML:e+""}),o=k("g",{transform:"translate("+t+", 0)"});return o.appendChild(r),o.appendChild(s),o}function C(t,e,i,n){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};a.stroke||(a.stroke=At),a.lineType||(a.lineType=""),a.shortenNumbers&&(e=g(e));var r=k("line",{className:"line-horizontal "+a.className+("dashed"===a.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:a.stroke}}),s=k("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,r=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),s=pt(r,2),o=s[0],l=s[1];return l-=a,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},Et,jt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},Et,jt]]}function $(t,e){return[t,{d:e},Et,jt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},s=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=r[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:zt[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in a&&(d.type=a),d)u.setAttribute(f,d[f]);s.appendChild(u),a?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[s,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function j(t,e){var i=[],n=[];e.map((function(t){var e,a,r=t[0],s=r.parentNode;t[0]=r;var o=Y.apply(void 0,vt(t)),l=pt(o,2);e=l[0],a=l[1],i.push(a),n.push([e,s]),s&&s.replaceChild(e,r)}));var a=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),a}function z(t,e,i){if(0!==i.length){var n=j(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function H(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ht});i.insertBefore(n,i.firstChild);var a=t.create("div");return a.appendChild(i),a.innerHTML}function F(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(F(e)-F(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),a=Jt[n[0]];return Object.assign(a,{constants:e,getData:i}),new qt(a)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),a=i-n,r=a,s=1;a>5&&(a%2!=0&&(a=++i-n),r=a/2,s=2),a<=2&&(s=a/(r=4)),0===a&&(r=5,s=1);for(var o=[],l=0;l<=r;l++)o.push(n+s*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),a=n[0],r=n[1],s=e?e/Math.pow(10,r):0,o=K(a=a.toFixed(6),s);return o.map((function(t){return t*Math.pow(10,r)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],a=0,r=1;a1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,vt(t)),a=Math.min.apply(Math,vt(t)),r=[];if(n>=0&&a>=0)Z(n)[1],r=i?Q(n,a):Q(n);else if(n>0&&a<0){var s=Math.abs(a);n>=s?(Z(n)[1],r=e(n,s)):(Z(s)[1],r=e(s,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&a<=0){var o=Math.abs(a),l=Math.abs(n);Z(o)[1],r=(r=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return r}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function at(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function rt(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=a;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t