diff --git a/extensions/akismet/js/dist-typings/admin/extend.d.ts b/extensions/akismet/js/dist-typings/admin/extend.d.ts index f83ce3204..4c1b0a615 100644 --- a/extensions/akismet/js/dist-typings/admin/extend.d.ts +++ b/extensions/akismet/js/dist-typings/admin/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: import("flarum/common/extenders/Admin").default[]; export default _default; diff --git a/extensions/flags/js/dist-typings/admin/extend.d.ts b/extensions/flags/js/dist-typings/admin/extend.d.ts index f83ce3204..4c1b0a615 100644 --- a/extensions/flags/js/dist-typings/admin/extend.d.ts +++ b/extensions/flags/js/dist-typings/admin/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: import("flarum/common/extenders/Admin").default[]; export default _default; diff --git a/extensions/flags/js/dist-typings/forum/components/FlagList.d.ts b/extensions/flags/js/dist-typings/forum/components/FlagList.d.ts index a58967d59..32022c060 100644 --- a/extensions/flags/js/dist-typings/forum/components/FlagList.d.ts +++ b/extensions/flags/js/dist-typings/forum/components/FlagList.d.ts @@ -2,11 +2,13 @@ import Component from 'flarum/common/Component'; import type { ComponentAttrs } from 'flarum/common/Component'; import type Mithril from 'mithril'; import type FlagListState from '../states/FlagListState'; +import ItemList from 'flarum/common/utils/ItemList'; export interface IFlagListAttrs extends ComponentAttrs { state: FlagListState; } export default class FlagList extends Component { oninit(vnode: Mithril.Vnode): void; view(): JSX.Element; + controlItems(): ItemList; content(state: FlagListState): JSX.Element[][] | null; } diff --git a/extensions/flags/js/dist/forum.js b/extensions/flags/js/dist/forum.js index 6d70775d1..25faad8c4 100644 --- a/extensions/flags/js/dist/forum.js +++ b/extensions/flags/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var s in e)t.o(e,s)&&!t.o(a,s)&&Object.defineProperty(a,s,{enumerable:!0,get:e[s]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{extend:()=>st});const e=flarum.reg.get("core","forum/app");var s=t.n(e);function r(t){return r="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},r(t)}const o=flarum.reg.get("core","common/states/PaginatedListState");var n=t.n(o);class l extends(n()){constructor(t){var a,e,s;super({},1,null),a=this,s=void 0,(e=function(t){var a=function(t,a){if("object"!==r(t)||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,a);if("object"!==r(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(a)?a:String(a)}(e="app"))in a?Object.defineProperty(a,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):a[e]=s,this.app=t}get type(){return"flags"}load(){var t;return null!=(t=this.app.session.user)&&t.attribute("newFlagCount")&&(this.pages=[],this.location={page:1}),this.pages.length>0?Promise.resolve():super.loadNext()}}flarum.reg.add("flarum-flags","forum/states/FlagListState",l);const i=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/utils/PostControls");var c=t.n(u);const f=flarum.reg.get("core","common/components/Button");var g=t.n(f);const d=flarum.reg.get("core","common/components/FormModal");var p=t.n(d);const h=flarum.reg.get("core","common/components/Form");var v=t.n(h);const b=flarum.reg.get("core","common/utils/Stream");var _=t.n(b);const y=flarum.reg.get("core","common/utils/withAttr");var N=t.n(y);const x=flarum.reg.get("core","common/utils/ItemList");var F=t.n(x);class P extends(p()){oninit(t){super.oninit(t),this.success=!1,this.reason=_()(""),this.reasonDetail=_()("")}className(){return"FlagPostModal Modal--medium"}title(){return s().translator.trans("flarum-flags.forum.flag_post.title")}content(){return this.success?m("div",{className:"Modal-body"},m(v(),{className:"Form--centered"},m("p",{className:"helpText"},s().translator.trans("flarum-flags.forum.flag_post.confirmation_message")),m("div",{className:"Form-group Form-controls"},m(g(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},s().translator.trans("flarum-flags.forum.flag_post.dismiss_button"))))):m("div",{className:"Modal-body"},m(v(),{className:"Form--centered"},m("div",{className:"Form-group"},m("div",null,this.flagReasons().toArray())),m("div",{className:"Form-group Form-controls"},m(g(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading,disabled:!this.reason()},s().translator.trans("flarum-flags.forum.flag_post.submit_button")))))}flagReasons(){const t=new(F()),a=s().forum.attribute("guidelinesUrl");return t.add("off-topic",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"off_topic"===this.reason(),value:"off_topic",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_text"),"off_topic"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),70),t.add("inappropriate",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"inappropriate"===this.reason(),value:"inappropriate",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_text",{a:a?m("a",{href:a,target:"_blank"}):void 0}),"inappropriate"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),60),t.add("spam",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"spam"===this.reason(),value:"spam",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_spam_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_spam_text"),"spam"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),50),t.add("other",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"other"===this.reason(),value:"other",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_other_label")),"other"===this.reason()&&m("textarea",{className:"FormControl",value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),10),t}onsubmit(t){t.preventDefault(),this.loading=!0,s().store.createRecord("flags").save({reason:"other"===this.reason()?null:this.reason(),reasonDetail:this.reasonDetail(),relationships:{post:this.attrs.post}},{errorHandler:this.onerror.bind(this)}).then((()=>this.success=!0)).catch((()=>{})).then(this.loaded.bind(this))}}flarum.reg.add("flarum-flags","forum/components/FlagPostModal",P);const w=flarum.reg.get("core","forum/components/HeaderSecondary");var k=t.n(w);const D=flarum.reg.get("core","forum/components/HeaderDropdown");var S=t.n(D);const C=flarum.reg.get("core","common/utils/classList");var A=t.n(C);const L=flarum.reg.get("core","common/Component");var M=t.n(L);const B=flarum.reg.get("core","common/components/Avatar");var O=t.n(B);const j=flarum.reg.get("core","common/helpers/username");var T=t.n(j);const H=flarum.reg.get("core","forum/components/HeaderList");var I=t.n(H);const R=flarum.reg.get("core","forum/components/HeaderListItem");var E=t.n(R);class U extends(M()){oninit(t){super.oninit(t)}view(){const t=this.attrs.state;return m(I(),{className:"FlagList",title:s().translator.trans("flarum-flags.forum.flagged_posts.title"),hasItems:t.hasItems(),loading:t.isLoading(),emptyText:s().translator.trans("flarum-flags.forum.flagged_posts.empty_text"),loadMore:()=>t.hasNext()&&!t.isLoadingNext()&&t.loadNext()},m("ul",{className:"HeaderListGroup-content"},this.content(t)))}content(t){return!t.isLoading()&&t.hasItems()?t.getPages().map((t=>t.items.map((t=>{const a=t.post();return m("li",null,m(E(),{className:"Flag",avatar:m(O(),{user:a.user()||null}),icon:"fas fa-flag",content:s().translator.trans("flarum-flags.forum.flagged_posts.item_text",{username:T()(a.user()),em:m("em",null),discussion:a.discussion().title()}),excerpt:a.contentPlain(),datetime:t.createdAt(),href:s().route.post(a),onclick:t=>{t.redraw=!1}}))})))):null}}flarum.reg.add("flarum-flags","forum/components/FlagList",U);class G extends(S()){static initAttrs(t){t.className=A()("FlagsDropdown",t.className),t.label=t.label||s().translator.trans("flarum-flags.forum.flagged_posts.tooltip"),t.icon=t.icon||"fas fa-flag",super.initAttrs(t)}getContent(){return m(U,{state:this.attrs.state})}goToRoute(){m.route.set(s().route("flags"))}getUnreadCount(){return s().forum.attribute("flagCount")}getNewCount(){return s().session.user.attribute("newFlagCount")}}flarum.reg.add("flarum-flags","forum/components/FlagsDropdown",G);const q=flarum.reg.get("core","forum/components/Post");var z=t.n(q);const V=flarum.reg.get("core","common/utils/humanTime");var J=t.n(V);const K=flarum.reg.get("core","common/extenders");var Q=t.n(K);const W=flarum.reg.get("core","common/models/Post");var X=t.n(W);const Y=flarum.reg.get("core","common/components/Page");var Z=t.n(Y);class $ extends(Z()){oninit(t){super.oninit(t),s().history.push("flags"),s().flags.load(),this.bodyClass="App--flags"}view(){return m("div",{className:"FlagsPage"},m(U,{state:s().flags}))}}flarum.reg.add("flarum-flags","forum/components/FlagsPage",$);const tt=flarum.reg.get("core","common/Model");var at=t.n(tt);class et extends(at()){type(){return at().attribute("type").call(this)}reason(){return at().attribute("reason").call(this)}reasonDetail(){return at().attribute("reasonDetail").call(this)}createdAt(){return at().attribute("createdAt",at().transformDate).call(this)}post(){return at().hasOne("post").call(this)}user(){return at().hasOne("user").call(this)}}flarum.reg.add("flarum-flags","forum/models/Flag",et);const st=[(new(Q().Routes)).add("flags","/flags",$),(new(Q().Store)).add("flags",et),new(Q().Model)(X()).hasMany("flags").attribute("canFlag")];s().initializers.add("flarum-flags",(()=>{s().flags=new l(s()),(0,i.extend)(c(),"userControls",(function(t,a){!a.isHidden()&&"comment"===a.contentType()&&a.canFlag()&&t.add("flag",m(g(),{icon:"fas fa-flag",onclick:()=>s().modal.show(P,{post:a})},s().translator.trans("flarum-flags.forum.post_controls.flag_button")))})),(0,i.extend)(k().prototype,"items",(function(t){s().forum.attribute("canViewFlags")&&t.add("flags",m(G,{state:s().flags}),15)})),(0,i.extend)(z().prototype,"elementAttrs",(function(t){this.attrs.post.flags().length&&(t.className+=" Post--flagged")})),z().prototype.dismissFlag=function(t){const a=this.attrs.post;return delete a.data.relationships.flags,this.subtree.invalidate(),s().flags.cache&&s().flags.cache.some(((t,e)=>{if(t.post()===a){if(s().flags.cache.splice(e,1),s().flags.index===a){let t=s().flags.cache[e];if(t||(t=s().flags.cache[0]),t){const a=t.post();s().flags.index=a,m.route.set(s().route.post(a))}}return!0}})),s().request({url:s().forum.attribute("apiUrl")+a.apiEndpoint()+"/flags",method:"DELETE",body:t})},z().prototype.flagActionItems=function(){const t=new(F()),a=c().destructiveControls(this.attrs.post);return Object.keys(a.toObject()).forEach((t=>{const e=a.get(t).attrs;e.className="Button",(0,i.extend)(e,"onclick",(()=>this.dismissFlag()))})),t.add("controls",m("div",{className:"ButtonGroup"},a.toArray())),t.add("dismiss",m(g(),{className:"Button",icon:"far fa-eye-slash",onclick:this.dismissFlag.bind(this)},s().translator.trans("flarum-flags.forum.post.dismiss_flag_button")),-100),t},(0,i.override)(z().prototype,"header",(function(t){const a=this.attrs.post,e=a.flags();if(e.length)return a.isHidden()&&(this.revealContent=!0),m("div",{className:"Post-flagged"},m("div",{className:"Post-flagged-flags"},e.map((t=>m("div",{className:"Post-flagged-flag"},this.flagReason(t))))),m("div",{className:"Post-flagged-actions"},this.flagActionItems().toArray()))})),z().prototype.flagReason=function(t){if("user"===t.type()){const a=t.user(),e=t.reason()?s().translator.trans("flarum-flags.forum.flag_post.reason_".concat(t.reason(),"_label")):null,r=t.reasonDetail(),o=J()(t.createdAt());return[s().translator.trans(e?"flarum-flags.forum.post.flagged_by_with_reason_text":"flarum-flags.forum.post.flagged_by_text",{time:o,user:a,reason:e}),!!r&&m("span",{className:"Post-flagged-detail"},r)]}}}))})(),module.exports=a})(); +(()=>{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var s in e)t.o(e,s)&&!t.o(a,s)&&Object.defineProperty(a,s,{enumerable:!0,get:e[s]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{extend:()=>st});const e=flarum.reg.get("core","forum/app");var s=t.n(e);function r(t){return r="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},r(t)}const o=flarum.reg.get("core","common/states/PaginatedListState");var n=t.n(o);class l extends(n()){constructor(t){var a,e,s;super({},1,null),a=this,s=void 0,(e=function(t){var a=function(t,a){if("object"!==r(t)||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,a);if("object"!==r(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(a)?a:String(a)}(e="app"))in a?Object.defineProperty(a,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):a[e]=s,this.app=t}get type(){return"flags"}load(){var t;return null!=(t=this.app.session.user)&&t.attribute("newFlagCount")&&(this.pages=[],this.location={page:1}),this.pages.length>0?Promise.resolve():super.loadNext()}}flarum.reg.add("flarum-flags","forum/states/FlagListState",l);const i=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/utils/PostControls");var c=t.n(u);const f=flarum.reg.get("core","common/components/Button");var g=t.n(f);const d=flarum.reg.get("core","common/components/FormModal");var p=t.n(d);const h=flarum.reg.get("core","common/components/Form");var v=t.n(h);const b=flarum.reg.get("core","common/utils/Stream");var _=t.n(b);const y=flarum.reg.get("core","common/utils/withAttr");var N=t.n(y);const x=flarum.reg.get("core","common/utils/ItemList");var F=t.n(x);class P extends(p()){oninit(t){super.oninit(t),this.success=!1,this.reason=_()(""),this.reasonDetail=_()("")}className(){return"FlagPostModal Modal--medium"}title(){return s().translator.trans("flarum-flags.forum.flag_post.title")}content(){return this.success?m("div",{className:"Modal-body"},m(v(),{className:"Form--centered"},m("p",{className:"helpText"},s().translator.trans("flarum-flags.forum.flag_post.confirmation_message")),m("div",{className:"Form-group Form-controls"},m(g(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},s().translator.trans("flarum-flags.forum.flag_post.dismiss_button"))))):m("div",{className:"Modal-body"},m(v(),{className:"Form--centered"},m("div",{className:"Form-group"},m("div",null,this.flagReasons().toArray())),m("div",{className:"Form-group Form-controls"},m(g(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading,disabled:!this.reason()},s().translator.trans("flarum-flags.forum.flag_post.submit_button")))))}flagReasons(){const t=new(F()),a=s().forum.attribute("guidelinesUrl");return t.add("off-topic",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"off_topic"===this.reason(),value:"off_topic",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_text"),"off_topic"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),70),t.add("inappropriate",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"inappropriate"===this.reason(),value:"inappropriate",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_text",{a:a?m("a",{href:a,target:"_blank"}):void 0}),"inappropriate"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),60),t.add("spam",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"spam"===this.reason(),value:"spam",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_spam_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_spam_text"),"spam"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),50),t.add("other",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"other"===this.reason(),value:"other",onclick:N()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_other_label")),"other"===this.reason()&&m("textarea",{className:"FormControl",value:this.reasonDetail(),oninput:N()("value",this.reasonDetail)})),10),t}onsubmit(t){t.preventDefault(),this.loading=!0,s().store.createRecord("flags").save({reason:"other"===this.reason()?null:this.reason(),reasonDetail:this.reasonDetail(),relationships:{post:this.attrs.post}},{errorHandler:this.onerror.bind(this)}).then((()=>this.success=!0)).catch((()=>{})).then(this.loaded.bind(this))}}flarum.reg.add("flarum-flags","forum/components/FlagPostModal",P);const w=flarum.reg.get("core","forum/components/HeaderSecondary");var k=t.n(w);const D=flarum.reg.get("core","forum/components/HeaderDropdown");var S=t.n(D);const C=flarum.reg.get("core","common/utils/classList");var A=t.n(C);const L=flarum.reg.get("core","common/Component");var M=t.n(L);const B=flarum.reg.get("core","common/components/Avatar");var O=t.n(B);const j=flarum.reg.get("core","common/helpers/username");var I=t.n(j);const T=flarum.reg.get("core","forum/components/HeaderList");var H=t.n(T);const R=flarum.reg.get("core","forum/components/HeaderListItem");var E=t.n(R);class U extends(M()){oninit(t){super.oninit(t)}view(){const t=this.attrs.state;return m(H(),{className:"FlagList",title:s().translator.trans("flarum-flags.forum.flagged_posts.title"),controls:this.controlItems(),hasItems:t.hasItems(),loading:t.isLoading(),emptyText:s().translator.trans("flarum-flags.forum.flagged_posts.empty_text"),loadMore:()=>t.hasNext()&&!t.isLoadingNext()&&t.loadNext()},m("ul",{className:"HeaderListGroup-content"},this.content(t)))}controlItems(){return new(F())}content(t){return!t.isLoading()&&t.hasItems()?t.getPages().map((t=>t.items.map((t=>{const a=t.post();return m("li",null,m(E(),{className:"Flag",avatar:m(O(),{user:a.user()||null}),icon:"fas fa-flag",content:s().translator.trans("flarum-flags.forum.flagged_posts.item_text",{username:I()(a.user()),em:m("em",null),discussion:a.discussion().title()}),excerpt:a.contentPlain(),datetime:t.createdAt(),href:s().route.post(a),onclick:t=>{t.redraw=!1}}))})))):null}}flarum.reg.add("flarum-flags","forum/components/FlagList",U);class G extends(S()){static initAttrs(t){t.className=A()("FlagsDropdown",t.className),t.label=t.label||s().translator.trans("flarum-flags.forum.flagged_posts.tooltip"),t.icon=t.icon||"fas fa-flag",super.initAttrs(t)}getContent(){return m(U,{state:this.attrs.state})}goToRoute(){m.route.set(s().route("flags"))}getUnreadCount(){return s().forum.attribute("flagCount")}getNewCount(){return s().session.user.attribute("newFlagCount")}}flarum.reg.add("flarum-flags","forum/components/FlagsDropdown",G);const q=flarum.reg.get("core","forum/components/Post");var z=t.n(q);const V=flarum.reg.get("core","common/utils/humanTime");var J=t.n(V);const K=flarum.reg.get("core","common/extenders");var Q=t.n(K);const W=flarum.reg.get("core","common/models/Post");var X=t.n(W);const Y=flarum.reg.get("core","common/components/Page");var Z=t.n(Y);class $ extends(Z()){oninit(t){super.oninit(t),s().history.push("flags"),s().flags.load(),this.bodyClass="App--flags"}view(){return m("div",{className:"FlagsPage"},m(U,{state:s().flags}))}}flarum.reg.add("flarum-flags","forum/components/FlagsPage",$);const tt=flarum.reg.get("core","common/Model");var at=t.n(tt);class et extends(at()){type(){return at().attribute("type").call(this)}reason(){return at().attribute("reason").call(this)}reasonDetail(){return at().attribute("reasonDetail").call(this)}createdAt(){return at().attribute("createdAt",at().transformDate).call(this)}post(){return at().hasOne("post").call(this)}user(){return at().hasOne("user").call(this)}}flarum.reg.add("flarum-flags","forum/models/Flag",et);const st=[(new(Q().Routes)).add("flags","/flags",$),(new(Q().Store)).add("flags",et),new(Q().Model)(X()).hasMany("flags").attribute("canFlag")];s().initializers.add("flarum-flags",(()=>{s().flags=new l(s()),(0,i.extend)(c(),"userControls",(function(t,a){!a.isHidden()&&"comment"===a.contentType()&&a.canFlag()&&t.add("flag",m(g(),{icon:"fas fa-flag",onclick:()=>s().modal.show(P,{post:a})},s().translator.trans("flarum-flags.forum.post_controls.flag_button")))})),(0,i.extend)(k().prototype,"items",(function(t){s().forum.attribute("canViewFlags")&&t.add("flags",m(G,{state:s().flags}),15)})),(0,i.extend)(z().prototype,"elementAttrs",(function(t){this.attrs.post.flags().length&&(t.className+=" Post--flagged")})),z().prototype.dismissFlag=function(t){const a=this.attrs.post;return delete a.data.relationships.flags,this.subtree.invalidate(),s().flags.cache&&s().flags.cache.some(((t,e)=>{if(t.post()===a){if(s().flags.cache.splice(e,1),s().flags.index===a){let t=s().flags.cache[e];if(t||(t=s().flags.cache[0]),t){const a=t.post();s().flags.index=a,m.route.set(s().route.post(a))}}return!0}})),s().request({url:s().forum.attribute("apiUrl")+a.apiEndpoint()+"/flags",method:"DELETE",body:t})},z().prototype.flagActionItems=function(){const t=new(F()),a=c().destructiveControls(this.attrs.post);return Object.keys(a.toObject()).forEach((t=>{const e=a.get(t).attrs;e.className="Button",(0,i.extend)(e,"onclick",(()=>this.dismissFlag()))})),t.add("controls",m("div",{className:"ButtonGroup"},a.toArray())),t.add("dismiss",m(g(),{className:"Button",icon:"far fa-eye-slash",onclick:this.dismissFlag.bind(this)},s().translator.trans("flarum-flags.forum.post.dismiss_flag_button")),-100),t},(0,i.override)(z().prototype,"header",(function(t){const a=this.attrs.post,e=a.flags();if(e.length)return a.isHidden()&&(this.revealContent=!0),m("div",{className:"Post-flagged"},m("div",{className:"Post-flagged-flags"},e.map((t=>m("div",{className:"Post-flagged-flag"},this.flagReason(t))))),m("div",{className:"Post-flagged-actions"},this.flagActionItems().toArray()))})),z().prototype.flagReason=function(t){if("user"===t.type()){const a=t.user(),e=t.reason()?s().translator.trans("flarum-flags.forum.flag_post.reason_".concat(t.reason(),"_label")):null,r=t.reasonDetail(),o=J()(t.createdAt());return[s().translator.trans(e?"flarum-flags.forum.post.flagged_by_with_reason_text":"flarum-flags.forum.post.flagged_by_text",{time:o,user:a,reason:e}),!!r&&m("span",{className:"Post-flagged-detail"},r)]}}}))})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/flags/js/dist/forum.js.map b/extensions/flags/js/dist/forum.js.map index 0138391fc..062f6fa6f 100644 --- a/extensions/flags/js/dist/forum.js.map +++ b/extensions/flags/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,sDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA7C,SAASW,EAAQV,GAG9B,OAAOU,EAAU,mBAAqBL,QAAU,iBAAmBA,OAAOM,SAAW,SAAUX,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBK,QAAUL,EAAIY,cAAgBP,QAAUL,IAAQK,OAAOH,UAAY,gBAAkBF,CAC1H,EAAGU,EAAQV,EACb,CCRA,MAAM,EAA+BQ,OAAOC,IAAIV,IAAI,OAAQ,oC,aCE7C,MAAMc,UAAsB,KACzCD,YAAYE,GCFC,IAAyBd,EAAKN,EAAKa,EDG9CQ,MAAM,CAAC,EAAG,EAAG,MCHuBf,EDIpBgB,KCJ8BT,ODIjB,GCH/Bb,ECAa,SAAwBuB,GACrC,IAAIvB,ECFS,SAAsBwB,EAAOC,GAC1C,GAAuB,WAAnBT,EAAQQ,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMb,OAAOgB,aACxB,QAAaC,IAATF,EAAoB,CACtB,IAAIG,EAAMH,EAAKhB,KAAKc,EAAOC,GAC3B,GAAqB,WAAjBT,EAAQa,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BC,OAAiBP,EAC/C,CDPYG,CAAYJ,EAAK,UAC3B,MAAwB,WAAjBP,EAAQhB,GAAoBA,EAAM+B,OAAO/B,EAClD,CDHQgC,CADqChC,EDInB,UCFbM,EACTJ,OAAOC,eAAeG,EAAKN,EAAK,CAC9Ba,MAAOA,EACPT,YAAY,EACZ6B,cAAc,EACdC,UAAU,IAGZ5B,EAAIN,GAAOa,EDLXS,KAAKF,IAAMA,CACb,CACIe,WACF,MAAO,OACT,CAMAC,OACE,IAAIC,EAOJ,OANuD,OAAlDA,EAAwBf,KAAKF,IAAIkB,QAAQC,OAAiBF,EAAsBG,UAAU,kBAC7FlB,KAAKmB,MAAQ,GACbnB,KAAKoB,SAAW,CACdC,KAAM,IAGNrB,KAAKmB,MAAMG,OAAS,EACfC,QAAQC,UAEVzB,MAAM0B,UACf,EAEFjC,OAAOC,IAAIiC,IAAI,eAAgB,6BAA8B7B,GI9B7D,MAAM,EAA+BL,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,uB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCO7C,MAAM4C,UAAsB,KACzCC,OAAOC,GACL9B,MAAM6B,OAAOC,GACb7B,KAAK8B,SAAU,EACf9B,KAAK+B,OAAS,IAAO,IACrB/B,KAAKgC,aAAe,IAAO,GAC7B,CACAC,YACE,MAAO,6BACT,CACAC,QACE,OAAO,qBAAqB,qCAC9B,CACAC,UACE,OAAInC,KAAK8B,QACAM,EAAE,MAAO,CACdH,UAAW,cACVG,EAAE,IAAM,CACTH,UAAW,kBACVG,EAAE,IAAK,CACRH,UAAW,YACV,qBAAqB,sDAAuDG,EAAE,MAAO,CACtFH,UAAW,4BACVG,EAAE,IAAQ,CACXH,UAAW,uCACXI,QAASrC,KAAKsC,KAAKC,KAAKvC,OACvB,qBAAqB,mDAEnBoC,EAAE,MAAO,CACdH,UAAW,cACVG,EAAE,IAAM,CACTH,UAAW,kBACVG,EAAE,MAAO,CACVH,UAAW,cACVG,EAAE,MAAO,KAAMpC,KAAKwC,cAAcC,YAAaL,EAAE,MAAO,CACzDH,UAAW,4BACVG,EAAE,IAAQ,CACXH,UAAW,uCACXpB,KAAM,SACN6B,QAAS1C,KAAK0C,QACdC,UAAW3C,KAAK+B,UACf,qBAAqB,iDAC1B,CACAS,cACE,MAAMI,EAAQ,IAAI,KACZC,EAAgB,oBAAoB,iBA6D1C,OA5DAD,EAAMlB,IAAI,YAAaU,EAAE,QAAS,CAChCH,UAAW,YACVG,EAAE,QAAS,CACZvB,KAAM,QACNiC,KAAM,SACNC,QAA2B,cAAlB/C,KAAK+B,SACdxC,MAAO,YACP8C,QAAS,IAAS,QAASrC,KAAK+B,UAC9BK,EAAE,SAAU,KAAM,qBAAqB,wDAAyD,qBAAqB,sDAAyE,cAAlBpC,KAAK+B,UAA4BK,EAAE,WAAY,CAC7NH,UAAW,cACXe,YAAa,qBAAqB,2DAClCzD,MAAOS,KAAKgC,eACZiB,QAAS,IAAS,QAASjD,KAAKgC,iBAC7B,IACLY,EAAMlB,IAAI,gBAAiBU,EAAE,QAAS,CACpCH,UAAW,YACVG,EAAE,QAAS,CACZvB,KAAM,QACNiC,KAAM,SACNC,QAA2B,kBAAlB/C,KAAK+B,SACdxC,MAAO,gBACP8C,QAAS,IAAS,QAASrC,KAAK+B,UAC9BK,EAAE,SAAU,KAAM,qBAAqB,4DAA6D,qBAAqB,yDAA0D,CACrL7D,EAAGsE,EAAgBT,EAAE,IAAK,CACxBc,KAAML,EACNM,OAAQ,gBACL7C,IACe,kBAAlBN,KAAK+B,UAAgCK,EAAE,WAAY,CACrDH,UAAW,cACXe,YAAa,qBAAqB,2DAClCzD,MAAOS,KAAKgC,eACZiB,QAAS,IAAS,QAASjD,KAAKgC,iBAC7B,IACLY,EAAMlB,IAAI,OAAQU,EAAE,QAAS,CAC3BH,UAAW,YACVG,EAAE,QAAS,CACZvB,KAAM,QACNiC,KAAM,SACNC,QAA2B,SAAlB/C,KAAK+B,SACdxC,MAAO,OACP8C,QAAS,IAAS,QAASrC,KAAK+B,UAC9BK,EAAE,SAAU,KAAM,qBAAqB,mDAAoD,qBAAqB,iDAAoE,SAAlBpC,KAAK+B,UAAuBK,EAAE,WAAY,CAC9MH,UAAW,cACXe,YAAa,qBAAqB,2DAClCzD,MAAOS,KAAKgC,eACZiB,QAAS,IAAS,QAASjD,KAAKgC,iBAC7B,IACLY,EAAMlB,IAAI,QAASU,EAAE,QAAS,CAC5BH,UAAW,YACVG,EAAE,QAAS,CACZvB,KAAM,QACNiC,KAAM,SACNC,QAA2B,UAAlB/C,KAAK+B,SACdxC,MAAO,QACP8C,QAAS,IAAS,QAASrC,KAAK+B,UAC9BK,EAAE,SAAU,KAAM,qBAAqB,oDAAuE,UAAlBpC,KAAK+B,UAAwBK,EAAE,WAAY,CACzIH,UAAW,cACX1C,MAAOS,KAAKgC,eACZiB,QAAS,IAAS,QAASjD,KAAKgC,iBAC7B,IACEY,CACT,CACAQ,SAASC,GACPA,EAAEC,iBACFtD,KAAK0C,SAAU,EACf,uBAAuB,SAASa,KAAK,CACnCxB,OAA0B,UAAlB/B,KAAK+B,SAAuB,KAAO/B,KAAK+B,SAChDC,aAAchC,KAAKgC,eACnBwB,cAAe,CACbC,KAAMzD,KAAK0D,MAAMD,OAElB,CACDE,aAAc3D,KAAK4D,QAAQrB,KAAKvC,QAC/B6D,MAAK,IAAM7D,KAAK8B,SAAU,IAAMgC,OAAM,SAAUD,KAAK7D,KAAK+D,OAAOxB,KAAKvC,MAC3E,EAEFR,OAAOC,IAAIiC,IAAI,eAAgB,iCAAkCC,GCjIjE,MAAM,EAA+BnC,OAAOC,IAAIV,IAAI,OAAQ,oC,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,mC,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,2B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,mC,aCM7C,MAAMiF,UAAiB,KACpCpC,OAAOC,GACL9B,MAAM6B,OAAOC,EACf,CACAoC,OACE,MAAMC,EAAQlE,KAAK0D,MAAMQ,MACzB,OAAO9B,EAAE,IAAY,CACnBH,UAAW,WACXC,MAAO,qBAAqB,0CAC5BiC,SAAUD,EAAMC,WAChBzB,QAASwB,EAAME,YACfC,UAAW,qBAAqB,+CAChCC,SAAU,IAAMJ,EAAMK,YAAcL,EAAMM,iBAAmBN,EAAMzC,YAClEW,EAAE,KAAM,CACTH,UAAW,2BACVjC,KAAKmC,QAAQ+B,IAClB,CACA/B,QAAQ+B,GACN,OAAKA,EAAME,aAAeF,EAAMC,WACvBD,EAAMO,WAAWC,KAAIrD,GACnBA,EAAKuB,MAAM8B,KAAIC,IACpB,MAAMlB,EAAOkB,EAAKlB,OAClB,OAAOrB,EAAE,KAAM,KAAMA,EAAE,IAAgB,CACrCH,UAAW,OACX2C,OAAQxC,EAAE,IAAQ,CAChBnB,KAAMwC,EAAKxC,QAAU,OAEvB4D,KAAM,cACN1C,QAAS,qBAAqB,6CAA8C,CAC1E2C,SAAU,IAASrB,EAAKxC,QACxB8D,GAAI3C,EAAE,KAAM,MACZ4C,WAAYvB,EAAKuB,aAAa9C,UAEhC+C,QAASxB,EAAKyB,eACdC,SAAUR,EAAKS,YACflC,KAAM,eAAeO,GACrBpB,QAASgB,IACPA,EAAEgC,QAAS,CAAK,IAEjB,MAIF,IACT,EAEF7F,OAAOC,IAAIiC,IAAI,eAAgB,4BAA6BsC,GChD7C,MAAMsB,UAAsB,KACzCC,iBAAiB7B,GACfA,EAAMzB,UAAY,IAAU,gBAAiByB,EAAMzB,WACnDyB,EAAM8B,MAAQ9B,EAAM8B,OAAS,qBAAqB,4CAClD9B,EAAMmB,KAAOnB,EAAMmB,MAAQ,cAC3B9E,MAAM0F,UAAU/B,EAClB,CACAgC,aACE,OAAOtD,EAAE4B,EAAU,CACjBE,MAAOlE,KAAK0D,MAAMQ,OAEtB,CACAyB,YACEvD,EAAEwD,MAAMC,IAAI,UAAU,SACxB,CACAC,iBACE,OAAO,oBAAoB,YAC7B,CACAC,cACE,OAAO,2BAA2B,eACpC,EAEFvG,OAAOC,IAAIiC,IAAI,eAAgB,iCAAkC4D,GC1BjE,MAAM,EAA+B9F,OAAOC,IAAIV,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,sB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCQ7C,MAAMiH,UAAkB,KACrCpE,OAAOC,GACL9B,MAAM6B,OAAOC,GACb,iBAAiB,SACjB,iBACA7B,KAAKiG,UAAY,YACnB,CACAhC,OACE,OAAO7B,EAAE,MAAO,CACdH,UAAW,aACVG,EAAE4B,EAAU,CACbE,MAAO,YAEX,EAEF1E,OAAOC,IAAIiC,IAAI,eAAgB,6BAA8BsE,GCvB7D,MAAM,GAA+BxG,OAAOC,IAAIV,IAAI,OAAQ,gB,eCC7C,MAAMmH,WAAa,MAChCrF,OACE,OAAO,eAAgB,QAAQzB,KAAKY,KACtC,CACA+B,SACE,OAAO,eAAgB,UAAU3C,KAAKY,KACxC,CACAgC,eACE,OAAO,eAAgB,gBAAgB5C,KAAKY,KAC9C,CACAoF,YACE,OAAO,eAAgB,YAAa,oBAAqBhG,KAAKY,KAChE,CACAyD,OACE,OAAO,YAAa,QAAQrE,KAAKY,KACnC,CACAiB,OACE,OAAO,YAAa,QAAQ7B,KAAKY,KACnC,EAEFR,OAAOC,IAAIiC,IAAI,eAAgB,oBAAqBwE,ICjBpD,WAAgB,IAAI,aACnBxE,IAAI,QAAS,SAAUsE,IAAY,IAAI,YACvCtE,IAAI,QAASwE,IAAO,IAAI,WAAa,KACrCC,QAAQ,SAASjF,UAAU,YCD5B,qBAAqB,gBAAgB,KACnC,UAAY,IAAIrB,EAAc,MCD9B,IAAAuG,QAAO,IAAc,gBAAgB,SAAUxD,EAAOa,IAChDA,EAAK4C,YAAqC,YAAvB5C,EAAK6C,eAAgC7C,EAAK8C,WACjE3D,EAAMlB,IAAI,OAAQU,EAAE,IAAQ,CAC1ByC,KAAM,cACNxC,QAAS,IAAM,eAAeV,EAAe,CAC3C8B,UAED,qBAAqB,iDAC1B,KCTA,IAAA2C,QAAO,cAA2B,SAAS,SAAUxD,GAC/C,oBAAoB,iBACtBA,EAAMlB,IAAI,QAASU,EAAEkD,EAAe,CAClCpB,MAAO,YACL,GAER,KCHA,IAAAkC,QAAO,cAAgB,gBAAgB,SAAU1C,GAC3C1D,KAAK0D,MAAMD,KAAK+C,QAAQlF,SAC1BoC,EAAMzB,WAAa,iBAEvB,IACA,0BAA6B,SAAUwE,GACrC,MAAMhD,EAAOzD,KAAK0D,MAAMD,KAoBxB,cAnBOA,EAAKiD,KAAKlD,cAAcgD,MAC/BxG,KAAK2G,QAAQC,aACT,iBACF,sBAAqB,CAACjC,EAAMkC,KAC1B,GAAIlC,EAAKlB,SAAWA,EAAM,CAExB,GADA,uBAAuBoD,EAAG,GACtB,kBAAoBpD,EAAM,CAC5B,IAAIqD,EAAO,gBAAgBD,GAE3B,GADKC,IAAMA,EAAO,oBACdA,EAAM,CACR,MAAMC,EAAWD,EAAKrD,OACtB,gBAAkBsD,EAClB3E,EAAEwD,MAAMC,IAAI,eAAekB,GAC7B,CACF,CACA,OAAO,CACT,KAGG,YAAY,CACjBC,IAAK,oBAAoB,UAAYvD,EAAKwD,cAAgB,SAC1DC,OAAQ,SACRT,QAEJ,EACA,8BAAiC,WAC/B,MAAM7D,EAAQ,IAAI,KACZuE,EAAW,wBAAiCnH,KAAK0D,MAAMD,MAc7D,OAbA7E,OAAOwI,KAAKD,EAASE,YAAYC,SAAQC,IACvC,MAAM7D,EAAQyD,EAASpI,IAAIwI,GAAG7D,MAC9BA,EAAMzB,UAAY,UAClB,IAAAmE,QAAO1C,EAAO,WAAW,IAAM1D,KAAKwH,eAAc,IAEpD5E,EAAMlB,IAAI,WAAYU,EAAE,MAAO,CAC7BH,UAAW,eACVkF,EAAS1E,YACZG,EAAMlB,IAAI,UAAWU,EAAE,IAAQ,CAC7BH,UAAW,SACX4C,KAAM,mBACNxC,QAASrC,KAAKwH,YAAYjF,KAAKvC,OAC9B,qBAAqB,iDAAkD,KACnE4C,CACT,GACA,IAAA6E,UAAS,cAAgB,UAAU,SAAUC,GAC3C,MAAMjE,EAAOzD,KAAK0D,MAAMD,KAClB+C,EAAQ/C,EAAK+C,QACnB,GAAKA,EAAMlF,OAEX,OADImC,EAAK4C,aAAYrG,KAAK2H,eAAgB,GACnCvF,EAAE,MAAO,CACdH,UAAW,gBACVG,EAAE,MAAO,CACVH,UAAW,sBACVuE,EAAM9B,KAAIC,GAAQvC,EAAE,MAAO,CAC5BH,UAAW,qBACVjC,KAAK4H,WAAWjD,OAAUvC,EAAE,MAAO,CACpCH,UAAW,wBACVjC,KAAK6H,kBAAkBpF,WAC5B,IACA,yBAA4B,SAAUkC,GACpC,GAAoB,SAAhBA,EAAK9D,OAAmB,CAC1B,MAAMI,EAAO0D,EAAK1D,OACZc,EAAS4C,EAAK5C,SAAW,qBAAqB,uCAAuC+F,OAAOnD,EAAK5C,SAAU,WAAa,KACxHgG,EAASpD,EAAK3C,eACdgG,EAAO,IAAUrD,EAAKS,aAC5B,MAAO,CAAC,qBAAqBrD,EAAS,sDAAwD,0CAA2C,CACvIiG,OACA/G,OACAc,aACIgG,GAAU3F,EAAE,OAAQ,CACxBH,UAAW,uBACV8F,GACL,CACF,CH7EiB,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/states/PaginatedListState')\"","webpack://@flarum/flags/./src/forum/states/FlagListState.tsx","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/utils/PostControls')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/flags/./src/forum/components/FlagPostModal.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderSecondary')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderDropdown')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderListItem')\"","webpack://@flarum/flags/./src/forum/components/FlagList.tsx","webpack://@flarum/flags/./src/forum/components/FlagsDropdown.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/humanTime')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/flags/./src/forum/components/FlagsPage.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/flags/./src/forum/models/Flag.ts","webpack://@flarum/flags/./src/forum/extend.ts","webpack://@flarum/flags/./src/forum/index.ts","webpack://@flarum/flags/./src/forum/addFlagControl.js","webpack://@flarum/flags/./src/forum/addFlagsDropdown.js","webpack://@flarum/flags/./src/forum/addFlagsToPosts.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.reg.get('core', 'forum/app');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _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 }, _typeof(obj);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/states/PaginatedListState');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class FlagListState extends PaginatedListState {\n constructor(app) {\n super({}, 1, null);\n _defineProperty(this, \"app\", void 0);\n this.app = app;\n }\n get type() {\n return 'flags';\n }\n\n /**\n * Load flags into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n var _this$app$session$use;\n if ((_this$app$session$use = this.app.session.user) != null && _this$app$session$use.attribute('newFlagCount')) {\n this.pages = [];\n this.location = {\n page: 1\n };\n }\n if (this.pages.length > 0) {\n return Promise.resolve();\n }\n return super.loadNext();\n }\n}\nflarum.reg.add('flarum-flags', 'forum/states/FlagListState', FlagListState);","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/PostControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import app from 'flarum/forum/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Form from 'flarum/common/components/Form';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class FlagPostModal extends FormModal {\n oninit(vnode) {\n super.oninit(vnode);\n this.success = false;\n this.reason = Stream('');\n this.reasonDetail = Stream('');\n }\n className() {\n return 'FlagPostModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-flags.forum.flag_post.title');\n }\n content() {\n if (this.success) {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-flags.forum.flag_post.confirmation_message')), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-flags.forum.flag_post.dismiss_button')))));\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, this.flagReasons().toArray())), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading,\n disabled: !this.reason()\n }, app.translator.trans('flarum-flags.forum.flag_post.submit_button')))));\n }\n flagReasons() {\n const items = new ItemList();\n const guidelinesUrl = app.forum.attribute('guidelinesUrl');\n items.add('off-topic', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'off_topic',\n value: \"off_topic\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text'), this.reason() === 'off_topic' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 70);\n items.add('inappropriate', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'inappropriate',\n value: \"inappropriate\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {\n a: guidelinesUrl ? m(\"a\", {\n href: guidelinesUrl,\n target: \"_blank\"\n }) : undefined\n }), this.reason() === 'inappropriate' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 60);\n items.add('spam', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'spam',\n value: \"spam\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text'), this.reason() === 'spam' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 50);\n items.add('other', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'other',\n value: \"other\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_other_label')), this.reason() === 'other' && m(\"textarea\", {\n className: \"FormControl\",\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 10);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n app.store.createRecord('flags').save({\n reason: this.reason() === 'other' ? null : this.reason(),\n reasonDetail: this.reasonDetail(),\n relationships: {\n post: this.attrs.post\n }\n }, {\n errorHandler: this.onerror.bind(this)\n }).then(() => this.success = true).catch(() => {}).then(this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagPostModal', FlagPostModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderSecondary');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderListItem');","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport HeaderList from 'flarum/forum/components/HeaderList';\nimport HeaderListItem from 'flarum/forum/components/HeaderListItem';\nexport default class FlagList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n const state = this.attrs.state;\n return m(HeaderList, {\n className: \"FlagList\",\n title: app.translator.trans('flarum-flags.forum.flagged_posts.title'),\n hasItems: state.hasItems(),\n loading: state.isLoading(),\n emptyText: app.translator.trans('flarum-flags.forum.flagged_posts.empty_text'),\n loadMore: () => state.hasNext() && !state.isLoadingNext() && state.loadNext()\n }, m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, this.content(state)));\n }\n content(state) {\n if (!state.isLoading() && state.hasItems()) {\n return state.getPages().map(page => {\n return page.items.map(flag => {\n const post = flag.post();\n return m(\"li\", null, m(HeaderListItem, {\n className: \"Flag\",\n avatar: m(Avatar, {\n user: post.user() || null\n }),\n icon: \"fas fa-flag\",\n content: app.translator.trans('flarum-flags.forum.flagged_posts.item_text', {\n username: username(post.user()),\n em: m(\"em\", null),\n discussion: post.discussion().title()\n }),\n excerpt: post.contentPlain(),\n datetime: flag.createdAt(),\n href: app.route.post(post),\n onclick: e => {\n e.redraw = false;\n }\n }));\n });\n });\n }\n return null;\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagList', FlagList);","import app from 'flarum/forum/app';\nimport HeaderDropdown from 'flarum/forum/components/HeaderDropdown';\nimport classList from 'flarum/common/utils/classList';\nimport FlagList from './FlagList';\nexport default class FlagsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('FlagsDropdown', attrs.className);\n attrs.label = attrs.label || app.translator.trans('flarum-flags.forum.flagged_posts.tooltip');\n attrs.icon = attrs.icon || 'fas fa-flag';\n super.initAttrs(attrs);\n }\n getContent() {\n return m(FlagList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('flags'));\n }\n getUnreadCount() {\n return app.forum.attribute('flagCount');\n }\n getNewCount() {\n return app.session.user.attribute('newFlagCount');\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsDropdown', FlagsDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/humanTime');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","import app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport FlagList from './FlagList';\n\n/**\n * The `FlagsPage` component shows the flags list. It is only\n * used on mobile devices where the flags dropdown is within the drawer.\n */\nexport default class FlagsPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('flags');\n app.flags.load();\n this.bodyClass = 'App--flags';\n }\n view() {\n return m(\"div\", {\n className: \"FlagsPage\"\n }, m(FlagList, {\n state: app.flags\n }));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsPage', FlagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Model from 'flarum/common/Model';\nexport default class Flag extends Model {\n type() {\n return Model.attribute('type').call(this);\n }\n reason() {\n return Model.attribute('reason').call(this);\n }\n reasonDetail() {\n return Model.attribute('reasonDetail').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n post() {\n return Model.hasOne('post').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-flags', 'forum/models/Flag', Flag);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport FlagsPage from './components/FlagsPage';\nimport Flag from './models/Flag';\nexport default [new Extend.Routes() //\n.add('flags', '/flags', FlagsPage), new Extend.Store() //\n.add('flags', Flag), new Extend.Model(Post) //\n.hasMany('flags').attribute('canFlag')];","import app from 'flarum/forum/app';\nimport FlagListState from './states/FlagListState';\nimport addFlagControl from './addFlagControl';\nimport addFlagsDropdown from './addFlagsDropdown';\nimport addFlagsToPosts from './addFlagsToPosts';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-flags', () => {\n app.flags = new FlagListState(app);\n addFlagControl();\n addFlagsDropdown();\n addFlagsToPosts();\n});\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport Button from 'flarum/common/components/Button';\nimport FlagPostModal from './components/FlagPostModal';\nexport default function () {\n extend(PostControls, 'userControls', function (items, post) {\n if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return;\n items.add('flag', m(Button, {\n icon: \"fas fa-flag\",\n onclick: () => app.modal.show(FlagPostModal, {\n post\n })\n }, app.translator.trans('flarum-flags.forum.post_controls.flag_button')));\n });\n}","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport HeaderSecondary from 'flarum/forum/components/HeaderSecondary';\nimport FlagsDropdown from './components/FlagsDropdown';\nexport default function () {\n extend(HeaderSecondary.prototype, 'items', function (items) {\n if (app.forum.attribute('canViewFlags')) {\n items.add('flags', m(FlagsDropdown, {\n state: app.flags\n }), 15);\n }\n });\n}","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/forum/components/Post';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport humanTime from 'flarum/common/utils/humanTime';\nexport default function () {\n extend(Post.prototype, 'elementAttrs', function (attrs) {\n if (this.attrs.post.flags().length) {\n attrs.className += ' Post--flagged';\n }\n });\n Post.prototype.dismissFlag = function (body) {\n const post = this.attrs.post;\n delete post.data.relationships.flags;\n this.subtree.invalidate();\n if (app.flags.cache) {\n app.flags.cache.some((flag, i) => {\n if (flag.post() === post) {\n app.flags.cache.splice(i, 1);\n if (app.flags.index === post) {\n let next = app.flags.cache[i];\n if (!next) next = app.flags.cache[0];\n if (next) {\n const nextPost = next.post();\n app.flags.index = nextPost;\n m.route.set(app.route.post(nextPost));\n }\n }\n return true;\n }\n });\n }\n return app.request({\n url: app.forum.attribute('apiUrl') + post.apiEndpoint() + '/flags',\n method: 'DELETE',\n body\n });\n };\n Post.prototype.flagActionItems = function () {\n const items = new ItemList();\n const controls = PostControls.destructiveControls(this.attrs.post);\n Object.keys(controls.toObject()).forEach(k => {\n const attrs = controls.get(k).attrs;\n attrs.className = 'Button';\n extend(attrs, 'onclick', () => this.dismissFlag());\n });\n items.add('controls', m(\"div\", {\n className: \"ButtonGroup\"\n }, controls.toArray()));\n items.add('dismiss', m(Button, {\n className: \"Button\",\n icon: \"far fa-eye-slash\",\n onclick: this.dismissFlag.bind(this)\n }, app.translator.trans('flarum-flags.forum.post.dismiss_flag_button')), -100);\n return items;\n };\n override(Post.prototype, 'header', function (vdom) {\n const post = this.attrs.post;\n const flags = post.flags();\n if (!flags.length) return;\n if (post.isHidden()) this.revealContent = true;\n return m(\"div\", {\n className: \"Post-flagged\"\n }, m(\"div\", {\n className: \"Post-flagged-flags\"\n }, flags.map(flag => m(\"div\", {\n className: \"Post-flagged-flag\"\n }, this.flagReason(flag)))), m(\"div\", {\n className: \"Post-flagged-actions\"\n }, this.flagActionItems().toArray()));\n });\n Post.prototype.flagReason = function (flag) {\n if (flag.type() === 'user') {\n const user = flag.user();\n const reason = flag.reason() ? app.translator.trans(\"flarum-flags.forum.flag_post.reason_\".concat(flag.reason(), \"_label\")) : null;\n const detail = flag.reasonDetail();\n const time = humanTime(flag.createdAt());\n return [app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {\n time,\n user,\n reason\n }), !!detail && m(\"span\", {\n className: \"Post-flagged-detail\"\n }, detail)];\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","reg","_typeof","iterator","constructor","FlagListState","app","super","this","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","type","load","_this$app$session$use","session","user","attribute","pages","location","page","length","Promise","resolve","loadNext","add","FlagPostModal","oninit","vnode","success","reason","reasonDetail","className","title","content","m","onclick","hide","bind","flagReasons","toArray","loading","disabled","items","guidelinesUrl","name","checked","placeholder","oninput","href","target","onsubmit","e","preventDefault","save","relationships","post","attrs","errorHandler","onerror","then","catch","loaded","FlagList","view","state","hasItems","isLoading","emptyText","loadMore","hasNext","isLoadingNext","getPages","map","flag","avatar","icon","username","em","discussion","excerpt","contentPlain","datetime","createdAt","redraw","FlagsDropdown","static","label","initAttrs","getContent","goToRoute","route","set","getUnreadCount","getNewCount","FlagsPage","bodyClass","Flag","hasMany","extend","isHidden","contentType","canFlag","flags","body","data","subtree","invalidate","i","next","nextPost","url","apiEndpoint","method","controls","keys","toObject","forEach","k","dismissFlag","override","vdom","revealContent","flagReason","flagActionItems","concat","detail","time"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/states/PaginatedListState')\"","webpack://@flarum/flags/./src/forum/states/FlagListState.tsx","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/utils/PostControls')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/flags/./src/forum/components/FlagPostModal.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderSecondary')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderDropdown')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderListItem')\"","webpack://@flarum/flags/./src/forum/components/FlagList.tsx","webpack://@flarum/flags/./src/forum/components/FlagsDropdown.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/humanTime')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/flags/./src/forum/components/FlagsPage.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/flags/./src/forum/models/Flag.ts","webpack://@flarum/flags/./src/forum/extend.ts","webpack://@flarum/flags/./src/forum/index.ts","webpack://@flarum/flags/./src/forum/addFlagControl.js","webpack://@flarum/flags/./src/forum/addFlagsDropdown.js","webpack://@flarum/flags/./src/forum/addFlagsToPosts.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.reg.get('core', 'forum/app');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _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 }, _typeof(obj);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/states/PaginatedListState');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class FlagListState extends PaginatedListState {\n constructor(app) {\n super({}, 1, null);\n _defineProperty(this, \"app\", void 0);\n this.app = app;\n }\n get type() {\n return 'flags';\n }\n\n /**\n * Load flags into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n var _this$app$session$use;\n if ((_this$app$session$use = this.app.session.user) != null && _this$app$session$use.attribute('newFlagCount')) {\n this.pages = [];\n this.location = {\n page: 1\n };\n }\n if (this.pages.length > 0) {\n return Promise.resolve();\n }\n return super.loadNext();\n }\n}\nflarum.reg.add('flarum-flags', 'forum/states/FlagListState', FlagListState);","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/PostControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import app from 'flarum/forum/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Form from 'flarum/common/components/Form';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class FlagPostModal extends FormModal {\n oninit(vnode) {\n super.oninit(vnode);\n this.success = false;\n this.reason = Stream('');\n this.reasonDetail = Stream('');\n }\n className() {\n return 'FlagPostModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-flags.forum.flag_post.title');\n }\n content() {\n if (this.success) {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-flags.forum.flag_post.confirmation_message')), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-flags.forum.flag_post.dismiss_button')))));\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, this.flagReasons().toArray())), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading,\n disabled: !this.reason()\n }, app.translator.trans('flarum-flags.forum.flag_post.submit_button')))));\n }\n flagReasons() {\n const items = new ItemList();\n const guidelinesUrl = app.forum.attribute('guidelinesUrl');\n items.add('off-topic', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'off_topic',\n value: \"off_topic\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text'), this.reason() === 'off_topic' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 70);\n items.add('inappropriate', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'inappropriate',\n value: \"inappropriate\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {\n a: guidelinesUrl ? m(\"a\", {\n href: guidelinesUrl,\n target: \"_blank\"\n }) : undefined\n }), this.reason() === 'inappropriate' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 60);\n items.add('spam', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'spam',\n value: \"spam\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text'), this.reason() === 'spam' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 50);\n items.add('other', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'other',\n value: \"other\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_other_label')), this.reason() === 'other' && m(\"textarea\", {\n className: \"FormControl\",\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 10);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n app.store.createRecord('flags').save({\n reason: this.reason() === 'other' ? null : this.reason(),\n reasonDetail: this.reasonDetail(),\n relationships: {\n post: this.attrs.post\n }\n }, {\n errorHandler: this.onerror.bind(this)\n }).then(() => this.success = true).catch(() => {}).then(this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagPostModal', FlagPostModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderSecondary');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderListItem');","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport HeaderList from 'flarum/forum/components/HeaderList';\nimport HeaderListItem from 'flarum/forum/components/HeaderListItem';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class FlagList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n const state = this.attrs.state;\n return m(HeaderList, {\n className: \"FlagList\",\n title: app.translator.trans('flarum-flags.forum.flagged_posts.title'),\n controls: this.controlItems(),\n hasItems: state.hasItems(),\n loading: state.isLoading(),\n emptyText: app.translator.trans('flarum-flags.forum.flagged_posts.empty_text'),\n loadMore: () => state.hasNext() && !state.isLoadingNext() && state.loadNext()\n }, m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, this.content(state)));\n }\n controlItems() {\n const items = new ItemList();\n return items;\n }\n content(state) {\n if (!state.isLoading() && state.hasItems()) {\n return state.getPages().map(page => {\n return page.items.map(flag => {\n const post = flag.post();\n return m(\"li\", null, m(HeaderListItem, {\n className: \"Flag\",\n avatar: m(Avatar, {\n user: post.user() || null\n }),\n icon: \"fas fa-flag\",\n content: app.translator.trans('flarum-flags.forum.flagged_posts.item_text', {\n username: username(post.user()),\n em: m(\"em\", null),\n discussion: post.discussion().title()\n }),\n excerpt: post.contentPlain(),\n datetime: flag.createdAt(),\n href: app.route.post(post),\n onclick: e => {\n e.redraw = false;\n }\n }));\n });\n });\n }\n return null;\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagList', FlagList);","import app from 'flarum/forum/app';\nimport HeaderDropdown from 'flarum/forum/components/HeaderDropdown';\nimport classList from 'flarum/common/utils/classList';\nimport FlagList from './FlagList';\nexport default class FlagsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('FlagsDropdown', attrs.className);\n attrs.label = attrs.label || app.translator.trans('flarum-flags.forum.flagged_posts.tooltip');\n attrs.icon = attrs.icon || 'fas fa-flag';\n super.initAttrs(attrs);\n }\n getContent() {\n return m(FlagList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('flags'));\n }\n getUnreadCount() {\n return app.forum.attribute('flagCount');\n }\n getNewCount() {\n return app.session.user.attribute('newFlagCount');\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsDropdown', FlagsDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/humanTime');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","import app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport FlagList from './FlagList';\n\n/**\n * The `FlagsPage` component shows the flags list. It is only\n * used on mobile devices where the flags dropdown is within the drawer.\n */\nexport default class FlagsPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('flags');\n app.flags.load();\n this.bodyClass = 'App--flags';\n }\n view() {\n return m(\"div\", {\n className: \"FlagsPage\"\n }, m(FlagList, {\n state: app.flags\n }));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsPage', FlagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Model from 'flarum/common/Model';\nexport default class Flag extends Model {\n type() {\n return Model.attribute('type').call(this);\n }\n reason() {\n return Model.attribute('reason').call(this);\n }\n reasonDetail() {\n return Model.attribute('reasonDetail').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n post() {\n return Model.hasOne('post').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-flags', 'forum/models/Flag', Flag);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport FlagsPage from './components/FlagsPage';\nimport Flag from './models/Flag';\nexport default [new Extend.Routes() //\n.add('flags', '/flags', FlagsPage), new Extend.Store() //\n.add('flags', Flag), new Extend.Model(Post) //\n.hasMany('flags').attribute('canFlag')];","import app from 'flarum/forum/app';\nimport FlagListState from './states/FlagListState';\nimport addFlagControl from './addFlagControl';\nimport addFlagsDropdown from './addFlagsDropdown';\nimport addFlagsToPosts from './addFlagsToPosts';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-flags', () => {\n app.flags = new FlagListState(app);\n addFlagControl();\n addFlagsDropdown();\n addFlagsToPosts();\n});\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport Button from 'flarum/common/components/Button';\nimport FlagPostModal from './components/FlagPostModal';\nexport default function () {\n extend(PostControls, 'userControls', function (items, post) {\n if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return;\n items.add('flag', m(Button, {\n icon: \"fas fa-flag\",\n onclick: () => app.modal.show(FlagPostModal, {\n post\n })\n }, app.translator.trans('flarum-flags.forum.post_controls.flag_button')));\n });\n}","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport HeaderSecondary from 'flarum/forum/components/HeaderSecondary';\nimport FlagsDropdown from './components/FlagsDropdown';\nexport default function () {\n extend(HeaderSecondary.prototype, 'items', function (items) {\n if (app.forum.attribute('canViewFlags')) {\n items.add('flags', m(FlagsDropdown, {\n state: app.flags\n }), 15);\n }\n });\n}","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/forum/components/Post';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport humanTime from 'flarum/common/utils/humanTime';\nexport default function () {\n extend(Post.prototype, 'elementAttrs', function (attrs) {\n if (this.attrs.post.flags().length) {\n attrs.className += ' Post--flagged';\n }\n });\n Post.prototype.dismissFlag = function (body) {\n const post = this.attrs.post;\n delete post.data.relationships.flags;\n this.subtree.invalidate();\n if (app.flags.cache) {\n app.flags.cache.some((flag, i) => {\n if (flag.post() === post) {\n app.flags.cache.splice(i, 1);\n if (app.flags.index === post) {\n let next = app.flags.cache[i];\n if (!next) next = app.flags.cache[0];\n if (next) {\n const nextPost = next.post();\n app.flags.index = nextPost;\n m.route.set(app.route.post(nextPost));\n }\n }\n return true;\n }\n });\n }\n return app.request({\n url: app.forum.attribute('apiUrl') + post.apiEndpoint() + '/flags',\n method: 'DELETE',\n body\n });\n };\n Post.prototype.flagActionItems = function () {\n const items = new ItemList();\n const controls = PostControls.destructiveControls(this.attrs.post);\n Object.keys(controls.toObject()).forEach(k => {\n const attrs = controls.get(k).attrs;\n attrs.className = 'Button';\n extend(attrs, 'onclick', () => this.dismissFlag());\n });\n items.add('controls', m(\"div\", {\n className: \"ButtonGroup\"\n }, controls.toArray()));\n items.add('dismiss', m(Button, {\n className: \"Button\",\n icon: \"far fa-eye-slash\",\n onclick: this.dismissFlag.bind(this)\n }, app.translator.trans('flarum-flags.forum.post.dismiss_flag_button')), -100);\n return items;\n };\n override(Post.prototype, 'header', function (vdom) {\n const post = this.attrs.post;\n const flags = post.flags();\n if (!flags.length) return;\n if (post.isHidden()) this.revealContent = true;\n return m(\"div\", {\n className: \"Post-flagged\"\n }, m(\"div\", {\n className: \"Post-flagged-flags\"\n }, flags.map(flag => m(\"div\", {\n className: \"Post-flagged-flag\"\n }, this.flagReason(flag)))), m(\"div\", {\n className: \"Post-flagged-actions\"\n }, this.flagActionItems().toArray()));\n });\n Post.prototype.flagReason = function (flag) {\n if (flag.type() === 'user') {\n const user = flag.user();\n const reason = flag.reason() ? app.translator.trans(\"flarum-flags.forum.flag_post.reason_\".concat(flag.reason(), \"_label\")) : null;\n const detail = flag.reasonDetail();\n const time = humanTime(flag.createdAt());\n return [app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {\n time,\n user,\n reason\n }), !!detail && m(\"span\", {\n className: \"Post-flagged-detail\"\n }, detail)];\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","reg","_typeof","iterator","constructor","FlagListState","app","super","this","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","type","load","_this$app$session$use","session","user","attribute","pages","location","page","length","Promise","resolve","loadNext","add","FlagPostModal","oninit","vnode","success","reason","reasonDetail","className","title","content","m","onclick","hide","bind","flagReasons","toArray","loading","disabled","items","guidelinesUrl","name","checked","placeholder","oninput","href","target","onsubmit","e","preventDefault","save","relationships","post","attrs","errorHandler","onerror","then","catch","loaded","FlagList","view","state","controls","controlItems","hasItems","isLoading","emptyText","loadMore","hasNext","isLoadingNext","getPages","map","flag","avatar","icon","username","em","discussion","excerpt","contentPlain","datetime","createdAt","redraw","FlagsDropdown","static","label","initAttrs","getContent","goToRoute","route","set","getUnreadCount","getNewCount","FlagsPage","bodyClass","Flag","hasMany","extend","isHidden","contentType","canFlag","flags","body","data","subtree","invalidate","i","next","nextPost","url","apiEndpoint","method","keys","toObject","forEach","k","dismissFlag","override","vdom","revealContent","flagReason","flagActionItems","concat","detail","time"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist-typings/@types/shims.d.ts b/extensions/messages/js/dist-typings/@types/shims.d.ts new file mode 100644 index 000000000..42e42031b --- /dev/null +++ b/extensions/messages/js/dist-typings/@types/shims.d.ts @@ -0,0 +1,21 @@ +import type Dialog from '../common/models/Dialog'; +import DialogListState from '../forum/states/DialogListState'; + +declare module 'flarum/forum/routes' { + export interface ForumRoutes { + dialog: (tag: Dialog) => string; + } +} + +declare module 'flarum/forum/ForumApplication' { + export default interface ForumApplication { + dialogs: DialogListState; + dropdownDialogs: DialogListState; + } +} + +declare module 'flarum/forum/states/ComposerState' { + export default interface ComposerState { + composingMessageTo(dialog: Dialog): boolean; + } +} diff --git a/extensions/messages/js/dist-typings/admin/extend.d.ts b/extensions/messages/js/dist-typings/admin/extend.d.ts new file mode 100644 index 000000000..9bf46808b --- /dev/null +++ b/extensions/messages/js/dist-typings/admin/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: import("flarum/common/extenders/Store").default[]; +export default _default; diff --git a/extensions/messages/js/dist-typings/admin/index.d.ts b/extensions/messages/js/dist-typings/admin/index.d.ts new file mode 100644 index 000000000..6d2293da0 --- /dev/null +++ b/extensions/messages/js/dist-typings/admin/index.d.ts @@ -0,0 +1 @@ +export { default as extend } from './extend'; diff --git a/extensions/messages/js/dist-typings/common/extend.d.ts b/extensions/messages/js/dist-typings/common/extend.d.ts new file mode 100644 index 000000000..9bf46808b --- /dev/null +++ b/extensions/messages/js/dist-typings/common/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: import("flarum/common/extenders/Store").default[]; +export default _default; diff --git a/extensions/messages/js/dist-typings/common/index.d.ts b/extensions/messages/js/dist-typings/common/index.d.ts new file mode 100644 index 000000000..152465743 --- /dev/null +++ b/extensions/messages/js/dist-typings/common/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: null; +export default _default; diff --git a/extensions/messages/js/dist-typings/common/models/Dialog.d.ts b/extensions/messages/js/dist-typings/common/models/Dialog.d.ts new file mode 100644 index 000000000..aaa12213f --- /dev/null +++ b/extensions/messages/js/dist-typings/common/models/Dialog.d.ts @@ -0,0 +1,16 @@ +import Model from 'flarum/common/Model'; +import User from 'flarum/common/models/User'; +import DialogMessage from './DialogMessage'; +export default class Dialog extends Model { + title(): string; + type(): string; + lastMessageAt(): Date; + createdAt(): Date; + users(): false | (User | undefined)[]; + firstMessage(): false | DialogMessage; + lastMessage(): false | DialogMessage; + unreadCount(): number; + lastReadMessageId(): number; + lastReadAt(): Date; + recipient(): User | null | undefined; +} diff --git a/extensions/messages/js/dist-typings/common/models/DialogMessage.d.ts b/extensions/messages/js/dist-typings/common/models/DialogMessage.d.ts new file mode 100644 index 000000000..d2af146cd --- /dev/null +++ b/extensions/messages/js/dist-typings/common/models/DialogMessage.d.ts @@ -0,0 +1,12 @@ +import Model from 'flarum/common/Model'; +import type Dialog from './Dialog'; +import type User from 'flarum/common/models/User'; +export default class DialogMessage extends Model { + content(): string | null | undefined; + contentHtml(): string | null | undefined; + renderFailed(): boolean | undefined; + contentPlain(): string | null | undefined; + createdAt(): Date; + dialog(): false | Dialog; + user(): false | User; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DetailsModal.d.ts b/extensions/messages/js/dist-typings/forum/components/DetailsModal.d.ts new file mode 100644 index 000000000..6815042b0 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DetailsModal.d.ts @@ -0,0 +1,14 @@ +/// +import Modal, { type IInternalModalAttrs } from 'flarum/common/components/Modal'; +import type Dialog from '../../common/models/Dialog'; +import ItemList from 'flarum/common/utils/ItemList'; +import Mithril from 'mithril'; +export interface IDetailsModalAttrs extends IInternalModalAttrs { + dialog: Dialog; +} +export default class DetailsModal extends Modal { + className(): string; + title(): import("@askvortsov/rich-icu-message-formatter").NestedStringArray; + content(): JSX.Element; + infoItems(): ItemList; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DialogDropdownList.d.ts b/extensions/messages/js/dist-typings/forum/components/DialogDropdownList.d.ts new file mode 100644 index 000000000..4e3220930 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DialogDropdownList.d.ts @@ -0,0 +1,14 @@ +import Component from 'flarum/common/Component'; +import type { ComponentAttrs } from 'flarum/common/Component'; +import type Mithril from 'mithril'; +import DialogListState from '../states/DialogListState'; +import ItemList from 'flarum/common/utils/ItemList'; +export interface IDialogListDropdownAttrs extends ComponentAttrs { + state: DialogListState; +} +export default class DialogDropdownList extends Component { + oninit(vnode: Mithril.Vnode): void; + view(): JSX.Element; + controlItems(): ItemList; + content(): JSX.Element; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DialogList.d.ts b/extensions/messages/js/dist-typings/forum/components/DialogList.d.ts new file mode 100644 index 000000000..d25ec3e40 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DialogList.d.ts @@ -0,0 +1,16 @@ +import Component, { type ComponentAttrs } from 'flarum/common/Component'; +import type Mithril from 'mithril'; +import DialogListState from '../states/DialogListState'; +import Dialog from '../../common/models/Dialog'; +export interface IDialogListAttrs extends ComponentAttrs { + state: DialogListState; + activeDialog?: Dialog | null; + hideMore?: boolean; + itemActions?: boolean; +} +export default class DialogList extends Component { + oninit(vnode: Mithril.Vnode): void; + oncreate(vnode: Mithril.VnodeDOM): void; + onupdate(vnode: Mithril.VnodeDOM): void; + view(): JSX.Element; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DialogListItem.d.ts b/extensions/messages/js/dist-typings/forum/components/DialogListItem.d.ts new file mode 100644 index 000000000..06a1935f4 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DialogListItem.d.ts @@ -0,0 +1,13 @@ +import Component, { type ComponentAttrs } from 'flarum/common/Component'; +import Mithril from 'mithril'; +import ItemList from 'flarum/common/utils/ItemList'; +import type Dialog from '../../common/models/Dialog'; +export interface IDialogListItemAttrs extends ComponentAttrs { + dialog: Dialog; + active?: boolean; + actions?: boolean; +} +export default class DialogListItem extends Component { + view(vnode: Mithril.Vnode): JSX.Element; + actionItems(): ItemList; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DialogSection.d.ts b/extensions/messages/js/dist-typings/forum/components/DialogSection.d.ts new file mode 100644 index 000000000..45183fce4 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DialogSection.d.ts @@ -0,0 +1,16 @@ +import Component, { type ComponentAttrs } from 'flarum/common/Component'; +import Dialog from '../../common/models/Dialog'; +import type Mithril from 'mithril'; +import MessageStreamState from '../states/MessageStreamState'; +import ItemList from 'flarum/common/utils/ItemList'; +export interface IDialogStreamAttrs extends ComponentAttrs { + dialog: Dialog; +} +export default class DialogSection extends Component { + protected loading: boolean; + protected messages: MessageStreamState; + oninit(vnode: Mithril.Vnode): void; + view(): JSX.Element; + actionItems(): ItemList; + controlItems(): ItemList; +} diff --git a/extensions/messages/js/dist-typings/forum/components/DialogsDropdown.d.ts b/extensions/messages/js/dist-typings/forum/components/DialogsDropdown.d.ts new file mode 100644 index 000000000..5863822ec --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/DialogsDropdown.d.ts @@ -0,0 +1,13 @@ +/// +import HeaderDropdown from 'flarum/forum/components/HeaderDropdown'; +import type { IHeaderDropdownAttrs } from 'flarum/forum/components/HeaderDropdown'; +export interface IDialogsDropdownAttrs extends IHeaderDropdownAttrs { +} +export default class DialogsDropdown extends HeaderDropdown { + protected DialogDropdownList: any; + static initAttrs(attrs: IDialogsDropdownAttrs): void; + getContent(): JSX.Element; + goToRoute(): void; + getUnreadCount(): number; + getNewCount(): number; +} diff --git a/extensions/messages/js/dist-typings/forum/components/Message.d.ts b/extensions/messages/js/dist-typings/forum/components/Message.d.ts new file mode 100644 index 000000000..eac52a778 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/Message.d.ts @@ -0,0 +1,31 @@ +import ItemList from 'flarum/common/utils/ItemList'; +import Mithril from 'mithril'; +import AbstractPost, { type IAbstractPostAttrs } from 'flarum/forum/components/AbstractPost'; +import type User from 'flarum/common/models/User'; +import DialogMessage from '../../common/models/DialogMessage'; +export interface IMessageAttrs extends IAbstractPostAttrs { + message: DialogMessage; +} +/** + * The `Post` component displays a single post. The basic post template just + * includes a controls dropdown; subclasses must implement `content` and `attrs` + * methods. + */ +export default abstract class Message extends AbstractPost { + oninit(vnode: Mithril.Vnode): void; + user(): User | null | false; + controls(): Mithril.Children[]; + freshness(): Date; + createdByStarter(): boolean; + onbeforeupdate(vnode: Mithril.VnodeDOM): any; + onupdate(vnode: Mithril.VnodeDOM): void; + elementAttrs(): any; + header(): Mithril.Children; + content(): Mithril.Children[]; + classes(existing?: string): string[]; + actionItems(): ItemList; + footerItems(): ItemList; + sideItems(): ItemList; + avatar(): Mithril.Children; + headerItems(): ItemList; +} diff --git a/extensions/messages/js/dist-typings/forum/components/MessageComposer.d.ts b/extensions/messages/js/dist-typings/forum/components/MessageComposer.d.ts new file mode 100644 index 000000000..109ed08e2 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/MessageComposer.d.ts @@ -0,0 +1,28 @@ +import ComposerBody, { IComposerBodyAttrs } from 'flarum/forum/components/ComposerBody'; +import Stream from 'flarum/common/utils/Stream'; +import type User from 'flarum/common/models/User'; +import type Mithril from 'mithril'; +import DialogMessage from '../../common/models/DialogMessage'; +import type Dialog from '../../common/models/Dialog'; +export interface IMessageComposerAttrs extends IComposerBodyAttrs { + replyingTo?: Dialog; + onsubmit?: (message: DialogMessage) => void; + recipients?: User[]; +} +/** + * The `MessageComposer` component displays the composer content for sending + * a new message. It adds a selection field as a header control so the user can + * enter the recipient(s) of their message. + */ +export default class MessageComposer extends ComposerBody { + protected recipients: Stream; + static focusOnSelector: () => string; + static initAttrs(attrs: IMessageComposerAttrs): void; + oninit(vnode: Mithril.Vnode): void; + headerItems(): import("flarum/common/utils/ItemList").default; + /** + * Get the data to submit to the server when the discussion is saved. + */ + data(): Record; + onsubmit(): void; +} diff --git a/extensions/messages/js/dist-typings/forum/components/MessageStream.d.ts b/extensions/messages/js/dist-typings/forum/components/MessageStream.d.ts new file mode 100644 index 000000000..78c19b0c1 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/MessageStream.d.ts @@ -0,0 +1,32 @@ +import Component, { type ComponentAttrs } from 'flarum/common/Component'; +import Mithril from 'mithril'; +import MessageStreamState from '../states/MessageStreamState'; +import DialogMessage from '../../common/models/DialogMessage'; +import Stream from 'flarum/common/utils/Stream'; +import ScrollListener from 'flarum/common/utils/ScrollListener'; +import Dialog from '../../common/models/Dialog'; +export interface IDialogStreamAttrs extends ComponentAttrs { + dialog: Dialog; + state: MessageStreamState; +} +export default class MessageStream extends Component { + protected replyPlaceholderComponent: Stream; + protected loadingPostComponent: Stream; + protected scrollListener: ScrollListener; + protected initialToBottomScroll: boolean; + protected lastTime: Date | null; + protected checkedRead: boolean; + protected markingAsRead: boolean; + oninit(vnode: Mithril.Vnode): void; + oncreate(vnode: Mithril.VnodeDOM): void; + onupdate(vnode: Mithril.VnodeDOM): void; + onremove(vnode: Mithril.VnodeDOM): void; + view(): JSX.Element; + content(): Mithril.Children[]; + messageItem(message: DialogMessage, index: number): JSX.Element; + timeGap(message: DialogMessage): Mithril.Children; + onscroll(): void; + scrollToBottom(): void; + whileMaintainingScroll(callback: () => null | Promise): void; + markAsRead(): void; +} diff --git a/extensions/messages/js/dist-typings/forum/components/MessagesPage.d.ts b/extensions/messages/js/dist-typings/forum/components/MessagesPage.d.ts new file mode 100644 index 000000000..871d7332a --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/MessagesPage.d.ts @@ -0,0 +1,29 @@ +import Page, { IPageAttrs } from 'flarum/common/components/Page'; +import Mithril from 'mithril'; +import Dialog from '../../common/models/Dialog'; +import Stream from 'flarum/common/utils/Stream'; +import ItemList from 'flarum/common/utils/ItemList'; +export interface IMessagesPageAttrs extends IPageAttrs { +} +export default class MessagesPage extends Page { + protected selectedDialog: Stream; + oninit(vnode: Mithril.Vnode): void; + dialogRequestParams(): { + include: string; + }; + protected initDialog(): Promise; + onupdate(vnode: Mithril.VnodeDOM): void; + view(): JSX.Element; + hero(): Mithril.Children; + /** + * Build an item list for the part of the toolbar which is concerned with how + * the results are displayed. By default this is just a select box to change + * the way discussions are sorted. + */ + viewItems(): ItemList; + /** + * Build an item list for the part of the toolbar which is about taking action + * on the results. By default this is just a "mark all as read" button. + */ + actionItems(): ItemList; +} diff --git a/extensions/messages/js/dist-typings/forum/components/MessagesSidebar.d.ts b/extensions/messages/js/dist-typings/forum/components/MessagesSidebar.d.ts new file mode 100644 index 000000000..cf69e83a6 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/components/MessagesSidebar.d.ts @@ -0,0 +1,13 @@ +import IndexSidebar, { type IndexSidebarAttrs } from 'flarum/forum/components/IndexSidebar'; +import Mithril from 'mithril'; +import ItemList from 'flarum/common/utils/ItemList'; +export interface IMessagesSidebarAttrs extends IndexSidebarAttrs { +} +export default class MessagesSidebar extends IndexSidebar { + static initAttrs(attrs: IMessagesSidebarAttrs): void; + items(): ItemList; + /** + * Open the composer for a new message. + */ + newMessageAction(): Promise; +} diff --git a/extensions/messages/js/dist-typings/forum/extend.d.ts b/extensions/messages/js/dist-typings/forum/extend.d.ts new file mode 100644 index 000000000..dbdc9a7df --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: (import("flarum/common/extenders/Routes").default | import("flarum/common/extenders/Store").default)[]; +export default _default; diff --git a/extensions/messages/js/dist-typings/forum/index.d.ts b/extensions/messages/js/dist-typings/forum/index.d.ts new file mode 100644 index 000000000..6d2293da0 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/index.d.ts @@ -0,0 +1 @@ +export { default as extend } from './extend'; diff --git a/extensions/messages/js/dist-typings/forum/states/DialogListState.d.ts b/extensions/messages/js/dist-typings/forum/states/DialogListState.d.ts new file mode 100644 index 000000000..51cf93ea1 --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/states/DialogListState.d.ts @@ -0,0 +1,16 @@ +import PaginatedListState, { PaginatedListParams, type SortMap } from 'flarum/common/states/PaginatedListState'; +import Dialog from '../../common/models/Dialog'; +import { type PaginatedListRequestParams } from 'flarum/common/states/PaginatedListState'; +export interface DialogListParams extends PaginatedListParams { + sort?: string; +} +export default class DialogListState

extends PaginatedListState { + protected lastCount: number; + constructor(params: P, page?: number, perPage?: null | number); + get type(): string; + getAllItems(): Dialog[]; + requestParams(): PaginatedListRequestParams; + sortMap(): SortMap; + load(): Promise; + markAllAsRead(): Promise; +} diff --git a/extensions/messages/js/dist-typings/forum/states/MessageStreamState.d.ts b/extensions/messages/js/dist-typings/forum/states/MessageStreamState.d.ts new file mode 100644 index 000000000..a99e2a75e --- /dev/null +++ b/extensions/messages/js/dist-typings/forum/states/MessageStreamState.d.ts @@ -0,0 +1,9 @@ +import PaginatedListState, { PaginatedListParams } from 'flarum/common/states/PaginatedListState'; +import DialogMessage from '../../common/models/DialogMessage'; +export interface MessageStreamParams extends PaginatedListParams { +} +export default class MessageStreamState

extends PaginatedListState { + constructor(params: P, page?: number); + get type(): string; + getAllItems(): DialogMessage[]; +} diff --git a/extensions/messages/js/dist/admin.js b/extensions/messages/js/dist/admin.js new file mode 100644 index 000000000..46e47584c --- /dev/null +++ b/extensions/messages/js/dist/admin.js @@ -0,0 +1,2 @@ +(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>f});const r=flarum.reg.get("core","admin/app");var a=e.n(r);const s=flarum.reg.get("core","common/Model");var n=e.n(s);const l=flarum.reg.get("core","common/utils/computed");var o=e.n(l);const i=flarum.reg.get("core","common/utils/string");class u extends(n()){content(){return n().attribute("content").call(this)}contentHtml(){return n().attribute("contentHtml").call(this)}renderFailed(){return n().attribute("renderFailed").call(this)}contentPlain(){return o()("contentHtml",(e=>"string"==typeof e?(0,i.getPlainContent)(e):e)).call(this)}createdAt(){return n().attribute("createdAt",n().transformDate).call(this)}dialog(){return n().hasOne("dialog").call(this)}user(){return n().hasOne("user").call(this)}}flarum.reg.add("flarum-messages","common/models/DialogMessage",u);const d=flarum.reg.get("core","common/app");var c=e.n(d);class m extends(n()){title(){return n().attribute("title").call(this)}type(){return n().attribute("type").call(this)}lastMessageAt(){return n().attribute("lastMessageAt",n().transformDate).call(this)}createdAt(){return n().attribute("createdAt",n().transformDate).call(this)}users(){return n().hasMany("users").call(this)}firstMessage(){return n().hasOne("firstMessage").call(this)}lastMessage(){return n().hasOne("lastMessage").call(this)}unreadCount(){return n().attribute("unreadCount").call(this)}lastReadMessageId(){return n().attribute("lastReadMessageId").call(this)}lastReadAt(){return n().attribute("lastReadAt",n().transformDate).call(this)}recipient(){let e=this.users();return e?e.find((e=>e&&e.id()!==c().session.user.id())):null}}flarum.reg.add("flarum-messages","common/models/Dialog",m);const g=flarum.reg.get("core","common/extenders"),f=[(new(e.n(g)().Store)).add("dialogs",m).add("dialog-messages",u)];a().initializers.add("flarum-messages",(()=>{a().extensionData.for("flarum-messages").registerPermission({icon:"fas fa-envelope-open-text",label:a().translator.trans("flarum-messages.admin.permissions.send_messages"),permission:"dialog.sendMessage",allowGuest:!1},"start",98)}))})(),module.exports=t})(); +//# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/admin.js.map b/extensions/messages/js/dist/admin.js.map new file mode 100644 index 000000000..0edf3f3b9 --- /dev/null +++ b/extensions/messages/js/dist/admin.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.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,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,gB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,uBCG7C,MAAMW,UAAsB,KACzCC,UACE,OAAO,cAAgB,WAAWP,KAAKQ,KACzC,CACAC,cACE,OAAO,cAAgB,eAAeT,KAAKQ,KAC7C,CACAE,eACE,OAAO,cAAgB,gBAAgBV,KAAKQ,KAC9C,CACAG,eACE,OAAO,IAAS,eAAeJ,GACN,iBAAZA,GACF,IAAAK,iBAAgBL,GAElBA,IACNP,KAAKQ,KACV,CACAK,YACE,OAAO,cAAgB,YAAa,mBAAqBb,KAAKQ,KAChE,CACAM,SACE,OAAO,WAAa,UAAUd,KAAKQ,KACrC,CACAO,OACE,OAAO,WAAa,QAAQf,KAAKQ,KACnC,EAEFJ,OAAOC,IAAIW,IAAI,kBAAmB,8BAA+BV,GC/BjE,MAAM,EAA+BF,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMsB,UAAe,KAClCC,QACE,OAAO,cAAgB,SAASlB,KAAKQ,KACvC,CACAW,OACE,OAAO,cAAgB,QAAQnB,KAAKQ,KACtC,CACAY,gBACE,OAAO,cAAgB,gBAAiB,mBAAqBpB,KAAKQ,KACpE,CACAK,YACE,OAAO,cAAgB,YAAa,mBAAqBb,KAAKQ,KAChE,CACAa,QACE,OAAO,YAAc,SAASrB,KAAKQ,KACrC,CACAc,eACE,OAAO,WAAa,gBAAgBtB,KAAKQ,KAC3C,CACAe,cACE,OAAO,WAAa,eAAevB,KAAKQ,KAC1C,CACAgB,cACE,OAAO,cAAgB,eAAexB,KAAKQ,KAC7C,CACAiB,oBACE,OAAO,cAAgB,qBAAqBzB,KAAKQ,KACnD,CACAkB,aACE,OAAO,cAAgB,aAAc,mBAAqB1B,KAAKQ,KACjE,CACAmB,YACE,IAAIN,EAAQb,KAAKa,QACjB,OAAQA,EAAeA,EAAMO,MAAKb,GAAQA,GAAQA,EAAKc,OAAS,wBAAhD,IAClB,EAEFzB,OAAOC,IAAIW,IAAI,kBAAmB,uBAAwBC,GCtC1D,MAAM,EAA+Bb,OAAOC,IAAIV,IAAI,OAAQ,oBCC5D,ICEgB,I,MAAI,WAAeqB,IAAI,UAAWC,GACjDD,IAAI,kBAAmBV,ICFxB,qBAAqB,mBAAmB,KACtC,sBAAsB,mBAAmBwB,mBAAmB,CAC1DC,KAAM,4BACNC,MAAO,qBAAqB,mDAC5BC,WAAY,qBACZC,YAAY,GACX,QAAS,GAAG,G","sources":["webpack://@flarum/messages/webpack/bootstrap","webpack://@flarum/messages/webpack/runtime/compat get default export","webpack://@flarum/messages/webpack/runtime/define property getters","webpack://@flarum/messages/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/messages/webpack/runtime/make namespace object","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/messages/./src/common/models/DialogMessage.ts","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/messages/./src/common/models/Dialog.ts","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/messages/./src/admin/extend.ts","webpack://@flarum/messages/./src/common/extend.ts","webpack://@flarum/messages/./src/admin/index.ts"],"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.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import Model from 'flarum/common/Model';\nimport computed from 'flarum/common/utils/computed';\nimport { getPlainContent } from 'flarum/common/utils/string';\nexport default class DialogMessage extends Model {\n content() {\n return Model.attribute('content').call(this);\n }\n contentHtml() {\n return Model.attribute('contentHtml').call(this);\n }\n renderFailed() {\n return Model.attribute('renderFailed').call(this);\n }\n contentPlain() {\n return computed('contentHtml', content => {\n if (typeof content === 'string') {\n return getPlainContent(content);\n }\n return content;\n }).call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n dialog() {\n return Model.hasOne('dialog').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-messages', 'common/models/DialogMessage', DialogMessage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import Model from 'flarum/common/Model';\nimport app from 'flarum/common/app';\nexport default class Dialog extends Model {\n title() {\n return Model.attribute('title').call(this);\n }\n type() {\n return Model.attribute('type').call(this);\n }\n lastMessageAt() {\n return Model.attribute('lastMessageAt', Model.transformDate).call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n users() {\n return Model.hasMany('users').call(this);\n }\n firstMessage() {\n return Model.hasOne('firstMessage').call(this);\n }\n lastMessage() {\n return Model.hasOne('lastMessage').call(this);\n }\n unreadCount() {\n return Model.attribute('unreadCount').call(this);\n }\n lastReadMessageId() {\n return Model.attribute('lastReadMessageId').call(this);\n }\n lastReadAt() {\n return Model.attribute('lastReadAt', Model.transformDate).call(this);\n }\n recipient() {\n let users = this.users();\n return !users ? null : users.find(user => user && user.id() !== app.session.user.id());\n }\n}\nflarum.reg.add('flarum-messages', 'common/models/Dialog', Dialog);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","import commonExtend from '../common/extend';\nexport default [...commonExtend\n\n// Add your admin extenders here\n];","import DialogMessage from './models/DialogMessage';\nimport Dialog from './models/Dialog';\nimport Extend from 'flarum/common/extenders';\nexport default [new Extend.Store().add('dialogs', Dialog) //\n.add('dialog-messages', DialogMessage) //\n];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-messages', () => {\n app.extensionData.for('flarum-messages').registerPermission({\n icon: 'fas fa-envelope-open-text',\n label: app.translator.trans('flarum-messages.admin.permissions.send_messages'),\n permission: 'dialog.sendMessage',\n allowGuest: false\n }, 'start', 98);\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","reg","DialogMessage","content","this","contentHtml","renderFailed","contentPlain","getPlainContent","createdAt","dialog","user","add","Dialog","title","type","lastMessageAt","users","firstMessage","lastMessage","unreadCount","lastReadMessageId","lastReadAt","recipient","find","id","registerPermission","icon","label","permission","allowGuest"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist/forum.js b/extensions/messages/js/dist/forum.js new file mode 100644 index 000000000..af2b0a3aa --- /dev/null +++ b/extensions/messages/js/dist/forum.js @@ -0,0 +1,2 @@ +(()=>{var e,t,r={433:e=>{"use strict";e.exports=flarum.reg.get("core","common/Component")},343:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Avatar")},645:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Button")},920:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Dropdown")},287:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Icon")},360:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/InfoTile")},678:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Link")},7:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/LinkButton")},149:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/LoadingIndicator")},686:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Modal")},581:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Page")},547:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/Tooltip")},162:e=>{"use strict";e.exports=flarum.reg.get("core","common/components/UserSelectionModal")},476:e=>{"use strict";e.exports=flarum.reg.get("core","common/helpers/fullTime")},491:e=>{"use strict";e.exports=flarum.reg.get("core","common/helpers/humanTime")},983:e=>{"use strict";e.exports=flarum.reg.get("core","common/helpers/listItems")},479:e=>{"use strict";e.exports=flarum.reg.get("core","common/helpers/username")},143:e=>{"use strict";e.exports=flarum.reg.get("core","common/states/PaginatedListState")},960:e=>{"use strict";e.exports=flarum.reg.get("core","common/utils/ItemList")},307:e=>{"use strict";e.exports=flarum.reg.get("core","common/utils/ScrollListener")},636:e=>{"use strict";e.exports=flarum.reg.get("core","common/utils/Stream")},836:e=>{"use strict";e.exports=flarum.reg.get("core","common/utils/classList")},596:e=>{"use strict";e.exports=flarum.reg.get("core","common/utils/extractText")},892:e=>{"use strict";e.exports=flarum.reg.get("core","forum/app")},609:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/AbstractPost")},207:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/Comment")},157:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/ComposerBody")},889:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/HeaderList")},135:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/IndexSidebar")},421:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/PageStructure")},271:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/PostMeta")},300:e=>{"use strict";e.exports=flarum.reg.get("core","forum/components/PostUser")},905:(e,t,r)=>{"use strict";function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t);if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===s(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}r.d(t,{Z:()=>o})}},s={};function o(e){var t=s[e];if(void 0!==t)return t.exports;var a=s[e]={exports:{}};return r[e](a,a.exports,o),a.exports}o.m=r,o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,r)=>(o.f[r](e,t),t)),[])),o.u=e=>({2:"forum/components/MessagesPage",172:"forum/components/DialogDropdownList",514:"forum/components/MessageComposer"}[e]+".js"),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="module.exports:",o.l=(r,s,a,n)=>{if(e[r])e[r].push(s);else{var u,l;if(void 0!==a)for(var m=document.getElementsByTagName("script"),i=0;i{u.onerror=u.onload=null,clearTimeout(d);var o=e[r];if(delete e[r],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((e=>e(s))),t)return t(s)},d=setTimeout(g.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=g.bind(null,u.onerror),u.onload=g.bind(null,u.onload),l&&document.head.appendChild(u)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),o.f.compat=(e,t)=>{const r=o.l;o.l=flarum.reg.loadChunk.bind(flarum.reg,r)},(()=>{var e={315:0};o.f.j=(t,r)=>{var s=o.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var a=new Promise(((r,o)=>s=e[t]=[r,o]));r.push(s[2]=a);var n=o.p+o.u(t),u=new Error;o.l(n,(r=>{if(o.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var a=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;u.message="Loading chunk "+t+" failed.\n("+a+": "+n+")",u.name="ChunkLoadError",u.type=a,u.request=n,s[1](u)}}),"chunk-"+t,t)}};var t=(t,r)=>{var s,a,[n,u,l]=r,m=0;if(n.some((t=>0!==e[t]))){for(s in u)o.o(u,s)&&(o.m[s]=u[s]);l&&l(o)}for(t&&t(r);m{"use strict";o.r(a),o.d(a,{extend:()=>B});var e=o(892),t=o.n(e);const r=flarum.reg.get("core","common/extend");var s=o(135),n=o.n(s),u=o(7),l=o.n(u);const i=flarum.reg.get("core","forum/components/HeaderSecondary");var c=o.n(i);const g=flarum.reg.get("core","forum/utils/UserControls");var d=o.n(g),f=o(645),p=o.n(f),h=o(905);const b=flarum.reg.get("core","forum/components/HeaderDropdown");var v=o.n(b),x=o(836),y=o.n(x),M=o(149),w=o.n(M);class C extends(v()){constructor(){super(...arguments),(0,h.Z)(this,"DialogDropdownList",null)}static initAttrs(e){e.className=y()("DialogsDropdown",e.className),e.label=e.label||t().translator.trans("flarum-messages.forum.header.dropdown_tooltip"),e.icon=e.icon||"fas fa-envelope",super.initAttrs(e)}getContent(){return this.DialogDropdownList?m(this.DialogDropdownList,{state:this.attrs.state}):(o.e(172).then(o.bind(o,790)).then((e=>{this.DialogDropdownList=e.default})),m(w(),null))}goToRoute(){m.route.set(t().route("dialogs"))}getUnreadCount(){return t().session.user.attribute("messageCount")}getNewCount(){return t().session.user.attribute("messageCount")}}flarum.reg.add("flarum-messages","forum/components/DialogsDropdown",C),flarum.reg.addChunkModule("172","790","flarum-messages","forum/components/DialogDropdownList"),flarum.reg.addChunkModule("172","790","flarum-messages","forum/components/DialogList"),flarum.reg.addChunkModule("172","790","flarum-messages","forum/components/DialogListItem");var S=o(143),D=o.n(S);class A extends(D()){constructor(e,t,r){void 0===t&&(t=1),void 0===r&&(r=null),super(e,t,r),(0,h.Z)(this,"lastCount",0)}get type(){return"dialogs"}getAllItems(){return super.getAllItems()}requestParams(){return{include:["lastMessage","users.groups"],filter:this.params.filter||{},sort:this.currentSort()||this.sortValue(Object.values(this.sortMap())[0])}}sortMap(){return{latest:"-lastMessageAt",newest:"-createdAt",oldest:"createdAt"}}load(){var e,r;return(null==(e=t().session.user)?void 0:e.attribute("messageCount"))!==this.lastCount&&(this.pages=[],this.location={page:1},this.lastCount=(null==(r=t().session.user)?void 0:r.attribute("messageCount"))||0),this.pages.length>0?Promise.resolve():super.loadNext()}markAllAsRead(){return t().request({method:"POST",url:t().forum.attribute("apiUrl")+"/dialogs/read"}).then((()=>{t().dialogs.getAllItems().forEach((e=>{e.pushAttributes({unreadCount:0})})),t().session.user.pushAttributes({messageCount:0}),t().dropdownDialogs.clear(),m.redraw()}))}}flarum.reg.add("flarum-messages","forum/states/DialogListState",A);const k=flarum.reg.get("core","common/extenders");var P=o.n(k);const L=flarum.reg.get("core","common/Model");var T=o.n(L);const I=flarum.reg.get("core","common/utils/computed");var _=o.n(I);const j=flarum.reg.get("core","common/utils/string");class O extends(T()){content(){return T().attribute("content").call(this)}contentHtml(){return T().attribute("contentHtml").call(this)}renderFailed(){return T().attribute("renderFailed").call(this)}contentPlain(){return _()("contentHtml",(e=>"string"==typeof e?(0,j.getPlainContent)(e):e)).call(this)}createdAt(){return T().attribute("createdAt",T().transformDate).call(this)}dialog(){return T().hasOne("dialog").call(this)}user(){return T().hasOne("user").call(this)}}flarum.reg.add("flarum-messages","common/models/DialogMessage",O);const N=flarum.reg.get("core","common/app");var E=o.n(N);class R extends(T()){title(){return T().attribute("title").call(this)}type(){return T().attribute("type").call(this)}lastMessageAt(){return T().attribute("lastMessageAt",T().transformDate).call(this)}createdAt(){return T().attribute("createdAt",T().transformDate).call(this)}users(){return T().hasMany("users").call(this)}firstMessage(){return T().hasOne("firstMessage").call(this)}lastMessage(){return T().hasOne("lastMessage").call(this)}unreadCount(){return T().attribute("unreadCount").call(this)}lastReadMessageId(){return T().attribute("lastReadMessageId").call(this)}lastReadAt(){return T().attribute("lastReadAt",T().transformDate).call(this)}recipient(){let e=this.users();return e?e.find((e=>e&&e.id()!==E().session.user.id())):null}}flarum.reg.add("flarum-messages","common/models/Dialog",R);const B=[(new(P().Store)).add("dialogs",R).add("dialog-messages",O),(new(P().Routes)).add("messages","/messages",(()=>o.e(2).then(o.bind(o,799)))).add("dialog","/messages/dialog/:id",(()=>o.e(2).then(o.bind(o,799)))).helper("dialog",(e=>t().route("dialog",{id:e.id()})))];flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/MessagesPage"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/MessagesSidebar"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/DialogSection"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/MessageStream"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/states/MessageStreamState"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/DetailsModal"),flarum.reg.addChunkModule("2","799","flarum-messages","forum/components/Message"),t().initializers.add("flarum-messages",(()=>{t().dialogs=new A({},1),t().dropdownDialogs=new A({filter:{unread:!0}},1,5),t().composer.composingMessageTo=function(e){const t=flarum.reg.checkModule("flarum-messages","forum/components/MessageComposer");return!!t&&this.isVisible()&&this.bodyMatches(t,{dialog:e})},(0,r.extend)(n().prototype,"navItems",(function(e){t().session.user&&e.add("messages",m(l(),{href:t().route("messages"),icon:"far fa-envelope",active:t().current.data.routeName&&["messages","dialog"].includes(t().current.data.routeName)},t().translator.trans("flarum-messages.forum.index.messages_link")),95)})),(0,r.extend)(c().prototype,"items",(function(e){var r;null!=(r=t().session.user)&&r.attribute("canSendAnyMessage")&&e.add("messages",m(C,{state:t().dropdownDialogs}),15)})),(0,r.extend)(d(),"userControls",((e,r)=>{var s;null!=(s=t().session.user)&&s.attribute("canSendAnyMessage")&&e.add("sendMessage",m(p(),{icon:"fas fa-envelope",onclick:()=>{flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>{t().composer.load((()=>o.e(514).then(o.bind(o,118))),{user:t().session.user,recipients:[r]}).then((()=>t().composer.show()))}))}},t().translator.trans("flarum-messages.forum.user_controls.send_message_button")))})),(0,r.extend)("flarum/forum/components/NotificationGrid","notificationTypes",(function(e){e.add("messageReceived",{name:"messageReceived",icon:"fas fa-envelope",label:t().translator.trans("flarum-messages.forum.settings.notify_message_received_label")})}))}))})(),module.exports=a})(); +//# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/forum.js.map b/extensions/messages/js/dist/forum.js.map new file mode 100644 index 000000000..b99d9539b --- /dev/null +++ b/extensions/messages/js/dist/forum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forum.js","mappings":"UAAIA,EACAC,E,wBCDJC,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,mB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,6B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,yB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,6B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,yB,qBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,+B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,qC,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,0B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,yB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,4B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,uC,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,0B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,0B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,mC,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,wB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,8B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,sB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,yB,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,Y,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,gC,uBCAxCJ,EAAOC,QAAUC,OAAOC,IAAIC,IAAI,OAAQ,2B,uBCAxCJ,EAAOC,QAAU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","sources":["webpack://@flarum/messages/webpack/runtime/load script","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/InfoTile')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/Tooltip')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/components/UserSelectionModal')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/helpers/fullTime')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/helpers/listItems')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/states/PaginatedListState')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/ScrollListener')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/AbstractPost')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/Comment')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/ComposerBody')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/HeaderList')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/PostMeta')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/PostUser')\"","webpack://@flarum/messages/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/messages/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/messages/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/messages/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/messages/webpack/bootstrap","webpack://@flarum/messages/webpack/runtime/compat get default export","webpack://@flarum/messages/webpack/runtime/define property getters","webpack://@flarum/messages/webpack/runtime/ensure chunk","webpack://@flarum/messages/webpack/runtime/get javascript chunk filename","webpack://@flarum/messages/webpack/runtime/global","webpack://@flarum/messages/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/messages/webpack/runtime/make namespace object","webpack://@flarum/messages/webpack/runtime/publicPath","webpack://@flarum/messages/webpack/runtime/compat","webpack://@flarum/messages/webpack/runtime/jsonp chunk loading","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/HeaderSecondary')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/utils/UserControls')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'forum/components/HeaderDropdown')\"","webpack://@flarum/messages/./src/forum/components/DialogsDropdown.tsx","webpack://@flarum/messages/./src/forum/states/DialogListState.ts","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/messages/./src/common/models/DialogMessage.ts","webpack://@flarum/messages/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/messages/./src/common/models/Dialog.ts","webpack://@flarum/messages/./src/common/extend.ts","webpack://@flarum/messages/./src/forum/extend.ts","webpack://@flarum/messages/./src/forum/index.tsx"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/components/Avatar');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/Dropdown');","module.exports = flarum.reg.get('core', 'common/components/Icon');","module.exports = flarum.reg.get('core', 'common/components/InfoTile');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LinkButton');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/components/Modal');","module.exports = flarum.reg.get('core', 'common/components/Page');","module.exports = flarum.reg.get('core', 'common/components/Tooltip');","module.exports = flarum.reg.get('core', 'common/components/UserSelectionModal');","module.exports = flarum.reg.get('core', 'common/helpers/fullTime');","module.exports = flarum.reg.get('core', 'common/helpers/humanTime');","module.exports = flarum.reg.get('core', 'common/helpers/listItems');","module.exports = flarum.reg.get('core', 'common/helpers/username');","module.exports = flarum.reg.get('core', 'common/states/PaginatedListState');","module.exports = flarum.reg.get('core', 'common/utils/ItemList');","module.exports = flarum.reg.get('core', 'common/utils/ScrollListener');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/AbstractPost');","module.exports = flarum.reg.get('core', 'forum/components/Comment');","module.exports = flarum.reg.get('core', 'forum/components/ComposerBody');","module.exports = flarum.reg.get('core', 'forum/components/HeaderList');","module.exports = flarum.reg.get('core', 'forum/components/IndexSidebar');","module.exports = flarum.reg.get('core', 'forum/components/PageStructure');","module.exports = flarum.reg.get('core', 'forum/components/PostMeta');","module.exports = flarum.reg.get('core', 'forum/components/PostUser');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _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 }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"2\":\"forum/components/MessagesPage\",\"172\":\"forum/components/DialogDropdownList\",\"514\":\"forum/components/MessageComposer\"}[chunkId] + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t315: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderSecondary');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/UserControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderDropdown');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport HeaderDropdown from 'flarum/forum/components/HeaderDropdown';\nimport classList from 'flarum/common/utils/classList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nexport default class DialogsDropdown extends HeaderDropdown {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"DialogDropdownList\", null);\n }\n static initAttrs(attrs) {\n attrs.className = classList('DialogsDropdown', attrs.className);\n attrs.label = attrs.label || app.translator.trans('flarum-messages.forum.header.dropdown_tooltip');\n attrs.icon = attrs.icon || 'fas fa-envelope';\n super.initAttrs(attrs);\n }\n getContent() {\n if (!this.DialogDropdownList) {\n import(/* webpackChunkName: 'forum/components/DialogDropdownList', webpackMode: 'lazy-once' */ './DialogDropdownList').then(DialogDropdownList => {\n this.DialogDropdownList = DialogDropdownList.default;\n });\n return m(LoadingIndicator, null);\n }\n return m(this.DialogDropdownList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('dialogs'));\n }\n getUnreadCount() {\n return app.session.user.attribute('messageCount');\n }\n getNewCount() {\n return app.session.user.attribute('messageCount');\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogsDropdown', DialogsDropdown);flarum.reg.addChunkModule('172', '790', 'flarum-messages', 'forum/components/DialogDropdownList');\nflarum.reg.addChunkModule('172', '790', 'flarum-messages', 'forum/components/DialogList');\nflarum.reg.addChunkModule('172', '790', 'flarum-messages', 'forum/components/DialogListItem');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class DialogListState extends PaginatedListState {\n constructor(params, page, perPage) {\n if (page === void 0) {\n page = 1;\n }\n if (perPage === void 0) {\n perPage = null;\n }\n super(params, page, perPage);\n _defineProperty(this, \"lastCount\", 0);\n }\n get type() {\n return 'dialogs';\n }\n getAllItems() {\n return super.getAllItems();\n }\n requestParams() {\n const params = {\n include: ['lastMessage', 'users.groups'],\n filter: this.params.filter || {},\n sort: this.currentSort() || this.sortValue(Object.values(this.sortMap())[0])\n };\n return params;\n }\n sortMap() {\n const map = {};\n map.latest = '-lastMessageAt';\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n return map;\n }\n load() {\n var _app$session$user;\n if (((_app$session$user = app.session.user) == null ? void 0 : _app$session$user.attribute('messageCount')) !== this.lastCount) {\n var _app$session$user2;\n this.pages = [];\n this.location = {\n page: 1\n };\n this.lastCount = ((_app$session$user2 = app.session.user) == null ? void 0 : _app$session$user2.attribute('messageCount')) || 0;\n }\n if (this.pages.length > 0) {\n return Promise.resolve();\n }\n return super.loadNext();\n }\n markAllAsRead() {\n return app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/dialogs/read'\n }).then(() => {\n app.dialogs.getAllItems().forEach(dialog => {\n dialog.pushAttributes({\n unreadCount: 0\n });\n });\n app.session.user.pushAttributes({\n messageCount: 0\n });\n app.dropdownDialogs.clear();\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-messages', 'forum/states/DialogListState', DialogListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import Model from 'flarum/common/Model';\nimport computed from 'flarum/common/utils/computed';\nimport { getPlainContent } from 'flarum/common/utils/string';\nexport default class DialogMessage extends Model {\n content() {\n return Model.attribute('content').call(this);\n }\n contentHtml() {\n return Model.attribute('contentHtml').call(this);\n }\n renderFailed() {\n return Model.attribute('renderFailed').call(this);\n }\n contentPlain() {\n return computed('contentHtml', content => {\n if (typeof content === 'string') {\n return getPlainContent(content);\n }\n return content;\n }).call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n dialog() {\n return Model.hasOne('dialog').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-messages', 'common/models/DialogMessage', DialogMessage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import Model from 'flarum/common/Model';\nimport app from 'flarum/common/app';\nexport default class Dialog extends Model {\n title() {\n return Model.attribute('title').call(this);\n }\n type() {\n return Model.attribute('type').call(this);\n }\n lastMessageAt() {\n return Model.attribute('lastMessageAt', Model.transformDate).call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n users() {\n return Model.hasMany('users').call(this);\n }\n firstMessage() {\n return Model.hasOne('firstMessage').call(this);\n }\n lastMessage() {\n return Model.hasOne('lastMessage').call(this);\n }\n unreadCount() {\n return Model.attribute('unreadCount').call(this);\n }\n lastReadMessageId() {\n return Model.attribute('lastReadMessageId').call(this);\n }\n lastReadAt() {\n return Model.attribute('lastReadAt', Model.transformDate).call(this);\n }\n recipient() {\n let users = this.users();\n return !users ? null : users.find(user => user && user.id() !== app.session.user.id());\n }\n}\nflarum.reg.add('flarum-messages', 'common/models/Dialog', Dialog);","import DialogMessage from './models/DialogMessage';\nimport Dialog from './models/Dialog';\nimport Extend from 'flarum/common/extenders';\nexport default [new Extend.Store().add('dialogs', Dialog) //\n.add('dialog-messages', DialogMessage) //\n];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('messages', '/messages', () => import(/* webpackChunkName: 'forum/components/MessagesPage', webpackMode: 'lazy-once' */ './components/MessagesPage')).add('dialog', '/messages/dialog/:id', () => import(/* webpackChunkName: 'forum/components/MessagesPage', webpackMode: 'lazy-once' */ './components/MessagesPage')).helper('dialog', dialog => app.route('dialog', {\n id: dialog.id()\n}))];flarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/MessagesPage');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/MessagesSidebar');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/DialogSection');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/MessageStream');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/states/MessageStreamState');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/DetailsModal');\nflarum.reg.addChunkModule('2', '799', 'flarum-messages', 'forum/components/Message');","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport HeaderSecondary from 'flarum/forum/components/HeaderSecondary';\nimport UserControls from 'flarum/forum/utils/UserControls';\nimport Button from 'flarum/common/components/Button';\nimport DialogsDropdown from './components/DialogsDropdown';\nimport DialogListState from './states/DialogListState';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-messages', () => {\n app.dialogs = new DialogListState({}, 1);\n app.dropdownDialogs = new DialogListState({\n filter: {\n unread: true\n }\n }, 1, 5);\n app.composer.composingMessageTo = function (dialog) {\n const MessageComposer = flarum.reg.checkModule('flarum-messages', 'forum/components/MessageComposer');\n if (!MessageComposer) return false;\n return this.isVisible() && this.bodyMatches(MessageComposer, {\n dialog\n });\n };\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n if (app.session.user) {\n items.add('messages', m(LinkButton, {\n href: app.route('messages'),\n icon: \"far fa-envelope\",\n active: app.current.data.routeName && ['messages', 'dialog'].includes(app.current.data.routeName)\n }, app.translator.trans('flarum-messages.forum.index.messages_link')), 95);\n }\n });\n extend(HeaderSecondary.prototype, 'items', function (items) {\n var _app$session$user;\n if ((_app$session$user = app.session.user) != null && _app$session$user.attribute('canSendAnyMessage')) {\n items.add('messages', m(DialogsDropdown, {\n state: app.dropdownDialogs\n }), 15);\n }\n });\n\n // @ts-ignore\n extend(UserControls, 'userControls', (items, user) => {\n var _app$session$user2;\n if ((_app$session$user2 = app.session.user) != null && _app$session$user2.attribute('canSendAnyMessage')) {\n items.add('sendMessage', m(Button, {\n icon: \"fas fa-envelope\",\n onclick: () => {\n flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './components/MessageComposer'), {\n user: app.session.user,\n recipients: [user]\n }).then(() => app.composer.show());\n });\n }\n }, app.translator.trans('flarum-messages.forum.user_controls.send_message_button')));\n }\n });\n extend('flarum/forum/components/NotificationGrid', 'notificationTypes', function (items) {\n items.add('messageReceived', {\n name: 'messageReceived',\n icon: 'fas fa-envelope',\n label: app.translator.trans('flarum-messages.forum.settings.notify_message_received_label')\n });\n });\n});"],"names":["inProgress","dataWebpackPrefix","module","exports","flarum","reg","get","_typeof","obj","Symbol","iterator","constructor","prototype","_defineProperty","key","value","arg","input","hint","prim","toPrimitive","undefined","res","call","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","n","getter","__esModule","d","a","definition","o","f","e","chunkId","Promise","all","keys","reduce","promises","u","g","globalThis","this","Function","window","prop","hasOwnProperty","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","fn","setTimeout","bind","type","target","head","appendChild","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","promise","resolve","reject","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","id","chunkLoadingGlobal","self","DialogsDropdown","super","arguments","static","attrs","className","label","icon","initAttrs","getContent","DialogDropdownList","state","then","default","goToRoute","route","set","getUnreadCount","getNewCount","add","addChunkModule","DialogListState","params","page","perPage","getAllItems","requestParams","include","filter","sort","currentSort","sortValue","values","sortMap","map","load","_app$session$user","_app$session$user2","attribute","lastCount","pages","loadNext","markAllAsRead","method","dialog","pushAttributes","unreadCount","messageCount","redraw","DialogMessage","content","contentHtml","renderFailed","contentPlain","getPlainContent","createdAt","user","Dialog","title","lastMessageAt","users","firstMessage","lastMessage","lastReadMessageId","lastReadAt","recipient","find","helper","unread","MessageComposer","checkModule","isVisible","bodyMatches","extend","items","href","active","includes","onclick","asyncModuleImport","recipients"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/DialogDropdownList.js b/extensions/messages/js/dist/forum/components/DialogDropdownList.js new file mode 100644 index 000000000..f9b968cfb --- /dev/null +++ b/extensions/messages/js/dist/forum/components/DialogDropdownList.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[172],{790:(t,a,s)=>{s.r(a),s.d(a,{default:()=>N});var e=s(892),i=s.n(e),o=s(433),r=s.n(o),n=s(889),l=s.n(n),u=s(292),d=s(7),c=s.n(d),g=s(960),f=s.n(g),h=s(547),p=s.n(h),v=s(645),_=s.n(v);class N extends(r()){oninit(t){super.oninit(t)}view(){const t=this.attrs.state;return m(l(),{className:"DialogDropdownList",title:i().translator.trans("flarum-messages.forum.dialog_list.title"),controls:this.controlItems(),hasItems:t.hasItems(),loading:t.isLoading(),emptyText:i().translator.trans("flarum-messages.forum.messages_page.empty_text"),loadMore:()=>t.hasNext()&&!t.isLoadingNext()&&t.loadNext(),footer:()=>m("h4",null,m(c(),{href:i().route("messages"),className:"Button Button--link",icon:"fas fa-inbox"},i().translator.trans("flarum-messages.forum.dialog_list.view_all")))},m("div",{className:"HeaderListGroup-content"},this.content()))}controlItems(){const t=new(f()),a=this.attrs.state;return i().session.user.attribute("messageCount")>0&&t.add("mark_all_as_read",m(p(),{text:i().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip")},m(_(),{className:"Button Button--link","data-container":".DialogDropdownList",icon:"fas fa-check",title:i().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),onclick:a.markAllAsRead.bind(a)})),70),t}content(){return m(u.Z,{state:this.attrs.state,hideMore:!0,itemActions:!0})}}flarum.reg.add("flarum-messages","forum/components/DialogDropdownList",N)},292:(t,a,s)=>{s.d(a,{Z:()=>I});var e=s(892),i=s.n(e),o=s(433),r=s.n(o),n=s(645),l=s.n(n),u=s(836),d=s.n(u),c=s(678),g=s.n(c),f=s(343),h=s.n(f),p=s(479),v=s.n(p),_=s(491),N=s.n(_),D=s(960),L=s.n(D);class k extends(r()){view(t){var a;const s=this.attrs.dialog,e=s.recipient(),o=s.lastMessage();return m("li",{className:d()("DialogListItem",{"DialogListItem--unread":s.unreadCount(),active:this.attrs.active})},m(g(),{href:i().route.dialog(s),className:d()("DialogListItem-button",{active:this.attrs.active})},m("div",{className:"DialogListItem-avatar"},m(h(),{user:e}),!!s.unreadCount()&&m("div",{className:"Bubble Bubble--primary"},s.unreadCount())),m("div",{className:"DialogListItem-content"},m("div",{className:"DialogListItem-title"},v()(e),N()(s.lastMessageAt()),this.attrs.actions&&m("div",{className:"DialogListItem-actions"},this.actionItems().toArray())),m("div",{className:"DialogListItem-lastMessage"},o?null==(a=o.contentPlain())?void 0:a.slice(0,80):""))))}actionItems(){const t=new(L());return t.add("markAsRead",m(l(),{className:"Notification-action Button Button--link",icon:"fas fa-check","aria-label":i().translator.trans("flarum-messages.forum.dialog_list.mark_as_read_tooltip"),onclick:t=>{var a;t.preventDefault(),t.stopPropagation(),this.attrs.dialog.save({lastReadMessageId:(null==(a=this.attrs.dialog.data.relationships)?void 0:a.lastMessage.data).id}).finally((()=>{var t;0===this.attrs.dialog.unreadCount()&&i().session.user.pushAttributes({messageCount:(null!=(t=i().session.user.attribute("messageCount"))?t:1)-1}),m.redraw()}))}}),100),t}}flarum.reg.add("flarum-messages","forum/components/DialogListItem",k);class I extends(r()){oninit(t){super.oninit(t)}oncreate(t){super.oncreate(t)}onupdate(t){super.onupdate(t)}view(){return m("div",{className:"DialogList"},m("ul",{className:"DialogList-list"},this.attrs.state.getAllItems().map((t=>{var a;return m(k,{dialog:t,active:(null==(a=this.attrs.activeDialog)?void 0:a.id())===t.id(),actions:this.attrs.itemActions})}))),this.attrs.state.hasNext()&&!this.attrs.hideMore&&m("div",{className:"DialogList-loadMore"},m(l(),{className:"Button",onclick:this.attrs.state.loadNext.bind(this.attrs.state)},i().translator.trans("flarum-messages.forum.dialog_list.load_more_button"))))}}flarum.reg.add("flarum-messages","forum/components/DialogList",I)}}]); +//# sourceMappingURL=DialogDropdownList.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/DialogDropdownList.js.map b/extensions/messages/js/dist/forum/components/DialogDropdownList.js.map new file mode 100644 index 000000000..ad29fdc25 --- /dev/null +++ b/extensions/messages/js/dist/forum/components/DialogDropdownList.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forum/components/DialogDropdownList.js","mappings":"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","sources":["webpack://@flarum/messages/./src/forum/components/DialogDropdownList.tsx","webpack://@flarum/messages/./src/forum/components/DialogListItem.tsx","webpack://@flarum/messages/./src/forum/components/DialogList.tsx"],"sourcesContent":["import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport HeaderList from 'flarum/forum/components/HeaderList';\nimport DialogList from './DialogList';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nexport default class DialogDropdownList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n const state = this.attrs.state;\n return m(HeaderList, {\n className: \"DialogDropdownList\",\n title: app.translator.trans('flarum-messages.forum.dialog_list.title'),\n controls: this.controlItems(),\n hasItems: state.hasItems(),\n loading: state.isLoading(),\n emptyText: app.translator.trans('flarum-messages.forum.messages_page.empty_text'),\n loadMore: () => state.hasNext() && !state.isLoadingNext() && state.loadNext(),\n footer: () => m(\"h4\", null, m(LinkButton, {\n href: app.route('messages'),\n className: \"Button Button--link\",\n icon: \"fas fa-inbox\"\n }, app.translator.trans('flarum-messages.forum.dialog_list.view_all')))\n }, m(\"div\", {\n className: \"HeaderListGroup-content\"\n }, this.content()));\n }\n controlItems() {\n const items = new ItemList();\n const state = this.attrs.state;\n if (app.session.user.attribute('messageCount') > 0) {\n items.add('mark_all_as_read', m(Tooltip, {\n text: app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip')\n }, m(Button, {\n className: \"Button Button--link\",\n \"data-container\": \".DialogDropdownList\",\n icon: \"fas fa-check\",\n title: app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n onclick: state.markAllAsRead.bind(state)\n })), 70);\n }\n return items;\n }\n content() {\n return m(DialogList, {\n state: this.attrs.state,\n hideMore: true,\n itemActions: true\n });\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogDropdownList', DialogDropdownList);","import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nexport default class DialogListItem extends Component {\n view(vnode) {\n var _lastMessage$contentP;\n const dialog = this.attrs.dialog;\n const recipient = dialog.recipient();\n const lastMessage = dialog.lastMessage();\n return m(\"li\", {\n className: classList('DialogListItem', {\n 'DialogListItem--unread': dialog.unreadCount(),\n active: this.attrs.active\n })\n }, m(Link, {\n href: app.route.dialog(dialog),\n className: classList('DialogListItem-button', {\n active: this.attrs.active\n })\n }, m(\"div\", {\n className: \"DialogListItem-avatar\"\n }, m(Avatar, {\n user: recipient\n }), !!dialog.unreadCount() && m(\"div\", {\n className: \"Bubble Bubble--primary\"\n }, dialog.unreadCount())), m(\"div\", {\n className: \"DialogListItem-content\"\n }, m(\"div\", {\n className: \"DialogListItem-title\"\n }, username(recipient), humanTime(dialog.lastMessageAt()), this.attrs.actions && m(\"div\", {\n className: \"DialogListItem-actions\"\n }, this.actionItems().toArray())), m(\"div\", {\n className: \"DialogListItem-lastMessage\"\n }, lastMessage ? (_lastMessage$contentP = lastMessage.contentPlain()) == null ? void 0 : _lastMessage$contentP.slice(0, 80) : ''))));\n }\n actionItems() {\n const items = new ItemList();\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('flarum-messages.forum.dialog_list.mark_as_read_tooltip'),\n onclick: e => {\n var _this$attrs$dialog$da;\n e.preventDefault();\n e.stopPropagation();\n this.attrs.dialog.save({\n lastReadMessageId: ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.lastMessage.data).id\n }).finally(() => {\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }), 100);\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogListItem', DialogListItem);","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport DialogListItem from './DialogListItem';\nexport default class DialogList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"DialogList\"\n }, m(\"ul\", {\n className: \"DialogList-list\"\n }, this.attrs.state.getAllItems().map(dialog => {\n var _this$attrs$activeDia;\n return m(DialogListItem, {\n dialog: dialog,\n active: ((_this$attrs$activeDia = this.attrs.activeDialog) == null ? void 0 : _this$attrs$activeDia.id()) === dialog.id(),\n actions: this.attrs.itemActions\n });\n })), this.attrs.state.hasNext() && !this.attrs.hideMore && m(\"div\", {\n className: \"DialogList-loadMore\"\n }, m(Button, {\n className: \"Button\",\n onclick: this.attrs.state.loadNext.bind(this.attrs.state)\n }, app.translator.trans('flarum-messages.forum.dialog_list.load_more_button'))));\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogList', DialogList);"],"names":["DialogDropdownList","oninit","vnode","super","view","state","this","attrs","m","className","title","controls","controlItems","hasItems","loading","isLoading","emptyText","loadMore","hasNext","isLoadingNext","loadNext","footer","href","icon","content","items","add","text","onclick","markAllAsRead","bind","hideMore","itemActions","flarum","reg","DialogListItem","_lastMessage$contentP","dialog","recipient","lastMessage","unreadCount","active","user","lastMessageAt","actions","actionItems","toArray","contentPlain","slice","e","_this$attrs$dialog$da","preventDefault","stopPropagation","save","lastReadMessageId","data","relationships","id","finally","_attribute","messageCount","redraw","DialogList","oncreate","onupdate","getAllItems","map","_this$attrs$activeDia","activeDialog"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessageComposer.js b/extensions/messages/js/dist/forum/components/MessageComposer.js new file mode 100644 index 000000000..ad3eed86d --- /dev/null +++ b/extensions/messages/js/dist/forum/components/MessageComposer.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[514],{118:(s,e,t)=>{t.r(e),t.d(e,{default:()=>C});var i=t(905),r=t(892),o=t.n(r),a=t(157),n=t.n(a),l=t(596),c=t.n(l),d=t(636),p=t.n(d),u=t(645),h=t.n(u),f=t(162),g=t.n(f),b=t(343),x=t.n(b),v=t(547),y=t.n(v);class C extends(n()){constructor(){super(...arguments),(0,i.Z)(this,"recipients",void 0)}static initAttrs(s){super.initAttrs(s),s.placeholder=s.placeholder||c()(o().translator.trans("flarum-messages.forum.composer.placeholder",{},!0)),s.submitLabel=s.submitLabel||o().translator.trans("flarum-messages.forum.composer.submit_button",{},!0),s.confirmExit=s.confirmExit||c()(o().translator.trans("flarum-messages.forum.composer.discard_confirmation",{},!0)),s.className="ComposerBody--message"}oninit(s){var e;super.oninit(s);let t=(null==(e=this.attrs.replyingTo)?void 0:e.users())||this.attrs.recipients||[];t&&(t=t.filter((s=>s&&s.id()!==o().session.user.id()))),this.composer.fields.recipients=this.composer.fields.recipients||p()(t),this.recipients=this.composer.fields.recipients}headerItems(){const s=super.headerItems();return s.add("recipients",m("div",{className:"MessageComposer-recipients"},!this.attrs.replyingTo&&m(h(),{type:"button",className:"Button Button--outline Button--compact",onclick:()=>o().modal.show(g(),{title:o().translator.trans("flarum-messages.forum.recipient_selection_modal.title",{},!0),selected:this.recipients(),maxItems:1,excluded:[o().session.user.id()],onsubmit:s=>{this.recipients(s)}})},o().translator.trans("flarum-messages.forum.composer.recipients")),!!this.recipients().length&&m("div",{className:"MessageComposer-recipients-label"},o().translator.trans("flarum-messages.forum.composer.to")),m("ul",{className:"MessageComposer-recipients-list"},this.recipients().map((s=>m("li",null,m(y(),{text:s.username()},m(x(),{user:s}))))))),100),s}data(){const s={content:this.composer.fields.content()};return this.attrs.replyingTo?s.relationships={dialog:{data:{id:this.attrs.replyingTo.id(),type:"dialogs"}}}:s.users=this.recipients().map((s=>({id:s.id()}))),s}onsubmit(){this.loading=!0;const s=this.data();o().store.createRecord("dialog-messages").save(s,{params:{include:["dialog"]}}).then((s=>{var e,t;this.composer.hide(),m.route.set(o().route("dialog",{id:s.data.relationships.dialog.data.id})),null==(e=(t=this.attrs).onsubmit)||e.call(t,s)}),this.loaded.bind(this))}}(0,i.Z)(C,"focusOnSelector",(()=>".TextEditor-editor")),flarum.reg.add("flarum-messages","forum/components/MessageComposer",C)}}]); +//# sourceMappingURL=MessageComposer.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessageComposer.js.map b/extensions/messages/js/dist/forum/components/MessageComposer.js.map new file mode 100644 index 000000000..94d3ccf0d --- /dev/null +++ b/extensions/messages/js/dist/forum/components/MessageComposer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forum/components/MessageComposer.js","mappings":"ySAce,MAAMA,UAAwB,KAC3CC,cACEC,SAASC,YACT,OAAgBC,KAAM,kBAAc,EACtC,CACAC,iBAAiBC,GACfJ,MAAMK,UAAUD,GAChBA,EAAME,YAAcF,EAAME,aAAe,IAAY,qBAAqB,6CAA8C,CAAC,GAAG,IAC5HF,EAAMG,YAAcH,EAAMG,aAAe,qBAAqB,+CAAgD,CAAC,GAAG,GAClHH,EAAMI,YAAcJ,EAAMI,aAAe,IAAY,qBAAqB,sDAAuD,CAAC,GAAG,IACrIJ,EAAMK,UAAY,uBACpB,CACAC,OAAOC,GACL,IAAIC,EACJZ,MAAMU,OAAOC,GACb,IAAIE,GAA4D,OAAlDD,EAAwBV,KAAKE,MAAMU,iBAAsB,EAASF,EAAsBC,UAAYX,KAAKE,MAAMW,YAAc,GACvIF,IACFA,EAAQA,EAAMG,QAAOC,GAAQA,GAAQA,EAAKC,OAAS,yBAErDhB,KAAKiB,SAASC,OAAOL,WAAab,KAAKiB,SAASC,OAAOL,YAAc,IAAOF,GAC5EX,KAAKa,WAAab,KAAKiB,SAASC,OAAOL,UACzC,CACAM,cACE,MAAMC,EAAQtB,MAAMqB,cAwBpB,OAvBAC,EAAMC,IAAI,aAAcC,EAAE,MAAO,CAC/Bf,UAAW,+BACTP,KAAKE,MAAMU,YAAcU,EAAE,IAAQ,CACrCC,KAAM,SACNhB,UAAW,yCACXiB,QAAS,IAAM,eAAe,IAAoB,CAChDC,MAAO,qBAAqB,wDAAyD,CAAC,GAAG,GACzFC,SAAU1B,KAAKa,aACfc,SAAU,EACVC,SAAU,CAAC,uBACXC,SAAUlB,IACRX,KAAKa,WAAWF,EAAM,KAGzB,qBAAqB,gDAAiDX,KAAKa,aAAaiB,QAAUR,EAAE,MAAO,CAC5Gf,UAAW,oCACV,qBAAqB,sCAAuCe,EAAE,KAAM,CACrEf,UAAW,mCACVP,KAAKa,aAAakB,KAAIhB,GAAQO,EAAE,KAAM,KAAMA,EAAE,IAAS,CACxDU,KAAMjB,EAAKkB,YACVX,EAAE,IAAQ,CACXP,KAAMA,UACC,KACFK,CACT,CAKAc,OACE,MAAMA,EAAO,CACXC,QAASnC,KAAKiB,SAASC,OAAOiB,WAgBhC,OAdInC,KAAKE,MAAMU,WACbsB,EAAKE,cAAgB,CACnBC,OAAQ,CACNH,KAAM,CACJlB,GAAIhB,KAAKE,MAAMU,WAAWI,KAC1BO,KAAM,aAKZW,EAAKvB,MAAQX,KAAKa,aAAakB,KAAIhB,IAAQ,CACzCC,GAAID,EAAKC,SAGNkB,CACT,CACAL,WACE7B,KAAKsC,SAAU,EACf,MAAMJ,EAAOlC,KAAKkC,OAClB,uBAAuB,mBAAmBK,KAAKL,EAAM,CACnDM,OAAQ,CACNC,QAAS,CAAC,aAEXC,MAAKC,IACN,IAAIC,EAAsBC,EAC1B7C,KAAKiB,SAAS6B,OAGdxB,EAAEyB,MAAMC,IAAI,UAAU,SAAU,CAC9BhC,GAAI2B,EAAQT,KAAKE,cAAcC,OAAOH,KAAKlB,MAEmB,OAA/D4B,GAAwBC,EAAc7C,KAAKE,OAAO2B,WAA6Be,EAAqBK,KAAKJ,EAAaF,EAAQ,GAC9H3C,KAAKkD,OAAOC,KAAKnD,MACtB,GAEF,OAAgBJ,EAAiB,mBAAmB,IAAM,uBAC1DwD,OAAOC,IAAIhC,IAAI,kBAAmB,mCAAoCzB,E","sources":["webpack://@flarum/messages/./src/forum/components/MessageComposer.tsx"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport ComposerBody from 'flarum/forum/components/ComposerBody';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport UserSelectionModal from 'flarum/common/components/UserSelectionModal';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Tooltip from 'flarum/common/components/Tooltip';\n/**\n * The `MessageComposer` component displays the composer content for sending\n * a new message. It adds a selection field as a header control so the user can\n * enter the recipient(s) of their message.\n */\nexport default class MessageComposer extends ComposerBody {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"recipients\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.placeholder = attrs.placeholder || extractText(app.translator.trans('flarum-messages.forum.composer.placeholder', {}, true));\n attrs.submitLabel = attrs.submitLabel || app.translator.trans('flarum-messages.forum.composer.submit_button', {}, true);\n attrs.confirmExit = attrs.confirmExit || extractText(app.translator.trans('flarum-messages.forum.composer.discard_confirmation', {}, true));\n attrs.className = 'ComposerBody--message';\n }\n oninit(vnode) {\n var _this$attrs$replyingT;\n super.oninit(vnode);\n let users = ((_this$attrs$replyingT = this.attrs.replyingTo) == null ? void 0 : _this$attrs$replyingT.users()) || this.attrs.recipients || [];\n if (users) {\n users = users.filter(user => user && user.id() !== app.session.user.id());\n }\n this.composer.fields.recipients = this.composer.fields.recipients || Stream(users);\n this.recipients = this.composer.fields.recipients;\n }\n headerItems() {\n const items = super.headerItems();\n items.add('recipients', m(\"div\", {\n className: \"MessageComposer-recipients\"\n }, !this.attrs.replyingTo && m(Button, {\n type: \"button\",\n className: \"Button Button--outline Button--compact\",\n onclick: () => app.modal.show(UserSelectionModal, {\n title: app.translator.trans('flarum-messages.forum.recipient_selection_modal.title', {}, true),\n selected: this.recipients(),\n maxItems: 1,\n excluded: [app.session.user.id()],\n onsubmit: users => {\n this.recipients(users);\n }\n })\n }, app.translator.trans('flarum-messages.forum.composer.recipients')), !!this.recipients().length && m(\"div\", {\n className: \"MessageComposer-recipients-label\"\n }, app.translator.trans('flarum-messages.forum.composer.to')), m(\"ul\", {\n className: \"MessageComposer-recipients-list\"\n }, this.recipients().map(user => m(\"li\", null, m(Tooltip, {\n text: user.username()\n }, m(Avatar, {\n user: user\n })))))), 100);\n return items;\n }\n\n /**\n * Get the data to submit to the server when the discussion is saved.\n */\n data() {\n const data = {\n content: this.composer.fields.content()\n };\n if (this.attrs.replyingTo) {\n data.relationships = {\n dialog: {\n data: {\n id: this.attrs.replyingTo.id(),\n type: 'dialogs'\n }\n }\n };\n } else {\n data.users = this.recipients().map(user => ({\n id: user.id()\n }));\n }\n return data;\n }\n onsubmit() {\n this.loading = true;\n const data = this.data();\n app.store.createRecord('dialog-messages').save(data, {\n params: {\n include: ['dialog']\n }\n }).then(message => {\n var _this$attrs$onsubmit, _this$attrs;\n this.composer.hide();\n // @todo: app.dialogs.refresh();\n // @ts-ignore\n m.route.set(app.route('dialog', {\n id: message.data.relationships.dialog.data.id\n }));\n (_this$attrs$onsubmit = (_this$attrs = this.attrs).onsubmit) == null ? void 0 : _this$attrs$onsubmit.call(_this$attrs, message);\n }, this.loaded.bind(this));\n }\n}\n_defineProperty(MessageComposer, \"focusOnSelector\", () => '.TextEditor-editor');\nflarum.reg.add('flarum-messages', 'forum/components/MessageComposer', MessageComposer);"],"names":["MessageComposer","constructor","super","arguments","this","static","attrs","initAttrs","placeholder","submitLabel","confirmExit","className","oninit","vnode","_this$attrs$replyingT","users","replyingTo","recipients","filter","user","id","composer","fields","headerItems","items","add","m","type","onclick","title","selected","maxItems","excluded","onsubmit","length","map","text","username","data","content","relationships","dialog","loading","save","params","include","then","message","_this$attrs$onsubmit","_this$attrs","hide","route","set","call","loaded","bind","flarum","reg"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessagesPage.js b/extensions/messages/js/dist/forum/components/MessagesPage.js new file mode 100644 index 000000000..5e0e7e089 --- /dev/null +++ b/extensions/messages/js/dist/forum/components/MessagesPage.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[2],{292:(e,s,t)=>{t.d(s,{Z:()=>I});var a=t(892),r=t.n(a),o=t(433),i=t.n(o),l=t(645),n=t.n(l),d=t(836),u=t.n(d),c=t(678),g=t.n(c),h=t(343),p=t.n(h),f=t(479),v=t.n(f),b=t(491),N=t.n(b),M=t(960),_=t.n(M);class y extends(i()){view(e){var s;const t=this.attrs.dialog,a=t.recipient(),o=t.lastMessage();return m("li",{className:u()("DialogListItem",{"DialogListItem--unread":t.unreadCount(),active:this.attrs.active})},m(g(),{href:r().route.dialog(t),className:u()("DialogListItem-button",{active:this.attrs.active})},m("div",{className:"DialogListItem-avatar"},m(p(),{user:a}),!!t.unreadCount()&&m("div",{className:"Bubble Bubble--primary"},t.unreadCount())),m("div",{className:"DialogListItem-content"},m("div",{className:"DialogListItem-title"},v()(a),N()(t.lastMessageAt()),this.attrs.actions&&m("div",{className:"DialogListItem-actions"},this.actionItems().toArray())),m("div",{className:"DialogListItem-lastMessage"},o?null==(s=o.contentPlain())?void 0:s.slice(0,80):""))))}actionItems(){const e=new(_());return e.add("markAsRead",m(n(),{className:"Notification-action Button Button--link",icon:"fas fa-check","aria-label":r().translator.trans("flarum-messages.forum.dialog_list.mark_as_read_tooltip"),onclick:e=>{var s;e.preventDefault(),e.stopPropagation(),this.attrs.dialog.save({lastReadMessageId:(null==(s=this.attrs.dialog.data.relationships)?void 0:s.lastMessage.data).id}).finally((()=>{var e;0===this.attrs.dialog.unreadCount()&&r().session.user.pushAttributes({messageCount:(null!=(e=r().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()}))}}),100),e}}flarum.reg.add("flarum-messages","forum/components/DialogListItem",y);class I extends(i()){oninit(e){super.oninit(e)}oncreate(e){super.oncreate(e)}onupdate(e){super.onupdate(e)}view(){return m("div",{className:"DialogList"},m("ul",{className:"DialogList-list"},this.attrs.state.getAllItems().map((e=>{var s;return m(y,{dialog:e,active:(null==(s=this.attrs.activeDialog)?void 0:s.id())===e.id(),actions:this.attrs.itemActions})}))),this.attrs.state.hasNext()&&!this.attrs.hideMore&&m("div",{className:"DialogList-loadMore"},m(n(),{className:"Button",onclick:this.attrs.state.loadNext.bind(this.attrs.state)},r().translator.trans("flarum-messages.forum.dialog_list.load_more_button"))))}}flarum.reg.add("flarum-messages","forum/components/DialogList",I)},799:(e,s,t)=>{t.r(s),t.d(s,{default:()=>me});var a=t(905),r=t(892),o=t.n(r),i=t(581),l=t.n(i),n=t(421),d=t.n(n),u=t(287),c=t.n(u),g=t(292),h=t(149),p=t.n(h),f=t(636),v=t.n(f),b=t(360),N=t.n(b),M=t(135),_=t.n(M),y=t(645),I=t.n(y);class k extends(_()){static initAttrs(e){e.className="MessagesPage-nav"}items(){const e=super.items(),s=o().session.user.attribute("canSendAnyMessage");return e.remove("newDiscussion"),e.add("newMessage",m(I(),{icon:"fas fa-edit",className:"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage",itemClassName:"App-primaryControl",onclick:()=>this.newMessageAction(),disabled:!s},o().translator.trans("flarum-messages.forum.messages_page.new_message_button")),10),e}newMessageAction(){return flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>(o().composer.load((()=>t.e(514).then(t.bind(t,118))),{user:o().session.user,onsubmit:()=>{o().dialogs.refresh()}}).then((()=>o().composer.show())),o().composer)))}}flarum.reg.add("flarum-messages","forum/components/MessagesSidebar",k),flarum.reg.addChunkModule("514","118","flarum-messages","forum/components/MessageComposer");var D=t(433),A=t.n(D),w=t(307),P=t.n(w),S=t(960),T=t.n(S),B=t(609),L=t.n(B),C=t(343),x=t.n(C),R=t(207),H=t.n(R),Z=t(300),j=t.n(Z),q=t(271),G=t.n(q),O=t(836),E=t.n(O);class F extends(L()){oninit(e){super.oninit(e)}user(){return this.attrs.message.user()}controls(){return[]}freshness(){return this.attrs.message.freshness}createdByStarter(){return!1}onbeforeupdate(e){return super.onbeforeupdate(e)}onupdate(e){super.onupdate(e)}elementAttrs(){const e=this.attrs.message,s=super.elementAttrs();return s.className=E()(s.className||null,"Message",{"Post--renderFailed":e.renderFailed(),revealContent:!1,editing:!1}),s}header(){return super.header()}content(){return super.content().concat([m(H(),{headerItems:this.headerItems(),cardVisible:!1,isEditing:!1,isHidden:!1,contentHtml:this.attrs.message.contentHtml(),user:this.attrs.message.user()})])}classes(e){return super.classes(e)}actionItems(){return super.actionItems()}footerItems(){return super.footerItems()}sideItems(){return super.sideItems()}avatar(){return this.attrs.message.user()?m(x(),{user:this.attrs.message.user()}):""}headerItems(){const e=new(T()),s=this.attrs.message;return e.add("user",m(j(),{post:s}),100),e.add("meta",m(G(),{post:s})),e}}flarum.reg.add("flarum-messages","forum/components/Message",F);class V extends(A()){constructor(){super(...arguments),(0,a.Z)(this,"replyPlaceholderComponent",v()(null)),(0,a.Z)(this,"loadingPostComponent",v()(null)),(0,a.Z)(this,"scrollListener",void 0),(0,a.Z)(this,"initialToBottomScroll",!1),(0,a.Z)(this,"lastTime",null),(0,a.Z)(this,"checkedRead",!1),(0,a.Z)(this,"markingAsRead",!1)}oninit(e){super.oninit(e),Promise.all([flarum.reg.asyncModuleImport("flarum/forum/components/ReplyPlaceholder"),flarum.reg.asyncModuleImport("flarum/forum/components/LoadingPost")]).then((e=>{let[s,t]=e;this.replyPlaceholderComponent(s.default),this.loadingPostComponent(t.default)}))}oncreate(e){super.oncreate(e),this.scrollListener=new(P())(this.onscroll.bind(this),this.element),setTimeout((()=>{this.scrollListener.start(),this.element.addEventListener("scrollend",this.markAsRead.bind(this))}))}onupdate(e){super.onupdate(e),this.initialToBottomScroll||this.attrs.state.isLoading()||(this.scrollToBottom(),this.initialToBottomScroll=!0),this.initialToBottomScroll&&!this.checkedRead&&(this.markAsRead(),this.checkedRead=!0)}onremove(e){super.onremove(e),this.scrollListener.stop()}view(){return m("div",{className:"MessageStream"},this.attrs.state.isLoading()?m(p(),null):this.content())}content(){var e;const s=[],a=this.attrs.state.getAllItems().sort(((e,s)=>e.createdAt().getTime()-s.createdAt().getTime())),r=this.replyPlaceholderComponent(),i=this.loadingPostComponent();return a[0].id()!==(null==(e=this.attrs.dialog.data.relationships)?void 0:e.firstMessage.data).id&&(s.push(m("div",{className:"MessageStream-item",key:"loadPrevious"},m(I(),{onclick:()=>this.whileMaintainingScroll((()=>this.attrs.state.loadNext())),type:"button",className:"Button Button--block MessageStream-loadPrev"},o().translator.trans("flarum-messages.forum.messages_page.stream.load_previous_button")))),i&&s.push(m("div",{className:"MessageStream-item",key:"loading-prev"},m(i,null)))),a.forEach(((e,t)=>s.push(this.messageItem(e,t)))),r&&s.push(m("div",{className:"MessageStream-item",key:"reply"},m(r,{discussion:this.attrs.dialog,onclick:()=>{flarum.reg.asyncModuleImport("flarum/forum/components/ComposerBody").then((()=>{o().composer.load((()=>t.e(514).then(t.bind(t,118))),{user:o().session.user,replyingTo:this.attrs.dialog,onsubmit:e=>{this.attrs.state.push(e),setTimeout((()=>this.scrollToBottom()),50)}}).then((()=>o().composer.show()))}))},composingReply:()=>o().composer.composingMessageTo(this.attrs.dialog)}))),s}messageItem(e,s){return m("div",{className:"MessageStream-item",key:s,"data-id":e.id()},this.timeGap(e),m(F,{message:e}))}timeGap(e){var s;if(e.id()===(null==(s=this.attrs.dialog.data.relationships)?void 0:s.firstMessage.data).id)return this.lastTime=e.createdAt(),m("div",{class:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.start_of_the_conversation")));const t=this.lastTime,a=e.createdAt().getTime()-((null==t?void 0:t.getTime())||0);return this.lastTime=e.createdAt(),t&&a>3456e5?m("div",{className:"PostStream-timeGap"},m("span",null,o().translator.trans("flarum-messages.forum.messages_page.stream.time_lapsed_text",{period:dayjs().add(a,"ms").fromNow(!0)}))):null}onscroll(){this.whileMaintainingScroll((()=>this.element.scrollTop<=80&&this.attrs.state.hasNext()?this.attrs.state.loadNext():this.element.scrollTop+this.element.clientHeight===this.element.scrollHeight&&this.attrs.state.hasPrev()?this.attrs.state.loadPrev():null))}scrollToBottom(){this.element.scrollTop=this.element.scrollHeight}whileMaintainingScroll(e){const s=this.element.scrollTop,t=this.element.scrollHeight,a=e();a instanceof Promise&&a.then((()=>{requestAnimationFrame((()=>{this.element.scrollTop=this.element.scrollHeight-t+s}))}))}markAsRead(){const e=Number(this.$(".MessageStream-item[data-id]").filter(((e,s)=>this.element.scrollHeight<=this.element.clientHeight||this.$().offset().top+this.element.clientHeight>$(s).offset().top)).last().data("id"));e&&o().session.user&&e>(this.attrs.dialog.lastReadMessageId()||0)&&!this.markingAsRead&&(this.markingAsRead=!0,this.attrs.dialog.save({lastReadMessageId:e}).finally((()=>{var e;this.markingAsRead=!1,0===this.attrs.dialog.unreadCount()&&o().session.user.pushAttributes({messageCount:(null!=(e=o().session.user.attribute("messageCount"))?e:1)-1}),m.redraw()})))}}flarum.reg.add("flarum-messages","forum/components/MessageStream",V);var z=t(479),J=t.n(z),K=t(143),Q=t.n(K);class U extends(Q()){constructor(e,s){void 0===s&&(s=1),super(e,s,null)}get type(){return"dialog-messages"}getAllItems(){return super.getAllItems()}}flarum.reg.add("flarum-messages","forum/states/MessageStreamState",U);var W=t(678),X=t.n(W),Y=t(920),ee=t.n(Y),se=t(686),te=t.n(se),ae=t(476),re=t.n(ae),oe=t(983),ie=t.n(oe);class le extends(te()){className(){return"Modal--small Modal--flat DetailsModal"}title(){return o().translator.trans("flarum-messages.forum.dialog_section.details_modal.title")}content(){let e=(this.attrs.dialog.users()||[]).filter(Boolean);return m("div",{className:"Modal-body DetailsModal-infoGroups"},m("div",{className:"DetailsModal-recipients DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.recipients")),m("div",{className:"DetailsModal-recipients-list"},null==e?void 0:e.map((e=>m("div",{className:"DetailsModal-recipient"},m(x(),{user:e}),m(X(),{href:o().route("user",{username:e.slug()})},m("span",{className:"DetailsModal-recipient-username"},J()(e))),m("div",{className:"badges"},ie()(e.badges().toArray()))))))),this.infoItems().toArray())}infoItems(){const e=new(T());return e.add("created",m("div",{className:"DetailsModal-createdAt DetailsModal-info"},m("div",{className:"DetailsModal-info-title"},o().translator.trans("flarum-messages.forum.dialog_section.details_modal.created_at")),m("div",{className:"DetailsModal-info-content"},re()(this.attrs.dialog.createdAt())))),e}}flarum.reg.add("flarum-messages","forum/components/DetailsModal",le);class ne extends(A()){constructor(){super(...arguments),(0,a.Z)(this,"loading",!1),(0,a.Z)(this,"messages",void 0)}oninit(e){super.oninit(e),this.messages=new U({filter:{dialog:this.attrs.dialog.id()},sort:"-createdAt"}),this.messages.refresh()}view(){const e=this.attrs.dialog.recipient();return m("div",{className:"DialogSection"},m("div",{className:"DialogSection-header"},m(x(),{user:e}),m("div",{className:"DialogSection-header-info"},e&&m(X(),{href:o().route.user(e)},m("h2",null,J()(e)))||m("h2",null,J()(e)),m("div",{className:"badges"},ie()((null==e?void 0:e.badges().toArray())||[]))),m("div",{className:"DialogSection-header-actions"},this.actionItems().toArray())),m(V,{dialog:this.attrs.dialog,state:this.messages}))}actionItems(){const e=new(T());return e.add("details",m(ee(),{icon:"fas fa-ellipsis-h",className:"DialogSection-controls",buttonClassName:"Button Button--icon",accessibleToggleLabel:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label"),label:o().translator.trans("flarum-messages.forum.dialog_section.controls_toggle_label")},this.controlItems().toArray())),e}controlItems(){const e=new(T());return e.add("details",m(I(),{icon:"fas fa-info-circle",onclick:()=>o().modal.show(le,{dialog:this.attrs.dialog})},o().translator.trans("flarum-messages.forum.dialog_section.controls.details_button"))),e}}flarum.reg.add("flarum-messages","forum/components/DialogSection",ne);class me extends(l()){constructor(){super(...arguments),(0,a.Z)(this,"selectedDialog",v()(null))}oninit(e){super.oninit(e),o().session.user?(o().current.set("noTagsList",!0),o().dialogs.hasItems()?this.initDialog():o().dialogs.refresh().then((async()=>{o().dialogs.hasItems()&&await this.initDialog()}))):m.route.set(o().route("index"))}dialogRequestParams(){return{include:"users.groups"}}async initDialog(){const e=m.route.param("id"),s=o().translator.trans("flarum-messages.forum.messages_page.title",{},!0);let t;t=e?o().store.getById("dialogs",e)||await o().store.find("dialogs",e,this.dialogRequestParams()):o().dialogs.getAllItems()[0],this.selectedDialog(t),t?(o().setTitle(t.title()),o().history.push("dialog",t.title())):(o().setTitle(s),o().history.push("messages",s)),m.redraw()}onupdate(e){super.onupdate(e);const s=this.element.querySelector(".DialogListItem.active"),t=this.element.querySelector(".DialogList");s&&$(t).offset().top+t.clientHeight<=$(s).offset().top&&s.scrollIntoView()}view(){return m(d(),{className:"MessagesPage Page--vertical",loading:!1,hero:this.hero.bind(this),sidebar:()=>m(k,null)},o().dialogs.isLoading()?m(p(),null):o().dialogs.hasItems()?m("div",{className:"MessagesPage-content"},m("div",{className:"MessagesPage-sidebar",key:"sidebar"},m("div",{className:"IndexPage-toolbar",key:"toolbar"},m("ul",{className:"IndexPage-toolbar-view"},ie()(this.viewItems().toArray())),m("ul",{className:"IndexPage-toolbar-action"},ie()(this.actionItems().toArray()))),m(g.Z,{key:"list",state:o().dialogs,activeDialog:this.selectedDialog()})),this.selectedDialog()?m(ne,{key:"dialog",dialog:this.selectedDialog()}):m(p(),{key:"loading",display:"block"})):m(N(),{icon:"far fa-envelope-open"},o().translator.trans("flarum-messages.forum.messages_page.empty_text")))}hero(){return m("header",{className:"Hero MessagesPageHero"},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},m(c(),{name:"fas fa-envelope"})," ",o().translator.trans("flarum-messages.forum.messages_page.hero.title")),m("div",{className:"Hero-subtitle"},o().translator.trans("flarum-messages.forum.messages_page.hero.subtitle")))))}viewItems(){var e;const s=new(T()),t=o().dialogs.sortMap(),a=Object.keys(t).reduce(((e,s)=>{const a=t[s];return e[s]="string"!=typeof a?a.label:o().translator.trans("flarum-messages.forum.index_sort.".concat(s,"_button")),e}),{});return s.add("sort",m(ee(),{buttonClassName:"Button",label:a[(null==(e=o().dialogs.getParams())?void 0:e.sort)||0]||Object.values(a)[0],accessibleToggleLabel:o().translator.trans("core.forum.index_sort.toggle_dropdown_accessible_label")},Object.keys(a).map((e=>{const s=a[e],r=(o().dialogs.getParams().sort||Object.keys(t)[0])===e;return m(I(),{icon:!r||"fas fa-check",onclick:()=>o().dialogs.changeSort(e),active:r},s)})))),s}actionItems(){const e=new(T());return e.add("refresh",m(I(),{title:o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.refresh_tooltip"),icon:"fas fa-sync",className:"Button Button--icon",onclick:()=>{o().dialogs.refresh()}})),o().session.user&&e.add("markAllAsRead",m(I(),{title:o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),"aria-label":o().translator.trans("flarum-messages.forum.messages_page.mark_all_as_read_tooltip"),icon:"fas fa-check",className:"Button Button--icon",onclick:()=>o().dialogs.markAllAsRead()})),e}}flarum.reg.add("flarum-messages","forum/components/MessagesPage",me)}}]); +//# sourceMappingURL=MessagesPage.js.map \ No newline at end of file diff --git a/extensions/messages/js/dist/forum/components/MessagesPage.js.map b/extensions/messages/js/dist/forum/components/MessagesPage.js.map new file mode 100644 index 000000000..b7ba996c9 --- /dev/null +++ b/extensions/messages/js/dist/forum/components/MessagesPage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forum/components/MessagesPage.js","mappings":"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","sources":["webpack://@flarum/messages/./src/forum/components/DialogListItem.tsx","webpack://@flarum/messages/./src/forum/components/DialogList.tsx","webpack://@flarum/messages/./src/forum/components/MessagesSidebar.tsx","webpack://@flarum/messages/./src/forum/components/Message.tsx","webpack://@flarum/messages/./src/forum/components/MessageStream.tsx","webpack://@flarum/messages/./src/forum/states/MessageStreamState.ts","webpack://@flarum/messages/./src/forum/components/DetailsModal.tsx","webpack://@flarum/messages/./src/forum/components/DialogSection.tsx","webpack://@flarum/messages/./src/forum/components/MessagesPage.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nexport default class DialogListItem extends Component {\n view(vnode) {\n var _lastMessage$contentP;\n const dialog = this.attrs.dialog;\n const recipient = dialog.recipient();\n const lastMessage = dialog.lastMessage();\n return m(\"li\", {\n className: classList('DialogListItem', {\n 'DialogListItem--unread': dialog.unreadCount(),\n active: this.attrs.active\n })\n }, m(Link, {\n href: app.route.dialog(dialog),\n className: classList('DialogListItem-button', {\n active: this.attrs.active\n })\n }, m(\"div\", {\n className: \"DialogListItem-avatar\"\n }, m(Avatar, {\n user: recipient\n }), !!dialog.unreadCount() && m(\"div\", {\n className: \"Bubble Bubble--primary\"\n }, dialog.unreadCount())), m(\"div\", {\n className: \"DialogListItem-content\"\n }, m(\"div\", {\n className: \"DialogListItem-title\"\n }, username(recipient), humanTime(dialog.lastMessageAt()), this.attrs.actions && m(\"div\", {\n className: \"DialogListItem-actions\"\n }, this.actionItems().toArray())), m(\"div\", {\n className: \"DialogListItem-lastMessage\"\n }, lastMessage ? (_lastMessage$contentP = lastMessage.contentPlain()) == null ? void 0 : _lastMessage$contentP.slice(0, 80) : ''))));\n }\n actionItems() {\n const items = new ItemList();\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('flarum-messages.forum.dialog_list.mark_as_read_tooltip'),\n onclick: e => {\n var _this$attrs$dialog$da;\n e.preventDefault();\n e.stopPropagation();\n this.attrs.dialog.save({\n lastReadMessageId: ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.lastMessage.data).id\n }).finally(() => {\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }), 100);\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogListItem', DialogListItem);","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport DialogListItem from './DialogListItem';\nexport default class DialogList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"DialogList\"\n }, m(\"ul\", {\n className: \"DialogList-list\"\n }, this.attrs.state.getAllItems().map(dialog => {\n var _this$attrs$activeDia;\n return m(DialogListItem, {\n dialog: dialog,\n active: ((_this$attrs$activeDia = this.attrs.activeDialog) == null ? void 0 : _this$attrs$activeDia.id()) === dialog.id(),\n actions: this.attrs.itemActions\n });\n })), this.attrs.state.hasNext() && !this.attrs.hideMore && m(\"div\", {\n className: \"DialogList-loadMore\"\n }, m(Button, {\n className: \"Button\",\n onclick: this.attrs.state.loadNext.bind(this.attrs.state)\n }, app.translator.trans('flarum-messages.forum.dialog_list.load_more_button'))));\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogList', DialogList);","import app from 'flarum/forum/app';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesSidebar extends IndexSidebar {\n static initAttrs(attrs) {\n attrs.className = 'MessagesPage-nav';\n }\n items() {\n const items = super.items();\n const canSendAnyMessage = app.session.user.attribute('canSendAnyMessage');\n items.remove('newDiscussion');\n items.add('newMessage', m(Button, {\n icon: \"fas fa-edit\",\n className: \"Button Button--primary IndexPage-newDiscussion MessagesPage-newMessage\",\n itemClassName: \"App-primaryControl\",\n onclick: () => {\n return this.newMessageAction();\n },\n disabled: !canSendAnyMessage\n }, app.translator.trans('flarum-messages.forum.messages_page.new_message_button')), 10);\n return items;\n }\n\n /**\n * Open the composer for a new message.\n */\n newMessageAction() {\n return flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n onsubmit: () => {\n app.dialogs.refresh();\n }\n }).then(() => app.composer.show());\n return app.composer;\n });\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesSidebar', MessagesSidebar);flarum.reg.addChunkModule('514', '118', 'flarum-messages', 'forum/components/MessageComposer');","import ItemList from 'flarum/common/utils/ItemList';\nimport AbstractPost from 'flarum/forum/components/AbstractPost';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Comment from 'flarum/forum/components/Comment';\nimport PostUser from 'flarum/forum/components/PostUser';\nimport PostMeta from 'flarum/forum/components/PostMeta';\nimport classList from 'flarum/common/utils/classList';\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n */\nexport default class Message extends AbstractPost {\n oninit(vnode) {\n super.oninit(vnode);\n }\n user() {\n return this.attrs.message.user();\n }\n controls() {\n return [];\n }\n freshness() {\n return this.attrs.message.freshness;\n }\n createdByStarter() {\n return false;\n }\n onbeforeupdate(vnode) {\n return super.onbeforeupdate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n elementAttrs() {\n const message = this.attrs.message;\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className || null, 'Message', {\n 'Post--renderFailed': message.renderFailed(),\n revealContent: false,\n editing: false\n });\n return attrs;\n }\n header() {\n return super.header();\n }\n content() {\n return super.content().concat([m(Comment, {\n headerItems: this.headerItems(),\n cardVisible: false,\n isEditing: false,\n isHidden: false,\n contentHtml: this.attrs.message.contentHtml(),\n user: this.attrs.message.user()\n })]);\n }\n classes(existing) {\n return super.classes(existing);\n }\n actionItems() {\n return super.actionItems();\n }\n footerItems() {\n return super.footerItems();\n }\n sideItems() {\n return super.sideItems();\n }\n avatar() {\n return this.attrs.message.user() ? m(Avatar, {\n user: this.attrs.message.user()\n }) : '';\n }\n headerItems() {\n const items = new ItemList();\n const message = this.attrs.message;\n items.add('user', m(PostUser, {\n post: message\n }), 100);\n items.add('meta', m(PostMeta, {\n post: message\n }));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/Message', Message);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport ScrollListener from 'flarum/common/utils/ScrollListener';\nimport Message from './Message';\nexport default class MessageStream extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"replyPlaceholderComponent\", Stream(null));\n _defineProperty(this, \"loadingPostComponent\", Stream(null));\n _defineProperty(this, \"scrollListener\", void 0);\n _defineProperty(this, \"initialToBottomScroll\", false);\n _defineProperty(this, \"lastTime\", null);\n _defineProperty(this, \"checkedRead\", false);\n _defineProperty(this, \"markingAsRead\", false);\n }\n oninit(vnode) {\n super.oninit(vnode);\n\n // We need the lazy ReplyPlaceholder and LoadingPost components to be loaded.\n Promise.all([flarum.reg.asyncModuleImport('flarum/forum/components/ReplyPlaceholder'), flarum.reg.asyncModuleImport('flarum/forum/components/LoadingPost')]).then(_ref => {\n let [ReplyPlaceholder, LoadingPost] = _ref;\n this.replyPlaceholderComponent(ReplyPlaceholder.default);\n this.loadingPostComponent(LoadingPost.default);\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.scrollListener = new ScrollListener(this.onscroll.bind(this), this.element);\n setTimeout(() => {\n this.scrollListener.start();\n this.element.addEventListener('scrollend', this.markAsRead.bind(this));\n });\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // @todo: for future versions, consider using the post stream scrubber to scroll through the messages. (big task..)\n // @todo: introduce read status, to jump to the first unread message instead.\n if (!this.initialToBottomScroll && !this.attrs.state.isLoading()) {\n this.scrollToBottom();\n this.initialToBottomScroll = true;\n }\n if (this.initialToBottomScroll && !this.checkedRead) {\n this.markAsRead();\n this.checkedRead = true;\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n this.scrollListener.stop();\n }\n view() {\n return m(\"div\", {\n className: \"MessageStream\"\n }, this.attrs.state.isLoading() ? m(LoadingIndicator, null) : this.content());\n }\n content() {\n var _this$attrs$dialog$da;\n const items = [];\n const messages = this.attrs.state.getAllItems().sort((a, b) => a.createdAt().getTime() - b.createdAt().getTime());\n const ReplyPlaceholder = this.replyPlaceholderComponent();\n const LoadingPost = this.loadingPostComponent();\n if (messages[0].id() !== ((_this$attrs$dialog$da = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da.firstMessage.data).id) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loadPrevious\"\n }, m(Button, {\n onclick: () => this.whileMaintainingScroll(() => this.attrs.state.loadNext()),\n type: \"button\",\n className: \"Button Button--block MessageStream-loadPrev\"\n }, app.translator.trans('flarum-messages.forum.messages_page.stream.load_previous_button'))));\n if (LoadingPost) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"loading-prev\"\n }, m(LoadingPost, null)));\n }\n }\n messages.forEach((message, index) => items.push(this.messageItem(message, index)));\n if (ReplyPlaceholder) {\n items.push(m(\"div\", {\n className: \"MessageStream-item\",\n key: \"reply\" /*data-index={this.attrs.state.count()}*/\n }, m(ReplyPlaceholder, {\n discussion: this.attrs.dialog,\n onclick: () => {\n flarum.reg.asyncModuleImport('flarum/forum/components/ComposerBody').then(() => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/MessageComposer', webpackMode: 'lazy-once' */ './MessageComposer'), {\n user: app.session.user,\n replyingTo: this.attrs.dialog,\n onsubmit: message => {\n this.attrs.state.push(message);\n setTimeout(() => this.scrollToBottom(), 50);\n }\n }).then(() => app.composer.show());\n });\n },\n composingReply: () => app.composer.composingMessageTo(this.attrs.dialog)\n })));\n }\n return items;\n }\n messageItem(message, index) {\n return m(\"div\", {\n className: \"MessageStream-item\",\n key: index,\n \"data-id\": message.id()\n }, this.timeGap(message), m(Message, {\n message: message\n }));\n }\n timeGap(message) {\n var _this$attrs$dialog$da2;\n if (message.id() === ((_this$attrs$dialog$da2 = this.attrs.dialog.data.relationships) == null ? void 0 : _this$attrs$dialog$da2.firstMessage.data).id) {\n this.lastTime = message.createdAt();\n return m(\"div\", {\n class: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.start_of_the_conversation')));\n }\n const lastTime = this.lastTime;\n const dt = message.createdAt().getTime() - ((lastTime == null ? void 0 : lastTime.getTime()) || 0);\n this.lastTime = message.createdAt();\n if (lastTime && dt > 1000 * 60 * 60 * 24 * 4) {\n return m(\"div\", {\n className: \"PostStream-timeGap\"\n }, m(\"span\", null, app.translator.trans('flarum-messages.forum.messages_page.stream.time_lapsed_text', {\n period: dayjs().add(dt, 'ms').fromNow(true)\n })));\n }\n return null;\n }\n onscroll() {\n this.whileMaintainingScroll(() => {\n if (this.element.scrollTop <= 80 && this.attrs.state.hasNext()) {\n return this.attrs.state.loadNext();\n }\n if (this.element.scrollTop + this.element.clientHeight === this.element.scrollHeight && this.attrs.state.hasPrev()) {\n return this.attrs.state.loadPrev();\n }\n return null;\n });\n }\n scrollToBottom() {\n this.element.scrollTop = this.element.scrollHeight;\n }\n whileMaintainingScroll(callback) {\n const scrollTop = this.element.scrollTop;\n const scrollHeight = this.element.scrollHeight;\n const result = callback();\n if (result instanceof Promise) {\n result.then(() => {\n requestAnimationFrame(() => {\n this.element.scrollTop = this.element.scrollHeight - scrollHeight + scrollTop;\n });\n });\n }\n }\n markAsRead() {\n const lastVisibleId = Number(this.$('.MessageStream-item[data-id]').filter((_, $el) => {\n if (this.element.scrollHeight <= this.element.clientHeight) {\n return true;\n }\n return this.$().offset().top + this.element.clientHeight > $($el).offset().top;\n }).last().data('id'));\n if (lastVisibleId && app.session.user && lastVisibleId > (this.attrs.dialog.lastReadMessageId() || 0) && !this.markingAsRead) {\n this.markingAsRead = true;\n this.attrs.dialog.save({\n lastReadMessageId: lastVisibleId\n }).finally(() => {\n this.markingAsRead = false;\n if (this.attrs.dialog.unreadCount() === 0) {\n var _attribute;\n app.session.user.pushAttributes({\n messageCount: ((_attribute = app.session.user.attribute('messageCount')) != null ? _attribute : 1) - 1\n });\n }\n m.redraw();\n });\n }\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessageStream', MessageStream);","import PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class MessageStreamState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n super(params, page, null);\n }\n get type() {\n return 'dialog-messages';\n }\n getAllItems() {\n return super.getAllItems();\n }\n}\nflarum.reg.add('flarum-messages', 'forum/states/MessageStreamState', MessageStreamState);","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Avatar from 'flarum/common/components/Avatar';\nimport fullTime from 'flarum/common/helpers/fullTime';\nimport username from 'flarum/common/helpers/username';\nimport Link from 'flarum/common/components/Link';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DetailsModal extends Modal {\n className() {\n return 'Modal--small Modal--flat DetailsModal';\n }\n title() {\n return app.translator.trans('flarum-messages.forum.dialog_section.details_modal.title');\n }\n content() {\n let recipients = (this.attrs.dialog.users() || []).filter(Boolean);\n return m(\"div\", {\n className: \"Modal-body DetailsModal-infoGroups\"\n }, m(\"div\", {\n className: \"DetailsModal-recipients DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.recipients')), m(\"div\", {\n className: \"DetailsModal-recipients-list\"\n }, recipients == null ? void 0 : recipients.map(recipient => {\n return m(\"div\", {\n className: \"DetailsModal-recipient\"\n }, m(Avatar, {\n user: recipient\n }), m(Link, {\n href: app.route('user', {\n username: recipient.slug()\n })\n }, m(\"span\", {\n className: \"DetailsModal-recipient-username\"\n }, username(recipient))), m(\"div\", {\n className: \"badges\"\n }, listItems(recipient.badges().toArray())));\n }))), this.infoItems().toArray());\n }\n infoItems() {\n const items = new ItemList();\n items.add('created', m(\"div\", {\n className: \"DetailsModal-createdAt DetailsModal-info\"\n }, m(\"div\", {\n className: \"DetailsModal-info-title\"\n }, app.translator.trans('flarum-messages.forum.dialog_section.details_modal.created_at')), m(\"div\", {\n className: \"DetailsModal-info-content\"\n }, fullTime(this.attrs.dialog.createdAt()))));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DetailsModal', DetailsModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from 'flarum/common/Component';\nimport MessageStream from './MessageStream';\nimport username from 'flarum/common/helpers/username';\nimport MessageStreamState from '../states/MessageStreamState';\nimport Avatar from 'flarum/common/components/Avatar';\nimport Link from 'flarum/common/components/Link';\nimport app from 'flarum/forum/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Button from 'flarum/common/components/Button';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport DetailsModal from './DetailsModal';\nimport listItems from 'flarum/common/helpers/listItems';\nexport default class DialogSection extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"messages\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.messages = new MessageStreamState({\n filter: {\n dialog: this.attrs.dialog.id()\n },\n sort: '-createdAt'\n });\n this.messages.refresh();\n }\n view() {\n const recipient = this.attrs.dialog.recipient();\n return m(\"div\", {\n className: \"DialogSection\"\n }, m(\"div\", {\n className: \"DialogSection-header\"\n }, m(Avatar, {\n user: recipient\n }), m(\"div\", {\n className: \"DialogSection-header-info\"\n }, recipient && m(Link, {\n href: app.route.user(recipient)\n }, m(\"h2\", null, username(recipient))) || m(\"h2\", null, username(recipient)), m(\"div\", {\n className: \"badges\"\n }, listItems((recipient == null ? void 0 : recipient.badges().toArray()) || []))), m(\"div\", {\n className: \"DialogSection-header-actions\"\n }, this.actionItems().toArray())), m(MessageStream, {\n dialog: this.attrs.dialog,\n state: this.messages\n }));\n }\n actionItems() {\n const items = new ItemList();\n items.add('details', m(Dropdown, {\n icon: \"fas fa-ellipsis-h\",\n className: \"DialogSection-controls\",\n buttonClassName: \"Button Button--icon\",\n accessibleToggleLabel: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label'),\n label: app.translator.trans('flarum-messages.forum.dialog_section.controls_toggle_label')\n }, this.controlItems().toArray()));\n return items;\n }\n controlItems() {\n const items = new ItemList();\n items.add('details', m(Button, {\n icon: \"fas fa-info-circle\",\n onclick: () => app.modal.show(DetailsModal, {\n dialog: this.attrs.dialog\n })\n }, app.translator.trans('flarum-messages.forum.dialog_section.controls.details_button')));\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/DialogSection', DialogSection);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport Icon from 'flarum/common/components/Icon';\nimport DialogList from './DialogList';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Stream from 'flarum/common/utils/Stream';\nimport InfoTile from 'flarum/common/components/InfoTile';\nimport MessagesSidebar from './MessagesSidebar';\nimport DialogSection from './DialogSection';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nexport default class MessagesPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"selectedDialog\", Stream(null));\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (!app.session.user) {\n m.route.set(app.route('index'));\n return;\n }\n app.current.set('noTagsList', true);\n if (!app.dialogs.hasItems()) {\n app.dialogs.refresh().then(async () => {\n if (app.dialogs.hasItems()) {\n await this.initDialog();\n }\n });\n } else {\n this.initDialog();\n }\n }\n dialogRequestParams() {\n return {\n include: 'users.groups'\n };\n }\n async initDialog() {\n const dialogId = m.route.param('id');\n const title = app.translator.trans('flarum-messages.forum.messages_page.title', {}, true);\n let dialog;\n if (dialogId) {\n dialog = app.store.getById('dialogs', dialogId) || (await app.store.find('dialogs', dialogId, this.dialogRequestParams()));\n } else {\n dialog = app.dialogs.getAllItems()[0];\n }\n this.selectedDialog(dialog);\n if (dialog) {\n app.setTitle(dialog.title());\n app.history.push('dialog', dialog.title());\n } else {\n app.setTitle(title);\n app.history.push('messages', title);\n }\n m.redraw();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // Scroll the dialog list to the active dialog item if present and not visible.\n const dialogElement = this.element.querySelector('.DialogListItem.active');\n const container = this.element.querySelector('.DialogList');\n if (dialogElement && $(container).offset().top + container.clientHeight <= $(dialogElement).offset().top) {\n dialogElement.scrollIntoView();\n }\n }\n view() {\n return m(PageStructure, {\n className: \"MessagesPage Page--vertical\",\n loading: false,\n hero: this.hero.bind(this),\n sidebar: () => m(MessagesSidebar, null)\n }, app.dialogs.isLoading() ? m(LoadingIndicator, null) : !app.dialogs.hasItems() ? m(InfoTile, {\n icon: \"far fa-envelope-open\"\n }, app.translator.trans('flarum-messages.forum.messages_page.empty_text')) : m(\"div\", {\n className: \"MessagesPage-content\"\n }, m(\"div\", {\n className: \"MessagesPage-sidebar\",\n key: \"sidebar\"\n }, m(\"div\", {\n className: \"IndexPage-toolbar\",\n key: \"toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(DialogList, {\n key: \"list\",\n state: app.dialogs,\n activeDialog: this.selectedDialog()\n })), this.selectedDialog() ? m(DialogSection, {\n key: \"dialog\",\n dialog: this.selectedDialog()\n }) : m(LoadingIndicator, {\n key: \"loading\",\n display: \"block\"\n })));\n }\n hero() {\n return m(\"header\", {\n className: \"Hero MessagesPageHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, m(Icon, {\n name: \"fas fa-envelope\"\n }), \" \", app.translator.trans('flarum-messages.forum.messages_page.hero.title')), m(\"div\", {\n className: \"Hero-subtitle\"\n }, app.translator.trans('flarum-messages.forum.messages_page.hero.subtitle')))));\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n var _app$dialogs$getParam;\n const items = new ItemList();\n const sortMap = app.dialogs.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n const sort = sortMap[sortId];\n acc[sortId] = typeof sort !== 'string' ? sort.label : app.translator.trans(\"flarum-messages.forum.index_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[((_app$dialogs$getParam = app.dialogs.getParams()) == null ? void 0 : _app$dialogs$getParam.sort) || 0] || Object.values(sortOptions)[0],\n accessibleToggleLabel: app.translator.trans('core.forum.index_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.dialogs.getParams().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.dialogs.changeSort(value),\n active: active\n }, label);\n })));\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n app.dialogs.refresh();\n }\n }));\n if (app.session.user) {\n items.add('markAllAsRead', m(Button, {\n title: app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n \"aria-label\": app.translator.trans('flarum-messages.forum.messages_page.mark_all_as_read_tooltip'),\n icon: \"fas fa-check\",\n className: \"Button Button--icon\",\n onclick: () => app.dialogs.markAllAsRead()\n }));\n }\n return items;\n }\n}\nflarum.reg.add('flarum-messages', 'forum/components/MessagesPage', MessagesPage);"],"names":["DialogListItem","view","vnode","_lastMessage$contentP","dialog","this","attrs","recipient","lastMessage","m","className","unreadCount","active","href","user","lastMessageAt","actions","actionItems","toArray","contentPlain","slice","items","add","icon","onclick","e","_this$attrs$dialog$da","preventDefault","stopPropagation","save","lastReadMessageId","data","relationships","id","finally","_attribute","messageCount","redraw","flarum","reg","DialogList","oninit","super","oncreate","onupdate","state","getAllItems","map","_this$attrs$activeDia","activeDialog","itemActions","hasNext","hideMore","loadNext","bind","MessagesSidebar","static","canSendAnyMessage","remove","itemClassName","newMessageAction","disabled","asyncModuleImport","then","onsubmit","addChunkModule","Message","message","controls","freshness","createdByStarter","onbeforeupdate","elementAttrs","renderFailed","revealContent","editing","header","content","concat","headerItems","cardVisible","isEditing","isHidden","contentHtml","classes","existing","footerItems","sideItems","avatar","post","MessageStream","constructor","arguments","Promise","all","_ref","ReplyPlaceholder","LoadingPost","replyPlaceholderComponent","default","loadingPostComponent","scrollListener","onscroll","element","setTimeout","start","addEventListener","markAsRead","initialToBottomScroll","isLoading","scrollToBottom","checkedRead","onremove","stop","messages","sort","a","b","createdAt","getTime","firstMessage","push","key","whileMaintainingScroll","type","forEach","index","messageItem","discussion","replyingTo","composingReply","timeGap","_this$attrs$dialog$da2","lastTime","class","dt","period","dayjs","fromNow","scrollTop","clientHeight","scrollHeight","hasPrev","loadPrev","callback","result","requestAnimationFrame","lastVisibleId","Number","$","filter","_","$el","offset","top","last","markingAsRead","MessageStreamState","params","page","DetailsModal","title","recipients","users","Boolean","username","slug","badges","infoItems","DialogSection","refresh","buttonClassName","accessibleToggleLabel","label","controlItems","MessagesPage","initDialog","async","route","set","dialogRequestParams","include","dialogId","param","selectedDialog","dialogElement","querySelector","container","scrollIntoView","loading","hero","sidebar","viewItems","display","name","_app$dialogs$getParam","sortMap","sortOptions","Object","keys","reduce","acc","sortId","values","value"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts b/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts index 48cda1620..b8ad8b4b2 100644 --- a/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts +++ b/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts @@ -1,6 +1,6 @@ import type Mithril from 'mithril'; import Component, { type ComponentAttrs } from 'flarum/common/Component'; -import { type SettingsComponentOptions } from '@flarum/core/src/admin/components/AdminPage'; +import { type SettingsComponentOptions } from 'flarum/admin/components/AdminPage'; import { type CommonFieldOptions } from 'flarum/common/components/FormGroup'; import type ItemList from 'flarum/common/utils/ItemList'; import Stream from 'flarum/common/utils/Stream'; diff --git a/extensions/package-manager/js/dist-typings/components/TaskOutputModal.d.ts b/extensions/package-manager/js/dist-typings/components/TaskOutputModal.d.ts index fd62ede6c..4ad9a25a7 100644 --- a/extensions/package-manager/js/dist-typings/components/TaskOutputModal.d.ts +++ b/extensions/package-manager/js/dist-typings/components/TaskOutputModal.d.ts @@ -1,5 +1,6 @@ +/// /// -/// +/// import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; import Task from '../models/Task'; interface TaskOutputModalAttrs extends IInternalModalAttrs { diff --git a/extensions/package-manager/js/dist-typings/components/WhyNotModal.d.ts b/extensions/package-manager/js/dist-typings/components/WhyNotModal.d.ts index 3eed70a2a..bc5999870 100644 --- a/extensions/package-manager/js/dist-typings/components/WhyNotModal.d.ts +++ b/extensions/package-manager/js/dist-typings/components/WhyNotModal.d.ts @@ -1,4 +1,5 @@ -/// +/// +/// import type Mithril from 'mithril'; import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; export interface WhyNotModalAttrs extends IInternalModalAttrs { diff --git a/extensions/package-manager/js/dist-typings/extend.d.ts b/extensions/package-manager/js/dist-typings/extend.d.ts index f83ce3204..4c1b0a615 100644 --- a/extensions/package-manager/js/dist-typings/extend.d.ts +++ b/extensions/package-manager/js/dist-typings/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: import("flarum/common/extenders/Admin").default[]; export default _default; diff --git a/extensions/pusher/js/dist-typings/admin/extend.d.ts b/extensions/pusher/js/dist-typings/admin/extend.d.ts index f83ce3204..4c1b0a615 100644 --- a/extensions/pusher/js/dist-typings/admin/extend.d.ts +++ b/extensions/pusher/js/dist-typings/admin/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: import("flarum/common/extenders/Admin").default[]; export default _default; diff --git a/extensions/statistics/js/dist-typings/extend.d.ts b/extensions/statistics/js/dist-typings/extend.d.ts index f83ce3204..4c1b0a615 100644 --- a/extensions/statistics/js/dist-typings/extend.d.ts +++ b/extensions/statistics/js/dist-typings/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: import("flarum/common/extenders/Admin").default[]; export default _default; diff --git a/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts b/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts index 89844a829..839f19a7c 100644 --- a/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts +++ b/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts @@ -1,3 +1,4 @@ +/// /// import FormModal, { IFormModalAttrs } from 'flarum/common/components/FormModal'; import ItemList from 'flarum/common/utils/ItemList'; diff --git a/extensions/tags/js/dist-typings/admin/extend.d.ts b/extensions/tags/js/dist-typings/admin/extend.d.ts index f83ce3204..358f8170b 100644 --- a/extensions/tags/js/dist-typings/admin/extend.d.ts +++ b/extensions/tags/js/dist-typings/admin/extend.d.ts @@ -1,2 +1,2 @@ -declare const _default: any[]; +declare const _default: (import("flarum/common/extenders/Store").default | import("flarum/common/extenders/Search").default | import("flarum/common/extenders/Admin").default)[]; export default _default; diff --git a/extensions/tags/js/dist-typings/forum/components/DiscussionTaggedPost.d.ts b/extensions/tags/js/dist-typings/forum/components/DiscussionTaggedPost.d.ts index 1125020eb..121ea18a2 100644 --- a/extensions/tags/js/dist-typings/forum/components/DiscussionTaggedPost.d.ts +++ b/extensions/tags/js/dist-typings/forum/components/DiscussionTaggedPost.d.ts @@ -1,3 +1,4 @@ +/// /// export default class DiscussionTaggedPost extends EventPost { static initAttrs(attrs: any): void; diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js b/extensions/tags/js/dist/common/components/TagSelectionModal.js index 9923f68dd..24bd37b09 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[162],{610:(t,e,s)=>{s.r(e),s.d(e,{default:()=>C});var i=s(905),a=s(351),n=s.n(a),l=s(645),r=s.n(l),o=s(836),c=s.n(o),d=s(596),h=s.n(d),u=s(291),g=s.n(u),p=s(657),f=s.n(p),y=s(149),T=s.n(y),b=s(44),x=s.n(b),w=s(636),v=s.n(w),I=s(648),N=s(924),_=s(974),S=s(997);class C extends(x()){constructor(){super(...arguments),(0,i.Z)(this,"loading",!0),(0,i.Z)(this,"tags",void 0),(0,i.Z)(this,"selected",[]),(0,i.Z)(this,"bypassReqs",!1),(0,i.Z)(this,"filter",v()("")),(0,i.Z)(this,"focused",!1),(0,i.Z)(this,"navigator",new(f())),(0,i.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,l,r,o,m,c,d,u,g,p,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=h()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(l=t.limits)||null==(r=l.min)?void 0:r.primary)?a:-1/0,secondary:null!=(o=null==(m=t.limits)||null==(c=m.min)?void 0:c.secondary)?o:-1/0},max:{total:null!=(d=null==(u=t.limits)||null==(g=u.max)?void 0:g.total)?d:1/0,primary:null!=(p=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?p:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,I.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(h()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.Z)(t))))),m("input",{className:"FormControl",placeholder:h()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(r(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},g()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(S.Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",C)},997:(t,e,s)=>{s.d(e,{Z:()=>c});var i=s(433),a=s.n(i),n=s(645),l=s.n(n),r=s(836),o=s.n(r);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(l(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[162],{610:(t,e,s)=>{s.r(e),s.d(e,{default:()=>C});var i=s(905),a=s(351),n=s.n(a),l=s(645),r=s.n(l),o=s(836),c=s.n(o),d=s(596),h=s.n(d),u=s(291),g=s.n(u),p=s(657),f=s.n(p),y=s(149),T=s.n(y),b=s(44),x=s.n(b),w=s(636),v=s.n(w),I=s(648),N=s(924),_=s(974),S=s(997);class C extends(x()){constructor(){super(...arguments),(0,i.Z)(this,"loading",!0),(0,i.Z)(this,"tags",void 0),(0,i.Z)(this,"selected",[]),(0,i.Z)(this,"bypassReqs",!1),(0,i.Z)(this,"filter",v()("")),(0,i.Z)(this,"focused",!1),(0,i.Z)(this,"navigator",new(f())),(0,i.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,l,r,o,m,c,d,u,g,p,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=h()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(l=t.limits)||null==(r=l.min)?void 0:r.primary)?a:-1/0,secondary:null!=(o=null==(m=t.limits)||null==(c=m.min)?void 0:c.secondary)?o:-1/0},max:{total:null!=(d=null==(u=t.limits)||null==(g=u.max)?void 0:g.total)?d:1/0,primary:null!=(p=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?p:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,I.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(h()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.Z)(t))))),m("input",{className:"FormControl",placeholder:h()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(r(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},g()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(S.Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",C)},997:(t,e,s)=>{s.d(e,{Z:()=>c});var i=s(433),a=s.n(i),n=s(645),l=s.n(n),r=s(836),o=s.n(r);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(l(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); //# sourceMappingURL=TagSelectionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map index e4b446bea..736323485 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\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 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 if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","static","attrs","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\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 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 if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","static","attrs","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js b/extensions/tags/js/dist/forum.js index 53f5328f0..27479fddf 100644 --- a/extensions/tags/js/dist/forum.js +++ b/extensions/tags/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t,e,s={974:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var r=s(836),a=s.n(r);function o(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:o=!0}=s;return e.className=a()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",o)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),a=s.n(r),o=s(678),n=s.n(o),i=s(836),l=s.n(i),c=s(679),u=s.n(c),d=s(974);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const s=a()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const r=t.color();r&&(e.style["--tag-bg"]=r,e.className=l()(e.className,"colored",u()(r))),s&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(s?n():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},r)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},270:()=>{},648:(t,e,s)=>{"use strict";function r(t){return t.slice(0).sort(((t,e)=>{const s=t.position(),r=e.position();if(null===s&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===s)return 1;const a=t.parent(),o=e.parent();return a===o?s-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:s-o.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},664:(t,e,s)=>{"use strict";s.d(e,{l:()=>Nt});var r=s(892),a=s.n(r),o=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,o.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),i().store.find("tags",{include:t.join(",")}).then((e=>{const s=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),s}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const c=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/components/IndexSidebar");var d=s.n(u);const g=flarum.reg.get("core","common/components/Separator");var f=s.n(g);const p=flarum.reg.get("core","common/components/LinkButton");var h=s.n(p),b=s(678),v=s.n(b),T=s(836),y=s.n(T),x=s(974);class N extends(h()){view(t){const e=this.attrs.model,s=e&&e.description(),r=y()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(v(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:s||void 0},(0,x.Z)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",N);const w=flarum.reg.get("core","common/components/Page");var _=s.n(w);const C=flarum.reg.get("core","forum/components/PageStructure");var k=s.n(C);const P=flarum.reg.get("core","forum/components/WelcomeHero");var S=s.n(P),A=s(149),D=s.n(A);const L=flarum.reg.get("core","common/utils/ItemList");var I=s.n(L);const Z=flarum.reg.get("core","common/helpers/humanTime");var M=s.n(Z),j=s(679),E=s.n(j),B=s(596),V=s.n(B),H=s(924),O=s(648);class R extends(_()){constructor(){super(...arguments),(0,o.Z)(this,"tags",void 0),(0,o.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),a().history.push("tags",V()(a().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),this.tags=[];const e=a().preloadedApiDocument();e?this.tags=(0,O.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,a().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,O.Z)(a().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),a().setTitle(V()(a().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),a().setTitleCount(0)}view(){return m(k(),{className:"TagsPage",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(D(),null));else{const e=this.tags.filter((t=>null!==t.position())),s=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),s.length&&t.add("cloud",this.cloudView(s),10)}return t}hero(){return m(S(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),s=(0,O.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(v(),{className:"TagTile-info",href:a().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.Z)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!s&&m("div",{className:"TagTile-children"},s.map((t=>[m(v(),{href:a().route.tag(t)},t.name())," "])))),e?m(v(),{className:"TagTile-lastPostedDiscussion",href:a().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),M()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,H.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",R);const q=flarum.reg.get("core","forum/components/IndexPage");var G=s.n(q);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const $=flarum.reg.get("core","forum/states/GlobalSearchState");var U=s.n($),z=s(433),W=s.n(z);class J extends(W()){view(){const t=this.attrs.model,e=t.color();return m("header",{className:y()("Hero","TagHero",{"TagHero--colored":e,[E()(e)]:e}),style:e?{"--hero-bg":e}:void 0},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},t.icon()&&(0,x.Z)(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))}}flarum.reg.add("flarum-tags","forum/components/TagHero",J);const Q=t=>a().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),X=flarum.reg.get("core","forum/components/DiscussionListItem");var Y=s.n(X);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=s.n(tt);function st(t,e){void 0===e&&(e={});const s=[],{link:r,...a}=e;return a.className=y()("TagsLabel",a.className),t?(0,O.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,H.Z)(e,{link:r}))})):s.push((0,H.Z)()),m("span",a,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var at=s.n(rt),ot=s(645),nt=s.n(ot);flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/ToggleButton");var it=s(490);const lt=flarum.reg.get("core","common/extenders");var ct=s.n(lt);const ut=flarum.reg.get("core","common/models/Discussion");var mt=s.n(ut);const dt=flarum.reg.get("core","forum/components/EventPost");var gt=s.n(dt);class ft extends(gt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],s=t.post.content()[1];function r(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=r(s,e),t.tagsRemoved=r(e,s)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",ft);const pt=flarum.reg.get("core","common/utils/computed");var ht=s.n(pt);const bt=flarum.reg.get("core","common/Model");var vt=s.n(bt);class Tt extends(vt()){name(){return vt().attribute("name").call(this)}slug(){return vt().attribute("slug").call(this)}description(){return vt().attribute("description").call(this)}color(){return vt().attribute("color").call(this)}backgroundUrl(){return vt().attribute("backgroundUrl").call(this)}backgroundMode(){return vt().attribute("backgroundMode").call(this)}icon(){return vt().attribute("icon").call(this)}position(){return vt().attribute("position").call(this)}parent(){return vt().hasOne("parent").call(this)}children(){return vt().hasMany("children").call(this)}defaultSort(){return vt().attribute("defaultSort").call(this)}isChild(){return vt().attribute("isChild").call(this)}isHidden(){return vt().attribute("isHidden").call(this)}isPrimary(){return vt().attribute("isPrimary").call(this)}discussionCount(){return vt().attribute("discussionCount").call(this)}lastPostedAt(){return vt().attribute("lastPostedAt",vt().transformDate).call(this)}lastPostedDiscussion(){return vt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vt().attribute("isRestricted").call(this)}canStartDiscussion(){return vt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vt().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Tt);const yt=flarum.reg.get("core","common/query/IGambit");class xt extends yt.KeyValueGambit{constructor(){super(...arguments),(0,o.Z)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let s=[];return Array.isArray(t)?(s=t.map((t=>this.fromFilter(t.toString(),e))),s.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const Nt=[(new(ct().Store)).add("tags",Tt),(new(ct().Search)).gambit("discussions",xt),(new(ct().Routes)).add("tags","/tags",R).add("tag","/t/:tags",G()).helper("tag",(t=>a().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];a().initializers.add("flarum-tags",(()=>{a().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.tags_link")),-10),a().current.matches(R))return;t.add("separator",m(f(),null),-12);const e=a().search.state.stickyParams(),s=a().store.all("tags"),r=a().currentTag(),o=s=>{let a=r===s;!a&&r&&(a=r.parent()===s),t.add("tag"+s.id(),m(N,{model:s,params:e,active:a},null==s?void 0:s.name()),-14)};(0,O.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(o);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(o),n.length&&t.add("moreTags",m(h(),{href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.more_link")),-16)})),a().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let s=null;if(e&&(s=Q(e)),e&&!s||s&&!s.isChild()&&!s.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent"}).then((()=>{this.currentActiveTag=Q(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(s)return this.currentActiveTag=s,this.currentActiveTag;this.currentActiveTag=void 0},(0,c.extend)(G().prototype,"view",(function(t){a().currentTag(!0)})),(0,c.override)(G().prototype,"hero",(function(t){const e=a().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)(G().prototype,"view",(function(t){const e=a().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)(G().prototype,"setTitle",(function(){const t=a().currentTag();t&&a().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=a().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");s&&(o.attrs.className=y()([o.attrs.className,"Button--tagColored",E()(s)]),o.attrs.style={"--color":s}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(U().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){var e;"string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags&&(t.filter||(t.filter={}),t.filter.tag=this.params.tags)})),(0,c.extend)(Y().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e),10)})),(0,c.extend)(et().prototype,"view",(function(t){const e=(0,O.Z)(this.attrs.discussion.tags());if(e&&e.length){const s=e[0].color();s&&(t.attrs.style={"--hero-bg":s},t.attrs.className=y()(t.attrs.className,"DiscussionHero--colored",E()(s)))}})),(0,c.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e,{link:!0}),5)})),(0,c.extend)(at(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(nt(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>s.e(642).then(s.bind(s,884))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,c.extend)(d().prototype,"newDiscussionAction",(function(t){const e=a().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else a().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){a().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&a().modal.show((()=>s.e(642).then(s.bind(s,884))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,c.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],s=(0,it.Z)();t.add("tags",m(nt(),{className:y()(["DiscussionComposer-changeTags","Button Button--ua-reset",!s.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?st(e):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,c.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],r=e.filter((t=>null!==t.position()&&!t.isChild())),o=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(a().forum.attribute("minPrimaryTags")),l=parseInt(a().forum.attribute("minSecondaryTags")),c=parseInt(a().forum.attribute("maxPrimaryTags")),u=parseInt(a().forum.attribute("maxSecondaryTags"));(!e.length&&0!==c&&0!==u||r.lengths.e(642).then(s.bind(s,884))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,c.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},490:(t,e,s)=>{"use strict";function r(t){let e=app.store.all("tags");if(t){const s=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||s.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",r)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},892:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},232:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},905:(t,e,s)=>{"use strict";function r(t){return r="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},r(t)}function a(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==r(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var a=s.call(t,e);if("object"!==r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{Z:()=>a})}},r={};function a(t){var e=r[t];if(void 0!==e)return e.exports;var o=r[t]={exports:{}};return s[t](o,o.exports,a),o.exports}a.m=s,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](t,e),e)),[])),a.u=t=>"forum/components/TagDiscussionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(s,r,o,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var a=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((t=>t(r))),e)return e(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");s.length&&(t=s[s.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const s=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};a.f.j=(e,s)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var o=new Promise(((s,a)=>r=t[e]=[s,a]));s.push(r[2]=o);var n=a.p+a.u(e),i=new Error;a.l(n,(s=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,o,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);l&&l(a)}for(e&&e(s);c{"use strict";a.r(o),a.d(o,{extend:()=>s.l});var t=a(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);a.d(o,e);var s=a(664)})(),module.exports=o})(); +(()=>{var t,e,s={974:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var r=s(836),a=s.n(r);function o(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:o=!0}=s;return e.className=a()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",o)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),a=s.n(r),o=s(678),n=s.n(o),i=s(836),l=s.n(i),c=s(679),u=s.n(c),d=s(974);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const s=a()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const r=t.color();r&&(e.style["--tag-bg"]=r,e.className=l()(e.className,"colored",u()(r))),s&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(s?n():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},r)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},270:()=>{},648:(t,e,s)=>{"use strict";function r(t){return t.slice(0).sort(((t,e)=>{const s=t.position(),r=e.position();if(null===s&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===s)return 1;const a=t.parent(),o=e.parent();return a===o?s-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:s-o.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},664:(t,e,s)=>{"use strict";s.d(e,{l:()=>Nt});var r=s(892),a=s.n(r),o=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,o.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),i().store.find("tags",{include:t.join(",")}).then((e=>{const s=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),s}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const c=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/components/IndexSidebar");var d=s.n(u);const g=flarum.reg.get("core","common/components/Separator");var f=s.n(g);const p=flarum.reg.get("core","common/components/LinkButton");var h=s.n(p),b=s(678),v=s.n(b),T=s(836),y=s.n(T),x=s(974);class N extends(h()){view(t){const e=this.attrs.model,s=e&&e.description(),r=y()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(v(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:s||void 0},(0,x.Z)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",N);const w=flarum.reg.get("core","common/components/Page");var _=s.n(w);const C=flarum.reg.get("core","forum/components/PageStructure");var k=s.n(C);const P=flarum.reg.get("core","forum/components/WelcomeHero");var S=s.n(P),A=s(149),D=s.n(A);const L=flarum.reg.get("core","common/utils/ItemList");var I=s.n(L);const Z=flarum.reg.get("core","common/helpers/humanTime");var M=s.n(Z),j=s(679),E=s.n(j),B=s(596),V=s.n(B),H=s(924),O=s(648);class R extends(_()){constructor(){super(...arguments),(0,o.Z)(this,"tags",void 0),(0,o.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),a().history.push("tags",V()(a().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),a().current.set("noTagsList",!0),this.tags=[];const e=a().preloadedApiDocument();e?this.tags=(0,O.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,a().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,O.Z)(a().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),a().setTitle(V()(a().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),a().setTitleCount(0)}view(){return m(k(),{className:"TagsPage Page--vertical",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(D(),null));else{const e=this.tags.filter((t=>null!==t.position())),s=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),s.length&&t.add("cloud",this.cloudView(s),10)}return t}hero(){return m(S(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),s=(0,O.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(v(),{className:"TagTile-info",href:a().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.Z)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!s&&m("div",{className:"TagTile-children"},s.map((t=>[m(v(),{href:a().route.tag(t)},t.name())," "])))),e?m(v(),{className:"TagTile-lastPostedDiscussion",href:a().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),M()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,H.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",R);const q=flarum.reg.get("core","forum/components/IndexPage");var G=s.n(q);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const $=flarum.reg.get("core","forum/states/GlobalSearchState");var U=s.n($),z=s(433),W=s.n(z);class J extends(W()){view(){const t=this.attrs.model,e=t.color();return m("header",{className:y()("Hero","TagHero",{"TagHero--colored":e,[E()(e)]:e}),style:e?{"--hero-bg":e}:void 0},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},t.icon()&&(0,x.Z)(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))}}flarum.reg.add("flarum-tags","forum/components/TagHero",J);const Q=t=>a().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),X=flarum.reg.get("core","forum/components/DiscussionListItem");var Y=s.n(X);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=s.n(tt);function st(t,e){void 0===e&&(e={});const s=[],{link:r,...a}=e;return a.className=y()("TagsLabel",a.className),t?(0,O.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,H.Z)(e,{link:r}))})):s.push((0,H.Z)()),m("span",a,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var at=s.n(rt),ot=s(645),nt=s.n(ot);flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/ToggleButton");var it=s(490);const lt=flarum.reg.get("core","common/extenders");var ct=s.n(lt);const ut=flarum.reg.get("core","common/models/Discussion");var mt=s.n(ut);const dt=flarum.reg.get("core","forum/components/EventPost");var gt=s.n(dt);class ft extends(gt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],s=t.post.content()[1];function r(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=r(s,e),t.tagsRemoved=r(e,s)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",ft);const pt=flarum.reg.get("core","common/utils/computed");var ht=s.n(pt);const bt=flarum.reg.get("core","common/Model");var vt=s.n(bt);class Tt extends(vt()){name(){return vt().attribute("name").call(this)}slug(){return vt().attribute("slug").call(this)}description(){return vt().attribute("description").call(this)}color(){return vt().attribute("color").call(this)}backgroundUrl(){return vt().attribute("backgroundUrl").call(this)}backgroundMode(){return vt().attribute("backgroundMode").call(this)}icon(){return vt().attribute("icon").call(this)}position(){return vt().attribute("position").call(this)}parent(){return vt().hasOne("parent").call(this)}children(){return vt().hasMany("children").call(this)}defaultSort(){return vt().attribute("defaultSort").call(this)}isChild(){return vt().attribute("isChild").call(this)}isHidden(){return vt().attribute("isHidden").call(this)}isPrimary(){return vt().attribute("isPrimary").call(this)}discussionCount(){return vt().attribute("discussionCount").call(this)}lastPostedAt(){return vt().attribute("lastPostedAt",vt().transformDate).call(this)}lastPostedDiscussion(){return vt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vt().attribute("isRestricted").call(this)}canStartDiscussion(){return vt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vt().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Tt);const yt=flarum.reg.get("core","common/query/IGambit");class xt extends yt.KeyValueGambit{constructor(){super(...arguments),(0,o.Z)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let s=[];return Array.isArray(t)?(s=t.map((t=>this.fromFilter(t.toString(),e))),s.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const Nt=[(new(ct().Store)).add("tags",Tt),(new(ct().Search)).gambit("discussions",xt),(new(ct().Routes)).add("tags","/tags",R).add("tag","/t/:tags",G()).helper("tag",(t=>a().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];a().initializers.add("flarum-tags",(()=>{a().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.tags_link")),-10),a().current.get("noTagsList"))return;t.add("separator",m(f(),null),-12);const e=a().search.state.stickyParams(),s=a().store.all("tags"),r=a().currentTag(),o=s=>{let a=r===s;!a&&r&&(a=r.parent()===s),t.add("tag"+s.id(),m(N,{model:s,params:e,active:a},null==s?void 0:s.name()),-14)};(0,O.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(o);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(o),n.length&&t.add("moreTags",m(h(),{href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.more_link")),-16)})),a().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let s=null;if(e&&(s=Q(e)),e&&!s||s&&!s.isChild()&&!s.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent"}).then((()=>{this.currentActiveTag=Q(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(s)return this.currentActiveTag=s,this.currentActiveTag;this.currentActiveTag=void 0},(0,c.extend)(G().prototype,"view",(function(t){a().currentTag(!0)})),(0,c.override)(G().prototype,"hero",(function(t){const e=a().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)(G().prototype,"view",(function(t){const e=a().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)(G().prototype,"setTitle",(function(){const t=a().currentTag();t&&a().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=a().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");s&&(o.attrs.className=y()([o.attrs.className,"Button--tagColored",E()(s)]),o.attrs.style={"--color":s}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(U().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){var e;"string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags&&(t.filter||(t.filter={}),t.filter.tag=this.params.tags)})),(0,c.extend)(Y().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e),10)})),(0,c.extend)(et().prototype,"view",(function(t){const e=(0,O.Z)(this.attrs.discussion.tags());if(e&&e.length){const s=e[0].color();s&&(t.attrs.style={"--hero-bg":s},t.attrs.className=y()(t.attrs.className,"DiscussionHero--colored",E()(s)))}})),(0,c.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e,{link:!0}),5)})),(0,c.extend)(at(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(nt(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>s.e(642).then(s.bind(s,884))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,c.extend)(d().prototype,"newDiscussionAction",(function(t){const e=a().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else a().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){a().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&a().modal.show((()=>s.e(642).then(s.bind(s,884))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,c.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],s=(0,it.Z)();t.add("tags",m(nt(),{className:y()(["DiscussionComposer-changeTags","Button Button--ua-reset",!s.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?st(e):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,c.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],r=e.filter((t=>null!==t.position()&&!t.isChild())),o=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(a().forum.attribute("minPrimaryTags")),l=parseInt(a().forum.attribute("minSecondaryTags")),c=parseInt(a().forum.attribute("maxPrimaryTags")),u=parseInt(a().forum.attribute("maxSecondaryTags"));(!e.length&&0!==c&&0!==u||r.lengths.e(642).then(s.bind(s,884))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,c.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},490:(t,e,s)=>{"use strict";function r(t){let e=app.store.all("tags");if(t){const s=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||s.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",r)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},892:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},232:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},905:(t,e,s)=>{"use strict";function r(t){return r="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},r(t)}function a(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==r(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var a=s.call(t,e);if("object"!==r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{Z:()=>a})}},r={};function a(t){var e=r[t];if(void 0!==e)return e.exports;var o=r[t]={exports:{}};return s[t](o,o.exports,a),o.exports}a.m=s,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](t,e),e)),[])),a.u=t=>"forum/components/TagDiscussionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(s,r,o,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var a=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((t=>t(r))),e)return e(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");s.length&&(t=s[s.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const s=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};a.f.j=(e,s)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var o=new Promise(((s,a)=>r=t[e]=[s,a]));s.push(r[2]=o);var n=a.p+a.u(e),i=new Error;a.l(n,(s=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,o,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);l&&l(a)}for(e&&e(s);c{"use strict";a.r(o),a.d(o,{extend:()=>s.l});var t=a(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);a.d(o,e);var s=a(664)})(),module.exports=o})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js.map b/extensions/tags/js/dist/forum.js.map index 4709a77d5..95fa9a261 100644 --- a/extensions/tags/js/dist/forum.js.map +++ b/extensions/tags/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()))));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n var _params$include;\n (_params$include = params.include) == null ? void 0 : _params$include.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter || (params.filter = {});\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', () => {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.matches(TagsPage)) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag == null ? void 0 : tag.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport Button from 'flarum/common/components/Button';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(Button, {\n className: classList(['DiscussionComposer-changeTags', 'Button Button--ua-reset', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _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 }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t315: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","async","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","Set","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","static","super","initAttrs","params","TagsPage","arguments","oninit","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","lastPostNumber","lastPostedAt","TagHero","findTag","find","localeCompare","sensitivity","tagsLabel","otherAttrs","push","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isPrimary","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","concat","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","state","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","discussion","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","all","discussionTags","module","exports","_typeof","obj","Symbol","iterator","_defineProperty","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","o","f","e","chunkId","keys","reduce","promises","u","g","globalThis","Function","window","prop","hasOwnProperty","l","url","done","script","needAttach","scripts","document","getElementsByTagName","i","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","type","target","head","appendChild","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n app.current.set('noTagsList', true);\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage Page--vertical\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()))));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n var _params$include;\n (_params$include = params.include) == null ? void 0 : _params$include.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter || (params.filter = {});\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', () => {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.get('noTagsList')) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag == null ? void 0 : tag.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport Button from 'flarum/common/components/Button';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(Button, {\n className: classList(['DiscussionComposer-changeTags', 'Button Button--ua-reset', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _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 }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t315: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","async","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","Set","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","static","super","initAttrs","params","TagsPage","arguments","oninit","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","lastPostNumber","lastPostedAt","TagHero","findTag","find","localeCompare","sensitivity","tagsLabel","otherAttrs","push","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isPrimary","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","concat","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","state","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","discussion","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","all","discussionTags","module","exports","_typeof","obj","Symbol","iterator","_defineProperty","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","o","f","e","chunkId","keys","reduce","promises","u","g","globalThis","Function","window","prop","hasOwnProperty","l","url","done","script","needAttach","scripts","document","getElementsByTagName","i","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","type","target","head","appendChild","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js index a5f3b4dae..f0f04705a 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[642],{884:(t,e,s)=>{s.r(e),s.d(e,{default:()=>B});var i=s(892),a=s.n(i),n=s(232),l=s.n(n),r=s(836),o=s.n(r),c=s(596),d=s.n(c),h=s(490),u=s(905),g=s(351),p=s.n(g),f=s(645),y=s.n(f),T=s(291),b=s.n(T),x=s(657),w=s.n(x),v=s(149),I=s.n(v),N=s(44),S=s.n(N),_=s(636),C=s.n(_),k=s(648),q=s(924),R=s(974),P=s(433),M=s.n(P);class Z extends(M()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",Z);class L extends(S()){constructor(){super(...arguments),(0,u.Z)(this,"loading",!0),(0,u.Z)(this,"tags",void 0),(0,u.Z)(this,"selected",[]),(0,u.Z)(this,"bypassReqs",!1),(0,u.Z)(this,"filter",C()("")),(0,u.Z)(this,"focused",!1),(0,u.Z)(this,"navigator",new(w())),(0,u.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,n,l,r,o,m,c,h,u,g,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(n=t.limits)||null==(l=n.min)?void 0:l.primary)?a:-1/0,secondary:null!=(r=null==(o=t.limits)||null==(m=o.min)?void 0:m.secondary)?r:-1/0},max:{total:null!=(c=null==(h=t.limits)||null==(u=h.max)?void 0:u.total)?c:1/0,primary:null!=(g=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?g:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,k.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(I(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(d()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,q.Z)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,R.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",L);class B extends L{static initAttrs(t){var e;super.initAttrs(t);const s=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(s),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.Z)(t.discussion),null!=t.selectedTags||(t.selectedTags=(null==(e=t.discussion)?void 0:e.tags())||[]),t.canSelect=t=>t.canStartDiscussion();const i=t.onsubmit||null;t.onsubmit=function(e){const s=t.discussion;s&&s.save({relationships:{tags:e}}).then((()=>{a().current.matches(l())&&a().current.get("stream").update(),m.redraw()})),i&&i(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",B)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[642],{884:(t,e,s)=>{s.r(e),s.d(e,{default:()=>B});var i=s(892),a=s.n(i),n=s(232),l=s.n(n),r=s(836),o=s.n(r),c=s(596),d=s.n(c),h=s(490),u=s(905),g=s(351),p=s.n(g),f=s(645),y=s.n(f),T=s(291),b=s.n(T),x=s(657),w=s.n(x),v=s(149),I=s.n(v),N=s(44),S=s.n(N),_=s(636),C=s.n(_),k=s(648),q=s(924),R=s(974),M=s(433),P=s.n(M);class Z extends(P()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",Z);class L extends(S()){constructor(){super(...arguments),(0,u.Z)(this,"loading",!0),(0,u.Z)(this,"tags",void 0),(0,u.Z)(this,"selected",[]),(0,u.Z)(this,"bypassReqs",!1),(0,u.Z)(this,"filter",C()("")),(0,u.Z)(this,"focused",!1),(0,u.Z)(this,"navigator",new(w())),(0,u.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,n,l,r,o,m,c,h,u,g,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(n=t.limits)||null==(l=n.min)?void 0:l.primary)?a:-1/0,secondary:null!=(r=null==(o=t.limits)||null==(m=o.min)?void 0:m.secondary)?r:-1/0},max:{total:null!=(c=null==(h=t.limits)||null==(u=h.max)?void 0:u.total)?c:1/0,primary:null!=(g=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?g:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,k.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(I(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(d()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,q.Z)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,R.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",L);class B extends L{static initAttrs(t){var e;super.initAttrs(t);const s=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(s),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.Z)(t.discussion),null!=t.selectedTags||(t.selectedTags=(null==(e=t.discussion)?void 0:e.tags())||[]),t.canSelect=t=>t.canStartDiscussion();const i=t.onsubmit||null;t.onsubmit=function(e){const s=t.discussion;s&&s.save({relationships:{tags:e}}).then((()=>{a().current.matches(l())&&a().current.get("stream").update(),m.redraw()})),i&&i(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",B)}}]); //# sourceMappingURL=TagDiscussionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map index 293ee5d62..11230dfca 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\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 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 if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n var _attrs$selectedTags, _attrs$discussion;\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n (_attrs$selectedTags = attrs.selectedTags) != null ? _attrs$selectedTags : attrs.selectedTags = ((_attrs$discussion = attrs.discussion) == null ? void 0 : _attrs$discussion.tags()) || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","static","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","_attrs$discussion","discussion","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","update"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\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 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 if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n var _attrs$selectedTags, _attrs$discussion;\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n (_attrs$selectedTags = attrs.selectedTags) != null ? _attrs$selectedTags : attrs.selectedTags = ((_attrs$discussion = attrs.discussion) == null ? void 0 : _attrs$discussion.tags()) || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","static","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","_attrs$discussion","discussion","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","update"],"sourceRoot":""} \ No newline at end of file diff --git a/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts b/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts index 1e9050bc4..34a2e7479 100644 --- a/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts b/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts index 64820117c..9ceae9e8f 100644 --- a/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import ItemList from '../../common/utils/ItemList'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts b/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts index 264da0430..db0c134d7 100644 --- a/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import ItemList from '../../common/utils/ItemList'; import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; diff --git a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts index 473dfc5b1..2d6510aff 100644 --- a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts b/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts index c7090dd71..b94e449d6 100644 --- a/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import ItemList from '../../common/utils/ItemList'; import AdminPage from './AdminPage'; import type { Children } from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts index ec92bfc34..782786cd4 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomCssModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts index 45122c515..b2d35c06e 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomFooterModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts index bac737dd0..da83c1674 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomHeaderModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts index a3a69c2fb..5891f479a 100644 --- a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; export interface ILoadingModalAttrs extends IInternalModalAttrs { } diff --git a/framework/core/js/dist-typings/admin/components/MailPage.d.ts b/framework/core/js/dist-typings/admin/components/MailPage.d.ts index 9c1198e88..17d0fa35f 100644 --- a/framework/core/js/dist-typings/admin/components/MailPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/MailPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; import type { AlertIdentifier } from '../../common/states/AlertManagerState'; diff --git a/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts b/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts index ff15efaa5..cb453a2a7 100644 --- a/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import AdminPage from './AdminPage'; export default class PermissionsPage extends AdminPage { diff --git a/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts b/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts index b754111f5..c56fbfe41 100644 --- a/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; import ExtensionReadme from '../models/ExtensionReadme'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/UserListPage.d.ts b/framework/core/js/dist-typings/admin/components/UserListPage.d.ts index 9e7d0a9b5..4bfb7c614 100644 --- a/framework/core/js/dist-typings/admin/components/UserListPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/UserListPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import Mithril from 'mithril'; import type User from '../../common/models/User'; import type { IPageAttrs } from '../../common/components/Page'; diff --git a/framework/core/js/dist-typings/common/common.d.ts b/framework/core/js/dist-typings/common/common.d.ts index 52185f669..ca92e210f 100644 --- a/framework/core/js/dist-typings/common/common.d.ts +++ b/framework/core/js/dist-typings/common/common.d.ts @@ -68,6 +68,7 @@ import './components/Button'; import './components/Modal'; import './components/FormModal'; import './components/GroupBadge'; +import './components/UserSelectionModal'; import './components/TextEditor'; import './components/TextEditorButton'; import './components/Tooltip'; diff --git a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts index 77fbee2ab..dbf7c6911 100644 --- a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts +++ b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../utils/ItemList'; import Stream from '../utils/Stream'; diff --git a/framework/core/js/dist-typings/common/components/Pill.d.ts b/framework/core/js/dist-typings/common/components/Pill.d.ts new file mode 100644 index 000000000..c63c2367d --- /dev/null +++ b/framework/core/js/dist-typings/common/components/Pill.d.ts @@ -0,0 +1,9 @@ +import Component, { type ComponentAttrs } from '../Component'; +import type Mithril from 'mithril'; +export interface IPillAttrs extends ComponentAttrs { + deletable?: boolean; + ondelete?: () => void; +} +export default class Pill extends Component { + view(vnode: Mithril.Vnode): JSX.Element; +} diff --git a/framework/core/js/dist-typings/common/components/UserSelectionModal.d.ts b/framework/core/js/dist-typings/common/components/UserSelectionModal.d.ts new file mode 100644 index 000000000..288ad1d02 --- /dev/null +++ b/framework/core/js/dist-typings/common/components/UserSelectionModal.d.ts @@ -0,0 +1,31 @@ +import FormModal, { type IFormModalAttrs } from './FormModal'; +import type User from '../models/User'; +import Mithril from 'mithril'; +import Stream from '../utils/Stream'; +import { throttle } from '../utils/throttleDebounce'; +export interface IUserSelectionModalAttrs extends IFormModalAttrs { + title?: string; + selected: User[]; + onsubmit: (users: User[]) => void; + maxItems?: number; + excluded?: (number | string)[]; +} +/** + * The `UserSelectionModal` component displays a modal dialog with searchable + * user list and submit button. The user can select one or more users from the + * list and submit them to the callback. + */ +export default class UserSelectionModal extends FormModal { + protected search: Stream; + protected selected: Stream; + protected focused: boolean; + protected results: Stream>; + oninit(vnode: Mithril.Vnode): void; + className(): string; + title(): Mithril.Children; + content(): Mithril.Children; + userListItem(user: User): JSX.Element; + meetsRequirements(): boolean; + onsubmit(e: SubmitEvent): void; + protected load: throttle<() => Promise | undefined>; +} diff --git a/framework/core/js/dist-typings/common/states/PaginatedListState.d.ts b/framework/core/js/dist-typings/common/states/PaginatedListState.d.ts index 18f4b3a03..ffa9b0c18 100644 --- a/framework/core/js/dist-typings/common/states/PaginatedListState.d.ts +++ b/framework/core/js/dist-typings/common/states/PaginatedListState.d.ts @@ -1,5 +1,13 @@ import Model from '../Model'; import { ApiQueryParamsPlural, ApiResponsePlural } from '../Store'; +import type Mithril from 'mithril'; +export declare type SortMapItem = string | { + sort: string; + label: Mithril.Children; +}; +export declare type SortMap = { + [key: string]: SortMapItem; +}; export interface Page { number: number; items: TModel[]; @@ -92,4 +100,10 @@ export default abstract class PaginatedListState extends Component { + /** + * May be set by subclasses. + */ + loading: boolean; + /** + * Ensures that the post will not be redrawn + * unless new data comes in. + */ + subtree: SubtreeRetainer; + oninit(vnode: Mithril.Vnode): void; + view(vnode: Mithril.Vnode): JSX.Element; + onbeforeupdate(vnode: Mithril.VnodeDOM): boolean; + onupdate(vnode: Mithril.VnodeDOM): void; + elementAttrs(): Record; + header(): Mithril.Children; + content(): Mithril.Children[]; + classes(existing?: string): string[]; + actionItems(): ItemList; + footerItems(): ItemList; + sideItems(): ItemList; + abstract user(): User | null | false; + abstract controls(): Mithril.Children[]; + abstract freshness(): Date; + abstract createdByStarter(): boolean; + avatar(): Mithril.Children; +} diff --git a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts index a491173a7..e431140fb 100644 --- a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts index 786ab12d8..cd9f5868f 100644 --- a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Mithril from 'mithril'; import ItemList from '../../common/utils/ItemList'; diff --git a/framework/core/js/dist-typings/forum/components/Comment.d.ts b/framework/core/js/dist-typings/forum/components/Comment.d.ts new file mode 100644 index 000000000..e227ac0d5 --- /dev/null +++ b/framework/core/js/dist-typings/forum/components/Comment.d.ts @@ -0,0 +1,17 @@ +import Component, { type ComponentAttrs } from '../../common/Component'; +import type Mithril from 'mithril'; +import type ItemList from '../../common/utils/ItemList'; +import type User from '../../common/models/User'; +export interface ICommentAttrs extends ComponentAttrs { + headerItems: ItemList; + user: User | false | undefined; + cardVisible: boolean; + isEditing: boolean; + isHidden: boolean; + contentHtml: string; + search?: string; +} +export default class Comment extends Component { + oninit(vnode: Mithril.Vnode): void; + view(): JSX.Element[]; +} diff --git a/framework/core/js/dist-typings/forum/components/CommentPost.d.ts b/framework/core/js/dist-typings/forum/components/CommentPost.d.ts index 7040fe06b..92f2727b0 100644 --- a/framework/core/js/dist-typings/forum/components/CommentPost.d.ts +++ b/framework/core/js/dist-typings/forum/components/CommentPost.d.ts @@ -25,7 +25,6 @@ export default class CommentPost extends Post { */ cardVisible: boolean | undefined; avatar(): JSX.Element; - content(): any; refreshContent(): void; contentHtml: any; oncreate(vnode: any): void; diff --git a/framework/core/js/dist-typings/forum/components/DiscussionComposer.d.ts b/framework/core/js/dist-typings/forum/components/DiscussionComposer.d.ts index 15b796c35..7c322fdae 100644 --- a/framework/core/js/dist-typings/forum/components/DiscussionComposer.d.ts +++ b/framework/core/js/dist-typings/forum/components/DiscussionComposer.d.ts @@ -9,8 +9,10 @@ * - All of the attrs for ComposerBody * - `titlePlaceholder` */ -export default class DiscussionComposer extends ComposerBody { +export default class DiscussionComposer extends ComposerBody { static initAttrs(attrs: any): void; + constructor(); + oninit(vnode: any): void; /** * The value of the title input. * diff --git a/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts b/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts index c8d770298..bda60b203 100644 --- a/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts +++ b/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts @@ -1,4 +1,4 @@ -/// +/// import Notification from './Notification'; /** * The `DiscussionRenamedNotification` component displays a notification which diff --git a/framework/core/js/dist-typings/forum/components/EditPostComposer.d.ts b/framework/core/js/dist-typings/forum/components/EditPostComposer.d.ts index ccf397368..23dfe2c43 100644 --- a/framework/core/js/dist-typings/forum/components/EditPostComposer.d.ts +++ b/framework/core/js/dist-typings/forum/components/EditPostComposer.d.ts @@ -8,8 +8,9 @@ * - All of the attrs for ComposerBody * - `post` */ -export default class EditPostComposer extends ComposerBody { +export default class EditPostComposer extends ComposerBody { static initAttrs(attrs: any): void; + constructor(); /** * Jump to the preview when triggered by the text editor. */ diff --git a/framework/core/js/dist-typings/forum/components/EventPost.d.ts b/framework/core/js/dist-typings/forum/components/EventPost.d.ts index f972ca6fe..8af3e835a 100644 --- a/framework/core/js/dist-typings/forum/components/EventPost.d.ts +++ b/framework/core/js/dist-typings/forum/components/EventPost.d.ts @@ -12,7 +12,6 @@ export default class EventPost extends Post { constructor(); avatar(): JSX.Element; - content(): any; /** * Get the name of the event icon. * diff --git a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts index 046ea49d0..6b52d4605 100644 --- a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/LoadingPost.d.ts b/framework/core/js/dist-typings/forum/components/LoadingPost.d.ts index ffadf4cb0..fddec3df9 100644 --- a/framework/core/js/dist-typings/forum/components/LoadingPost.d.ts +++ b/framework/core/js/dist-typings/forum/components/LoadingPost.d.ts @@ -1,9 +1,11 @@ +/// +import Component, { type ComponentAttrs } from '../../common/Component'; +export interface ILoadingPostAttrs extends ComponentAttrs { +} /** * The `LoadingPost` component shows a placeholder that looks like a post, * indicating that the post is loading. */ -export default class LoadingPost extends Component { - constructor(); +export default class LoadingPost extends Component { view(): JSX.Element; } -import Component from "../../common/Component"; diff --git a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts index 61b906d89..d91a5ca47 100644 --- a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/forum/components/Post.d.ts b/framework/core/js/dist-typings/forum/components/Post.d.ts index e872e3a5c..26da6f0ac 100644 --- a/framework/core/js/dist-typings/forum/components/Post.d.ts +++ b/framework/core/js/dist-typings/forum/components/Post.d.ts @@ -1,9 +1,9 @@ -import Component, { ComponentAttrs } from '../../common/Component'; -import SubtreeRetainer from '../../common/utils/SubtreeRetainer'; import ItemList from '../../common/utils/ItemList'; import type PostModel from '../../common/models/Post'; -import type Mithril from 'mithril'; -export interface IPostAttrs extends ComponentAttrs { +import Mithril from 'mithril'; +import AbstractPost, { type IAbstractPostAttrs } from './AbstractPost'; +import type User from '../../common/models/User'; +export interface IPostAttrs extends IAbstractPostAttrs { post: PostModel; } /** @@ -11,18 +11,12 @@ export interface IPostAttrs extends ComponentAttrs { * includes a controls dropdown; subclasses must implement `content` and `attrs` * methods. */ -export default abstract class Post extends Component { - /** - * May be set by subclasses. - */ - loading: boolean; - /** - * Ensures that the post will not be redrawn - * unless new data comes in. - */ - subtree: SubtreeRetainer; +export default abstract class Post extends AbstractPost { oninit(vnode: Mithril.Vnode): void; - view(vnode: Mithril.Vnode): JSX.Element; + user(): User | null | false; + controls(): Mithril.Children[]; + freshness(): Date; + createdByStarter(): boolean; onbeforeupdate(vnode: Mithril.VnodeDOM): boolean; onupdate(vnode: Mithril.VnodeDOM): void; /** @@ -33,7 +27,7 @@ export default abstract class Post /** * Get the post's content. */ - content(): Mithril.Children; + content(): Mithril.Children[]; /** * Get the post's classes. */ diff --git a/framework/core/js/dist-typings/forum/components/PostMeta.d.ts b/framework/core/js/dist-typings/forum/components/PostMeta.d.ts index 3667411f9..c1bc87c84 100644 --- a/framework/core/js/dist-typings/forum/components/PostMeta.d.ts +++ b/framework/core/js/dist-typings/forum/components/PostMeta.d.ts @@ -1,21 +1,28 @@ +/// +import Component, { type ComponentAttrs } from '../../common/Component'; +import Post from '../../common/models/Post'; +import type Model from '../../common/Model'; +import type User from '../../common/models/User'; +declare type ModelType = Post | (Model & { + user: () => User | null | false; + createdAt: () => Date; +}); +export interface IPostMetaAttrs extends ComponentAttrs { + /** Can be a post or similar model like private message */ + post: ModelType; + permalink?: () => string; +} /** * The `PostMeta` component displays the time of a post, and when clicked, shows * a dropdown containing more information about the post (number, full time, * permalink). - * - * ### Attrs - * - * - `post` */ -export default class PostMeta extends Component { - constructor(); +export default class PostMeta extends Component { view(): JSX.Element; /** * Get the permalink for the given post. - * - * @param {import('../../common/models/Post').default} post - * @returns {string} */ - getPermalink(post: import('../../common/models/Post').default): string; + getPermalink(post: ModelType): null | string; + postIdentifier(post: ModelType): string | null; } -import Component from "../../common/Component"; +export {}; diff --git a/framework/core/js/dist-typings/forum/components/PostUser.d.ts b/framework/core/js/dist-typings/forum/components/PostUser.d.ts index fc6f75084..3e6f745b8 100644 --- a/framework/core/js/dist-typings/forum/components/PostUser.d.ts +++ b/framework/core/js/dist-typings/forum/components/PostUser.d.ts @@ -1,12 +1,17 @@ +/// +import Component, { type ComponentAttrs } from '../../common/Component'; +import type Model from '../../common/Model'; +import type Post from '../../common/models/Post'; +import type User from '../../common/models/User'; +export interface IPostUserAttrs extends ComponentAttrs { + /** Can be a post or similar model like private message */ + post: Post | (Model & { + user: () => User | null | false; + }); +} /** * The `PostUser` component shows the avatar and username of a post's author. - * - * ### Attrs - * - * - `post` */ -export default class PostUser extends Component { - constructor(); +export default class PostUser extends Component { view(): JSX.Element; } -import Component from "../../common/Component"; diff --git a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts index 3fe029482..0869e51d6 100644 --- a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/ReplyComposer.d.ts b/framework/core/js/dist-typings/forum/components/ReplyComposer.d.ts index 484470379..b29a0259b 100644 --- a/framework/core/js/dist-typings/forum/components/ReplyComposer.d.ts +++ b/framework/core/js/dist-typings/forum/components/ReplyComposer.d.ts @@ -7,8 +7,9 @@ * - All of the attrs of ComposerBody * - `discussion` */ -export default class ReplyComposer extends ComposerBody { +export default class ReplyComposer extends ComposerBody { static initAttrs(attrs: any): void; + constructor(); /** * Jump to the preview when triggered by the text editor. */ diff --git a/framework/core/js/dist-typings/forum/components/ReplyPlaceholder.d.ts b/framework/core/js/dist-typings/forum/components/ReplyPlaceholder.d.ts index 3f85d6f56..dc14916af 100644 --- a/framework/core/js/dist-typings/forum/components/ReplyPlaceholder.d.ts +++ b/framework/core/js/dist-typings/forum/components/ReplyPlaceholder.d.ts @@ -1,14 +1,17 @@ +/// +import Component, { type ComponentAttrs } from '../../common/Component'; +import type Discussion from '../../common/models/Discussion'; +import type Model from '../../common/Model'; +export interface IReplyPlaceholderAttrs extends ComponentAttrs { + discussion: Discussion | Model; + onclick?: () => void; + composingReply?: () => boolean; +} /** * The `ReplyPlaceholder` component displays a placeholder for a reply, which, * when clicked, opens the reply composer. - * - * ### Attrs - * - * - `discussion` */ -export default class ReplyPlaceholder extends Component { - constructor(); +export default class ReplyPlaceholder extends Component { view(): JSX.Element; - anchorPreview(preview: any): void; + anchorPreview(preview: () => void): void; } -import Component from "../../common/Component"; diff --git a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts index 660d0c5fb..4e0c8b978 100644 --- a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/forum/components/UserSearchResult.d.ts b/framework/core/js/dist-typings/forum/components/UserSearchResult.d.ts new file mode 100644 index 000000000..a86739ef2 --- /dev/null +++ b/framework/core/js/dist-typings/forum/components/UserSearchResult.d.ts @@ -0,0 +1,12 @@ +import Component, { type ComponentAttrs } from '../../common/Component'; +import User from '../../common/models/User'; +import type Mithril from 'mithril'; +export interface IUserSearchResultAttrs extends ComponentAttrs { + user: User; + onclick?: (user: User) => void; + query: string; +} +export default class UserSearchResult extends Component { + view(vnode: Mithril.Vnode): JSX.Element; + content(vnode: Mithril.Vnode): JSX.Element; +} diff --git a/framework/core/js/dist-typings/forum/forum.d.ts b/framework/core/js/dist-typings/forum/forum.d.ts index 39bb49f31..a6ac0ddbd 100644 --- a/framework/core/js/dist-typings/forum/forum.d.ts +++ b/framework/core/js/dist-typings/forum/forum.d.ts @@ -26,6 +26,7 @@ import './components/HeaderSecondary'; import './components/DiscussionList'; import './components/AvatarEditor'; import './components/Post'; +import './components/LoadingPost'; import './components/TerminalPost'; import './components/NotificationsDropdown'; import './components/UserPage'; diff --git a/framework/core/js/dist-typings/forum/states/ComposerState.d.ts b/framework/core/js/dist-typings/forum/states/ComposerState.d.ts index 0bf590a5b..e144fa29c 100644 --- a/framework/core/js/dist-typings/forum/states/ComposerState.d.ts +++ b/framework/core/js/dist-typings/forum/states/ComposerState.d.ts @@ -1,63 +1,59 @@ -export default ComposerState; +import Stream from '../../common/utils/Stream'; +import type EditorDriverInterface from '../../common/utils/EditorDriverInterface'; +import type ComposerBody from '../components/ComposerBody'; +import type Discussion from '../../common/models/Discussion'; declare class ComposerState { - /** - * The composer's current position. - * - * @type {ComposerState.Position} - */ - position: { + static Position: { HIDDEN: string; NORMAL: string; MINIMIZED: string; FULLSCREEN: string; }; + /** + * The composer's current position. + */ + position: string; /** * The composer's intended height, which can be modified by the user * (by dragging the composer handle). - * - * @type {number} */ - height: number; + height: number | null; /** * The dynamic component being shown inside the composer. - * - * @type {Object} */ - body: Object; + body: any; /** * A reference to the text editor that allows text manipulation. - * - * @type {import('../../common/utils/EditorDriverInterface')|null} */ - editor: typeof import("../../common/utils/EditorDriverInterface") | null; + editor: EditorDriverInterface | null; /** * If the composer was loaded and mounted. - * - * @type {boolean} */ mounted: boolean; + protected onExit: { + callback: () => boolean; + message: string; + } | null; + /** + * Fields of the composer. + */ + fields: Record> & { + content: Stream; + }; + constructor(); /** * Load a content component into the composer. * - * @param {() => Promise | typeof import('../components/ComposerBody').default} componentClass - * @param {object} attrs */ load(componentClass: () => Promise | typeof import('../components/ComposerBody').default, attrs: object): Promise<(() => Promise | typeof import('../components/ComposerBody').default) | undefined>; + default: ComposerBody; + }> | ComposerBody, attrs: object): Promise<(() => Promise | ComposerBody) | undefined>; /** * Clear the composer's content component. */ clear(): void; - onExit: { - callback: () => boolean; - message: string; - } | null | undefined; - fields: { - content: Stream; - } | undefined; /** * Show the composer. */ @@ -87,11 +83,10 @@ declare class ComposerState { /** * Determine whether the body matches the given component class and data. * - * @param {object} type The component class to check against. Subclasses are accepted as well. - * @param {object} data - * @return {boolean} + * @param type The component class to check against. Subclasses are accepted as well. + * @param data */ - bodyMatches(type: object, data?: object): boolean; + bodyMatches(type: object, data?: any): boolean; /** * Determine whether or not the Composer is visible. * @@ -117,23 +112,20 @@ declare class ComposerState { * @param {import('../../common/models/Discussion').default} discussion * @return {boolean} */ - composingReplyTo(discussion: import('../../common/models/Discussion').default): boolean; + composingReplyTo(discussion: Discussion): boolean; /** * Confirm with the user that they want to close the composer and lose their * content. * - * @return {boolean} Whether or not the exit was cancelled. + * @return Whether or not the exit was cancelled. */ - preventExit(): boolean; + preventExit(): boolean | void; /** * Configure when / what to ask the user before closing the composer. * * The provided callback will be used to determine whether asking for * confirmation is necessary. If the callback returns true at the time of * closing, the provided text will be shown in a standard confirmation dialog. - * - * @param {() => boolean} callback - * @param {string} message */ preventClosingWhen(callback: () => boolean, message: string): void; /** @@ -142,24 +134,14 @@ declare class ComposerState { */ minimumHeight(): number; /** - * Maxmimum height of the Composer. - * @returns {number} + * Maximum height of the Composer. */ maximumHeight(): number; /** * Computed the composer's current height, based on the intended height, and * the composer's current state. This will be applied to the composer * content's DOM element. - * @returns {number | string} */ computedHeight(): number | string; } -declare namespace ComposerState { - namespace Position { - const HIDDEN: string; - const NORMAL: string; - const MINIMIZED: string; - const FULLSCREEN: string; - } -} -import Stream from "../../common/utils/Stream"; +export default ComposerState; diff --git a/framework/core/js/dist-typings/forum/states/DiscussionListState.d.ts b/framework/core/js/dist-typings/forum/states/DiscussionListState.d.ts index f64622c88..5cc5f4155 100644 --- a/framework/core/js/dist-typings/forum/states/DiscussionListState.d.ts +++ b/framework/core/js/dist-typings/forum/states/DiscussionListState.d.ts @@ -1,4 +1,4 @@ -import PaginatedListState, { Page, PaginatedListParams, PaginatedListRequestParams } from '../../common/states/PaginatedListState'; +import PaginatedListState, { Page, PaginatedListParams, PaginatedListRequestParams, type SortMap } from '../../common/states/PaginatedListState'; import Discussion from '../../common/models/Discussion'; import { ApiResponsePlural } from '../../common/Store'; import EventEmitter from '../../common/utils/EventEmitter'; @@ -17,7 +17,7 @@ export default class DiscussionListState

{var t,e,n={2190:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905);class s{constructor(){(0,r.Z)(this,"element",void 0),(0,r.Z)(this,"attrs",void 0),(0,r.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}flarum.reg.add("core","common/Component",s)},9175:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7905),s=n(7465);class i{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=s.Z.store),(0,r.Z)(this,"data",{}),(0,r.Z)(this,"freshness",new Date),(0,r.Z)(this,"exists",!1),(0,r.Z)(this,"store",void 0),this.data=t,this.store=e}id(){return"id"in this.data?this.data.id:void 0}attribute(t){var e,n;return null==(e=this.data)||null==(n=e.attributes)?void 0:n[t]}pushData(t){if("id"in t&&(this.data.id=t.id),"type"in t&&(this.data.type=t.type),"attributes"in t){var e;(e=this.data).attributes||(e.attributes={});for(const e in t.attributes){const n=t.attributes[e];n&&n instanceof i&&delete t.attributes[e]}Object.assign(this.data.attributes,t.attributes)}if("relationships"in t){var n;const e=null!=(n=this.data.relationships)?n:{};for(const n in t.relationships){const r=t.relationships[n];if(null===r){delete e[n],delete t.relationships[n];continue}let s;s=r instanceof i?{data:i.getIdentifier(r)}:r instanceof Array?{data:r.map(i.getIdentifier)}:r,t.relationships[n]=s,e[n]=s}this.data.relationships=e}return this.freshness=new Date,this}pushAttributes(t){this.pushData({attributes:t})}save(t,e){void 0===e&&(e={});const n={type:this.data.type,attributes:t};if("id"in this.data&&(n.id=this.data.id),t.relationships){n.relationships={};for(const e in t.relationships){const r=t.relationships[e];null!==r&&(n.relationships[e]={data:r instanceof Array?r.map(i.getIdentifier):i.getIdentifier(r)})}delete t.relationships}const r=this.copyData();this.pushData(n);const a={data:n,meta:e.meta||void 0};return s.Z.request({method:this.exists?"PATCH":"POST",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:a,...e}).then((t=>this.store.pushPayload(t)),(t=>{throw this.pushData(r),m.redraw(),t}))}delete(t,e){return void 0===t&&(t={}),void 0===e&&(e={}),this.exists?s.Z.request({method:"DELETE",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:t,...e}).then((()=>{this.exists=!1,this.store.remove(this)})):Promise.resolve()}apiEndpoint(){return"/"+this.data.type+("id"in this.data?"/"+this.data.id:"")}copyData(){return JSON.parse(JSON.stringify(this.data))}rawRelationship(t){var e,n;return null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data}static attribute(t,e){return function(){return e?e(this.attribute(t)):this.attribute(t)}}static hasOne(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&r instanceof Array)throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is plural, so the hasOne method cannot be used to access it."));return!!r&&this.store.getById(r.type,r.id)}}static hasMany(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&!(r instanceof Array))throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is singular, so the hasMany method cannot be used to access it."));return!!r&&r.map((t=>this.store.getById(t.type,t.id)))}}static transformDate(t){return null!=t?new Date(t):t}static getIdentifier(t){return t&&t.data&&"id"in t.data?{type:t.data.type,id:t.data.id}:null}}flarum.reg.add("core","common/Model",i)},4773:(t,e,n)=>{"use strict";n.d(e,{Z:()=>p});var r=n(7905),s=n(7465),i=n(1586);class a extends i.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.author.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.author.hint",{},!0)}filterKey(){return"author"}}flarum.reg.add("core","common/query/discussions/AuthorGambit",a);class o extends i.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.created.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.created.hint",{},!0)}valuePattern(){return"(\\d{4}\\-\\d\\d\\-\\d\\d(?:\\.\\.(\\d{4}\\-\\d\\d\\-\\d\\d))?)"}filterKey(){return"created"}}flarum.reg.add("core","common/query/discussions/CreatedGambit",o);class l extends i.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.hidden.key",{},!0)}filterKey(){return"hidden"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/HiddenGambit",l);class c extends i.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.unread.key",{},!0)}filterKey(){return"unread"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/UnreadGambit",c);class u extends i.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.email.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.email.hint",{},!0)}filterKey(){return"email"}enabled(){return!(!s.Z.session.user||!s.Z.forum.attribute("canEditUserCredentials"))}}flarum.reg.add("core","common/query/users/EmailGambit",u);class d extends i.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.group.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.group.hint",{},!0)}filterKey(){return"group"}}flarum.reg.add("core","common/query/users/GroupGambit",d);class h extends i.y3{key(){return s.Z.translator.trans("core.lib.gambits.posts.discussion.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.posts.discussion.hint",{},!0)}filterKey(){return"discussion"}}flarum.reg.add("core","common/query/discussions/DiscussionGambit",h);class m{constructor(){(0,r.Z)(this,"gambits",{discussions:[a,o,l,c],posts:[a,h],users:[u,d]})}apply(t,e){return e.q=this.match(t,e.q,((t,n,r)=>{const s=t.toFilter(n,r);Object.keys(s).forEach((n=>{n in e&&t.predicates&&Array.isArray(s[n])?e[n]=e[n].concat(s[n]):e[n]=s[n]}))})),e}match(t,e,n){const r=this.for(t).filter((t=>t.enabled()));if(0===r.length)return e;const s=e.split(" ");for(const t of r)for(const r of s){const s=new RegExp("^(-?)".concat(t.pattern(),"$"),"i");let i=r.match(s);if(i){const s="-"===i[1];i.splice(1,1),n(t,i,s,r),e=e.replace(r,"")}}return e.trim().replace(/\s+/g," ")}from(t,e,n){const r=this.for(t);return 0===r.length||Object.keys(n).forEach((t=>{for(const s of r){const r="-"===t[0];r&&(t=t.substring(1)),s.filterKey()===t&&(e+=" ".concat(s.fromFilter(n[t],r)))}})),e}for(t){return(this.gambits[t]||[]).map((t=>new t))}}flarum.reg.add("core","common/GambitManager",m);class p{constructor(t){(0,r.Z)(this,"state",void 0),(0,r.Z)(this,"gambits",new m),this.state=t}}(0,r.Z)(p,"MIN_SEARCH_LEN",3),flarum.reg.add("core","common/SearchManager",p)},7465:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const r=window,s=new Proxy({},{get:(t,e)=>Reflect.get(r.app,e,r.app),set:(t,e,n)=>Reflect.set(r.app,e,n,r.app)}),i=s;flarum.reg.add("core","common/app",s)},3817:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(8312),i=n(1268),a=n(6786),o=n(3344),l=n(7465),c=n(9133);class u extends r.Z{view(t){const e=Object.assign({},this.attrs),n=(0,a.Z)(e,"type");e.className=(0,o.Z)("Alert","Alert--".concat(n),e.className);const r=(0,a.Z)(e,"title"),u=(0,a.Z)(e,"icon"),d=(0,a.Z)(e,"content")||t.children,h=(0,a.Z)(e,"controls")||[],p=(0,a.Z)(e,"dismissible"),f=(0,a.Z)(e,"ondismiss"),g=[];return(p||void 0===p)&&g.push(m(s.Z,{"aria-label":l.Z.translator.trans("core.lib.alert.dismiss_a11y_label"),icon:"fas fa-times",className:"Button Button--link Button--icon Alert-dismiss",onclick:f})),m("div",e,m("div",{className:(0,o.Z)("Alert-container",e.containerClassName)},!!r&&m("div",{className:"Alert-title"},!!u&&m("span",{className:"Alert-title-icon"},m(c.Z,{name:u})),m("span",{className:"Alert-title-text"},r)),m("span",{className:"Alert-body"},d),m("ul",{className:"Alert-controls"},(0,i.Z)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},3804:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(6439),s=n(2190),i=n(3344),a=n(9215),o=n(9133);class l extends s.Z{view(){const{type:t,icon:e,label:n,color:s,style:l={},...c}=this.attrs,u=(0,i.Z)("Badge",[t&&"Badge--".concat(t)],c.className,(0,a.Z)(s)),d=e?m(o.Z,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l,"--badge-bg":s},p={...c,className:u,style:h},f=m("div",p,d);return n?m(r.Z,{text:n},f):f}}flarum.reg.add("core","common/components/Badge",l)},8312:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(7465);function i(){s.Z.forum.attribute("debug")&&console.warn(...arguments)}flarum.reg.add("core","common/helpers/fireDebugWarning",i);var a=n(3344),o=n(1552),l=n(5226),c=n(9133);class u extends r.Z{view(t){let{type:e,"aria-label":n,icon:r,disabled:s,loading:i,className:l,class:c,...u}=this.attrs;e||(e="button"),"object"==typeof n&&(n=(0,o.Z)(n)),(s||i)&&delete u.onclick,l=(0,a.Z)(c,l,{hasIcon:r,disabled:s||i,loading:i});const d={disabled:s,className:l,type:e,"aria-label":n,...u};return m("button",d,this.getButtonContent(t.children))}oncreate(t){var e,n;super.oncreate(t);const{"aria-label":r}=this.attrs;this.view!==u.prototype.view||r||(0,o.Z)(t.children)||null!=(e=this.element)&&null!=(n=e.getAttribute)&&n.call(e,"aria-label")||i('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read "Button". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name',this.element)}getButtonContent(t){const e=this.attrs.icon;return[e&&m(c.Z,{name:e,className:"Button-icon"}),t&&m("span",{className:"Button-label"},t),this.attrs.loading&&m(l.Z,{size:"small",display:"inline"})]}}flarum.reg.add("core","common/components/Button",u)},6352:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2190),s=n(3344);class i extends r.Z{view(t){const{label:e,description:n,className:r,...i}=t.attrs;return m("div",Object.assign({className:(0,s.Z)("Form",r)},i),m("div",{className:"Form-header"},e&&m("label",null,e),n&&m("p",{className:"helpText"},n)),m("div",{className:"Form-body"},t.children))}}flarum.reg.add("core","common/components/Form",i)},899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{wrapper(t){return m("form",{onsubmit:this.onsubmit.bind(this)},t)}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}onerror(t){var e;this.alertAttrs=t.alert,m.redraw(),422===t.status&&null!=(e=t.response)&&e.errors?this.$("form [name="+t.response.errors[0].source.pointer.replace("/data/attributes/","")+"]").trigger("select"):this.onready()}}flarum.reg.add("core","common/components/FormModal",s)},6697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(3804);class s extends r.Z{static initAttrs(t){super.initAttrs(t),t.group&&(t.icon=t.group.icon()||"",t.color=t.group.color()||"",t.label=void 0===t.label?t.group.nameSingular():t.label,t.type="group--"+t.group.id(),delete t.group)}}flarum.reg.add("core","common/components/GroupBadge",s)},9133:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(3344),s=n(2190);class i extends s.Z{view(t){const{name:e,...n}=t.attrs;return n.className=(0,r.Z)("icon",e,n.className),m("i",Object.assign({"aria-hidden":"true"},n))}}flarum.reg.add("core","common/components/Icon",i)},3986:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2190),s=n(9133),i=n(3344);class a extends r.Z{view(t){const{icon:e,className:n,...r}=t.attrs;return m("div",Object.assign({className:(0,i.Z)("InfoTile",n)},r),this.icon(),m("div",{className:"InfoTile-text"},t.children))}icon(){return this.attrs.iconElement?this.attrs.iconElement:this.attrs.icon?m(s.Z,{name:(0,i.Z)(this.attrs.icon,"InfoTile-icon")}):null}}flarum.reg.add("core","common/components/InfoTile",a)},9908:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7465),s=n(2190),i=n(9133),a=n(5226),o=n(3344),l=n(8312);class c extends s.Z{oninit(t){super.oninit(t)}view(t){var e,n;const{className:s,...c}=this.attrs.inputAttrs||{},u=this.attrs.value||(null==(e=(n=this.attrs).stream)?void 0:e.call(n))||"";return m("div",{className:(0,o.Z)("Input",this.attrs.className,{"Input--withPrefix":this.attrs.prefixIcon,"Input--withClear":this.attrs.clearable})},this.attrs.prefixIcon&&m(i.Z,{name:(0,o.Z)(this.attrs.prefixIcon,"Input-prefix-icon")}),this.input({inputClassName:s,value:u,inputAttrs:c}),this.attrs.loading&&m(a.Z,{size:"small",display:"inline",containerClassName:"Button Button--icon Button--link"}),this.attrs.clearable&&u&&!this.attrs.loading&&m(l.Z,{className:"Input-clear Button Button--icon Button--link",onclick:this.clear.bind(this),"aria-label":this.attrs.clearLabel||r.Z.translator.trans("core.lib.input.clear_button"),type:"button",icon:"fas fa-times-circle"}))}input(t){let{inputClassName:e,value:n,inputAttrs:r}=t;const s={className:(0,o.Z)("FormControl",e),type:this.attrs.type||"text",value:n,oninput:t=>{var e;return null==(e=this.onchange)?void 0:e.call(this,t.target.value)},"aria-label":this.attrs.ariaLabel,placeholder:this.attrs.placeholder,readonly:this.attrs.readonly||void 0,disabled:this.attrs.disabled||void 0,...r};return this.attrs.renderInput?this.attrs.renderInput(s):m("input",s)}onchange(t){var e,n;this.attrs.stream?this.attrs.stream(t):null==(e=(n=this.attrs).onchange)||e.call(n,t)}clear(){this.onchange("")}}flarum.reg.add("core","common/components/Input",c)},5226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7465),s=n(2190),i=n(3344);class a extends s.Z{view(){const{display:t="block",size:e="medium",containerClassName:n,className:s,...a}=this.attrs,o=(0,i.Z)("LoadingIndicator",s),l=(0,i.Z)("LoadingIndicator-container","unset"!==t&&"LoadingIndicator-container--".concat(t),e&&"LoadingIndicator-container--".concat(e),n);return m("div",Object.assign({"aria-label":r.Z.translator.trans("core.lib.loading_indicator.accessible_label"),role:"status"},a.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:o},a)))}}flarum.reg.add("core","common/components/LoadingIndicator",a)},7108:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7905),s=n(7465),i=n(2190),a=n(3817),o=n(8312),l=n(3344);class c extends i.Z{constructor(){super(...arguments),(0,r.Z)(this,"loading",!1),(0,r.Z)(this,"alertAttrs",null)}static get dismissibleOptions(){return{viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}}oncreate(t){super.oncreate(t),this.attrs.animateShow((()=>this.onready()))}onbeforeremove(t){if(super.onbeforeremove(t),!this.attrs.state.modal)return new Promise((t=>setTimeout(t,300)))}view(){return this.alertAttrs&&(this.alertAttrs.dismissible=!1),m("div",{className:(0,l.Z)("Modal modal-dialog fade",this.className())},m("div",{className:"Modal-content"},this.dismissibleOptions.viaCloseButton&&m("div",{className:"Modal-close App-backControl"},m(o.Z,{icon:"fas fa-times",onclick:()=>this.hide(),className:"Button Button--icon Button--link","aria-label":s.Z.translator.trans("core.lib.modal.close")})),this.wrapper(this.inner())))}wrapper(t){return m("[",null,t)}inner(){return m("[",null,m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(a.Z,this.alertAttrs)),this.content())}onready(){}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,r.Z)(c,"isDismissibleViaCloseButton",!0),(0,r.Z)(c,"isDismissibleViaEscKey",!0),(0,r.Z)(c,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",c)},6439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7905),s=n(2190),i=n(3344),a=n(1552);class o extends s.Z{constructor(){super(...arguments),(0,r.Z)(this,"firstChild",null),(0,r.Z)(this,"childDomNode",null),(0,r.Z)(this,"oldText",""),(0,r.Z)(this,"oldVisibility",void 0),(0,r.Z)(this,"shouldRecreateTooltip",!1),(0,r.Z)(this,"shouldChangeTooltipVisibility",!1)}view(t){const e=t.children,{text:n,tooltipVisible:r,showOnFocus:s=!0,position:i="top",ignoreTitleWarning:a=!1,html:o=!1,delay:l=0,...c}=this.attrs;this.attrs.title&&!a&&console.warn("`title` attribute was passed to Tooltip component. Was this intentional? Tooltip content should be passed to the `text` attr instead.");const u=this.getRealText();if(u!==this.oldText&&(this.oldText=u,this.shouldRecreateTooltip=!0),r!==this.oldVisibility&&(this.oldVisibility=this.attrs.tooltipVisible,this.shouldChangeTooltipVisibility=!0),void 0===e)throw new Error("Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.");if(1!==e.length)throw new Error("Tooltip component was either passed more than one or no child node.\n\nPlease wrap multiple children in another element, such as a

or .");const d=e[0];if("object"!=typeof d||Array.isArray(d)||null===d)throw new Error("Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.");if("string"==typeof d.tag&&["#","[","<"].includes(d.tag))throw new Error('Tooltip component with provided with a vnode with tag "'.concat(d.tag,'". This is not a DOM element, so is not a valid child element. Please wrap this vnode in another element, such as a
or .'));return this.firstChild=d,e}oncreate(t){super.oncreate(t),this.checkDomNodeChanged(),this.recreateTooltip()}onupdate(t){super.onupdate(t),this.checkDomNodeChanged(),this.recreateTooltip()}recreateTooltip(){this.shouldRecreateTooltip&&null!==this.childDomNode&&($(this.childDomNode).tooltip("destroy","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"),this.createTooltip(),this.shouldRecreateTooltip=!1),this.shouldChangeTooltipVisibility&&(this.shouldChangeTooltipVisibility=!1,this.updateVisibility())}updateVisibility(){null!==this.childDomNode&&(!0===this.attrs.tooltipVisible?$(this.childDomNode).tooltip("show","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"):!1===this.attrs.tooltipVisible&&$(this.childDomNode).tooltip("hide","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"))}createTooltip(){if(null===this.childDomNode)return;const{showOnFocus:t=!0,position:e="top",delay:n,html:r=!1,tooltipVisible:s,text:a}=this.attrs,o="boolean"==typeof s?"manual":(0,i.Z)("hover",[t&&"focus"]),l=this.getRealText();this.childDomNode.setAttribute("title",l),this.childDomNode.setAttribute("aria-label",l),$(this.childDomNode).tooltip({html:r,delay:n,placement:e,trigger:o},"DANGEROUS_tooltip_jquery_fn_deprecation_exempt")}getRealText(){const{text:t}=this.attrs;return Array.isArray(t)?(0,a.Z)(t):t}checkDomNodeChanged(){const t=this.firstChild.dom;t&&!t.isSameNode(this.childDomNode)&&(this.childDomNode=t,this.shouldRecreateTooltip=!0)}}flarum.reg.add("core","common/components/Tooltip",o)},1268:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2903),s=n(3344);function i(t){return"object"==typeof t&&null!==t&&"tag"in t}function a(t){return i(t)&&t.tag===r.Z}function o(t,e,n){void 0===e&&(e="li"),void 0===n&&(n={});const r=e;return function(t){const e=[];let n;return t.filter(Boolean).forEach(((r,s)=>{(!a(r)||n&&!a(n)&&s!==t.length-1)&&(n=r,e.push(r))})),e}(t instanceof Array?t:[t]).map((t=>{var e;const a=[t.itemName&&"item-".concat(t.itemName)];if(i(t)&&t.tag.isListItem)return t.attrs=t.attrs||{},t.attrs.key=t.attrs.key||t.itemName,t.key=t.attrs.key,t;var o,l,c;i(t)&&(a.push((null==(o=t.attrs)?void 0:o.itemClassName)||t.itemClassName),null!=(l=(c=t.tag).isActive)&&l.call(c,t.attrs)&&a.push("active"));const u=i(t)&&(null==t||null==(e=t.attrs)?void 0:e.key)||t.itemName;return m(r,Object.assign({className:(0,s.Z)(a),key:u},n),t)}))}flarum.reg.add("core","common/helpers/listItems",o)},9215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(6476);function s(t){return t?(0,r.Z)(t)?"text-contrast--light":"text-contrast--dark":"text-contrast--unchanged"}flarum.reg.add("core","common/helpers/textContrastClass",s)},7645:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7905),s=n(9175);class i extends s.Z{nameSingular(){return s.Z.attribute("nameSingular").call(this)}namePlural(){return s.Z.attribute("namePlural").call(this)}color(){return s.Z.attribute("color").call(this)}icon(){return s.Z.attribute("icon").call(this)}isHidden(){return s.Z.attribute("isHidden").call(this)}}(0,r.Z)(i,"ADMINISTRATOR_ID","1"),(0,r.Z)(i,"GUEST_ID","2"),(0,r.Z)(i,"MEMBER_ID","3"),flarum.reg.add("core","common/models/Group",i)},1586:(t,e,n)=>{"use strict";n.d(e,{bK:()=>i,gD:()=>a,y3:()=>o});var r=n(7905),s=n(7465);let i=function(t){return t.KeyValue="key:value",t.Grouped="grouped",t}({});class a{constructor(){(0,r.Z)(this,"type",i.Grouped),(0,r.Z)(this,"predicates",!1)}pattern(){const t=s.Z.translator.trans("core.lib.gambits.boolean_key",{},!0);let e=this.key();return Array.isArray(e)&&(e=e.join("|")),"".concat(t,":(").concat(e,")")}toFilter(t,e){return{[(e?"-":"")+this.filterKey()]:!0}}fromFilter(t,e){const n=s.Z.translator.trans("core.lib.gambits.boolean_key",{},!0),r=this.key();return"".concat(e?"-":"").concat(n,":").concat(r)}suggestion(){return{group:s.Z.translator.trans("core.lib.gambits.boolean_key",{},!0),key:this.key()}}enabled(){return!0}}class o{constructor(){(0,r.Z)(this,"type",i.KeyValue),(0,r.Z)(this,"predicates",!1)}valuePattern(){return"(.+)"}gambitValueToFilterValue(t){return t}filterValueToGambitValue(t){return Array.isArray(t)?t.join(","):t.toString()}pattern(){const t=this.key();return"".concat(t,":")+this.valuePattern()}toFilter(t,e){return{[(e?"-":"")+this.filterKey()]:this.gambitValueToFilterValue(t[1])}}fromFilter(t,e){return"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}suggestion(){return{key:this.key(),hint:this.hint()}}enabled(){return!0}}flarum.reg.add("core","common/query/IGambit",{GambitType:i,BooleanGambit:a,KeyValueGambit:o})},2109:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905);class s{constructor(t){(0,r.Z)(this,"symbol",void 0),(0,r.Z)(this,"relativeStart",0),(0,r.Z)(this,"absoluteStart",0),this.symbol=t}check(t,e,n){void 0===n&&(n=null),this.absoluteStart=0;for(let s=t.length-1;s>=0;s--){var r;const i=t.substr(s,1);if(n&&(null==(r=n)||!r.test(i)))return null;if(this.symbol){const t="string"==typeof this.symbol?t=>t===this.symbol:this.symbol;if(!t(i))continue}if(0===s||/\s/.test(t.substr(s-1,1)))return this.relativeStart=s+(this.symbol?1:0),this.absoluteStart=e-t.length+s+(this.symbol?1:0),{symbol:this.symbol&&i,relativeStart:this.relativeStart,absoluteStart:this.absoluteStart,typed:t.substring(this.relativeStart).toLowerCase()}}return null}}flarum.reg.add("core","common/utils/AutocompleteReader",s)},4945:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(7905),s=n(7465),i=n(1586),a=n(2109),o=n(8312);class l{constructor(t,e,n,s){this.resource=t,this.jqueryInput=e,this.onchange=n,this.afterSuggest=s,(0,r.Z)(this,"query","")}suggestions(t){const e=s.Z.search.gambits.for(this.resource).filter((t=>t.enabled()));this.query=t;const n=e.filter((t=>t.type===i.bK.Grouped)),r=e.filter((t=>t.type!==i.bK.Grouped)),o=[];for(const t of n)o.includes(t.suggestion().group)||o.push(t.suggestion().group);const l=[];for(const t of o)l.push({type:i.bK.Grouped,suggestion:()=>({group:t,key:n.filter((e=>e.suggestion().group===t)).map((t=>{const e=t.suggestion().key;return e instanceof Array?e.join(", "):e})).join(", ")}),pattern:()=>"",filterKey:()=>"",toFilter:()=>[],fromFilter:()=>"",predicates:!1,enabled:()=>!0});const c=new a.Z(null),u=this.jqueryInput().prop("selectionStart")||t.length,d=t.slice(0,u),h=c.check(d,u,/\S+$/);let m=(null==h?void 0:h.typed)||"";const p=m.startsWith("-");if(p&&(m=m.slice(1)),m.endsWith(":")){const t=m.replace(/:$/,"")||null,e=m.split(":").pop()||"";if(t){const r=this.specificGambitSuggestions(t,e,o,n,h);if(r)return r}}return[...l,...r].filter((t=>!h||new RegExp(m).test(t.type===i.bK.Grouped?t.suggestion().group:t.suggestion().key))).map((t=>{const e=t.suggestion(),n=t.type===i.bK.Grouped?e.group:e.key,r=t.type===i.bK.Grouped?e.key:e.hint;return this.gambitSuggestion(n,r,(t=>{var e;return this.suggest((t?"-":"")+n+":",m||"",(null!=(e=null==h?void 0:h.relativeStart)?e:u)+Number(p))}))}))}specificGambitSuggestions(t,e,n,r,s){return n.includes(t)?r.filter((e=>e.suggestion().group===t)).flatMap((t=>t.suggestion().key instanceof Array?t.suggestion().key:[t.suggestion().key])).filter((t=>!e||t.toLowerCase().startsWith(e))).map((t=>this.gambitSuggestion(t,null,(()=>this.suggest(t,e,s.relativeStart+s.typed.length))))):null}gambitSuggestion(t,e,n){return m("li",null,m("span",{className:"Dropdown-item GambitsAutocomplete-gambit"},m("button",{type:"button",className:"Button--ua-reset",onclick:()=>n()},m("span",{className:"GambitsAutocomplete-gambit-key"},t,!!e&&":"),!!e&&m("span",{className:"GambitsAutocomplete-gambit-value"},e)),!!e&&m("span",{className:"GambitsAutocomplete-gambit-actions"},m(o.Z,{class:"Button Button--icon",onclick:()=>n(),icon:"fas fa-plus","aria-label":s.Z.translator.trans("core.forum.search.gambit_plus_button_a11y_label")}),m(o.Z,{class:"Button Button--icon",onclick:()=>n(!0),icon:"fas fa-minus","aria-label":s.Z.translator.trans("core.forum.search.gambit_minus_button_a11y_label")}))))}suggest(t,e,n){const r=this.jqueryInput(),s=this.query,i=s.slice(0,n)+t+s.slice(n+e.length);this.onchange(i),r[0].focus(),setTimeout((()=>{r[0].setSelectionRange(n+t.length,n+t.length),m.redraw()}),50),this.afterSuggest(i)}}flarum.reg.add("core","common/utils/GambitsAutocomplete",l)},4041:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7905),s=n(7531);class i{constructor(t,e){(0,r.Z)(this,"content",void 0),(0,r.Z)(this,"priority",void 0),this.content=t,this.priority=e}}class a{constructor(){(0,r.Z)(this,"_items",{})}isEmpty(){return 0===Object.keys(this._items).length}has(t){return Object.keys(this._items).includes(t)}get(t){return this._items[t].content}getPriority(t){return this._items[t].priority}add(t,e,n){return void 0===n&&(n=0),this._items[t]=new i(e,n),this}setContent(t,e){if(!this.has(t))throw new Error("[ItemList] Cannot set content of Item. Key `".concat(t,"` is not present."));return null!==e&&(this._items[t].content=e),this}setPriority(t,e){if(!this.has(t))throw new Error("[ItemList] Cannot set priority of Item. Key `".concat(t,"` is not present."));return this._items[t].priority=e,this}remove(t){return delete this._items[t],this}merge(t){return Object.keys(t._items).forEach((e=>{const n=t._items[e];n instanceof i&&(this._items[e]=n)})),this}toArray(t){return void 0===t&&(t=!1),Object.keys(this._items).map(((e,n)=>{const r=this._items[e];return!t||(0,s.Z)(r.content)?{...r,content:this.createItemContentProxy((0,s.Z)(r.content)?r.content:Object(r.content),e)}:{...r}})).sort(((t,e)=>e.priority-t.priority)).map((t=>t.content))}toObject(){return Object.keys(this._items).reduce(((t,e)=>{const n={content:this.get(e),itemName:e,priority:this.getPriority(e)};return t[e]=n,t}),{})}createItemContentProxy(t,e){return new Proxy(t,{get:(t,n,r)=>"itemName"===n?e:Reflect.get(t,n,r),set(t,n,r,s){if(null!==e&&"itemName"===n)throw new Error("`itemName` property is read-only");return Reflect.set(t,n,r,s)}})}}flarum.reg.add("core","common/utils/ItemList",a)},8046:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7905),s=function(t){return t[t.Enter=13]="Enter",t[t.Escape=27]="Escape",t[t.Space=32]="Space",t[t.ArrowUp=38]="ArrowUp",t[t.ArrowDown=40]="ArrowDown",t[t.ArrowLeft=37]="ArrowLeft",t[t.ArrowRight=39]="ArrowRight",t[t.Tab=9]="Tab",t[t.Backspace=8]="Backspace",t}(s||{});class i{constructor(){(0,r.Z)(this,"callbacks",new Map),(0,r.Z)(this,"whenCallback",(t=>!0))}onUp(t){return this.onDirection(t,s.ArrowUp)}onDown(t){return this.onDirection(t,s.ArrowDown)}onLeft(t){return this.onDirection(t,s.ArrowLeft)}onRight(t){return this.onDirection(t,s.ArrowRight)}onDirection(t,e){return this.callbacks.set(e,(e=>{e.preventDefault(),t(e)})),this}onSelect(t,e){void 0===e&&(e=!1);const n=e=>{e.preventDefault(),t(e)};return e||this.callbacks.set(s.Tab,n),this.callbacks.set(s.Enter,n),this}onTab(t){return this.callbacks.set(9,(e=>{e.preventDefault(),t(e)})),this}onCancel(t){return this.callbacks.set(s.Escape,(e=>{e.stopPropagation(),e.preventDefault(),t(e)})),this}onRemove(t){return this.callbacks.set(s.Backspace,(e=>{e instanceof KeyboardEvent&&e.target instanceof HTMLInputElement&&0===e.target.selectionStart&&0===e.target.selectionEnd&&(t(e),e.preventDefault())})),this}when(t){return this.whenCallback=t,this}bindTo(t){t[0].addEventListener("keydown",this.navigate.bind(this))}navigate(t){if(!this.whenCallback(t))return;const e=this.callbacks.get(t.which);e&&e(t)}}flarum.reg.add("core","common/utils/KeyboardNavigatable",i)},6458:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(562),s=n.n(r);const i=s();flarum.reg.add("core","common/utils/Stream",s())},117:()=>{Array.prototype.flat||(Array.prototype.flat=function t(e){return(null!=e?e:1)>0?Array.prototype.reduce.call(this,((n,r)=>n.concat(Array.isArray(r)?t.call(r,e-1):r)),[]):[...this]})},3344:(t,e,n)=>{"use strict";function r(t){var e,n,s="";if("string"==typeof t||"number"==typeof t)s+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;ei});const s=function(){for(var t,e,n=0,s="";n{"use strict";function r(t,e){const n=t[e];return delete t[e],n}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/extract",r)},1552:(t,e,n)=>{"use strict";function r(t){return t instanceof Array?t.map((t=>r(t))).join(""):"object"==typeof t&&null!==t?r(t.children):String(t)}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/extractText",r)},6476:(t,e,n)=>{"use strict";function r(t){if(!t||t.length<4)return!1;let e=t.replace("#","");return 3===e.length&&(e=e.split("").map((t=>t.repeat(2))).join("")),(299*parseInt(e.slice(0,2),16)+587*parseInt(e.slice(2,4),16)+114*parseInt(e.slice(4,6),16))/1e3<(parseInt(getComputedStyle(document.body).getPropertyValue("--yiq-threshold").trim())||128)}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/isDark",r)},7531:(t,e,n)=>{"use strict";function r(t){const e=typeof t;return"function"===e||"object"===e&&!!t}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/isObject",r)},9361:()=>{!function(t){"use strict";var e=function(n,r){this.options=t.extend({},e.DEFAULTS,r);var s=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=s.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var r=t(this),s=r.data("bs.affix"),i="object"==typeof n&&n;s||r.data("bs.affix",s=new e(this,i)),"string"==typeof n&&s[n]()}))}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,r){var s=this.$target.scrollTop(),i=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return s=t-r&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),r=this.options.offset,s=r.top,i=r.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof r&&(i=s=r),"function"==typeof s&&(s=r.top(this.$element)),"function"==typeof i&&(i=r.bottom(this.$element));var o=this.getState(a,n,s,i);if(this.affixed!=o){null!=this.unpin&&this.$element.css("top","");var l="affix"+(o?"-"+o:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=o,this.unpin="bottom"==o?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==o&&this.$element.offset({top:a-n-i})}};var r=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on("load",(function(){t('[data-spy="affix"]').each((function(){var e=t(this),r=e.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(e,r)}))}))}(jQuery)},6013:()=>{!function(t){"use strict";var e='[data-toggle="dropdown"]',n=function(e){t(e).on("click.bs.dropdown",this.toggle)};function r(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r="#"!==n?t(document).find(n):null;return r&&r.length?r:e.parent()}function s(n){n&&3===n.which||(t(".dropdown-backdrop").remove(),t(e).each((function(){var e=t(this),s=r(e),i={relatedTarget:this};s.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(s[0],n.target)||(s.trigger(n=t.Event("hide.bs.dropdown",i)),n.isDefaultPrevented()||(e.attr("aria-expanded","false"),s.removeClass("open").trigger(t.Event("hidden.bs.dropdown",i)))))})))}n.VERSION="3.4.1",n.prototype.toggle=function(e){var n=t(this);if(!n.is(".disabled, :disabled")){var i=r(n),a=i.hasClass("open");if(s(),!a){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",s);var o={relatedTarget:this};if(i.trigger(e=t.Event("show.bs.dropdown",o)),e.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(t.Event("shown.bs.dropdown",o))}return!1}},n.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var s=t(this);if(n.preventDefault(),n.stopPropagation(),!s.is(".disabled, :disabled")){var i=r(s),a=i.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&i.find(e).trigger("focus"),s.trigger("click");var o=i.find(".dropdown-menu li:not(.disabled):visible a");if(o.length){var l=o.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l{!function(t){"use strict";var e=["sanitize","whiteList","sanitizeFn"],n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,s=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function i(e,i){var a=e.nodeName.toLowerCase();if(-1!==t.inArray(a,i))return-1===t.inArray(a,n)||Boolean(e.nodeValue.match(r)||e.nodeValue.match(s));for(var o=t(i).filter((function(t,e){return e instanceof RegExp})),l=0,c=o.length;l
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]}},o.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var s=this.options.trigger.split(" "),i=s.length;i--;){var a=s[i];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var o="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(o+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(n){var r=this.$element.data();for(var s in r)r.hasOwnProperty(s)&&-1!==t.inArray(s,e)&&delete r[s];return(n=t.extend({},this.getDefaults(),r,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},o.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,(function(t,r){n[t]!=r&&(e[t]=r)})),e},o.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},o.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},o.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var r=this,s=this.tip(),i=this.getUID(this.type);this.setContent(),s.attr("id",i),this.$element.attr("aria-describedby",i),this.options.animation&&s.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(a);c&&(a=a.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?s.appendTo(t(document).find(this.options.container)):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=s[0].offsetWidth,h=s[0].offsetHeight;if(c){var m=a,p=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+h>p.bottom?"top":"top"==a&&u.top-hp.width?"left":"left"==a&&u.left-da.top+a.height&&(s.top=a.top+a.height-l)}else{var c=e.left-i,u=e.left+i+n;ca.right&&(s.left=a.left+a.width-u)}return s},o.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},o.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},o.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},o.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},o.prototype.sanitizeHtml=function(t){return a(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var n=t(this),r=n.data("bs.tooltip"),s="object"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||n.data("bs.tooltip",r=new o(this,s)),"string"==typeof e&&r[e]())}))},t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery)},3929:()=>{!function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;return t(this).one("bsTransitionEnd",(function(){n=!0})),setTimeout((function(){n||t(r).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery)},613:t=>{var e=function(t){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),document.body.appendChild(this.canvas),this.width=this.canvas.width=t.width,this.height=this.canvas.height=t.height,this.context.drawImage(t,0,0,this.width,this.height)};e.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},e.prototype.update=function(t){this.context.putImageData(t,0,0)},e.prototype.getPixelCount=function(){return this.width*this.height},e.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)},e.prototype.removeCanvas=function(){this.canvas.parentNode.removeChild(this.canvas)};var n=function(){};if(n.prototype.getColor=function(t,e){return this.getPalette(t,5,e)[0]},n.prototype.getPalette=function(t,n,r){void 0===n&&(n=10),(void 0===r||1>r)&&(r=10);for(var i,a,o,l,c=new e(t),u=c.getImageData().data,d=c.getPixelCount(),h=[],m=0;d>m;m+=r)a=u[0+(i=4*m)],o=u[i+1],l=u[i+2],u[i+3]>=125&&(a>250&&o>250&&l>250||h.push([a,o,l]));var p=s.quantize(h,n),f=p?p.palette():null;return c.removeCanvas(),f},!r)var r={map:function(t,e){var n={};return e?t.map((function(t,r){return n.index=r,e.call(n,t)})):t.slice()},naturalOrder:function(t,e){return e>t?-1:t>e?1:0},sum:function(t,e){var n={};return t.reduce(e?function(t,r,s){return n.index=s,t+e.call(n,r)}:function(t,e){return t+e},0)},max:function(t,e){return Math.max.apply(null,e?r.map(t,e):t)}};var s=function(){function t(t,e,n){return(t<<2*l)+(e<>c,s=e[1]>>c,i=e[2]>>c,n=t(r,s,i),a[n]=(a[n]||0)+1})),a}function a(t,e){var r,s,i,a=1e6,o=0,l=1e6,u=0,d=1e6,h=0;return t.forEach((function(t){r=t[0]>>c,s=t[1]>>c,i=t[2]>>c,a>r?a=r:r>o&&(o=r),l>s?l=s:s>u&&(u=s),d>i?d=i:i>h&&(h=i)})),new n(a,o,l,u,d,h,e)}function o(e,n){if(n.count()){var s=n.r2-n.r1+1,i=n.g2-n.g1+1,a=n.b2-n.b1+1,o=r.max([s,i,a]);if(1==n.count())return[n.copy()];var l,c,u,d,h=0,m=[],p=[];if(o==s)for(l=n.r1;l<=n.r2;l++){for(d=0,c=n.g1;c<=n.g2;c++)for(u=n.b1;u<=n.b2;u++)d+=e[t(l,c,u)]||0;h+=d,m[l]=h}else if(o==i)for(l=n.g1;l<=n.g2;l++){for(d=0,c=n.r1;c<=n.r2;c++)for(u=n.b1;u<=n.b2;u++)d+=e[t(c,l,u)]||0;h+=d,m[l]=h}else for(l=n.b1;l<=n.b2;l++){for(d=0,c=n.r1;c<=n.r2;c++)for(u=n.g1;u<=n.g2;u++)d+=e[t(c,u,l)]||0;h+=d,m[l]=h}return m.forEach((function(t,e){p[e]=h-t})),function(t){var e,r,s,i,a,o=t+"1",c=t+"2",u=0;for(l=n[o];l<=n[c];l++)if(m[l]>h/2){for(s=n.copy(),i=n.copy(),e=l-n[o],a=(r=n[c]-l)>=e?Math.min(n[c]-1,~~(l+r/2)):Math.max(n[o],~~(l-1-e/2));!m[a];)a++;for(u=p[a];!u&&m[a-1];)u=p[--a];return s[c]=a,i[o]=s[c]+1,[s,i]}}(o==s?"r":o==i?"g":"b")}}var l=5,c=8-l;return n.prototype={volume:function(t){var e=this;return(!e._volume||t)&&(e._volume=(e.r2-e.r1+1)*(e.g2-e.g1+1)*(e.b2-e.b1+1)),e._volume},count:function(e){var n=this,r=n.histo;if(!n._count_set||e){var s,i,a,o=0;for(s=n.r1;s<=n.r2;s++)for(i=n.g1;i<=n.g2;i++)for(a=n.b1;a<=n.b2;a++)index=t(s,i,a),o+=r[index]||0;n._count=o,n._count_set=!0}return n._count},copy:function(){var t=this;return new n(t.r1,t.r2,t.g1,t.g2,t.b1,t.b2,t.histo)},avg:function(e){var n=this,r=n.histo;if(!n._avg||e){var s,i,a,o,c=0,u=1<<8-l,d=0,h=0,m=0;for(i=n.r1;i<=n.r2;i++)for(a=n.g1;a<=n.g2;a++)for(o=n.b1;o<=n.b2;o++)c+=s=r[t(i,a,o)]||0,d+=s*(i+.5)*u,h+=s*(a+.5)*u,m+=s*(o+.5)*u;n._avg=c?[~~(d/c),~~(h/c),~~(m/c)]:[~~(u*(n.r1+n.r2+1)/2),~~(u*(n.g1+n.g2+1)/2),~~(u*(n.b1+n.b2+1)/2)]}return n._avg},contains:function(t){var e=this,n=t[0]>>c;return gval=t[1]>>c,bval=t[2]>>c,n>=e.r1&&n<=e.r2&&gval>=e.g1&&gval<=e.g2&&bval>=e.b1&&bval<=e.b2}},s.prototype={push:function(t){this.vboxes.push({vbox:t,color:t.avg()})},palette:function(){return this.vboxes.map((function(t){return t.color}))},size:function(){return this.vboxes.size()},map:function(t){for(var e=this.vboxes,n=0;n(n=Math.sqrt(Math.pow(t[0]-s.peek(i).color[0],2)+Math.pow(t[1]-s.peek(i).color[1],2)+Math.pow(t[2]-s.peek(i).color[2],2)))||void 0===e)&&(e=n,r=s.peek(i).color);return r},forcebw:function(){var t=this.vboxes;t.sort((function(t,e){return r.naturalOrder(r.sum(t.color),r.sum(e.color))}));var e=t[0].color;e[0]<5&&e[1]<5&&e[2]<5&&(t[0].color=[0,0,0]);var n=t.length-1,s=t[n].color;s[0]>251&&s[1]>251&&s[2]>251&&(t[n].color=[255,255,255])}},{quantize:function(t,n){function l(t,e){for(var n,r=1,s=0;1e3>s;)if((n=t.pop()).count()){var i=o(c,n),a=i[0],l=i[1];if(!a)return;if(t.push(a),l&&(t.push(l),r++),r>=e)return;if(s++>1e3)return}else t.push(n),s++}if(!t.length||2>n||n>256)return!1;var c=i(t);c.forEach((function(){}));var u=a(t,c),d=new e((function(t,e){return r.naturalOrder(t.count(),e.count())}));d.push(u),l(d,.75*n);for(var h=new e((function(t,e){return r.naturalOrder(t.count()*t.volume(),e.count()*e.volume())}));d.size();)h.push(d.pop());l(h,n-h.size());for(var m=new s;h.size();)m.push(h.pop());return m}}}();t.exports=n},3860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",s="minute",i="hour",a="day",o="week",l="month",c="quarter",u="year",d="date",h="Invalid Date",m=/^(\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,f={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"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),s=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(s,2,"0")},m:function t(e,n){if(e.date()1)return t(a[0])}else{var o=e.name;y[o]=e,s=o}return!r&&s&&(b=s),s||!r&&b},N=function(t,e){if(w(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new S(n)},_=v;_.l=x,_.i=w,_.w=function(t,e){return N(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var S=function(){function f(t){this.$L=x(t.locale,null,!0),this.parse(t)}var g=f.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(_.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(m);if(r){var s=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],s,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],s,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},g.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()},g.$utils=function(){return _},g.isValid=function(){return!(this.$d.toString()===h)},g.isSame=function(t,e){var n=N(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return N(t)0,g<=f.r||!f.r){g<=1&&p>0&&(f=h[p-1]);var v=d[f.l];o&&(g=o(""+g)),c="string"==typeof v?v.replace("%d",g):v(g,r,f.l,u);break}}if(r)return c;var b=u?d.future:d.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var a=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(a(this),t)},r.fromNow=function(t){return this.from(a(this),t)}}}()},7749:(t,e,n)=>{"use strict";t.exports=function(){if("object"==typeof globalThis)return globalThis;var t;try{t=this||new Function("return this")()}catch(t){if("object"==typeof window)return window;if("object"==typeof self)return self;if(void 0!==n.g)return n.g}return t}()},2045:function(){!function(t){function e(e){if("string"==typeof e.data&&(e.data={keys:e.data}),e.data&&e.data.keys&&"string"==typeof e.data.keys){var n=e.handler,r=e.data.keys.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!(t.hotkeys.options.filterInputAcceptingElements&&t.hotkeys.textInputTypes.test(e.target.nodeName)||t.hotkeys.options.filterContentEditable&&t(e.target).attr("contenteditable")||t.hotkeys.options.filterTextInputs&&t.inArray(e.target.type,t.hotkeys.textAcceptingInputTypes)>-1)){var s="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],i=String.fromCharCode(e.which).toLowerCase(),a="",o={};t.each(["alt","ctrl","shift"],(function(t,n){e[n+"Key"]&&s!==n&&(a+=n+"+")})),e.metaKey&&!e.ctrlKey&&"meta"!==s&&(a+="meta+"),e.metaKey&&"meta"!==s&&a.indexOf("alt+ctrl+shift+")>-1&&(a=a.replace("alt+ctrl+shift+","hyper+")),s?o[a+s]=!0:(o[a+i]=!0,o[a+t.hotkeys.shiftNums[i]]=!0,"shift+"===a&&(o[t.hotkeys.shiftNums[i]]=!0));for(var l=0,c=r.length;l","/":"?","\\":"|"},textAcceptingInputTypes:["text","password","number","email","url","range","date","month","week","time","datetime","datetime-local","search","color","tel"],textInputTypes:/textarea|input|select/i,options:{filterInputAcceptingElements:!0,filterTextInputs:!0,filterContentEditable:!0}},t.each(["keydown","keyup","keypress"],(function(){t.event.special[this]={add:e}}))}(jQuery||this.jQuery||window.jQuery)},2890:function(t,e){var n;!function(e,n){"use strict";"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(r,s){"use strict";var i=[],a=Object.getPrototypeOf,o=i.slice,l=i.flat?function(t){return i.flat.call(t)}:function(t){return i.concat.apply([],t)},c=i.push,u=i.indexOf,d={},h=d.toString,m=d.hasOwnProperty,p=m.toString,f=p.call(Object),g={},v=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item},b=function(t){return null!=t&&t===t.window},y=r.document,w={type:!0,src:!0,nonce:!0,noModule:!0};function x(t,e,n){var r,s,i=(n=n||y).createElement("script");if(i.text=t,e)for(r in w)(s=e[r]||e.getAttribute&&e.getAttribute(r))&&i.setAttribute(r,s);n.head.appendChild(i).parentNode.removeChild(i)}function N(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?d[h.call(t)]||"object":typeof t}var _="3.6.1",S=function(t,e){return new S.fn.init(t,e)};function E(t){var e=!!t&&"length"in t&&t.length,n=N(t);return!v(t)&&!b(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}S.fn=S.prototype={jquery:_,constructor:S,length:0,toArray:function(){return o.call(this)},get:function(t){return null==t?o.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=S.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return S.each(this,t)},map:function(t){return this.pushStack(S.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(S.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),G=new RegExp(j+"|>"),z=new RegExp($),W=new RegExp("^"+B+"$"),V={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},K=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,X=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),nt=function(t,e){var n="0x"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},rt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,st=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},it=function(){h()},at=wt((function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{O.apply(A=I.call(x.childNodes),x.childNodes),A[x.childNodes.length].nodeType}catch(t){O={apply:A.length?function(t,e){P.apply(t,I.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ot(t,e,r,s){var i,o,c,u,d,p,v,b=e&&e.ownerDocument,x=e?e.nodeType:9;if(r=r||[],"string"!=typeof t||!t||1!==x&&9!==x&&11!==x)return r;if(!s&&(h(e),e=e||m,f)){if(11!==x&&(d=X.exec(t)))if(i=d[1]){if(9===x){if(!(c=e.getElementById(i)))return r;if(c.id===i)return r.push(c),r}else if(b&&(c=b.getElementById(i))&&y(e,c)&&c.id===i)return r.push(c),r}else{if(d[2])return O.apply(r,e.getElementsByTagName(t)),r;if((i=d[3])&&n.getElementsByClassName&&e.getElementsByClassName)return O.apply(r,e.getElementsByClassName(i)),r}if(n.qsa&&!k[t+" "]&&(!g||!g.test(t))&&(1!==x||"object"!==e.nodeName.toLowerCase())){if(v=t,b=e,1===x&&(G.test(t)||U.test(t))){for((b=tt.test(t)&&vt(e.parentNode)||e)===e&&n.scope||((u=e.getAttribute("id"))?u=u.replace(rt,st):e.setAttribute("id",u=w)),o=(p=a(t)).length;o--;)p[o]=(u?"#"+u:":scope")+" "+yt(p[o]);v=p.join(",")}try{return O.apply(r,b.querySelectorAll(v)),r}catch(e){k(t,!0)}finally{u===w&&e.removeAttribute("id")}}}return l(t.replace(q,"$1"),e,r,s)}function lt(){var t=[];return function e(n,s){return t.push(n+" ")>r.cacheLength&&delete e[t.shift()],e[n+" "]=s}}function ct(t){return t[w]=!0,t}function ut(t){var e=m.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function dt(t,e){for(var n=t.split("|"),s=n.length;s--;)r.attrHandle[n[s]]=e}function ht(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function mt(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function pt(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function ft(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&at(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function gt(t){return ct((function(e){return e=+e,ct((function(n,r){for(var s,i=t([],n.length,e),a=i.length;a--;)n[s=i[a]]&&(n[s]=!(r[s]=n[s]))}))}))}function vt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},i=ot.isXML=function(t){var e=t&&t.namespaceURI,n=t&&(t.ownerDocument||t).documentElement;return!K.test(e||n&&n.nodeName||"HTML")},h=ot.setDocument=function(t){var e,s,a=t?t.ownerDocument||t:x;return a!=m&&9===a.nodeType&&a.documentElement?(p=(m=a).documentElement,f=!i(m),x!=m&&(s=m.defaultView)&&s.top!==s&&(s.addEventListener?s.addEventListener("unload",it,!1):s.attachEvent&&s.attachEvent("onunload",it)),n.scope=ut((function(t){return p.appendChild(t).appendChild(m.createElement("div")),void 0!==t.querySelectorAll&&!t.querySelectorAll(":scope fieldset div").length})),n.attributes=ut((function(t){return t.className="i",!t.getAttribute("className")})),n.getElementsByTagName=ut((function(t){return t.appendChild(m.createComment("")),!t.getElementsByTagName("*").length})),n.getElementsByClassName=J.test(m.getElementsByClassName),n.getById=ut((function(t){return p.appendChild(t).id=w,!m.getElementsByName||!m.getElementsByName(w).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute("id")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&f){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&f){var n,r,s,i=e.getElementById(t);if(i){if((n=i.getAttributeNode("id"))&&n.value===t)return[i];for(s=e.getElementsByName(t),r=0;i=s[r++];)if((n=i.getAttributeNode("id"))&&n.value===t)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],s=0,i=e.getElementsByTagName(t);if("*"===t){for(;n=i[s++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&f)return e.getElementsByClassName(t)},v=[],g=[],(n.qsa=J.test(m.querySelectorAll))&&(ut((function(t){var e;p.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll("[selected]").length||g.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+L+")"),t.querySelectorAll("[id~="+w+"-]").length||g.push("~="),(e=m.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||g.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll(":checked").length||g.push(":checked"),t.querySelectorAll("a#"+w+"+*").length||g.push(".#.+[+~]"),t.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ut((function(t){t.innerHTML="";var e=m.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&g.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=J.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ut((function(t){n.disconnectedMatch=b.call(t,"*"),b.call(t,"[s!='']:x"),v.push("!=",$)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),e=J.test(p.compareDocumentPosition),y=e||J.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},T=e?function(t,e){if(t===e)return d=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t==m||t.ownerDocument==x&&y(x,t)?-1:e==m||e.ownerDocument==x&&y(x,e)?1:u?M(u,t)-M(u,e):0:4&r?-1:1)}:function(t,e){if(t===e)return d=!0,0;var n,r=0,s=t.parentNode,i=e.parentNode,a=[t],o=[e];if(!s||!i)return t==m?-1:e==m?1:s?-1:i?1:u?M(u,t)-M(u,e):0;if(s===i)return ht(t,e);for(n=t;n=n.parentNode;)a.unshift(n);for(n=e;n=n.parentNode;)o.unshift(n);for(;a[r]===o[r];)r++;return r?ht(a[r],o[r]):a[r]==x?-1:o[r]==x?1:0},m):m},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if(h(t),n.matchesSelector&&f&&!k[e+" "]&&(!v||!v.test(e))&&(!g||!g.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){k(e,!0)}return ot(e,m,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!=m&&h(t),y(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!=m&&h(t);var s=r.attrHandle[e.toLowerCase()],i=s&&C.call(r.attrHandle,e.toLowerCase())?s(t,e,!f):void 0;return void 0!==i?i:n.attributes||!f?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},ot.escape=function(t){return(t+"").replace(rt,st)},ot.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},ot.uniqueSort=function(t){var e,r=[],s=0,i=0;if(d=!n.detectDuplicates,u=!n.sortStable&&t.slice(0),t.sort(T),d){for(;e=t[i++];)e===t[i]&&(s=r.push(i));for(;s--;)t.splice(r[s],1)}return u=null,t},s=ot.getText=function(t){var e,n="",r=0,i=t.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=s(t)}else if(3===i||4===i)return t.nodeValue}else for(;e=t[r++];)n+=s(e);return n},r=ot.selectors={cacheLength:50,createPseudo:ct,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||"").replace(et,nt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return V.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&z.test(n)&&(e=a(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+" "];return e||(e=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+t+"("+j+"|$)"))&&S(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(r){var s=ot.attr(r,t);return null==s?"!="===e:!e||(s+="","="===e?s===n:"!="===e?s!==n:"^="===e?n&&0===s.indexOf(n):"*="===e?n&&s.indexOf(n)>-1:"$="===e?n&&s.slice(-n.length)===n:"~="===e?(" "+s.replace(F," ")+" ").indexOf(n)>-1:"|="===e&&(s===n||s.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,r,s){var i="nth"!==t.slice(0,3),a="last"!==t.slice(-4),o="of-type"===e;return 1===r&&0===s?function(t){return!!t.parentNode}:function(e,n,l){var c,u,d,h,m,p,f=i!==a?"nextSibling":"previousSibling",g=e.parentNode,v=o&&e.nodeName.toLowerCase(),b=!l&&!o,y=!1;if(g){if(i){for(;f;){for(h=e;h=h[f];)if(o?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=f="only"===t&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&b){for(y=(m=(c=(u=(d=(h=g)[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]||[])[0]===N&&c[1])&&c[2],h=m&&g.childNodes[m];h=++m&&h&&h[f]||(y=m=0)||p.pop();)if(1===h.nodeType&&++y&&h===e){u[t]=[N,m,y];break}}else if(b&&(y=m=(c=(u=(d=(h=e)[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]||[])[0]===N&&c[1]),!1===y)for(;(h=++m&&h&&h[f]||(y=m=0)||p.pop())&&((o?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++y||(b&&((u=(d=h[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]=[N,y]),h!==e)););return(y-=s)===r||y%r==0&&y/r>=0}}},PSEUDO:function(t,e){var n,s=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ot.error("unsupported pseudo: "+t);return s[w]?s(e):s.length>1?(n=[t,t,"",e],r.setFilters.hasOwnProperty(t.toLowerCase())?ct((function(t,n){for(var r,i=s(t,e),a=i.length;a--;)t[r=M(t,i[a])]=!(n[r]=i[a])})):function(t){return s(t,0,n)}):s}},pseudos:{not:ct((function(t){var e=[],n=[],r=o(t.replace(q,"$1"));return r[w]?ct((function(t,e,n,s){for(var i,a=r(t,null,s,[]),o=t.length;o--;)(i=a[o])&&(t[o]=!(e[o]=i))})):function(t,s,i){return e[0]=t,r(e,null,i,n),e[0]=null,!n.pop()}})),has:ct((function(t){return function(e){return ot(t,e).length>0}})),contains:ct((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||s(e)).indexOf(t)>-1}})),lang:ct((function(t){return W.test(t||"")||ot.error("unsupported lang: "+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=f?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===m.activeElement&&(!m.hasFocus||m.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return Q.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:gt((function(){return[0]})),last:gt((function(t,e){return[e-1]})),eq:gt((function(t,e,n){return[n<0?n+e:n]})),even:gt((function(t,e){for(var n=0;ne?e:n;--r>=0;)t.push(r);return t})),gt:gt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var s=t.length;s--;)if(!t[s](e,n,r))return!1;return!0}:t[0]}function Nt(t,e,n,r,s){for(var i,a=[],o=0,l=t.length,c=null!=e;o-1&&(i[c]=!(a[c]=d))}}else v=Nt(v===a?v.splice(p,v.length):v),s?s(null,a,v,l):O.apply(a,v)}))}function St(t){for(var e,n,s,i=t.length,a=r.relative[t[0].type],o=a||r.relative[" "],l=a?1:0,u=wt((function(t){return t===e}),o,!0),d=wt((function(t){return M(e,t)>-1}),o,!0),h=[function(t,n,r){var s=!a&&(r||n!==c)||((e=n).nodeType?u(t,n,r):d(t,n,r));return e=null,s}];l1&&xt(h),l>1&&yt(t.slice(0,l-1).concat({value:" "===t[l-2].type?"*":""})).replace(q,"$1"),n,l0,s=t.length>0,i=function(i,a,o,l,u){var d,p,g,v=0,b="0",y=i&&[],w=[],x=c,_=i||s&&r.find.TAG("*",u),S=N+=null==x?1:Math.random()||.1,E=_.length;for(u&&(c=a==m||a||u);b!==E&&null!=(d=_[b]);b++){if(s&&d){for(p=0,a||d.ownerDocument==m||(h(d),o=!f);g=t[p++];)if(g(d,a||m,o)){l.push(d);break}u&&(N=S)}n&&((d=!g&&d)&&v--,i&&y.push(d))}if(v+=b,n&&b!==v){for(p=0;g=e[p++];)g(y,w,a,o);if(i){if(v>0)for(;b--;)y[b]||w[b]||(w[b]=D.call(l));w=Nt(w)}O.apply(l,w),u&&!i&&w.length>0&&v+e.length>1&&ot.uniqueSort(l)}return u&&(N=S,c=x),y};return n?ct(i):i}(i,s)),o.selector=t}return o},l=ot.select=function(t,e,n,s){var i,l,c,u,d,h="function"==typeof t&&t,m=!s&&a(t=h.selector||t);if(n=n||[],1===m.length){if((l=m[0]=m[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&9===e.nodeType&&f&&r.relative[l[1].type]){if(!(e=(r.find.ID(c.matches[0].replace(et,nt),e)||[])[0]))return n;h&&(e=e.parentNode),t=t.slice(l.shift().value.length)}for(i=V.needsContext.test(t)?0:l.length;i--&&(c=l[i],!r.relative[u=c.type]);)if((d=r.find[u])&&(s=d(c.matches[0].replace(et,nt),tt.test(l[0].type)&&vt(e.parentNode)||e))){if(l.splice(i,1),!(t=s.length&&yt(l)))return O.apply(n,s),n;break}}return(h||o(t,m))(s,e,!f,n,!e||tt.test(t)&&vt(e.parentNode)||e),n},n.sortStable=w.split("").sort(T).join("")===w,n.detectDuplicates=!!d,h(),n.sortDetached=ut((function(t){return 1&t.compareDocumentPosition(m.createElement("fieldset"))})),ut((function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")}))||dt("type|href|height|width",(function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),n.attributes&&ut((function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||dt("value",(function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue})),ut((function(t){return null==t.getAttribute("disabled")}))||dt(L,(function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null})),ot}(r);S.find=Z,S.expr=Z.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=Z.uniqueSort,S.text=Z.getText,S.isXMLDoc=Z.isXML,S.contains=Z.contains,S.escapeSelector=Z.escape;var k=function(t,e,n){for(var r=[],s=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(s&&S(t).is(n))break;r.push(t)}return r},T=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},C=S.expr.match.needsContext;function A(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function P(t,e,n){return v(e)?S.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?S.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?S.grep(t,(function(t){return u.call(e,t)>-1!==n})):S.filter(e,t,n)}S.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?S.find.matchesSelector(r,t)?[r]:[]:S.find.matches(t,S.grep(e,(function(t){return 1===t.nodeType})))},S.fn.extend({find:function(t){var e,n,r=this.length,s=this;if("string"!=typeof t)return this.pushStack(S(t).filter((function(){for(e=0;e1?S.uniqueSort(n):n},filter:function(t){return this.pushStack(P(this,t||[],!1))},not:function(t){return this.pushStack(P(this,t||[],!0))},is:function(t){return!!P(this,"string"==typeof t&&C.test(t)?S(t):t||[],!1).length}});var O,I=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(t,e,n){var r,s;if(!t)return this;if(n=n||O,"string"==typeof t){if(!(r="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:I.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof S?e[0]:e,S.merge(this,S.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:y,!0)),D.test(r[1])&&S.isPlainObject(e))for(r in e)v(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return(s=y.getElementById(r[2]))&&(this[0]=s,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):v(t)?void 0!==n.ready?n.ready(t):t(S):S.makeArray(t,this)}).prototype=S.fn,O=S(y);var M=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function j(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}S.fn.extend({has:function(t){var e=S(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&S.find.matchesSelector(n,t))){i.push(n);break}return this.pushStack(i.length>1?S.uniqueSort(i):i)},index:function(t){return t?"string"==typeof t?u.call(S(t),this[0]):u.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),S.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,"parentNode")},parentsUntil:function(t,e,n){return k(t,"parentNode",n)},next:function(t){return j(t,"nextSibling")},prev:function(t){return j(t,"previousSibling")},nextAll:function(t){return k(t,"nextSibling")},prevAll:function(t){return k(t,"previousSibling")},nextUntil:function(t,e,n){return k(t,"nextSibling",n)},prevUntil:function(t,e,n){return k(t,"previousSibling",n)},siblings:function(t){return T((t.parentNode||{}).firstChild,t)},children:function(t){return T(t.firstChild)},contents:function(t){return null!=t.contentDocument&&a(t.contentDocument)?t.contentDocument:(A(t,"template")&&(t=t.content||t),S.merge([],t.childNodes))}},(function(t,e){S.fn[t]=function(n,r){var s=S.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(s=S.filter(r,s)),this.length>1&&(L[t]||S.uniqueSort(s),M.test(t)&&s.reverse()),this.pushStack(s)}}));var B=/[^\x20\t\r\n\f]+/g;function R(t){return t}function $(t){throw t}function F(t,e,n,r){var s;try{t&&v(s=t.promise)?s.call(t).done(e).fail(n):t&&v(s=t.then)?s.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}S.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return S.each(t.match(B)||[],(function(t,n){e[n]=!0})),e}(t):S.extend({},t);var e,n,r,s,i=[],a=[],o=-1,l=function(){for(s=s||t.once,r=e=!0;a.length;o=-1)for(n=a.shift();++o-1;)i.splice(n,1),n<=o&&o--})),this},has:function(t){return t?S.inArray(t,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return s=a=[],i=n="",this},disabled:function(){return!i},lock:function(){return s=a=[],n||e||(i=n=""),this},locked:function(){return!!s},fireWith:function(t,n){return s||(n=[t,(n=n||[]).slice?n.slice():n],a.push(n),e||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},S.extend({Deferred:function(t){var e=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return s.then(null,t)},pipe:function(){var t=arguments;return S.Deferred((function(n){S.each(e,(function(e,r){var s=v(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=s&&s.apply(this,arguments);t&&v(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,s?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,s){var i=0;function a(t,e,n,s){return function(){var o=this,l=arguments,c=function(){var r,c;if(!(t=i&&(n!==$&&(o=void 0,l=[r]),e.rejectWith(o,l))}};t?u():(S.Deferred.getStackHook&&(u.stackTrace=S.Deferred.getStackHook()),r.setTimeout(u))}}return S.Deferred((function(r){e[0][3].add(a(0,r,v(s)?s:R,r.notifyWith)),e[1][3].add(a(0,r,v(t)?t:R)),e[2][3].add(a(0,r,v(n)?n:$))})).promise()},promise:function(t){return null!=t?S.extend(t,s):s}},i={};return S.each(e,(function(t,r){var a=r[2],o=r[5];s[r[1]]=a.add,o&&a.add((function(){n=o}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),a.add(r[3].fire),i[r[0]]=function(){return i[r[0]+"With"](this===i?void 0:this,arguments),this},i[r[0]+"With"]=a.fireWith})),s.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,r=Array(n),s=o.call(arguments),i=S.Deferred(),a=function(t){return function(n){r[t]=this,s[t]=arguments.length>1?o.call(arguments):n,--e||i.resolveWith(r,s)}};if(e<=1&&(F(t,i.done(a(n)).resolve,i.reject,!e),"pending"===i.state()||v(s[n]&&s[n].then)))return i.then();for(;n--;)F(s[n],a(n),i.reject);return i.promise()}});var q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(t,e){r.console&&r.console.warn&&t&&q.test(t.name)&&r.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},S.readyException=function(t){r.setTimeout((function(){throw t}))};var H=S.Deferred();function U(){y.removeEventListener("DOMContentLoaded",U),r.removeEventListener("load",U),S.ready()}S.fn.ready=function(t){return H.then(t).catch((function(t){S.readyException(t)})),this},S.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--S.readyWait:S.isReady)||(S.isReady=!0,!0!==t&&--S.readyWait>0||H.resolveWith(y,[S]))}}),S.ready.then=H.then,"complete"===y.readyState||"loading"!==y.readyState&&!y.documentElement.doScroll?r.setTimeout(S.ready):(y.addEventListener("DOMContentLoaded",U),r.addEventListener("load",U));var G=function(t,e,n,r,s,i,a){var o=0,l=t.length,c=null==n;if("object"===N(n))for(o in s=!0,n)G(t,e,o,n[o],!0,i,a);else if(void 0!==r&&(s=!0,v(r)||(a=!0),c&&(a?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(S(t),n)})),e))for(;o1,null,!0)},removeData:function(t){return this.each((function(){X.remove(this,t)}))}}),S.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=J.get(t,e),n&&(!r||Array.isArray(n)?r=J.access(t,e,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=S.queue(t,e),r=n.length,s=n.shift(),i=S._queueHooks(t,e);"inprogress"===s&&(s=n.shift(),r--),s&&("fx"===e&&n.unshift("inprogress"),delete i.stop,s.call(t,(function(){S.dequeue(t,e)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return J.get(t,n)||J.access(t,n,{empty:S.Callbacks("once memory").add((function(){J.remove(t,[e+"queue",n])}))})}}),S.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,bt=/^$|^module$|\/(?:java|ecma)script/i;pt=y.createDocumentFragment().appendChild(y.createElement("div")),(ft=y.createElement("input")).setAttribute("type","radio"),ft.setAttribute("checked","checked"),ft.setAttribute("name","t"),pt.appendChild(ft),g.checkClone=pt.cloneNode(!0).cloneNode(!0).lastChild.checked,pt.innerHTML="",g.noCloneChecked=!!pt.cloneNode(!0).lastChild.defaultValue,pt.innerHTML="",g.option=!!pt.lastChild;var yt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function wt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&A(t,e)?S.merge([t],n):n}function xt(t,e){for(var n=0,r=t.length;n",""]);var Nt=/<|&#?\w+;/;function _t(t,e,n,r,s){for(var i,a,o,l,c,u,d=e.createDocumentFragment(),h=[],m=0,p=t.length;m-1)s&&s.push(i);else if(c=ot(i),a=wt(d.appendChild(i),"script"),c&&xt(a),n)for(u=0;i=a[u++];)bt.test(i.type||"")&&n.push(i);return d}var St=/^([^.]*)(?:\.(.+)|)/;function Et(){return!0}function Zt(){return!1}function kt(t,e){return t===function(){try{return y.activeElement}catch(t){}}()==("focus"===e)}function Tt(t,e,n,r,s,i){var a,o;if("object"==typeof e){for(o in"string"!=typeof n&&(r=r||n,n=void 0),e)Tt(t,o,n,r,e[o],i);return t}if(null==r&&null==s?(s=n,r=n=void 0):null==s&&("string"==typeof n?(s=r,r=void 0):(s=r,r=n,n=void 0)),!1===s)s=Zt;else if(!s)return t;return 1===i&&(a=s,s=function(t){return S().off(t),a.apply(this,arguments)},s.guid=a.guid||(a.guid=S.guid++)),t.each((function(){S.event.add(this,e,s,r,n)}))}function Ct(t,e,n){n?(J.set(t,e,!1),S.event.add(t,e,{namespace:!1,handler:function(t){var r,s,i=J.get(this,e);if(1&t.isTrigger&&this[e]){if(i.length)(S.event.special[e]||{}).delegateType&&t.stopPropagation();else if(i=o.call(arguments),J.set(this,e,i),r=n(this,e),this[e](),i!==(s=J.get(this,e))||r?J.set(this,e,!1):s={},i!==s)return t.stopImmediatePropagation(),t.preventDefault(),s&&s.value}else i.length&&(J.set(this,e,{value:S.event.trigger(S.extend(i[0],S.Event.prototype),i.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===J.get(t,e)&&S.event.add(t,e,Et)}S.event={global:{},add:function(t,e,n,r,s){var i,a,o,l,c,u,d,h,m,p,f,g=J.get(t);if(Y(t))for(n.handler&&(n=(i=n).handler,s=i.selector),s&&S.find.matchesSelector(at,s),n.guid||(n.guid=S.guid++),(l=g.events)||(l=g.events=Object.create(null)),(a=g.handle)||(a=g.handle=function(e){return void 0!==S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(B)||[""]).length;c--;)m=f=(o=St.exec(e[c])||[])[1],p=(o[2]||"").split(".").sort(),m&&(d=S.event.special[m]||{},m=(s?d.delegateType:d.bindType)||m,d=S.event.special[m]||{},u=S.extend({type:m,origType:f,data:r,handler:n,guid:n.guid,selector:s,needsContext:s&&S.expr.match.needsContext.test(s),namespace:p.join(".")},i),(h=l[m])||((h=l[m]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(t,r,p,a)||t.addEventListener&&t.addEventListener(m,a)),d.add&&(d.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),s?h.splice(h.delegateCount++,0,u):h.push(u),S.event.global[m]=!0)},remove:function(t,e,n,r,s){var i,a,o,l,c,u,d,h,m,p,f,g=J.hasData(t)&&J.get(t);if(g&&(l=g.events)){for(c=(e=(e||"").match(B)||[""]).length;c--;)if(m=f=(o=St.exec(e[c])||[])[1],p=(o[2]||"").split(".").sort(),m){for(d=S.event.special[m]||{},h=l[m=(r?d.delegateType:d.bindType)||m]||[],o=o[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=h.length;i--;)u=h[i],!s&&f!==u.origType||n&&n.guid!==u.guid||o&&!o.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(h.splice(i,1),u.selector&&h.delegateCount--,d.remove&&d.remove.call(t,u));a&&!h.length&&(d.teardown&&!1!==d.teardown.call(t,p,g.handle)||S.removeEvent(t,m,g.handle),delete l[m])}else for(m in l)S.event.remove(t,m+e[c],n,r,!0);S.isEmptyObject(l)&&J.remove(t,"handle events")}},dispatch:function(t){var e,n,r,s,i,a,o=new Array(arguments.length),l=S.event.fix(t),c=(J.get(this,"events")||Object.create(null))[l.type]||[],u=S.event.special[l.type]||{};for(o[0]=l,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(i=[],a={},n=0;n-1:S.find(s,this,null,[c]).length),a[s]&&i.push(r);i.length&&o.push({elem:c,handlers:i})}return c=this,l\s*$/g;function Ot(t,e){return A(t,"table")&&A(11!==e.nodeType?e:e.firstChild,"tr")&&S(t).children("tbody")[0]||t}function It(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Mt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function Lt(t,e){var n,r,s,i,a,o;if(1===e.nodeType){if(J.hasData(t)&&(o=J.get(t).events))for(s in J.remove(e,"handle events"),o)for(n=0,r=o[s].length;n1&&"string"==typeof p&&!g.checkClone&&Dt.test(p))return t.each((function(s){var i=t.eq(s);f&&(e[0]=p.call(this,s,i.html())),Bt(i,e,n,r)}));if(h&&(i=(s=_t(e,t[0].ownerDocument,!1,t,r)).firstChild,1===s.childNodes.length&&(s=i),i||r)){for(o=(a=S.map(wt(s,"script"),It)).length;d0&&xt(a,!l&&wt(t,"script")),o},cleanData:function(t){for(var e,n,r,s=S.event.special,i=0;void 0!==(n=t[i]);i++)if(Y(n)){if(e=n[J.expando]){if(e.events)for(r in e.events)s[r]?S.event.remove(n,r):S.removeEvent(n,r,e.handle);n[J.expando]=void 0}n[X.expando]&&(n[X.expando]=void 0)}}}),S.fn.extend({detach:function(t){return Rt(this,t,!0)},remove:function(t){return Rt(this,t)},text:function(t){return G(this,(function(t){return void 0===t?S.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Bt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ot(this,t).appendChild(t)}))},prepend:function(){return Bt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Ot(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(S.cleanData(wt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return S.clone(this,t,e)}))},html:function(t){return G(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!At.test(t)&&!yt[(vt.exec(t)||["",""])[1].toLowerCase()]){t=S.htmlPrefilter(t);try{for(;n=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-i-l-o-.5))||0),l}function re(t,e,n){var r=qt(t),s=(!g.boxSizingReliable()||n)&&"border-box"===S.css(t,"boxSizing",!1,r),i=s,a=zt(t,e,r),o="offset"+e[0].toUpperCase()+e.slice(1);if($t.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&s||!g.reliableTrDimensions()&&A(t,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(t,"display",!1,r))&&t.getClientRects().length&&(s="border-box"===S.css(t,"boxSizing",!1,r),(i=o in t)&&(a=t[o])),(a=parseFloat(a)||0)+ne(t,e,n||(s?"border":"content"),i,r,a)+"px"}function se(t,e,n,r,s){return new se.prototype.init(t,e,n,r,s)}S.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=zt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var s,i,a,o=K(e),l=Ft.test(e),c=t.style;if(l||(e=Qt(o)),a=S.cssHooks[e]||S.cssHooks[o],void 0===n)return a&&"get"in a&&void 0!==(s=a.get(t,!1,r))?s:c[e];"string"==(i=typeof n)&&(s=st.exec(n))&&s[1]&&(n=ut(t,e,s),i="number"),null!=n&&n==n&&("number"!==i||l||(n+=s&&s[3]||(S.cssNumber[o]?"":"px")),g.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),a&&"set"in a&&void 0===(n=a.set(t,n,r))||(l?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,r){var s,i,a,o=K(e);return Ft.test(e)||(e=Qt(o)),(a=S.cssHooks[e]||S.cssHooks[o])&&"get"in a&&(s=a.get(t,!0,n)),void 0===s&&(s=zt(t,e,r)),"normal"===s&&e in te&&(s=te[e]),""===n||n?(i=parseFloat(s),!0===n||isFinite(i)?i||0:s):s}}),S.each(["height","width"],(function(t,e){S.cssHooks[e]={get:function(t,n,r){if(n)return!Jt.test(S.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?re(t,e,r):Ht(t,Xt,(function(){return re(t,e,r)}))},set:function(t,n,r){var s,i=qt(t),a=!g.scrollboxSize()&&"absolute"===i.position,o=(a||r)&&"border-box"===S.css(t,"boxSizing",!1,i),l=r?ne(t,e,r,o,i):0;return o&&a&&(l-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(i[e])-ne(t,e,"border",!1,i)-.5)),l&&(s=st.exec(n))&&"px"!==(s[3]||"px")&&(t.style[e]=n,n=S.css(t,e)),ee(0,n,l)}}})),S.cssHooks.marginLeft=Wt(g.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(zt(t,"marginLeft"))||t.getBoundingClientRect().left-Ht(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),S.each({margin:"",padding:"",border:"Width"},(function(t,e){S.cssHooks[t+e]={expand:function(n){for(var r=0,s={},i="string"==typeof n?n.split(" "):[n];r<4;r++)s[t+it[r]+e]=i[r]||i[r-2]||i[0];return s}},"margin"!==t&&(S.cssHooks[t+e].set=ee)})),S.fn.extend({css:function(t,e){return G(this,(function(t,e,n){var r,s,i={},a=0;if(Array.isArray(e)){for(r=qt(t),s=e.length;a1)}}),S.Tween=se,se.prototype={constructor:se,init:function(t,e,n,r,s,i){this.elem=t,this.prop=n,this.easing=s||S.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=i||(S.cssNumber[n]?"":"px")},cur:function(){var t=se.propHooks[this.prop];return t&&t.get?t.get(this):se.propHooks._default.get(this)},run:function(t){var e,n=se.propHooks[this.prop];return this.options.duration?this.pos=e=S.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):se.propHooks._default.set(this),this}},se.prototype.init.prototype=se.prototype,se.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=S.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){S.fx.step[t.prop]?S.fx.step[t.prop](t):1!==t.elem.nodeType||!S.cssHooks[t.prop]&&null==t.elem.style[Qt(t.prop)]?t.elem[t.prop]=t.now:S.style(t.elem,t.prop,t.now+t.unit)}}},se.propHooks.scrollTop=se.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},S.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},S.fx=se.prototype.init,S.fx.step={};var ie,ae,oe=/^(?:toggle|show|hide)$/,le=/queueHooks$/;function ce(){ae&&(!1===y.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ce):r.setTimeout(ce,S.fx.interval),S.fx.tick())}function ue(){return r.setTimeout((function(){ie=void 0})),ie=Date.now()}function de(t,e){var n,r=0,s={height:t};for(e=e?1:0;r<4;r+=2-e)s["margin"+(n=it[r])]=s["padding"+n]=t;return e&&(s.opacity=s.width=t),s}function he(t,e,n){for(var r,s=(me.tweeners[e]||[]).concat(me.tweeners["*"]),i=0,a=s.length;i1)},removeAttr:function(t){return this.each((function(){S.removeAttr(this,t)}))}}),S.extend({attr:function(t,e,n){var r,s,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===t.getAttribute?S.prop(t,e,n):(1===i&&S.isXMLDoc(t)||(s=S.attrHooks[e.toLowerCase()]||(S.expr.match.bool.test(e)?pe:void 0)),void 0!==n?null===n?void S.removeAttr(t,e):s&&"set"in s&&void 0!==(r=s.set(t,n,e))?r:(t.setAttribute(e,n+""),n):s&&"get"in s&&null!==(r=s.get(t,e))?r:null==(r=S.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!g.radioValue&&"radio"===e&&A(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,s=e&&e.match(B);if(s&&1===t.nodeType)for(;n=s[r++];)t.removeAttribute(n)}}),pe={set:function(t,e,n){return!1===e?S.removeAttr(t,n):t.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=fe[e]||S.find.attr;fe[e]=function(t,e,r){var s,i,a=e.toLowerCase();return r||(i=fe[a],fe[a]=s,s=null!=n(t,e,r)?a:null,fe[a]=i),s}}));var ge=/^(?:input|select|textarea|button)$/i,ve=/^(?:a|area)$/i;function be(t){return(t.match(B)||[]).join(" ")}function ye(t){return t.getAttribute&&t.getAttribute("class")||""}function we(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(B)||[]}S.fn.extend({prop:function(t,e){return G(this,S.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[S.propFix[t]||t]}))}}),S.extend({prop:function(t,e,n){var r,s,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&S.isXMLDoc(t)||(e=S.propFix[e]||e,s=S.propHooks[e]),void 0!==n?s&&"set"in s&&void 0!==(r=s.set(t,n,e))?r:t[e]=n:s&&"get"in s&&null!==(r=s.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=S.find.attr(t,"tabindex");return e?parseInt(e,10):ge.test(t.nodeName)||ve.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(S.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){S.propFix[this.toLowerCase()]=this})),S.fn.extend({addClass:function(t){var e,n,r,s,i,a;return v(t)?this.each((function(e){S(this).addClass(t.call(this,e,ye(this)))})):(e=we(t)).length?this.each((function(){if(r=ye(this),n=1===this.nodeType&&" "+be(r)+" "){for(i=0;i-1;)n=n.replace(" "+s+" "," ");a=be(n),r!==a&&this.setAttribute("class",a)}})):this:this.attr("class","")},toggleClass:function(t,e){var n,r,s,i,a=typeof t,o="string"===a||Array.isArray(t);return v(t)?this.each((function(n){S(this).toggleClass(t.call(this,n,ye(this),e),e)})):"boolean"==typeof e&&o?e?this.addClass(t):this.removeClass(t):(n=we(t),this.each((function(){if(o)for(i=S(this),s=0;s-1)return!0;return!1}});var xe=/\r/g;S.fn.extend({val:function(t){var e,n,r,s=this[0];return arguments.length?(r=v(t),this.each((function(n){var s;1===this.nodeType&&(null==(s=r?t.call(this,n,S(this).val()):t)?s="":"number"==typeof s?s+="":Array.isArray(s)&&(s=S.map(s,(function(t){return null==t?"":t+""}))),(e=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,s,"value")||(this.value=s))}))):s?(e=S.valHooks[s.type]||S.valHooks[s.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(s,"value"))?n:"string"==typeof(n=s.value)?n.replace(xe,""):null==n?"":n:void 0}}),S.extend({valHooks:{option:{get:function(t){var e=S.find.attr(t,"value");return null!=e?e:be(S.text(t))}},select:{get:function(t){var e,n,r,s=t.options,i=t.selectedIndex,a="select-one"===t.type,o=a?null:[],l=a?i+1:s.length;for(r=i<0?l:a?i:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),i}}}}),S.each(["radio","checkbox"],(function(){S.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=S.inArray(S(t).val(),e)>-1}},g.checkOn||(S.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})})),g.focusin="onfocusin"in r;var Ne=/^(?:focusinfocus|focusoutblur)$/,_e=function(t){t.stopPropagation()};S.extend(S.event,{trigger:function(t,e,n,s){var i,a,o,l,c,u,d,h,p=[n||y],f=m.call(t,"type")?t.type:t,g=m.call(t,"namespace")?t.namespace.split("."):[];if(a=h=o=n=n||y,3!==n.nodeType&&8!==n.nodeType&&!Ne.test(f+S.event.triggered)&&(f.indexOf(".")>-1&&(g=f.split("."),f=g.shift(),g.sort()),c=f.indexOf(":")<0&&"on"+f,(t=t[S.expando]?t:new S.Event(f,"object"==typeof t&&t)).isTrigger=s?2:3,t.namespace=g.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:S.makeArray(e,[t]),d=S.event.special[f]||{},s||!d.trigger||!1!==d.trigger.apply(n,e))){if(!s&&!d.noBubble&&!b(n)){for(l=d.delegateType||f,Ne.test(l+f)||(a=a.parentNode);a;a=a.parentNode)p.push(a),o=a;o===(n.ownerDocument||y)&&p.push(o.defaultView||o.parentWindow||r)}for(i=0;(a=p[i++])&&!t.isPropagationStopped();)h=a,t.type=i>1?l:d.bindType||f,(u=(J.get(a,"events")||Object.create(null))[t.type]&&J.get(a,"handle"))&&u.apply(a,e),(u=c&&a[c])&&u.apply&&Y(a)&&(t.result=u.apply(a,e),!1===t.result&&t.preventDefault());return t.type=f,s||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(p.pop(),e)||!Y(n)||c&&v(n[f])&&!b(n)&&((o=n[c])&&(n[c]=null),S.event.triggered=f,t.isPropagationStopped()&&h.addEventListener(f,_e),n[f](),t.isPropagationStopped()&&h.removeEventListener(f,_e),S.event.triggered=void 0,o&&(n[c]=o)),t.result}},simulate:function(t,e,n){var r=S.extend(new S.Event,n,{type:t,isSimulated:!0});S.event.trigger(r,null,e)}}),S.fn.extend({trigger:function(t,e){return this.each((function(){S.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return S.event.trigger(t,e,n,!0)}}),g.focusin||S.each({focus:"focusin",blur:"focusout"},(function(t,e){var n=function(t){S.event.simulate(e,t.target,S.event.fix(t))};S.event.special[e]={setup:function(){var r=this.ownerDocument||this.document||this,s=J.access(r,e);s||r.addEventListener(t,n,!0),J.access(r,e,(s||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,s=J.access(r,e)-1;s?J.access(r,e,s):(r.removeEventListener(t,n,!0),J.remove(r,e))}}}));var Se=r.location,Ee={guid:Date.now()},Ze=/\?/;S.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{e=(new r.DOMParser).parseFromString(t,"text/xml")}catch(t){}return n=e&&e.getElementsByTagName("parsererror")[0],e&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,(function(t){return t.textContent})).join("\n"):t)),e};var ke=/\[\]$/,Te=/\r?\n/g,Ce=/^(?:submit|button|image|reset|file)$/i,Ae=/^(?:input|select|textarea|keygen)/i;function De(t,e,n,r){var s;if(Array.isArray(e))S.each(e,(function(e,s){n||ke.test(t)?r(t,s):De(t+"["+("object"==typeof s&&null!=s?e:"")+"]",s,n,r)}));else if(n||"object"!==N(e))r(t,e);else for(s in e)De(t+"["+s+"]",e[s],n,r)}S.param=function(t,e){var n,r=[],s=function(t,e){var n=v(e)?e():e;r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!S.isPlainObject(t))S.each(t,(function(){s(this.name,this.value)}));else for(n in t)De(n,t[n],e,s);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=S.prop(this,"elements");return t?S.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!S(this).is(":disabled")&&Ae.test(this.nodeName)&&!Ce.test(t)&&(this.checked||!gt.test(t))})).map((function(t,e){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,(function(t){return{name:e.name,value:t.replace(Te,"\r\n")}})):{name:e.name,value:n.replace(Te,"\r\n")}})).get()}});var Pe=/%20/g,Oe=/#.*$/,Ie=/([?&])_=[^&]*/,Me=/^(.*?):[ \t]*([^\r\n]*)$/gm,Le=/^(?:GET|HEAD)$/,je=/^\/\//,Be={},Re={},$e="*/".concat("*"),Fe=y.createElement("a");function qe(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var r,s=0,i=e.toLowerCase().match(B)||[];if(v(n))for(;r=i[s++];)"+"===r[0]?(r=r.slice(1)||"*",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function He(t,e,n,r){var s={},i=t===Re;function a(o){var l;return s[o]=!0,S.each(t[o]||[],(function(t,o){var c=o(e,n,r);return"string"!=typeof c||i||s[c]?i?!(l=c):void 0:(e.dataTypes.unshift(c),a(c),!1)})),l}return a(e.dataTypes[0])||!s["*"]&&a("*")}function Ue(t,e){var n,r,s=S.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((s[n]?t:r||(r={}))[n]=e[n]);return r&&S.extend(!0,t,r),t}Fe.href=Se.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Se.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Se.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$e,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ue(Ue(t,S.ajaxSettings),e):Ue(S.ajaxSettings,t)},ajaxPrefilter:qe(Be),ajaxTransport:qe(Re),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,s,i,a,o,l,c,u,d,h,m=S.ajaxSetup({},e),p=m.context||m,f=m.context&&(p.nodeType||p.jquery)?S(p):S.event,g=S.Deferred(),v=S.Callbacks("once memory"),b=m.statusCode||{},w={},x={},N="canceled",_={readyState:0,getResponseHeader:function(t){var e;if(c){if(!a)for(a={};e=Me.exec(i);)a[e[1].toLowerCase()+" "]=(a[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=a[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return c?i:null},setRequestHeader:function(t,e){return null==c&&(t=x[t.toLowerCase()]=x[t.toLowerCase()]||t,w[t]=e),this},overrideMimeType:function(t){return null==c&&(m.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)_.always(t[_.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||N;return n&&n.abort(e),E(0,e),this}};if(g.promise(_),m.url=((t||m.url||Se.href)+"").replace(je,Se.protocol+"//"),m.type=e.method||e.type||m.method||m.type,m.dataTypes=(m.dataType||"*").toLowerCase().match(B)||[""],null==m.crossDomain){l=y.createElement("a");try{l.href=m.url,l.href=l.href,m.crossDomain=Fe.protocol+"//"+Fe.host!=l.protocol+"//"+l.host}catch(t){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=S.param(m.data,m.traditional)),He(Be,m,e,_),c)return _;for(d in(u=S.event&&m.global)&&0==S.active++&&S.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!Le.test(m.type),s=m.url.replace(Oe,""),m.hasContent?m.data&&m.processData&&0===(m.contentType||"").indexOf("application/x-www-form-urlencoded")&&(m.data=m.data.replace(Pe,"+")):(h=m.url.slice(s.length),m.data&&(m.processData||"string"==typeof m.data)&&(s+=(Ze.test(s)?"&":"?")+m.data,delete m.data),!1===m.cache&&(s=s.replace(Ie,"$1"),h=(Ze.test(s)?"&":"?")+"_="+Ee.guid+++h),m.url=s+h),m.ifModified&&(S.lastModified[s]&&_.setRequestHeader("If-Modified-Since",S.lastModified[s]),S.etag[s]&&_.setRequestHeader("If-None-Match",S.etag[s])),(m.data&&m.hasContent&&!1!==m.contentType||e.contentType)&&_.setRequestHeader("Content-Type",m.contentType),_.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+$e+"; q=0.01":""):m.accepts["*"]),m.headers)_.setRequestHeader(d,m.headers[d]);if(m.beforeSend&&(!1===m.beforeSend.call(p,_,m)||c))return _.abort();if(N="abort",v.add(m.complete),_.done(m.success),_.fail(m.error),n=He(Re,m,e,_)){if(_.readyState=1,u&&f.trigger("ajaxSend",[_,m]),c)return _;m.async&&m.timeout>0&&(o=r.setTimeout((function(){_.abort("timeout")}),m.timeout));try{c=!1,n.send(w,E)}catch(t){if(c)throw t;E(-1,t)}}else E(-1,"No Transport");function E(t,e,a,l){var d,h,y,w,x,N=e;c||(c=!0,o&&r.clearTimeout(o),n=void 0,i=l||"",_.readyState=t>0?4:0,d=t>=200&&t<300||304===t,a&&(w=function(t,e,n){for(var r,s,i,a,o=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(s in o)if(o[s]&&o[s].test(r)){l.unshift(s);break}if(l[0]in n)i=l[0];else{for(s in n){if(!l[0]||t.converters[s+" "+l[0]]){i=s;break}a||(a=s)}i=i||a}if(i)return i!==l[0]&&l.unshift(i),n[i]}(m,_,a)),!d&&S.inArray("script",m.dataTypes)>-1&&S.inArray("json",m.dataTypes)<0&&(m.converters["text script"]=function(){}),w=function(t,e,n,r){var s,i,a,o,l,c={},u=t.dataTypes.slice();if(u[1])for(a in t.converters)c[a.toLowerCase()]=t.converters[a];for(i=u.shift();i;)if(t.responseFields[i]&&(n[t.responseFields[i]]=e),!l&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=i,i=u.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(a=c[l+" "+i]||c["* "+i]))for(s in c)if((o=s.split(" "))[1]===i&&(a=c[l+" "+o[0]]||c["* "+o[0]])){!0===a?a=c[s]:!0!==c[s]&&(i=o[0],u.unshift(o[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:"parsererror",error:a?t:"No conversion from "+l+" to "+i}}}return{state:"success",data:e}}(m,w,_,d),d?(m.ifModified&&((x=_.getResponseHeader("Last-Modified"))&&(S.lastModified[s]=x),(x=_.getResponseHeader("etag"))&&(S.etag[s]=x)),204===t||"HEAD"===m.type?N="nocontent":304===t?N="notmodified":(N=w.state,h=w.data,d=!(y=w.error))):(y=N,!t&&N||(N="error",t<0&&(t=0))),_.status=t,_.statusText=(e||N)+"",d?g.resolveWith(p,[h,N,_]):g.rejectWith(p,[_,N,y]),_.statusCode(b),b=void 0,u&&f.trigger(d?"ajaxSuccess":"ajaxError",[_,m,d?h:y]),v.fireWith(p,[_,N]),u&&(f.trigger("ajaxComplete",[_,m]),--S.active||S.event.trigger("ajaxStop")))}return _},getJSON:function(t,e,n){return S.get(t,e,n,"json")},getScript:function(t,e){return S.get(t,void 0,e,"script")}}),S.each(["get","post"],(function(t,e){S[e]=function(t,n,r,s){return v(n)&&(s=s||r,r=n,n=void 0),S.ajax(S.extend({url:t,type:e,dataType:s,data:n,success:r},S.isPlainObject(t)&&t))}})),S.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),S._evalUrl=function(t,e,n){return S.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){S.globalEval(t,e,n)}})},S.fn.extend({wrapAll:function(t){var e;return this[0]&&(v(t)&&(t=t.call(this[0])),e=S(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return v(t)?this.each((function(e){S(this).wrapInner(t.call(this,e))})):this.each((function(){var e=S(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=v(t);return this.each((function(n){S(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){S(this).replaceWith(this.childNodes)})),this}}),S.expr.pseudos.hidden=function(t){return!S.expr.pseudos.visible(t)},S.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(t){}};var Ge={0:200,1223:204},ze=S.ajaxSettings.xhr();g.cors=!!ze&&"withCredentials"in ze,g.ajax=ze=!!ze,S.ajaxTransport((function(t){var e,n;if(g.cors||ze&&!t.crossDomain)return{send:function(s,i){var a,o=t.xhr();if(o.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)o[a]=t.xhrFields[a];for(a in t.mimeType&&o.overrideMimeType&&o.overrideMimeType(t.mimeType),t.crossDomain||s["X-Requested-With"]||(s["X-Requested-With"]="XMLHttpRequest"),s)o.setRequestHeader(a,s[a]);e=function(t){return function(){e&&(e=n=o.onload=o.onerror=o.onabort=o.ontimeout=o.onreadystatechange=null,"abort"===t?o.abort():"error"===t?"number"!=typeof o.status?i(0,"error"):i(o.status,o.statusText):i(Ge[o.status]||o.status,o.statusText,"text"!==(o.responseType||"text")||"string"!=typeof o.responseText?{binary:o.response}:{text:o.responseText},o.getAllResponseHeaders()))}},o.onload=e(),n=o.onerror=o.ontimeout=e("error"),void 0!==o.onabort?o.onabort=n:o.onreadystatechange=function(){4===o.readyState&&r.setTimeout((function(){e&&n()}))},e=e("abort");try{o.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),S.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return S.globalEval(t),t}}}),S.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),S.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(r,s){e=S("