diff --git a/js/dist/forum.js b/js/dist/forum.js index f2166f3..045301b 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -module.exports=function(t){var e={};function n(o){if(e[o])return e[o].exports;var s=e[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(o,s,function(e){return t[e]}.bind(null,s));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=45)}([function(t,e,n){"use strict";function o(t,e){return(o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,o(t,e)}n.d(e,"a",(function(){return s}))},function(t,e){t.exports=flarum.core.compat["common/extend"]},function(t,e){t.exports=flarum.core.compat["common/models/User"]},function(t,e){t.exports=flarum.core.compat["common/utils/ItemList"]},function(t,e){t.exports=flarum.core.compat["forum/app"]},function(t,e){t.exports=flarum.core.compat["common/Model"]},function(t,e){t.exports=flarum.core.compat["common/components/Button"]},function(t,e){t.exports=flarum.core.compat["common/models/Discussion"]},function(t,e){t.exports=flarum.core.compat["common/models/Group"]},function(t,e){t.exports=flarum.core.compat["forum/components/Notification"]},function(t,e){t.exports=flarum.core.compat["common/utils/classList"]},function(t,e){t.exports=flarum.core.compat["common/components/LinkButton"]},function(t,e){t.exports=flarum.core.compat["forum/states/DiscussionListState"]},function(t,e){t.exports=flarum.core.compat["forum/components/IndexPage"]},function(t,e){t.exports=flarum.core.compat["common/components/Badge"]},function(t,e){t.exports=flarum.core.compat["forum/components/EventPost"]},function(t,e){t.exports=flarum.core.compat["common/helpers/username"]},function(t,e){t.exports=flarum.core.compat["common/helpers/highlight"]},function(t,e){t.exports=flarum.core.compat["forum/components/UserPage"]},,function(t,e){t.exports=flarum.core.compat["common/helpers/listItems"]},function(t,e){t.exports=flarum.core.compat["common/Component"]},function(t,e){t.exports=flarum.core.compat["forum/components/SettingsPage"]},function(t,e){t.exports=flarum.core.compat["common/components/Switch"]},function(t,e){t.exports=flarum.core.compat["forum/components/DiscussionListItem"]},function(t,e){t.exports=flarum.core.compat["forum/components/DiscussionHero"]},function(t,e){t.exports=flarum.core.compat["forum/utils/DiscussionControls"]},function(t,e){t.exports=flarum.core.compat["common/components/Modal"]},function(t,e){t.exports=flarum.core.compat["forum/components/DiscussionPage"]},function(t,e){t.exports=flarum.core.compat["common/utils/Stream"]},function(t,e){t.exports=flarum.core.compat["forum/states/SearchState"]},function(t,e){t.exports=flarum.core.compat["forum/components/Search"]},function(t,e){t.exports=flarum.core.compat["common/helpers/avatar"]},function(t,e){t.exports=flarum.core.compat["common/utils/extractText"]},function(t,e){t.exports=flarum.core.compat["common/components/LoadingIndicator"]},function(t,e){t.exports=flarum.core.compat["common/components/Tooltip"]},function(t,e){t.exports=flarum.core.compat["forum/utils/UserControls"]},function(t,e){t.exports=flarum.core.compat["forum/components/DiscussionComposer"]},function(t,e){t.exports=flarum.core.compat["common/components/Dropdown"]},function(t,e){t.exports=flarum.core.compat["forum/components/DiscussionList"]},function(t,e){t.exports=flarum.core.compat["forum/components/LogInModal"]},function(t,e){t.exports=flarum.core.compat["forum/components/NotificationGrid"]},,,,function(t,e,n){"use strict";n.r(e),n.d(e,"modals",(function(){return ne})),n.d(e,"discussions",(function(){return oe}));var o=n(0),s=n(15),r=n.n(s),i=function(t){function e(){return t.apply(this,arguments)||this}Object(o.a)(e,t),e.initAttrs=function(e){t.initAttrs.call(this,e)};var n=e.prototype;return n.icon=function(){return app.forum.data.attributes["byobu.icon-postAction"]},n.descriptionKey=function(){return"fof-byobu.forum.post.recipients_modified.removed_self"},e}(r.a);function a(t,e){if(null==t)return{};var n,o,s={},r=Object.keys(t);for(o=0;o=0||(s[n]=t[n]);return s}var c=n(2),u=n.n(c),p=n(10),f=n.n(p),l=n(16),d=n.n(l),b=n(8),h=n.n(b),y=n(11),v=n.n(y),g=n(4),x=n.n(g),_=n(21),R=["recipient","link"],P=function(t){function e(){return t.apply(this,arguments)||this}return Object(o.a)(e,t),e.prototype.view=function(t){var e,n=this.attrs,o=n.recipient,s=n.link,r=a(n,R);if(r.style=r.style||{},r.className=f()("RecipientLabel",null==r?void 0:r.className),s&&o instanceof u.a&&(r.href=x.a.route.user(o)),o instanceof u.a){var i,c;e=d()(o),r.href||o.id()===(null==x.a||null==(i=x.a.session)||null==(c=i.user)?void 0:c.id())||(r.href=x.a.route.user(o))}else{if(o instanceof h.a)return m("span",{class:r.className},o.namePlural());r.className+=" none",e=x.a.translator.trans("flarum.core.lib.username.deleted_text")}return m(v.a,r,e)},e}(n.n(_).a),w=["link","className"];function D(t,e){void 0===e&&(e={});var n=e,o=n.link,s=n.className,r=a(n,w);return r.className=f()("RecipientsLabel",s),m("span",r,null==t?void 0:t.map((function(t){var e=t instanceof u.a?"u":"g";return m(P,{key:e+"-"+t.id(),recipient:t,link:o})})),!t&&m(P,null))}var O=function(t){function e(){return t.apply(this,arguments)||this}Object(o.a)(e,t),e.initAttrs=function(e){function n(t,e,n){return t.filter((function(t){return-1===e.indexOf(t)})).map((function(t){return app.store.getById(n,t)}))}t.initAttrs.call(this,e);var o=e.post.content();if(o.new||2!=o.length){var s=n(o.new.users,o.old.users,"users"),r=n(o.old.users,o.new.users,"users"),i=n(o.new.groups,o.old.groups,"groups"),a=n(o.old.groups,o.new.groups,"groups");e.added=s.concat(i),e.removed=r.concat(a)}else{var c=e.post.content()[0],u=e.post.content()[1];e.added=n(u,c,"users"),e.removed=n(c,u,"users")}};var n=e.prototype;return n.icon=function(){return app.forum.data.attributes["byobu.icon-postAction"]},n.descriptionKey=function(){var t="fof-byobu.forum.post.recipients_modified.";return this.attrs.added.length?this.attrs.removed.length?t+"added_and_removed":t+"added":t+"removed"},n.descriptionData=function(){var t={};return this.attrs.added.length&&(t.added=D(this.attrs.added,{link:!0})),this.attrs.removed.length&&(t.removed=D(this.attrs.removed,{link:!0})),t},e}(r.a),j=n(1),N=n(22),k=n.n(N),S=n(23),U=n.n(S),A=function(t){!function(t){Object(j.extend)(k.a.prototype,"privacyItems",(function(e){var n=this;e.add("byobu-block-dm",U.a.component({state:this.user.blocksPd(),onchange:function(t){n.blocksPdLoading=!0,n.user.save({blocksPd:t}).then((function(){n.blocksPdLoading=!1,m.redraw()}))},loading:this.blocksPdLoading},t.translator.trans("fof-byobu.forum.user.settings.block_pd")))}))}(t)};var I=n(5),C=n.n(I),M=n(14),L=n.n(M),G=n(7),B=n.n(G),E=n(6),T=n.n(E),q=n(24),V=n.n(q),F=n(25),K=n.n(F),W=n(12),z=n.n(W),H=n(26),J=n.n(H),Q=n(3),X=n.n(Q),Y=n(27),Z=n.n(Y),tt=n(28),et=n.n(tt),nt=n(29),ot=n.n(nt),st=n(30),rt=n.n(st),it=n(31),at=n.n(it);function ct(){return(ct=Object.assign||function(t){for(var e=1;e=3;return this.sources||(this.sources=this.sourceItems().toArray()),m("div",{role:"search",className:"Search"},m("div",{className:"RecipientsInput-selected RecipientsLabel","aria-live":"polite"},m("h4",null,x.a.translator.trans("fof-byobu.forum.modal.labels.selected_users")),m("p",null,x.a.translator.trans("fof-byobu.forum.modal.help.selected_users")),this.attrs.selected().toArray().map((function(e){return m(xt.a,{text:x.a.translator.trans("fof-byobu.forum.modal.help.click_user_to_remove_tooltip")},m(P,{"data-container":"body",recipient:e,onclick:function(n){return t.removeRecipient(e,n)}}))}))),m("div",{className:"Form-group"},m("label",{for:"byobu-addrecipient-search-input-"+this.inputUuid},x.a.translator.trans("fof-byobu.forum.modal.labels.search_field")),m("div",{className:"AddRecipientModal-form-input Search-input"},m("input",{id:"byobu-addrecipient-search-input-"+this.inputUuid,className:f()("RecipientsInput","FormControl",{open:!!this.state.getValue(),focused:!!this.state.getValue(),active:!!this.state.getValue(),loading:!!this.loadingSources}),oncreate:function(t){return t.dom.focus()},type:"search",placeholder:ht()(x.a.translator.trans("fof-byobu.forum.input.search_recipients")),value:this.state.getValue(),oninput:function(e){return t.state.setValue(e.target.value)},onfocus:function(){return t.hasFocus=!0},onblur:function(){return t.hasFocus=!1}}),m("ul",{className:f()("Dropdown-menu","Search-results","fade",{in:!!e})},this.doSearch?this.sources.map((function(e){return e.view(t.state.getValue())})):vt.a.component({size:"tiny",className:"Button Button--icon Button--link"})))))},n.sourceItems=function(){var t=new X.a;return(!this.attrs.discussion&&x.a.forum.attribute("canStartPrivateDiscussionWithUsers")||this.attrs.discussion&&this.attrs.discussion.canEditUserRecipients())&&t.add("users",new dt),(!this.attrs.discussion&&x.a.forum.attribute("canStartPrivateDiscussionWithGroups")||this.attrs.discussion&&this.attrs.discussion.canEditGroupRecipients())&&t.add("groups",new mt),t},n.addRecipient=function(t){var e=t.split(":"),n=e[0],o=e[1],s=this.findRecipient(n,o);this.attrs.selected().add(t,s),this.state.clear()},n.removeRecipient=function(t,e){var n;e.preventDefault(),t instanceof u.a&&(n="users"),t instanceof h.a&&(n="groups"),this.attrs.selected().remove(n+":"+t.id())},n.findRecipient=function(t,e){return x.a.store.getById(t,e)},e}(at.a),Rt=function(t){function e(){return t.apply(this,arguments)||this}Object(o.a)(e,t);var n=e.prototype;return n.oninit=function(e){t.prototype.oninit.call(this,e),this.selected=ot()(new X.a),this.attrs.discussion?this.assignInitialRecipients(this.attrs.discussion):this.attrs.selectedRecipients&&this.attrs.selectedRecipients.toArray().length>0?this.selected().merge(this.attrs.selectedRecipients):this.selected().add("users:"+app.session.user.id(),app.session.user),this.recipientSearch=new rt.a},n.isDismissible=function(){return!1},n.assignInitialRecipients=function(t){var e=this;t.recipientUsers().map((function(t){e.selected().add("users:"+t.id(),t)})),t.recipientGroups().map((function(t){e.selected().add("groups:"+t.id(),t)}))},n.className=function(){return"AddRecipientModal"},n.title=function(){return this.attrs.discussion?app.translator.trans("fof-byobu.forum.modal.titles.update_recipients",{title:m("em",null,this.attrs.discussion.title())}):app.translator.trans("fof-byobu.forum.modal.titles.add_recipients")},n.helpText=function(){return this.attrs.discussion?app.translator.trans("fof-byobu.forum.modal.help.update_recipients"):app.translator.trans("fof-byobu.forum.modal.help.add_recipients")},n.content=function(){return[m("div",{className:"Modal-body"},m("div",{class:"AddRecipientModal-help"},this.helpText()),m("div",{className:"AddRecipientModal-form"},_t.component({state:this.recipientSearch,selected:this.selected,discussion:this.attrs.discussion}),m("div",{className:"AddRecipientModal-form-submit App-primaryControl"},T.a.component({type:"submit",className:"Button Button--primary",icon:"fas fa-check"},app.translator.trans("fof-byobu.forum.buttons.submit")),T.a.component({onclick:this.hide.bind(this),className:"Button Button--cancel"},app.translator.trans("fof-byobu.forum.buttons.cancel")))))]},n.select=function(t){(t.metaKey||t.ctrlKey||-1!==this.selected.indexOf(this.index))&&this.selected().length&&this.$("form").submit()},n.onsubmit=function(t){t.preventDefault();var e=this.attrs.discussion,n=this.selected(),o=[],s=[];n.toArray().forEach((function(t){t instanceof u.a&&s.push(t),t instanceof h.a&&o.push(t)})),e&&e.save({relationships:{recipientUsers:s,recipientGroups:o}}).then((function(){app.current instanceof et.a&&app.current.stream.update(),m.redraw()})),this.attrs.onsubmit&&this.attrs.onsubmit(n),app.modal.close(),this.attrs.discussion||app.composer.show(),t.redraw=!1},e}(Z.a),Pt=function(){B.a.prototype.recipientUsers=C.a.hasMany("recipientUsers"),B.a.prototype.oldRecipientUsers=C.a.hasMany("oldRecipientUsers"),B.a.prototype.recipientGroups=C.a.hasMany("recipientGroups"),B.a.prototype.oldRecipientGroups=C.a.hasMany("oldRecipientGroups"),B.a.prototype.canEditRecipients=C.a.attribute("canEditRecipients"),B.a.prototype.canEditUserRecipients=C.a.attribute("canEditUserRecipients"),B.a.prototype.canEditGroupRecipients=C.a.attribute("canEditGroupRecipients"),B.a.prototype.canEditGroupRecipients=C.a.attribute("canEditGroupRecipients"),B.a.prototype.isPrivateDiscussion=C.a.attribute("isPrivateDiscussion"),Object(j.extend)(B.a.prototype,"badges",(function(t){(this.recipientUsers().length||this.recipientGroups().length)&&t.add("private",L.a.component({type:"private",label:app.translator.trans("fof-byobu.forum.badges.is_private.tooltip"),icon:app.forum.data.attributes["byobu.icon-badge"]}),10)})),Object(j.extend)(V.a.prototype,"infoItems",(function(t){var e=this.attrs.discussion;wt(e,t,!0)})),Object(j.extend)(K.a.prototype,"items",(function(t){var e=this.attrs.discussion;wt(e,t,!1)})),Object(j.extend)(z.a.prototype,"requestParams",(function(t){t.include.push("recipientUsers"),t.include.push("recipientGroups")})),Object(j.extend)(J.a,"moderationControls",(function(t,e){e.canEditRecipients()&&t.add("recipients",T.a.component({icon:app.forum.data.attributes["byobu.icon-badge"],onclick:function(){return app.modal.show(Rt,{discussion:e})}},app.translator.trans("fof-byobu.forum.buttons.edit_recipients"))),e&&e.recipientUsers().find((function(t){return t.id()===app.session.user.id()}))&&t.add("remove",T.a.component({icon:"fas fa-user-slash",onclick:function(){if(e){var t=new X.a;e.recipientUsers().map((function(e){app.session.user.id()!==e.id()&&t.add("users:"+e.id(),e)}));var n=[],o=[];t.toArray().forEach((function(t){t instanceof u.a&&o.push(t),t instanceof h.a&&n.push(t)})),e.save({relationships:{recipientUsers:o,recipientGroups:n}}).then((function(){return app.history.back()}))}}},app.translator.trans("fof-byobu.forum.buttons.remove_from_discussion")))}))},wt=function(t,e,n){var o=[];t.recipientUsers().length&&(o=o.concat(t.recipientUsers())),t.recipientGroups().length&&(o=o.concat(t.recipientGroups())),o&&o.length&&(n?e.add("recipients",D(o),10):e.add("recipients",D(o,{link:!0}),4))};var Dt=n(36),Ot=n.n(Dt),jt=n(37);var Nt=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),s=0;s=0||(s[n]=t[n]);return s}var c=n(2),u=n.n(c),p=n(10),f=n.n(p),l=n(16),d=n.n(l),b=n(8),h=n.n(b),y=n(11),v=n.n(y),g=n(4),x=n.n(g),_=n(21),R=["recipient","link"],P=function(t){function e(){return t.apply(this,arguments)||this}return Object(o.a)(e,t),e.prototype.view=function(t){var e,n=this.attrs,o=n.recipient,s=n.link,r=a(n,R);if(r.style=r.style||{},r.className=f()("RecipientLabel",null==r?void 0:r.className),s&&o instanceof u.a&&(r.href=x.a.route.user(o)),o instanceof u.a){var i,c;e=d()(o),r.href||o.id()===(null==x.a||null==(i=x.a.session)||null==(c=i.user)?void 0:c.id())||(r.href=x.a.route.user(o))}else{if(o instanceof h.a)return m("span",{class:r.className},o.namePlural());r.className+=" none",e=x.a.translator.trans("core.lib.username.deleted_text")}return m(v.a,r,e)},e}(n.n(_).a),w=["link","className"];function D(t,e){void 0===e&&(e={});var n=e,o=n.link,s=n.className,r=a(n,w);return r.className=f()("RecipientsLabel",s),m("span",r,null==t?void 0:t.map((function(t,e){var n=t instanceof u.a?"u":"g";return m(P,{key:n+"-"+e,recipient:t,link:o})})),!t&&m(P,null))}var O=function(t){function e(){return t.apply(this,arguments)||this}Object(o.a)(e,t),e.initAttrs=function(e){function n(t,e,n){return t.filter((function(t){return-1===e.indexOf(t)})).map((function(t){return app.store.getById(n,t)}))}t.initAttrs.call(this,e);var o=e.post.content();if(o.new||2!=o.length){var s=n(o.new.users,o.old.users,"users"),r=n(o.old.users,o.new.users,"users"),i=n(o.new.groups,o.old.groups,"groups"),a=n(o.old.groups,o.new.groups,"groups");e.added=s.concat(i),e.removed=r.concat(a)}else{var c=e.post.content()[0],u=e.post.content()[1];e.added=n(u,c,"users"),e.removed=n(c,u,"users")}};var n=e.prototype;return n.icon=function(){return app.forum.data.attributes["byobu.icon-postAction"]},n.descriptionKey=function(){var t="fof-byobu.forum.post.recipients_modified.";return this.attrs.added.length?this.attrs.removed.length?t+"added_and_removed":t+"added":t+"removed"},n.descriptionData=function(){var t={};return this.attrs.added.length&&(t.added=D(this.attrs.added,{link:!0})),this.attrs.removed.length&&(t.removed=D(this.attrs.removed,{link:!0})),t},e}(r.a),j=n(1),N=n(22),k=n.n(N),S=n(23),U=n.n(S),A=function(t){!function(t){Object(j.extend)(k.a.prototype,"privacyItems",(function(e){var n=this;e.add("byobu-block-dm",U.a.component({state:this.user.blocksPd(),onchange:function(t){n.blocksPdLoading=!0,n.user.save({blocksPd:t}).then((function(){n.blocksPdLoading=!1,m.redraw()}))},loading:this.blocksPdLoading},t.translator.trans("fof-byobu.forum.user.settings.block_pd")))}))}(t)};var I=n(5),C=n.n(I),M=n(14),L=n.n(M),G=n(7),B=n.n(G),E=n(6),T=n.n(E),q=n(24),V=n.n(q),F=n(25),K=n.n(F),W=n(12),z=n.n(W),H=n(26),J=n.n(H),Q=n(3),X=n.n(Q),Y=n(27),Z=n.n(Y),tt=n(28),et=n.n(tt),nt=n(29),ot=n.n(nt),st=n(30),rt=n.n(st),it=n(31),at=n.n(it);function ct(){return(ct=Object.assign||function(t){for(var e=1;e=3;return this.sources||(this.sources=this.sourceItems().toArray()),m("div",{role:"search",className:"Search"},m("div",{className:"RecipientsInput-selected RecipientsLabel","aria-live":"polite"},m("h4",null,x.a.translator.trans("fof-byobu.forum.modal.labels.selected_users")),m("p",null,x.a.translator.trans("fof-byobu.forum.modal.help.selected_users")),this.attrs.selected().toArray().map((function(e){return m(xt.a,{text:x.a.translator.trans("fof-byobu.forum.modal.help.click_user_to_remove_tooltip")},m(P,{"data-container":"body",recipient:e,onclick:function(n){return t.removeRecipient(e,n)}}))}))),m("div",{className:"Form-group"},m("label",{for:"byobu-addrecipient-search-input-"+this.inputUuid},x.a.translator.trans("fof-byobu.forum.modal.labels.search_field")),m("div",{className:"AddRecipientModal-form-input Search-input"},m("input",{id:"byobu-addrecipient-search-input-"+this.inputUuid,className:f()("RecipientsInput","FormControl",{open:!!this.state.getValue(),focused:!!this.state.getValue(),active:!!this.state.getValue(),loading:!!this.loadingSources}),oncreate:function(t){return t.dom.focus()},type:"search",placeholder:ht()(x.a.translator.trans("fof-byobu.forum.input.search_recipients")),value:this.state.getValue(),oninput:function(e){return t.state.setValue(e.target.value)},onfocus:function(){return t.hasFocus=!0},onblur:function(){return t.hasFocus=!1}}),m("ul",{className:f()("Dropdown-menu","Search-results","fade",{in:!!e})},this.doSearch?this.sources.map((function(e){return e.view(t.state.getValue())})):vt.a.component({size:"tiny",className:"Button Button--icon Button--link"})))))},n.sourceItems=function(){var t=new X.a;return(!this.attrs.discussion&&x.a.forum.attribute("canStartPrivateDiscussionWithUsers")||this.attrs.discussion&&this.attrs.discussion.canEditUserRecipients())&&t.add("users",new dt),(!this.attrs.discussion&&x.a.forum.attribute("canStartPrivateDiscussionWithGroups")||this.attrs.discussion&&this.attrs.discussion.canEditGroupRecipients())&&t.add("groups",new mt),t},n.addRecipient=function(t){var e=t.split(":"),n=e[0],o=e[1],s=this.findRecipient(n,o);this.attrs.selected().add(t,s),this.state.clear()},n.removeRecipient=function(t,e){var n;e.preventDefault(),t instanceof u.a&&(n="users"),t instanceof h.a&&(n="groups"),this.attrs.selected().remove(n+":"+t.id())},n.findRecipient=function(t,e){return x.a.store.getById(t,e)},e}(at.a),Rt=function(t){function e(){return t.apply(this,arguments)||this}Object(o.a)(e,t);var n=e.prototype;return n.oninit=function(e){t.prototype.oninit.call(this,e),this.selected=ot()(new X.a),this.attrs.discussion?this.assignInitialRecipients(this.attrs.discussion):this.attrs.selectedRecipients&&this.attrs.selectedRecipients.toArray().length>0?this.selected().merge(this.attrs.selectedRecipients):this.selected().add("users:"+app.session.user.id(),app.session.user),this.recipientSearch=new rt.a},n.isDismissible=function(){return!1},n.assignInitialRecipients=function(t){var e=this;t.recipientUsers().map((function(t){e.selected().add("users:"+t.id(),t)})),t.recipientGroups().map((function(t){e.selected().add("groups:"+t.id(),t)}))},n.className=function(){return"AddRecipientModal"},n.title=function(){return this.attrs.discussion?app.translator.trans("fof-byobu.forum.modal.titles.update_recipients",{title:m("em",null,this.attrs.discussion.title())}):app.translator.trans("fof-byobu.forum.modal.titles.add_recipients")},n.helpText=function(){return this.attrs.discussion?app.translator.trans("fof-byobu.forum.modal.help.update_recipients"):app.translator.trans("fof-byobu.forum.modal.help.add_recipients")},n.content=function(){return[m("div",{className:"Modal-body"},m("div",{class:"AddRecipientModal-help"},this.helpText()),m("div",{className:"AddRecipientModal-form"},_t.component({state:this.recipientSearch,selected:this.selected,discussion:this.attrs.discussion}),m("div",{className:"AddRecipientModal-form-submit App-primaryControl"},T.a.component({type:"submit",className:"Button Button--primary",icon:"fas fa-check"},app.translator.trans("fof-byobu.forum.buttons.submit")),T.a.component({onclick:this.hide.bind(this),className:"Button Button--cancel"},app.translator.trans("fof-byobu.forum.buttons.cancel")))))]},n.select=function(t){(t.metaKey||t.ctrlKey||-1!==this.selected.indexOf(this.index))&&this.selected().length&&this.$("form").submit()},n.onsubmit=function(t){t.preventDefault();var e=this.attrs.discussion,n=this.selected(),o=[],s=[];n.toArray().forEach((function(t){t instanceof u.a&&s.push(t),t instanceof h.a&&o.push(t)})),e&&e.save({relationships:{recipientUsers:s,recipientGroups:o}}).then((function(){app.current instanceof et.a&&app.current.stream.update(),m.redraw()})),this.attrs.onsubmit&&this.attrs.onsubmit(n),app.modal.close(),this.attrs.discussion||app.composer.show(),t.redraw=!1},e}(Z.a),Pt=function(){B.a.prototype.recipientUsers=C.a.hasMany("recipientUsers"),B.a.prototype.oldRecipientUsers=C.a.hasMany("oldRecipientUsers"),B.a.prototype.recipientGroups=C.a.hasMany("recipientGroups"),B.a.prototype.oldRecipientGroups=C.a.hasMany("oldRecipientGroups"),B.a.prototype.canEditRecipients=C.a.attribute("canEditRecipients"),B.a.prototype.canEditUserRecipients=C.a.attribute("canEditUserRecipients"),B.a.prototype.canEditGroupRecipients=C.a.attribute("canEditGroupRecipients"),B.a.prototype.canEditGroupRecipients=C.a.attribute("canEditGroupRecipients"),B.a.prototype.isPrivateDiscussion=C.a.attribute("isPrivateDiscussion"),Object(j.extend)(B.a.prototype,"badges",(function(t){(this.recipientUsers().length||this.recipientGroups().length)&&t.add("private",L.a.component({type:"private",label:app.translator.trans("fof-byobu.forum.badges.is_private.tooltip"),icon:app.forum.data.attributes["byobu.icon-badge"]}),10)})),Object(j.extend)(V.a.prototype,"infoItems",(function(t){var e=this.attrs.discussion;wt(e,t,!0)})),Object(j.extend)(K.a.prototype,"items",(function(t){var e=this.attrs.discussion;wt(e,t,!1)})),Object(j.extend)(z.a.prototype,"requestParams",(function(t){t.include.push("recipientUsers"),t.include.push("recipientGroups")})),Object(j.extend)(J.a,"moderationControls",(function(t,e){e.canEditRecipients()&&t.add("recipients",T.a.component({icon:app.forum.data.attributes["byobu.icon-badge"],onclick:function(){return app.modal.show(Rt,{discussion:e})}},app.translator.trans("fof-byobu.forum.buttons.edit_recipients"))),e&&e.recipientUsers().find((function(t){return t.id()===app.session.user.id()}))&&t.add("remove",T.a.component({icon:"fas fa-user-slash",onclick:function(){if(e){var t=new X.a;e.recipientUsers().map((function(e){app.session.user.id()!==e.id()&&t.add("users:"+e.id(),e)}));var n=[],o=[];t.toArray().forEach((function(t){t instanceof u.a&&o.push(t),t instanceof h.a&&n.push(t)})),e.save({relationships:{recipientUsers:o,recipientGroups:n}}).then((function(){return app.history.back()}))}}},app.translator.trans("fof-byobu.forum.buttons.remove_from_discussion")))}))},wt=function(t,e,n){var o=[];t.recipientUsers().length&&(o=o.concat(t.recipientUsers())),t.recipientGroups().length&&(o=o.concat(t.recipientGroups())),o&&o.length&&(n?e.add("recipients",D(o),10):e.add("recipients",D(o,{link:!0}),4))};var Dt=n(36),Ot=n.n(Dt),jt=n(37);var Nt=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),s=0;s= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import type * as Mithril from 'mithril';\nimport username from 'flarum/common/helpers/username';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport app from 'flarum/forum/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\n\nexport interface IRecipientLabelAttrs extends ComponentAttrs, Mithril.Attributes {\n recipient: User | Group;\n link: string;\n}\n\nexport default class RecipientLabel extends Component {\n view(vnode: Mithril.Vnode) {\n const { recipient, link, ...newAttrs } = this.attrs;\n\n newAttrs.style = newAttrs.style || {};\n newAttrs.className = classList('RecipientLabel', newAttrs?.className);\n\n if (link && recipient instanceof User) {\n newAttrs.href = app.route.user(recipient);\n }\n\n let label: string;\n\n if (recipient instanceof User) {\n label = username(recipient);\n\n if (!newAttrs.href && recipient.id() !== app?.session?.user?.id()) {\n newAttrs.href = app.route.user(recipient);\n }\n } else if (recipient instanceof Group) {\n return {recipient.namePlural()};\n } else {\n newAttrs.className += ' none';\n label = app.translator.trans('flarum.core.lib.username.deleted_text');\n }\n\n return {label};\n }\n}\n","import Group from 'flarum/common/models/Group';\nimport User from 'flarum/common/models/User';\nimport classList from 'flarum/common/utils/classList';\nimport RecipientLabel from './RecipientLabel';\n\nexport default function recipientsLabel(recipients?: (User | Group)[], attrs: Record = {}): JSX.Element {\n const { link, className, ...otherAttrs } = attrs;\n\n otherAttrs.className = classList('RecipientsLabel', className);\n\n return (\n \n {recipients?.map((recipient) => {\n const type = recipient instanceof User ? 'u' : 'g';\n\n return ;\n })}\n {!recipients && }\n \n );\n}\n","import EventPost from 'flarum/forum/components/EventPost';\nimport recipientsLabel from '../pages/labels/recipientsLabels';\n\nexport default class RecipientsModified extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n function diff(diff1, diff2, store) {\n return diff1.filter((item) => diff2.indexOf(item) === -1).map((id) => app.store.getById(store, id));\n }\n\n const content = attrs.post.content();\n\n // For event posts existing before groups functionality.\n if (!content['new'] && content.length == 2) {\n const oldRecipients = attrs.post.content()[0];\n const newRecipients = attrs.post.content()[1];\n attrs.added = diff(newRecipients, oldRecipients, 'users');\n attrs.removed = diff(oldRecipients, newRecipients, 'users');\n } else {\n let usersAdded = diff(content['new']['users'], content['old']['users'], 'users');\n let usersRemoved = diff(content['old']['users'], content['new']['users'], 'users');\n let groupsAdded = diff(content['new']['groups'], content['old']['groups'], 'groups');\n let groupsRemoved = diff(content['old']['groups'], content['new']['groups'], 'groups');\n\n attrs.added = usersAdded.concat(groupsAdded);\n attrs.removed = usersRemoved.concat(groupsRemoved);\n }\n }\n\n icon() {\n return app.forum.data.attributes['byobu.icon-postAction'];\n }\n\n descriptionKey() {\n var localeBase = 'fof-byobu.forum.post.recipients_modified.';\n\n if (this.attrs.added.length) {\n if (this.attrs.removed.length) {\n return localeBase + 'added_and_removed';\n }\n\n return localeBase + 'added';\n }\n\n return localeBase + 'removed';\n }\n\n descriptionData() {\n const data = {};\n\n if (this.attrs.added.length) {\n data.added = recipientsLabel(this.attrs.added, { link: true });\n }\n\n if (this.attrs.removed.length) {\n data.removed = recipientsLabel(this.attrs.removed, { link: true });\n }\n\n return data;\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport SettingsPage from 'flarum/forum/components/SettingsPage';\nimport Switch from 'flarum/common/components/Switch';\n\nexport default (app) => {\n privacyToggle(app);\n};\n\nfunction privacyToggle(app) {\n extend(SettingsPage.prototype, 'privacyItems', function (items) {\n items.add(\n 'byobu-block-dm',\n Switch.component(\n {\n state: this.user.blocksPd(),\n onchange: (value) => {\n this.blocksPdLoading = true;\n\n this.user.save({ blocksPd: value }).then(() => {\n this.blocksPdLoading = false;\n m.redraw();\n });\n },\n loading: this.blocksPdLoading,\n },\n app.translator.trans('fof-byobu.forum.user.settings.block_pd')\n )\n );\n });\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","import highlight from 'flarum/common/helpers/highlight';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\n\nexport default class UserSearchSource {\n view(query) {\n if (query.length < 3 || this.loading) return;\n\n if (!app.cache.byobuResults) {\n app.cache.byobuResults = [];\n }\n\n this.query = query;\n\n if (!app.cache.byobuResults[this.query]) {\n this.loading = true;\n\n app.cache.byobuResults[this.query] = [];\n app.store\n .find('users', {\n filter: { q: this.query + ' allows-pd' },\n page: { limit: 5 },\n })\n .then(this.pushResults.bind(this));\n } else\n return [\n
  • {app.translator.trans('core.forum.search.users_heading')}
  • ,\n app.cache.byobuResults[this.query].map((user) => {\n const name = username(user);\n const children = [highlight(name.text, this.query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n ];\n }\n\n pushResults(results) {\n results.payload.data.map((result) => {\n var user = app.store.getById('users', result.id);\n app.cache.byobuResults[this.query].push(user);\n });\n this.loading = false;\n m.redraw();\n }\n}\n","import highlight from 'flarum/common/helpers/highlight';\n\nexport default class GroupSearchSource {\n search(query) {\n return app.store.find('groups', {\n filter: { q: query },\n page: { limit: 5 },\n });\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const results = app.store.all('groups').filter((group) => group.namePlural().toLowerCase().substr(0, query.length) === query);\n\n if (!results.length) return '';\n\n return [\n
  • {app.translator.trans('fof-byobu.forum.search.headings.groups')}
  • ,\n results.map((group) => {\n const groupName = group.namePlural();\n var name = highlight(groupName, query);\n\n return (\n
  • \n \n {name}\n \n
  • \n );\n }),\n ];\n }\n}\n","import app from 'flarum/forum/app';\nimport Search from 'flarum/forum/components/Search';\nimport UserSearchSource from './sources/UserSearchSource';\nimport GroupSearchSource from './sources/GroupSearchSource';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport RecipientLabel from '../pages/labels/RecipientLabel';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class RecipientSearch extends Search {\n /**\n * Used to prevent duplicate IDs. Doesn't remove the possibility, but is extremely low.\n */\n inputUuid;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.inputUuid = Math.random().toString(36).substring(2);\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const $search = this;\n\n this.$('.Search-results').on('click', (e) => {\n const target = this.$('.SearchResult.active');\n\n $search.addRecipient(target.data('index'));\n $search.$('.RecipientsInput').focus();\n });\n\n this.$('.Search-results').on('touchstart', (e) => {\n const target = this.$(e.target.parentNode);\n\n $search.addRecipient(target.data('index'));\n $search.$('.RecipientsInput').focus();\n });\n\n $('.RecipientsInput')\n .on('input', () => {\n clearTimeout(this.typingTimer);\n this.doSearch = false;\n this.typingTimer = setTimeout(() => {\n this.doSearch = true;\n m.redraw();\n }, 900);\n })\n .on('keydown', () => {\n clearTimeout(this.typingTimer);\n });\n\n super.oncreate(vnode);\n }\n\n view() {\n if (typeof this.state.getValue() === 'undefined') {\n this.state.setValue('');\n }\n\n const loading = this.state.getValue() && this.state.getValue().length >= 3;\n\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n return (\n
    \n
    \n

    {app.translator.trans('fof-byobu.forum.modal.labels.selected_users')}

    \n

    {app.translator.trans('fof-byobu.forum.modal.help.selected_users')}

    \n\n {this.attrs\n .selected()\n .toArray()\n .map((recipient) => {\n return (\n \n this.removeRecipient(recipient, e)} />\n \n );\n })}\n
    \n\n
    \n \n\n
    \n vnode.dom.focus()}\n type=\"search\"\n placeholder={extractText(app.translator.trans('fof-byobu.forum.input.search_recipients'))}\n value={this.state.getValue()}\n oninput={(e) => this.state.setValue(e.target.value)}\n onfocus={() => (this.hasFocus = true)}\n onblur={() => (this.hasFocus = false)}\n />\n \n {!this.doSearch\n ? LoadingIndicator.component({ size: 'tiny', className: 'Button Button--icon Button--link' })\n : this.sources.map((source) => source.view(this.state.getValue()))}\n \n
    \n
    \n
    \n );\n }\n\n /**\n * Build an item list of SearchSources.\n *\n * @return {ItemList}\n */\n sourceItems() {\n const items = new ItemList();\n\n // Add user source based on permissions.\n if (\n (!this.attrs.discussion && app.forum.attribute('canStartPrivateDiscussionWithUsers')) ||\n (this.attrs.discussion && this.attrs.discussion.canEditUserRecipients())\n ) {\n items.add('users', new UserSearchSource());\n }\n\n // Add group source based on permissions.\n if (\n (!this.attrs.discussion && app.forum.attribute('canStartPrivateDiscussionWithGroups')) ||\n (this.attrs.discussion && this.attrs.discussion.canEditGroupRecipients())\n ) {\n items.add('groups', new GroupSearchSource());\n }\n\n return items;\n }\n\n /**\n * Adds a recipient.\n *\n * @param value\n */\n addRecipient(value) {\n let values = value.split(':'),\n type = values[0],\n id = values[1];\n\n let recipient = this.findRecipient(type, id);\n\n this.attrs.selected().add(value, recipient);\n\n this.state.clear();\n }\n\n /**\n * Removes a recipient.\n *\n * @param recipient\n */\n removeRecipient(recipient, e) {\n e.preventDefault();\n\n let type;\n\n if (recipient instanceof User) {\n type = 'users';\n }\n if (recipient instanceof Group) {\n type = 'groups';\n }\n\n this.attrs.selected().remove(type + ':' + recipient.id());\n }\n\n /**\n * Loads a recipient from the global store.\n *\n * @param store\n * @param id\n * @returns {Model}\n */\n findRecipient(store, id) {\n return app.store.getById(store, id);\n }\n}\n","import Modal from 'flarum/common/components/Modal';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Stream from 'flarum/common/utils/Stream';\nimport SearchState from 'flarum/forum/states/SearchState';\nimport RecipientSearch from '../search/RecipientSearch';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\n\nexport default class AddRecipientModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.selected = Stream(new ItemList());\n\n if (this.attrs.discussion) {\n // Adds recipients of the currently viewed discussion.\n this.assignInitialRecipients(this.attrs.discussion);\n } else if (this.attrs.selectedRecipients && this.attrs.selectedRecipients.toArray().length > 0) {\n // Adds previously selected recipients.\n this.selected().merge(this.attrs.selectedRecipients);\n } else {\n // Adds the current user in case there are no selected recipients yet and this is a new discussion.\n this.selected().add('users:' + app.session.user.id(), app.session.user);\n }\n\n this.recipientSearch = new SearchState();\n }\n\n isDismissible() {\n return false;\n }\n\n assignInitialRecipients(discussion) {\n discussion.recipientUsers().map((user) => {\n this.selected().add('users:' + user.id(), user);\n });\n discussion.recipientGroups().map((group) => {\n this.selected().add('groups:' + group.id(), group);\n });\n }\n\n className() {\n return 'AddRecipientModal';\n }\n\n title() {\n return this.attrs.discussion\n ? app.translator.trans('fof-byobu.forum.modal.titles.update_recipients', { title: {this.attrs.discussion.title()} })\n : app.translator.trans('fof-byobu.forum.modal.titles.add_recipients');\n }\n\n helpText() {\n return this.attrs.discussion\n ? app.translator.trans('fof-byobu.forum.modal.help.update_recipients')\n : app.translator.trans('fof-byobu.forum.modal.help.add_recipients');\n }\n\n content() {\n return [\n
    \n
    {this.helpText()}
    \n
    \n {RecipientSearch.component({\n state: this.recipientSearch,\n selected: this.selected,\n discussion: this.attrs.discussion,\n })}\n
    \n {Button.component(\n {\n type: 'submit',\n className: 'Button Button--primary',\n icon: 'fas fa-check',\n },\n app.translator.trans('fof-byobu.forum.buttons.submit')\n )}\n {Button.component(\n {\n onclick: this.hide.bind(this),\n className: 'Button Button--cancel',\n },\n app.translator.trans('fof-byobu.forum.buttons.cancel')\n )}\n
    \n
    \n
    ,\n ];\n }\n\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.selected.indexOf(this.index) !== -1) {\n if (this.selected().length) {\n this.$('form').submit();\n }\n }\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n const discussion = this.attrs.discussion;\n const recipients = this.selected();\n\n let recipientGroups = [];\n let recipientUsers = [];\n\n recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n recipientUsers.push(recipient);\n }\n if (recipient instanceof Group) {\n recipientGroups.push(recipient);\n }\n });\n\n // Recipients are updated here for existing discussions here.\n if (discussion) {\n discussion.save({ relationships: { recipientUsers, recipientGroups } }).then(() => {\n if (app.current instanceof DiscussionPage) {\n app.current.stream.update();\n }\n m.redraw();\n });\n }\n\n // Use the onsubmit callback to trigger an update in the DiscussionComposer\n if (this.attrs.onsubmit) this.attrs.onsubmit(recipients);\n\n app.modal.close();\n\n if (!this.attrs.discussion) {\n app.composer.show();\n }\n\n e.redraw = false;\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport Model from 'flarum/common/Model';\nimport Badge from 'flarum/common/components/Badge';\nimport Discussion from 'flarum/common/models/Discussion';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport Button from 'flarum/common/components/Button';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport recipientsLabel from '../pages/labels/recipientsLabels';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport AddRecipientModal from './../modals/AddRecipientModal';\n\nexport default () => {\n attributes();\n badges();\n index();\n hero();\n apiInclude();\n controls();\n};\n\nconst add = function (discussion, items, long) {\n let recipients = [];\n\n if (discussion.recipientUsers().length) {\n recipients = recipients.concat(discussion.recipientUsers());\n }\n\n if (discussion.recipientGroups().length) {\n recipients = recipients.concat(discussion.recipientGroups());\n }\n\n if (recipients && recipients.length) {\n if (long) {\n items.add('recipients', recipientsLabel(recipients), 10);\n } else {\n items.add('recipients', recipientsLabel(recipients, { link: true }), 4);\n }\n }\n};\n\nfunction badges() {\n extend(Discussion.prototype, 'badges', function (badges) {\n if (this.recipientUsers().length || this.recipientGroups().length) {\n badges.add(\n 'private',\n Badge.component({\n type: 'private',\n label: app.translator.trans('fof-byobu.forum.badges.is_private.tooltip'),\n icon: app.forum.data.attributes['byobu.icon-badge'],\n }),\n 10\n );\n }\n });\n}\n\nfunction index() {\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const discussion = this.attrs.discussion;\n\n add(discussion, items, true);\n });\n}\n\nfunction hero() {\n extend(DiscussionHero.prototype, 'items', function (items) {\n const discussion = this.attrs.discussion;\n\n add(discussion, items, false);\n });\n}\n\nfunction apiInclude() {\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n params.include.push('recipientUsers');\n params.include.push('recipientGroups');\n });\n}\n\nfunction controls() {\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canEditRecipients()) {\n items.add(\n 'recipients',\n Button.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n onclick: () => app.modal.show(AddRecipientModal, { discussion }),\n },\n app.translator.trans('fof-byobu.forum.buttons.edit_recipients')\n )\n );\n }\n if (discussion && discussion.recipientUsers().find((user) => user.id() === app.session.user.id())) {\n items.add(\n 'remove',\n Button.component(\n {\n icon: 'fas fa-user-slash',\n onclick: () => {\n if (discussion) {\n let recipients = new ItemList();\n discussion.recipientUsers().map((user) => {\n if (app.session.user.id() !== user.id()) {\n recipients.add('users:' + user.id(), user);\n }\n });\n\n let recipientGroups = [];\n let recipientUsers = [];\n\n recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n recipientUsers.push(recipient);\n }\n if (recipient instanceof Group) {\n recipientGroups.push(recipient);\n }\n });\n\n discussion\n .save({\n relationships: {\n recipientUsers,\n recipientGroups,\n },\n })\n .then(() => app.history.back());\n }\n },\n },\n app.translator.trans('fof-byobu.forum.buttons.remove_from_discussion')\n )\n );\n }\n });\n}\n\nfunction attributes() {\n Discussion.prototype.recipientUsers = Model.hasMany('recipientUsers');\n Discussion.prototype.oldRecipientUsers = Model.hasMany('oldRecipientUsers');\n Discussion.prototype.recipientGroups = Model.hasMany('recipientGroups');\n Discussion.prototype.oldRecipientGroups = Model.hasMany('oldRecipientGroups');\n\n Discussion.prototype.canEditRecipients = Model.attribute('canEditRecipients');\n Discussion.prototype.canEditUserRecipients = Model.attribute('canEditUserRecipients');\n Discussion.prototype.canEditGroupRecipients = Model.attribute('canEditGroupRecipients');\n Discussion.prototype.canEditGroupRecipients = Model.attribute('canEditGroupRecipients');\n\n Discussion.prototype.isPrivateDiscussion = Model.attribute('isPrivateDiscussion');\n}\n","import DiscussionComposer from 'flarum/forum/components/DiscussionComposer';\nimport AddRecipientModal from '../../modals/AddRecipientModal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport recipientCountLabel from '../labels/recipientCountLabel';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\n\nexport default class PrivateDiscussionComposer extends DiscussionComposer {\n /**\n * Tells other extensions that this composer is a Byobu composer.\n */\n _isByobuComposer = true;\n\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n attrs.titlePlaceholder = app.translator.trans('fof-byobu.forum.composer_private_discussion.title_placeholder');\n attrs.submitLabel = app.translator.trans('fof-byobu.forum.composer_private_discussion.submit_button');\n }\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.composer.fields.recipients = this.attrs.recipients || new ItemList();\n\n this.composer.fields.recipientUsers = this.attrs.recipientUsers || [];\n this.composer.fields.recipientGroups = this.attrs.recipientGroups || [];\n\n const username = m.route.param('username');\n\n if (typeof username !== 'undefined') {\n this.addDefaultRecipients(username);\n }\n }\n\n data() {\n let data = super.data();\n\n const users = [];\n const groups = [];\n\n if (this.composer.fields.recipients !== undefined) {\n this.composer.fields.recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n users.push(recipient);\n }\n\n if (recipient instanceof Group) {\n groups.push(recipient);\n }\n });\n }\n\n data.relationships = data.relationships || {};\n\n if (users.length) {\n data.relationships.recipientUsers = users;\n }\n\n if (groups.length) {\n data.relationships.recipientGroups = groups;\n }\n\n delete data.relationships.tags;\n\n return data;\n }\n\n chooseRecipients() {\n app.modal.show(AddRecipientModal, {\n selectedRecipients: this.composer.fields.recipients,\n onsubmit: (recipients) => {\n this.composer.fields.recipients = recipients;\n\n // Focus on recipient autocomplete field.\n this.$('.RecipientsInput').focus();\n },\n });\n }\n\n headerItems() {\n let items = super.headerItems();\n\n items.remove('tags');\n\n if (app.session.user && app.forum.attribute('canStartPrivateDiscussion')) {\n const recipients = this.composer.fields.recipients.toArray();\n\n items.add(\n 'recipients',\n \n {recipients.length ? (\n recipientCountLabel(recipients.length)\n ) : (\n {app.translator.trans('fof-byobu.forum.buttons.add_recipients')}\n )}\n ,\n 5\n );\n }\n\n return items;\n }\n\n addDefaultRecipients(username) {\n const user = app.store.getBy('users', 'username', username);\n\n this.composer.fields.recipients.add('users:' + app.session.user.id(), app.session.user);\n\n if (user.id() !== app.session.user.id()) {\n this.composer.fields.recipients.add('users:' + user.id(), user);\n }\n }\n\n onsubmit() {\n this.loading = true;\n\n const recipients = this.composer.fields.recipients.toArray();\n\n if (recipients.length < 2) {\n this.chooseRecipients();\n\n this.loading = false;\n } else {\n const data = this.data();\n\n app.store\n .createRecord('discussions')\n .save(data)\n .then((discussion) => {\n if (app.cache.discussionList) {\n app.cache.discussionList.refresh();\n }\n m.route.set(app.route.discussion(discussion));\n\n app.composer.hide();\n }, this.loaded.bind(this));\n }\n }\n}\n","export default function recipientCountLabel(count, attrs = {}) {\n attrs.style = attrs.style || {};\n attrs.className = 'RecipientLabel ' + (attrs.className || '');\n\n var label = app.translator.trans('fof-byobu.forum.labels.recipients', { count });\n\n return m('span', attrs, {label});\n}\n","import { extend } from 'flarum/common/extend';\nimport Model from 'flarum/common/Model';\nimport User from 'flarum/common/models/User';\nimport UserControls from 'flarum/forum/utils/UserControls';\nimport PrivateDiscussionComposer from './../pages/discussions/PrivateDiscussionComposer';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\n\nexport default (app) => {\n attributes();\n message(app);\n sharedMessageHistory(app);\n};\n\nfunction message(app) {\n extend(UserControls, 'userControls', function (items, user) {\n if (\n app.session.user &&\n app.session.user.id() !== user.id() &&\n app.forum.attribute('canStartPrivateDiscussion') &&\n (user.blocksPd() === false || (app.forum.attribute('canStartPrivateDiscussionWithBlockers') && user.cannotBeDirectMessaged()))\n ) {\n items.add(\n 'private-discussion',\n Button.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n onclick: (e) => {\n e.preventDefault();\n\n return new Promise((resolve) => {\n let recipients = new ItemList();\n recipients.add('users:' + app.session.user.id(), app.session.user);\n recipients.add('users:' + user.id(), user);\n\n PrivateDiscussionComposer.prototype.recipients = recipients;\n\n app.composer.load(PrivateDiscussionComposer, {\n user: app.session.user,\n recipients: recipients,\n recipientUsers: recipients,\n titlePlaceholder: app.translator.trans('fof-byobu.forum.composer_private_discussion.title_placeholder'),\n submitLabel: app.translator.trans('fof-byobu.forum.composer_private_discussion.submit_button'),\n });\n app.composer.show();\n\n return resolve(app.composer);\n });\n },\n },\n app.translator.trans('fof-byobu.forum.buttons.send_pd', { username: user.username() })\n )\n );\n }\n\n return items;\n });\n}\n\nfunction sharedMessageHistory(app) {\n extend(UserPage.prototype, 'navItems', function (items) {\n const href = app.route('byobuUserPrivate', { username: this.user.username() });\n\n // Hide links from guests if they are not already on the page\n if (!app.session.user && m.route.get() !== href) return;\n // Hide link for your own page.\n if (app.session.user && app.session.user.username() === this.user.username()) return;\n\n items.add(\n 'byobu',\n LinkButton.component(\n {\n href,\n icon: app.forum.data.attributes['byobu.icon-badge'],\n },\n app.translator.trans('fof-byobu.forum.user.byobu_link')\n ),\n 85\n );\n });\n}\n\nfunction attributes() {\n User.prototype.blocksPd = Model.attribute('blocksPd');\n User.prototype.cannotBeDirectMessaged = Model.attribute('cannotBeDirectMessaged');\n User.prototype.unreadPrivateMessagesCount = Model.attribute('unreadPrivateMessagesCount');\n}\n","import SettingsPage from './SettingsPage';\nimport Discussion from './Discussion';\nimport User from './User';\n\nexport default (app) => {\n Discussion(app);\n SettingsPage(app);\n User(app);\n};\n","import DiscussionListState from 'flarum/forum/states/DiscussionListState';\n\nexport default class PrivateDiscussionListState extends DiscussionListState {}\n","import DiscussionList from 'flarum/forum/components/DiscussionList';\n\nexport default class PrivateDiscussionList extends DiscussionList {}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import Button from 'flarum/common/components/Button';\nimport LogInModal from 'flarum/forum/components/LogInModal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PrivateDiscussionComposer from './discussions/PrivateDiscussionComposer';\n\nexport default class PrivateComposing {\n constructor(recipient) {\n this.recipient = recipient;\n }\n\n action(e) {\n e.preventDefault();\n\n return new Promise((resolve, reject) => {\n if (app.session.user) {\n let recipients = new ItemList();\n\n recipients.add('users:' + app.session.user.id(), app.session.user);\n\n if (this.recipient && app.session.user.id() !== this.recipient.id()) {\n recipients.add('users:' + this.recipient.id(), this.recipient);\n }\n\n app.composer.load(PrivateDiscussionComposer, {\n user: app.session.user,\n recipients: recipients,\n recipientUsers: recipients,\n });\n\n app.composer.show();\n\n return resolve();\n } else {\n app.modal.show(LogInModal);\n\n return reject();\n }\n });\n }\n\n component() {\n return Button.component(\n {\n icon: 'fas fa-pen',\n className: 'Button Button--primary IndexPage-newDiscussion',\n itemClassName: 'App-primaryControl fof-byobu_primaryControl',\n onclick: this.action.bind(this),\n disabled: !this.canStartDiscussion,\n },\n app.translator.trans(this.canStartDiscussion ? 'fof-byobu.forum.nav.start_button' : 'core.forum.index.cannot_start_discussion_button')\n );\n }\n\n get canStartDiscussion() {\n return app.session.user && app.forum.attribute('canStartPrivateDiscussion');\n }\n}\n","import UserPage from 'flarum/forum/components/UserPage';\nimport PrivateDiscussionListState from '../states/PrivateDiscussionListState';\nimport Button from 'flarum/common/components/Button';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport listItems from 'flarum/common/helpers/listItems';\nimport PrivateDiscussionList from './discussions/PrivateDiscussionList';\nimport PrivateComposing from './PrivateComposing';\n\nexport default class PrivateDiscussionsUserPage extends UserPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.changeSort('latest');\n }\n\n show(user) {\n // We can not create the list in init because the user will not be available if it has to be loaded asynchronously\n this.list = new PrivateDiscussionListState({\n q: `byobu:${user.username()} is:private`,\n sort: this.sort,\n });\n\n this.list.refresh();\n\n // We call the parent method after creating the list, this way the this.list property\n // is set before content() is called for the first time\n super.show(user);\n }\n\n handleChangeSort(sort, e) {\n e.preventDefault();\n\n this.changeSort(sort);\n }\n\n changeSort(sort) {\n this.sort = sort;\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return (\n
    \n
    \n
      {listItems(this.actionItems().toArray())}
    \n
      {listItems(this.viewItems().toArray())}
    \n
    \n \n
    \n );\n }\n\n actionItems() {\n let composing = new PrivateComposing(this.user);\n\n const items = new ItemList();\n\n if (app.session.user && app.forum.attribute('canStartPrivateDiscussion')) {\n items.add('start_private', composing.component());\n }\n\n return items;\n }\n\n viewItems() {\n const items = new ItemList();\n const sortMap = this.list.sortMap();\n\n const sortOptions = {};\n for (const i in sortMap) {\n sortOptions[i] = app.translator.trans('core.forum.index_sort.' + i + '_button');\n }\n\n items.add(\n 'sort',\n Dropdown.component(\n {\n buttonClassName: 'Button',\n label: sortOptions[this.sort] || Object.keys(sortMap).map((key) => sortOptions[key])[0],\n },\n Object.keys(sortOptions).map((value) => {\n const label = sortOptions[value];\n const active = (this.sort || Object.keys(sortMap)[0]) === value;\n\n return Button.component(\n {\n icon: active ? 'fas fa-check' : true,\n onclick: this.handleChangeSort.bind(this, value),\n active: active,\n },\n label\n );\n })\n )\n );\n\n return items;\n }\n}\n","import routes from './routes';\nimport PrivateDiscussionsPage from './PrivateDiscussionsPage';\n\nexport default (app) => {\n routes(app);\n PrivateDiscussionsPage(app);\n};\n","import IndexPage from 'flarum/forum/components/IndexPage';\nimport PrivateDiscussionsUserPage from './PrivateDiscussionsUserPage';\n\nexport default (app) => {\n app.routes.byobuUserPrivate = { path: '/u/:username/private', component: PrivateDiscussionsUserPage };\n app.routes.byobuPrivate = { path: '/private', component: IndexPage };\n};\n","import { extend } from 'flarum/common/extend';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport PrivateComposing from './PrivateComposing';\n\nexport default (app) => {\n extend(IndexPage.prototype, 'navItems', (items) => {\n const user = app.session.user;\n\n if (user) {\n items.add(\n 'privateDiscussions',\n LinkButton.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n href: app.route('byobuPrivate'),\n },\n app.translator.trans('fof-byobu.forum.nav.nav_item')\n ),\n 75\n );\n }\n });\n\n extend(IndexPage.prototype, 'setTitle', function () {\n if (app.current.get('routeName') === 'byobuPrivate') {\n app.setTitle(app.translator.trans('fof-byobu.forum.user.dropdown_label'));\n }\n });\n\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (app.current.get('routeName') === 'byobuPrivate') {\n params.filter.q = (params.filter.q || '') + ' is:private';\n\n params.include.push('recipientUsers');\n params.include.push('recipientGroups');\n }\n });\n\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\n if (app.current.get('routeName') === 'byobuPrivate') {\n let compose = new PrivateComposing();\n\n items.replace('newDiscussion', compose.component());\n }\n });\n};\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionReplyNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n const content = notification.content() || {};\n\n return app.route.discussion(discussion, content.postNumber);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_reply_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionUserLeftNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_user_left_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionAddedNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_added_text', {\n user: user,\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\nimport PrivateDiscussionNotification from './PrivateDiscussionNotification';\nimport PrivateDiscussionRepliedNotification from './PrivateDiscussionReplyNotification';\nimport PrivateDiscussionUserLeftNotification from './PrivateDiscussionUserLeftNotification';\nimport PrivateDiscussionAddedNotification from './PrivateDiscussionAddedNotification';\n\nexport default function (app) {\n app.notificationComponents.byobuPrivateDiscussionCreated = PrivateDiscussionNotification;\n app.notificationComponents.byobuPrivateDiscussionReplied = PrivateDiscussionRepliedNotification;\n app.notificationComponents.byobuRecipientRemoved = PrivateDiscussionUserLeftNotification;\n app.notificationComponents.byobuPrivateDiscussionAdded = PrivateDiscussionAddedNotification;\n\n grid();\n}\n\nfunction grid() {\n // Add notification preferences.\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('byobuPrivateDiscussionCreated', {\n name: 'byobuPrivateDiscussionCreated',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_label'),\n });\n items.add('byobuPrivateDiscussionReplied', {\n name: 'byobuPrivateDiscussionReplied',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_reply_label'),\n });\n items.add('byobuPrivateDiscussionAdded', {\n name: 'byobuPrivateDiscussionAdded',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_added_label'),\n });\n items.add('byobuRecipientRemoved', {\n name: 'byobuRecipientRemoved',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_user_left_label'),\n });\n });\n}\n","import AddRecipientModal from './AddRecipientModal';\n\nexport const modals = {\n AddRecipientModal: AddRecipientModal,\n};\n","import PrivateDiscussionComposer from './PrivateDiscussionComposer';\nimport PrivateDiscussionList from './PrivateDiscussionList';\n\nexport const discussions = {\n PrivateDiscussionComposer: PrivateDiscussionComposer,\n PrivateDiscussionList: PrivateDiscussionList,\n};\n","import events from './events';\nimport extend from './extend';\nimport pages from './pages';\nimport notifications from './notifications';\n\nexport * from './modals';\nexport * from './pages/discussions';\n\napp.initializers.add('fof-byobu', function (app) {\n events(app);\n extend(app);\n\n pages(app);\n notifications(app);\n});\n","import RecipientLeft from './RecipientLeft';\nimport RecipientsModified from './RecipientsModified';\n\nexport default (app) => {\n app.postComponents.recipientsModified = RecipientsModified;\n app.postComponents.recipientLeft = RecipientLeft;\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@fof/byobu/webpack/bootstrap","webpack://@fof/byobu/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@fof/byobu/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/byobu/external \"flarum.core.compat['common/extend']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/models/User']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/utils/ItemList']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/app']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/Model']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Button']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/models/Discussion']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/models/Group']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/Notification']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/utils/classList']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/LinkButton']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/states/DiscussionListState']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Badge']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/EventPost']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/helpers/username']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/helpers/highlight']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/UserPage']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/helpers/listItems']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/Component']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/SettingsPage']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Switch']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/DiscussionListItem']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/DiscussionHero']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/utils/DiscussionControls']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Modal']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/DiscussionPage']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/utils/Stream']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/states/SearchState']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/Search']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/helpers/avatar']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/utils/extractText']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Tooltip']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/utils/UserControls']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/DiscussionComposer']\"","webpack://@fof/byobu/external \"flarum.core.compat['common/components/Dropdown']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/DiscussionList']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/LogInModal']\"","webpack://@fof/byobu/external \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@fof/byobu/./src/forum/events/RecipientLeft.js","webpack://@fof/byobu/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@fof/byobu/./src/forum/pages/labels/RecipientLabel.tsx","webpack://@fof/byobu/./src/forum/pages/labels/recipientsLabels.tsx","webpack://@fof/byobu/./src/forum/events/RecipientsModified.js","webpack://@fof/byobu/./src/forum/extend/SettingsPage.js","webpack://@fof/byobu/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@fof/byobu/./src/forum/search/sources/UserSearchSource.js","webpack://@fof/byobu/./src/forum/search/sources/GroupSearchSource.js","webpack://@fof/byobu/./src/forum/search/RecipientSearch.js","webpack://@fof/byobu/./src/forum/modals/AddRecipientModal.js","webpack://@fof/byobu/./src/forum/extend/Discussion.js","webpack://@fof/byobu/./src/forum/pages/discussions/PrivateDiscussionComposer.js","webpack://@fof/byobu/./src/forum/pages/labels/recipientCountLabel.js","webpack://@fof/byobu/./src/forum/extend/User.js","webpack://@fof/byobu/./src/forum/extend/index.js","webpack://@fof/byobu/./src/forum/states/PrivateDiscussionListState.js","webpack://@fof/byobu/./src/forum/pages/discussions/PrivateDiscussionList.js","webpack://@fof/byobu/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@fof/byobu/./src/forum/pages/PrivateComposing.js","webpack://@fof/byobu/./src/forum/pages/PrivateDiscussionsUserPage.js","webpack://@fof/byobu/./src/forum/pages/index.js","webpack://@fof/byobu/./src/forum/pages/routes.js","webpack://@fof/byobu/./src/forum/pages/PrivateDiscussionsPage.js","webpack://@fof/byobu/./src/forum/notifications/PrivateDiscussionNotification.js","webpack://@fof/byobu/./src/forum/notifications/PrivateDiscussionReplyNotification.js","webpack://@fof/byobu/./src/forum/notifications/PrivateDiscussionUserLeftNotification.js","webpack://@fof/byobu/./src/forum/notifications/PrivateDiscussionAddedNotification.js","webpack://@fof/byobu/./src/forum/notifications/index.js","webpack://@fof/byobu/./src/forum/modals/index.js","webpack://@fof/byobu/./src/forum/pages/discussions/index.js","webpack://@fof/byobu/./src/forum/index.js","webpack://@fof/byobu/./src/forum/events/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","flarum","core","compat","RecipientLeft","initAttrs","attrs","icon","app","forum","data","attributes","descriptionKey","EventPost","_objectWithoutPropertiesLoose","source","excluded","target","sourceKeys","keys","length","indexOf","RecipientLabel","view","vnode","label","this","recipient","link","newAttrs","style","className","classList","User","href","route","user","username","id","session","Group","class","namePlural","translator","trans","Component","recipientsLabel","recipients","otherAttrs","map","index","type","RecipientsModified","diff","diff1","diff2","store","filter","item","getById","content","post","usersAdded","usersRemoved","groupsAdded","groupsRemoved","added","concat","removed","oldRecipients","newRecipients","localeBase","descriptionData","extend","SettingsPage","items","add","Switch","component","state","blocksPd","onchange","blocksPdLoading","save","then","redraw","loading","privacyToggle","_extends","assign","arguments","apply","UserSearchSource","query","cache","byobuResults","children","highlight","text","data-index","avatar","undefined","find","q","page","limit","pushResults","results","payload","result","push","GroupSearchSource","search","toLowerCase","all","group","substr","groupName","RecipientSearch","inputUuid","oninit","Math","random","toString","substring","oncreate","$search","$","on","e","addRecipient","focus","parentNode","clearTimeout","typingTimer","doSearch","setTimeout","getValue","setValue","sources","sourceItems","toArray","role","aria-live","selected","data-container","onclick","removeRecipient","for","open","focused","active","loadingSources","dom","placeholder","extractText","oninput","onfocus","hasFocus","onblur","in","LoadingIndicator","size","ItemList","discussion","attribute","canEditUserRecipients","canEditGroupRecipients","values","split","findRecipient","clear","preventDefault","remove","Search","AddRecipientModal","Stream","assignInitialRecipients","selectedRecipients","merge","recipientSearch","SearchState","isDismissible","recipientUsers","recipientGroups","title","helpText","Button","hide","select","metaKey","ctrlKey","submit","onsubmit","forEach","relationships","current","DiscussionPage","stream","update","modal","close","composer","show","Modal","Discussion","Model","hasMany","oldRecipientUsers","oldRecipientGroups","canEditRecipients","isPrivateDiscussion","badges","Badge","DiscussionListItem","DiscussionHero","DiscussionListState","params","include","DiscussionControls","history","back","long","PrivateDiscussionComposer","_isByobuComposer","titlePlaceholder","submitLabel","fields","param","addDefaultRecipients","users","groups","tags","chooseRecipients","headerItems","count","recipientCountLabel","getBy","createRecord","discussionList","refresh","set","loaded","DiscussionComposer","cannotBeDirectMessaged","unreadPrivateMessagesCount","UserControls","Promise","resolve","load","message","UserPage","LinkButton","sharedMessageHistory","PrivateDiscussionListState","PrivateDiscussionList","DiscussionList","_defineProperties","props","descriptor","configurable","writable","PrivateComposing","Constructor","protoProps","staticProps","action","reject","LogInModal","itemClassName","disabled","canStartDiscussion","PrivateDiscussionsUserPage","changeSort","list","sort","handleChangeSort","loadUser","listItems","actionItems","viewItems","composing","sortMap","sortOptions","Dropdown","buttonClassName","routes","byobuUserPrivate","path","byobuPrivate","IndexPage","setTitle","compose","replace","PrivateDiscussionsPage","PrivateDiscussionNotification","notification","subject","fromUser","Notification","PrivateDiscussionReplyNotification","postNumber","PrivateDiscussionUserLeftNotification","PrivateDiscussionAddedNotification","grid","NotificationGrid","modals","discussions","initializers","postComponents","recipientsModified","recipientLeft","events","pages","notificationComponents","byobuPrivateDiscussionCreated","byobuPrivateDiscussionReplied","PrivateDiscussionRepliedNotification","byobuRecipientRemoved","byobuPrivateDiscussionAdded","notifications"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/models/User'];","module.exports = flarum.core.compat['common/utils/ItemList'];","module.exports = flarum.core.compat['forum/app'];","module.exports = flarum.core.compat['common/Model'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/models/Discussion'];","module.exports = flarum.core.compat['common/models/Group'];","module.exports = flarum.core.compat['forum/components/Notification'];","module.exports = flarum.core.compat['common/utils/classList'];","module.exports = flarum.core.compat['common/components/LinkButton'];","module.exports = flarum.core.compat['forum/states/DiscussionListState'];","module.exports = flarum.core.compat['forum/components/IndexPage'];","module.exports = flarum.core.compat['common/components/Badge'];","module.exports = flarum.core.compat['forum/components/EventPost'];","module.exports = flarum.core.compat['common/helpers/username'];","module.exports = flarum.core.compat['common/helpers/highlight'];","module.exports = flarum.core.compat['forum/components/UserPage'];","module.exports = flarum.core.compat['common/helpers/listItems'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['forum/components/SettingsPage'];","module.exports = flarum.core.compat['common/components/Switch'];","module.exports = flarum.core.compat['forum/components/DiscussionListItem'];","module.exports = flarum.core.compat['forum/components/DiscussionHero'];","module.exports = flarum.core.compat['forum/utils/DiscussionControls'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['forum/components/DiscussionPage'];","module.exports = flarum.core.compat['common/utils/Stream'];","module.exports = flarum.core.compat['forum/states/SearchState'];","module.exports = flarum.core.compat['forum/components/Search'];","module.exports = flarum.core.compat['common/helpers/avatar'];","module.exports = flarum.core.compat['common/utils/extractText'];","module.exports = flarum.core.compat['common/components/LoadingIndicator'];","module.exports = flarum.core.compat['common/components/Tooltip'];","module.exports = flarum.core.compat['forum/utils/UserControls'];","module.exports = flarum.core.compat['forum/components/DiscussionComposer'];","module.exports = flarum.core.compat['common/components/Dropdown'];","module.exports = flarum.core.compat['forum/components/DiscussionList'];","module.exports = flarum.core.compat['forum/components/LogInModal'];","module.exports = flarum.core.compat['forum/components/NotificationGrid'];","import EventPost from 'flarum/forum/components/EventPost';\n\nexport default class RecipientLeft extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n }\n\n icon() {\n return app.forum.data.attributes['byobu.icon-postAction'];\n }\n\n descriptionKey() {\n return 'fof-byobu.forum.post.recipients_modified.removed_self';\n }\n}\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import type * as Mithril from 'mithril';\nimport username from 'flarum/common/helpers/username';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport app from 'flarum/forum/app';\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\n\nexport interface IRecipientLabelAttrs extends ComponentAttrs, Mithril.Attributes {\n recipient: User | Group;\n link: string;\n}\n\nexport default class RecipientLabel extends Component {\n view(vnode: Mithril.Vnode) {\n const { recipient, link, ...newAttrs } = this.attrs;\n\n newAttrs.style = newAttrs.style || {};\n newAttrs.className = classList('RecipientLabel', newAttrs?.className);\n\n if (link && recipient instanceof User) {\n newAttrs.href = app.route.user(recipient);\n }\n\n let label: string;\n\n if (recipient instanceof User) {\n label = username(recipient);\n\n if (!newAttrs.href && recipient.id() !== app?.session?.user?.id()) {\n newAttrs.href = app.route.user(recipient);\n }\n } else if (recipient instanceof Group) {\n return {recipient.namePlural()};\n } else {\n newAttrs.className += ' none';\n label = app.translator.trans('core.lib.username.deleted_text');\n }\n\n return {label};\n }\n}\n","import Group from 'flarum/common/models/Group';\nimport User from 'flarum/common/models/User';\nimport classList from 'flarum/common/utils/classList';\nimport RecipientLabel from './RecipientLabel';\n\nexport default function recipientsLabel(recipients?: (User | Group)[], attrs: Record = {}): JSX.Element {\n const { link, className, ...otherAttrs } = attrs;\n\n otherAttrs.className = classList('RecipientsLabel', className);\n\n return (\n \n {recipients?.map((recipient, index) => {\n const type = recipient instanceof User ? 'u' : 'g';\n\n return ;\n })}\n {!recipients && }\n \n );\n}\n","import EventPost from 'flarum/forum/components/EventPost';\nimport recipientsLabel from '../pages/labels/recipientsLabels';\n\nexport default class RecipientsModified extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n function diff(diff1, diff2, store) {\n return diff1.filter((item) => diff2.indexOf(item) === -1).map((id) => app.store.getById(store, id));\n }\n\n const content = attrs.post.content();\n\n // For event posts existing before groups functionality.\n if (!content['new'] && content.length == 2) {\n const oldRecipients = attrs.post.content()[0];\n const newRecipients = attrs.post.content()[1];\n attrs.added = diff(newRecipients, oldRecipients, 'users');\n attrs.removed = diff(oldRecipients, newRecipients, 'users');\n } else {\n let usersAdded = diff(content['new']['users'], content['old']['users'], 'users');\n let usersRemoved = diff(content['old']['users'], content['new']['users'], 'users');\n let groupsAdded = diff(content['new']['groups'], content['old']['groups'], 'groups');\n let groupsRemoved = diff(content['old']['groups'], content['new']['groups'], 'groups');\n\n attrs.added = usersAdded.concat(groupsAdded);\n attrs.removed = usersRemoved.concat(groupsRemoved);\n }\n }\n\n icon() {\n return app.forum.data.attributes['byobu.icon-postAction'];\n }\n\n descriptionKey() {\n var localeBase = 'fof-byobu.forum.post.recipients_modified.';\n\n if (this.attrs.added.length) {\n if (this.attrs.removed.length) {\n return localeBase + 'added_and_removed';\n }\n\n return localeBase + 'added';\n }\n\n return localeBase + 'removed';\n }\n\n descriptionData() {\n const data = {};\n\n if (this.attrs.added.length) {\n data.added = recipientsLabel(this.attrs.added, { link: true });\n }\n\n if (this.attrs.removed.length) {\n data.removed = recipientsLabel(this.attrs.removed, { link: true });\n }\n\n return data;\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport SettingsPage from 'flarum/forum/components/SettingsPage';\nimport Switch from 'flarum/common/components/Switch';\n\nexport default (app) => {\n privacyToggle(app);\n};\n\nfunction privacyToggle(app) {\n extend(SettingsPage.prototype, 'privacyItems', function (items) {\n items.add(\n 'byobu-block-dm',\n Switch.component(\n {\n state: this.user.blocksPd(),\n onchange: (value) => {\n this.blocksPdLoading = true;\n\n this.user.save({ blocksPd: value }).then(() => {\n this.blocksPdLoading = false;\n m.redraw();\n });\n },\n loading: this.blocksPdLoading,\n },\n app.translator.trans('fof-byobu.forum.user.settings.block_pd')\n )\n );\n });\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","import highlight from 'flarum/common/helpers/highlight';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\n\nexport default class UserSearchSource {\n view(query) {\n if (query.length < 3 || this.loading) return;\n\n if (!app.cache.byobuResults) {\n app.cache.byobuResults = [];\n }\n\n this.query = query;\n\n if (!app.cache.byobuResults[this.query]) {\n this.loading = true;\n\n app.cache.byobuResults[this.query] = [];\n app.store\n .find('users', {\n filter: { q: this.query + ' allows-pd' },\n page: { limit: 5 },\n })\n .then(this.pushResults.bind(this));\n } else\n return [\n
  • {app.translator.trans('core.forum.search.users_heading')}
  • ,\n app.cache.byobuResults[this.query].map((user) => {\n const name = username(user);\n const children = [highlight(name.text, this.query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n ];\n }\n\n pushResults(results) {\n results.payload.data.map((result) => {\n var user = app.store.getById('users', result.id);\n app.cache.byobuResults[this.query].push(user);\n });\n this.loading = false;\n m.redraw();\n }\n}\n","import highlight from 'flarum/common/helpers/highlight';\n\nexport default class GroupSearchSource {\n search(query) {\n return app.store.find('groups', {\n filter: { q: query },\n page: { limit: 5 },\n });\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const results = app.store.all('groups').filter((group) => group.namePlural().toLowerCase().substr(0, query.length) === query);\n\n if (!results.length) return '';\n\n return [\n
  • {app.translator.trans('fof-byobu.forum.search.headings.groups')}
  • ,\n results.map((group) => {\n const groupName = group.namePlural();\n var name = highlight(groupName, query);\n\n return (\n
  • \n \n {name}\n \n
  • \n );\n }),\n ];\n }\n}\n","import app from 'flarum/forum/app';\nimport Search from 'flarum/forum/components/Search';\nimport UserSearchSource from './sources/UserSearchSource';\nimport GroupSearchSource from './sources/GroupSearchSource';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport RecipientLabel from '../pages/labels/RecipientLabel';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport Tooltip from 'flarum/common/components/Tooltip';\n\nexport default class RecipientSearch extends Search {\n /**\n * Used to prevent duplicate IDs. Doesn't remove the possibility, but is extremely low.\n */\n inputUuid;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.inputUuid = Math.random().toString(36).substring(2);\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const $search = this;\n\n this.$('.Search-results').on('click', (e) => {\n const target = this.$('.SearchResult.active');\n\n $search.addRecipient(target.data('index'));\n $search.$('.RecipientsInput').focus();\n });\n\n this.$('.Search-results').on('touchstart', (e) => {\n const target = this.$(e.target.parentNode);\n\n $search.addRecipient(target.data('index'));\n $search.$('.RecipientsInput').focus();\n });\n\n $('.RecipientsInput')\n .on('input', () => {\n clearTimeout(this.typingTimer);\n this.doSearch = false;\n this.typingTimer = setTimeout(() => {\n this.doSearch = true;\n m.redraw();\n }, 900);\n })\n .on('keydown', () => {\n clearTimeout(this.typingTimer);\n });\n\n super.oncreate(vnode);\n }\n\n view() {\n if (typeof this.state.getValue() === 'undefined') {\n this.state.setValue('');\n }\n\n const loading = this.state.getValue() && this.state.getValue().length >= 3;\n\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n return (\n
    \n
    \n

    {app.translator.trans('fof-byobu.forum.modal.labels.selected_users')}

    \n

    {app.translator.trans('fof-byobu.forum.modal.help.selected_users')}

    \n\n {this.attrs\n .selected()\n .toArray()\n .map((recipient) => {\n return (\n \n this.removeRecipient(recipient, e)} />\n \n );\n })}\n
    \n\n
    \n \n\n
    \n vnode.dom.focus()}\n type=\"search\"\n placeholder={extractText(app.translator.trans('fof-byobu.forum.input.search_recipients'))}\n value={this.state.getValue()}\n oninput={(e) => this.state.setValue(e.target.value)}\n onfocus={() => (this.hasFocus = true)}\n onblur={() => (this.hasFocus = false)}\n />\n \n {!this.doSearch\n ? LoadingIndicator.component({ size: 'tiny', className: 'Button Button--icon Button--link' })\n : this.sources.map((source) => source.view(this.state.getValue()))}\n \n
    \n
    \n
    \n );\n }\n\n /**\n * Build an item list of SearchSources.\n *\n * @return {ItemList}\n */\n sourceItems() {\n const items = new ItemList();\n\n // Add user source based on permissions.\n if (\n (!this.attrs.discussion && app.forum.attribute('canStartPrivateDiscussionWithUsers')) ||\n (this.attrs.discussion && this.attrs.discussion.canEditUserRecipients())\n ) {\n items.add('users', new UserSearchSource());\n }\n\n // Add group source based on permissions.\n if (\n (!this.attrs.discussion && app.forum.attribute('canStartPrivateDiscussionWithGroups')) ||\n (this.attrs.discussion && this.attrs.discussion.canEditGroupRecipients())\n ) {\n items.add('groups', new GroupSearchSource());\n }\n\n return items;\n }\n\n /**\n * Adds a recipient.\n *\n * @param value\n */\n addRecipient(value) {\n let values = value.split(':'),\n type = values[0],\n id = values[1];\n\n let recipient = this.findRecipient(type, id);\n\n this.attrs.selected().add(value, recipient);\n\n this.state.clear();\n }\n\n /**\n * Removes a recipient.\n *\n * @param recipient\n */\n removeRecipient(recipient, e) {\n e.preventDefault();\n\n let type;\n\n if (recipient instanceof User) {\n type = 'users';\n }\n if (recipient instanceof Group) {\n type = 'groups';\n }\n\n this.attrs.selected().remove(type + ':' + recipient.id());\n }\n\n /**\n * Loads a recipient from the global store.\n *\n * @param store\n * @param id\n * @returns {Model}\n */\n findRecipient(store, id) {\n return app.store.getById(store, id);\n }\n}\n","import Modal from 'flarum/common/components/Modal';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Stream from 'flarum/common/utils/Stream';\nimport SearchState from 'flarum/forum/states/SearchState';\nimport RecipientSearch from '../search/RecipientSearch';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\n\nexport default class AddRecipientModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.selected = Stream(new ItemList());\n\n if (this.attrs.discussion) {\n // Adds recipients of the currently viewed discussion.\n this.assignInitialRecipients(this.attrs.discussion);\n } else if (this.attrs.selectedRecipients && this.attrs.selectedRecipients.toArray().length > 0) {\n // Adds previously selected recipients.\n this.selected().merge(this.attrs.selectedRecipients);\n } else {\n // Adds the current user in case there are no selected recipients yet and this is a new discussion.\n this.selected().add('users:' + app.session.user.id(), app.session.user);\n }\n\n this.recipientSearch = new SearchState();\n }\n\n isDismissible() {\n return false;\n }\n\n assignInitialRecipients(discussion) {\n discussion.recipientUsers().map((user) => {\n this.selected().add('users:' + user.id(), user);\n });\n discussion.recipientGroups().map((group) => {\n this.selected().add('groups:' + group.id(), group);\n });\n }\n\n className() {\n return 'AddRecipientModal';\n }\n\n title() {\n return this.attrs.discussion\n ? app.translator.trans('fof-byobu.forum.modal.titles.update_recipients', { title: {this.attrs.discussion.title()} })\n : app.translator.trans('fof-byobu.forum.modal.titles.add_recipients');\n }\n\n helpText() {\n return this.attrs.discussion\n ? app.translator.trans('fof-byobu.forum.modal.help.update_recipients')\n : app.translator.trans('fof-byobu.forum.modal.help.add_recipients');\n }\n\n content() {\n return [\n
    \n
    {this.helpText()}
    \n
    \n {RecipientSearch.component({\n state: this.recipientSearch,\n selected: this.selected,\n discussion: this.attrs.discussion,\n })}\n
    \n {Button.component(\n {\n type: 'submit',\n className: 'Button Button--primary',\n icon: 'fas fa-check',\n },\n app.translator.trans('fof-byobu.forum.buttons.submit')\n )}\n {Button.component(\n {\n onclick: this.hide.bind(this),\n className: 'Button Button--cancel',\n },\n app.translator.trans('fof-byobu.forum.buttons.cancel')\n )}\n
    \n
    \n
    ,\n ];\n }\n\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.selected.indexOf(this.index) !== -1) {\n if (this.selected().length) {\n this.$('form').submit();\n }\n }\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n const discussion = this.attrs.discussion;\n const recipients = this.selected();\n\n let recipientGroups = [];\n let recipientUsers = [];\n\n recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n recipientUsers.push(recipient);\n }\n if (recipient instanceof Group) {\n recipientGroups.push(recipient);\n }\n });\n\n // Recipients are updated here for existing discussions here.\n if (discussion) {\n discussion.save({ relationships: { recipientUsers, recipientGroups } }).then(() => {\n if (app.current instanceof DiscussionPage) {\n app.current.stream.update();\n }\n m.redraw();\n });\n }\n\n // Use the onsubmit callback to trigger an update in the DiscussionComposer\n if (this.attrs.onsubmit) this.attrs.onsubmit(recipients);\n\n app.modal.close();\n\n if (!this.attrs.discussion) {\n app.composer.show();\n }\n\n e.redraw = false;\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport Model from 'flarum/common/Model';\nimport Badge from 'flarum/common/components/Badge';\nimport Discussion from 'flarum/common/models/Discussion';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\nimport Button from 'flarum/common/components/Button';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport recipientsLabel from '../pages/labels/recipientsLabels';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport AddRecipientModal from './../modals/AddRecipientModal';\n\nexport default () => {\n attributes();\n badges();\n index();\n hero();\n apiInclude();\n controls();\n};\n\nconst add = function (discussion, items, long) {\n let recipients = [];\n\n if (discussion.recipientUsers().length) {\n recipients = recipients.concat(discussion.recipientUsers());\n }\n\n if (discussion.recipientGroups().length) {\n recipients = recipients.concat(discussion.recipientGroups());\n }\n\n if (recipients && recipients.length) {\n if (long) {\n items.add('recipients', recipientsLabel(recipients), 10);\n } else {\n items.add('recipients', recipientsLabel(recipients, { link: true }), 4);\n }\n }\n};\n\nfunction badges() {\n extend(Discussion.prototype, 'badges', function (badges) {\n if (this.recipientUsers().length || this.recipientGroups().length) {\n badges.add(\n 'private',\n Badge.component({\n type: 'private',\n label: app.translator.trans('fof-byobu.forum.badges.is_private.tooltip'),\n icon: app.forum.data.attributes['byobu.icon-badge'],\n }),\n 10\n );\n }\n });\n}\n\nfunction index() {\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const discussion = this.attrs.discussion;\n\n add(discussion, items, true);\n });\n}\n\nfunction hero() {\n extend(DiscussionHero.prototype, 'items', function (items) {\n const discussion = this.attrs.discussion;\n\n add(discussion, items, false);\n });\n}\n\nfunction apiInclude() {\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n params.include.push('recipientUsers');\n params.include.push('recipientGroups');\n });\n}\n\nfunction controls() {\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canEditRecipients()) {\n items.add(\n 'recipients',\n Button.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n onclick: () => app.modal.show(AddRecipientModal, { discussion }),\n },\n app.translator.trans('fof-byobu.forum.buttons.edit_recipients')\n )\n );\n }\n if (discussion && discussion.recipientUsers().find((user) => user.id() === app.session.user.id())) {\n items.add(\n 'remove',\n Button.component(\n {\n icon: 'fas fa-user-slash',\n onclick: () => {\n if (discussion) {\n let recipients = new ItemList();\n discussion.recipientUsers().map((user) => {\n if (app.session.user.id() !== user.id()) {\n recipients.add('users:' + user.id(), user);\n }\n });\n\n let recipientGroups = [];\n let recipientUsers = [];\n\n recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n recipientUsers.push(recipient);\n }\n if (recipient instanceof Group) {\n recipientGroups.push(recipient);\n }\n });\n\n discussion\n .save({\n relationships: {\n recipientUsers,\n recipientGroups,\n },\n })\n .then(() => app.history.back());\n }\n },\n },\n app.translator.trans('fof-byobu.forum.buttons.remove_from_discussion')\n )\n );\n }\n });\n}\n\nfunction attributes() {\n Discussion.prototype.recipientUsers = Model.hasMany('recipientUsers');\n Discussion.prototype.oldRecipientUsers = Model.hasMany('oldRecipientUsers');\n Discussion.prototype.recipientGroups = Model.hasMany('recipientGroups');\n Discussion.prototype.oldRecipientGroups = Model.hasMany('oldRecipientGroups');\n\n Discussion.prototype.canEditRecipients = Model.attribute('canEditRecipients');\n Discussion.prototype.canEditUserRecipients = Model.attribute('canEditUserRecipients');\n Discussion.prototype.canEditGroupRecipients = Model.attribute('canEditGroupRecipients');\n Discussion.prototype.canEditGroupRecipients = Model.attribute('canEditGroupRecipients');\n\n Discussion.prototype.isPrivateDiscussion = Model.attribute('isPrivateDiscussion');\n}\n","import DiscussionComposer from 'flarum/forum/components/DiscussionComposer';\nimport AddRecipientModal from '../../modals/AddRecipientModal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport recipientCountLabel from '../labels/recipientCountLabel';\nimport User from 'flarum/common/models/User';\nimport Group from 'flarum/common/models/Group';\n\nexport default class PrivateDiscussionComposer extends DiscussionComposer {\n /**\n * Tells other extensions that this composer is a Byobu composer.\n */\n _isByobuComposer = true;\n\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n attrs.titlePlaceholder = app.translator.trans('fof-byobu.forum.composer_private_discussion.title_placeholder');\n attrs.submitLabel = app.translator.trans('fof-byobu.forum.composer_private_discussion.submit_button');\n }\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.composer.fields.recipients = this.attrs.recipients || new ItemList();\n\n this.composer.fields.recipientUsers = this.attrs.recipientUsers || [];\n this.composer.fields.recipientGroups = this.attrs.recipientGroups || [];\n\n const username = m.route.param('username');\n\n if (typeof username !== 'undefined') {\n this.addDefaultRecipients(username);\n }\n }\n\n data() {\n let data = super.data();\n\n const users = [];\n const groups = [];\n\n if (this.composer.fields.recipients !== undefined) {\n this.composer.fields.recipients.toArray().forEach((recipient) => {\n if (recipient instanceof User) {\n users.push(recipient);\n }\n\n if (recipient instanceof Group) {\n groups.push(recipient);\n }\n });\n }\n\n data.relationships = data.relationships || {};\n\n if (users.length) {\n data.relationships.recipientUsers = users;\n }\n\n if (groups.length) {\n data.relationships.recipientGroups = groups;\n }\n\n delete data.relationships.tags;\n\n return data;\n }\n\n chooseRecipients() {\n app.modal.show(AddRecipientModal, {\n selectedRecipients: this.composer.fields.recipients,\n onsubmit: (recipients) => {\n this.composer.fields.recipients = recipients;\n\n // Focus on recipient autocomplete field.\n this.$('.RecipientsInput').focus();\n },\n });\n }\n\n headerItems() {\n let items = super.headerItems();\n\n items.remove('tags');\n\n if (app.session.user && app.forum.attribute('canStartPrivateDiscussion')) {\n const recipients = this.composer.fields.recipients.toArray();\n\n items.add(\n 'recipients',\n \n {recipients.length ? (\n recipientCountLabel(recipients.length)\n ) : (\n {app.translator.trans('fof-byobu.forum.buttons.add_recipients')}\n )}\n ,\n 5\n );\n }\n\n return items;\n }\n\n addDefaultRecipients(username) {\n const user = app.store.getBy('users', 'username', username);\n\n this.composer.fields.recipients.add('users:' + app.session.user.id(), app.session.user);\n\n if (user.id() !== app.session.user.id()) {\n this.composer.fields.recipients.add('users:' + user.id(), user);\n }\n }\n\n onsubmit() {\n this.loading = true;\n\n const recipients = this.composer.fields.recipients.toArray();\n\n if (recipients.length < 2) {\n this.chooseRecipients();\n\n this.loading = false;\n } else {\n const data = this.data();\n\n app.store\n .createRecord('discussions')\n .save(data)\n .then((discussion) => {\n if (app.cache.discussionList) {\n app.cache.discussionList.refresh();\n }\n m.route.set(app.route.discussion(discussion));\n\n app.composer.hide();\n }, this.loaded.bind(this));\n }\n }\n}\n","export default function recipientCountLabel(count, attrs = {}) {\n attrs.style = attrs.style || {};\n attrs.className = 'RecipientLabel ' + (attrs.className || '');\n\n var label = app.translator.trans('fof-byobu.forum.labels.recipients', { count });\n\n return m('span', attrs, {label});\n}\n","import { extend } from 'flarum/common/extend';\nimport Model from 'flarum/common/Model';\nimport User from 'flarum/common/models/User';\nimport UserControls from 'flarum/forum/utils/UserControls';\nimport PrivateDiscussionComposer from './../pages/discussions/PrivateDiscussionComposer';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\n\nexport default (app) => {\n attributes();\n message(app);\n sharedMessageHistory(app);\n};\n\nfunction message(app) {\n extend(UserControls, 'userControls', function (items, user) {\n if (\n app.session.user &&\n app.session.user.id() !== user.id() &&\n app.forum.attribute('canStartPrivateDiscussion') &&\n (user.blocksPd() === false || (app.forum.attribute('canStartPrivateDiscussionWithBlockers') && user.cannotBeDirectMessaged()))\n ) {\n items.add(\n 'private-discussion',\n Button.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n onclick: (e) => {\n e.preventDefault();\n\n return new Promise((resolve) => {\n let recipients = new ItemList();\n recipients.add('users:' + app.session.user.id(), app.session.user);\n recipients.add('users:' + user.id(), user);\n\n PrivateDiscussionComposer.prototype.recipients = recipients;\n\n app.composer.load(PrivateDiscussionComposer, {\n user: app.session.user,\n recipients: recipients,\n recipientUsers: recipients,\n titlePlaceholder: app.translator.trans('fof-byobu.forum.composer_private_discussion.title_placeholder'),\n submitLabel: app.translator.trans('fof-byobu.forum.composer_private_discussion.submit_button'),\n });\n app.composer.show();\n\n return resolve(app.composer);\n });\n },\n },\n app.translator.trans('fof-byobu.forum.buttons.send_pd', { username: user.username() })\n )\n );\n }\n\n return items;\n });\n}\n\nfunction sharedMessageHistory(app) {\n extend(UserPage.prototype, 'navItems', function (items) {\n const href = app.route('byobuUserPrivate', { username: this.user.username() });\n\n // Hide links from guests if they are not already on the page\n if (!app.session.user && m.route.get() !== href) return;\n // Hide link for your own page.\n if (app.session.user && app.session.user.username() === this.user.username()) return;\n\n items.add(\n 'byobu',\n LinkButton.component(\n {\n href,\n icon: app.forum.data.attributes['byobu.icon-badge'],\n },\n app.translator.trans('fof-byobu.forum.user.byobu_link')\n ),\n 85\n );\n });\n}\n\nfunction attributes() {\n User.prototype.blocksPd = Model.attribute('blocksPd');\n User.prototype.cannotBeDirectMessaged = Model.attribute('cannotBeDirectMessaged');\n User.prototype.unreadPrivateMessagesCount = Model.attribute('unreadPrivateMessagesCount');\n}\n","import SettingsPage from './SettingsPage';\nimport Discussion from './Discussion';\nimport User from './User';\n\nexport default (app) => {\n Discussion(app);\n SettingsPage(app);\n User(app);\n};\n","import DiscussionListState from 'flarum/forum/states/DiscussionListState';\n\nexport default class PrivateDiscussionListState extends DiscussionListState {}\n","import DiscussionList from 'flarum/forum/components/DiscussionList';\n\nexport default class PrivateDiscussionList extends DiscussionList {}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import Button from 'flarum/common/components/Button';\nimport LogInModal from 'flarum/forum/components/LogInModal';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PrivateDiscussionComposer from './discussions/PrivateDiscussionComposer';\n\nexport default class PrivateComposing {\n constructor(recipient) {\n this.recipient = recipient;\n }\n\n action(e) {\n e.preventDefault();\n\n return new Promise((resolve, reject) => {\n if (app.session.user) {\n let recipients = new ItemList();\n\n recipients.add('users:' + app.session.user.id(), app.session.user);\n\n if (this.recipient && app.session.user.id() !== this.recipient.id()) {\n recipients.add('users:' + this.recipient.id(), this.recipient);\n }\n\n app.composer.load(PrivateDiscussionComposer, {\n user: app.session.user,\n recipients: recipients,\n recipientUsers: recipients,\n });\n\n app.composer.show();\n\n return resolve();\n } else {\n app.modal.show(LogInModal);\n\n return reject();\n }\n });\n }\n\n component() {\n return Button.component(\n {\n icon: 'fas fa-pen',\n className: 'Button Button--primary IndexPage-newDiscussion',\n itemClassName: 'App-primaryControl fof-byobu_primaryControl',\n onclick: this.action.bind(this),\n disabled: !this.canStartDiscussion,\n },\n app.translator.trans(this.canStartDiscussion ? 'fof-byobu.forum.nav.start_button' : 'core.forum.index.cannot_start_discussion_button')\n );\n }\n\n get canStartDiscussion() {\n return app.session.user && app.forum.attribute('canStartPrivateDiscussion');\n }\n}\n","import UserPage from 'flarum/forum/components/UserPage';\nimport PrivateDiscussionListState from '../states/PrivateDiscussionListState';\nimport Button from 'flarum/common/components/Button';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport listItems from 'flarum/common/helpers/listItems';\nimport PrivateDiscussionList from './discussions/PrivateDiscussionList';\nimport PrivateComposing from './PrivateComposing';\n\nexport default class PrivateDiscussionsUserPage extends UserPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.changeSort('latest');\n }\n\n show(user) {\n // We can not create the list in init because the user will not be available if it has to be loaded asynchronously\n this.list = new PrivateDiscussionListState({\n q: `byobu:${user.username()} is:private`,\n sort: this.sort,\n });\n\n this.list.refresh();\n\n // We call the parent method after creating the list, this way the this.list property\n // is set before content() is called for the first time\n super.show(user);\n }\n\n handleChangeSort(sort, e) {\n e.preventDefault();\n\n this.changeSort(sort);\n }\n\n changeSort(sort) {\n this.sort = sort;\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return (\n
    \n
    \n
      {listItems(this.actionItems().toArray())}
    \n
      {listItems(this.viewItems().toArray())}
    \n
    \n \n
    \n );\n }\n\n actionItems() {\n let composing = new PrivateComposing(this.user);\n\n const items = new ItemList();\n\n if (app.session.user && app.forum.attribute('canStartPrivateDiscussion')) {\n items.add('start_private', composing.component());\n }\n\n return items;\n }\n\n viewItems() {\n const items = new ItemList();\n const sortMap = this.list.sortMap();\n\n const sortOptions = {};\n for (const i in sortMap) {\n sortOptions[i] = app.translator.trans('core.forum.index_sort.' + i + '_button');\n }\n\n items.add(\n 'sort',\n Dropdown.component(\n {\n buttonClassName: 'Button',\n label: sortOptions[this.sort] || Object.keys(sortMap).map((key) => sortOptions[key])[0],\n },\n Object.keys(sortOptions).map((value) => {\n const label = sortOptions[value];\n const active = (this.sort || Object.keys(sortMap)[0]) === value;\n\n return Button.component(\n {\n icon: active ? 'fas fa-check' : true,\n onclick: this.handleChangeSort.bind(this, value),\n active: active,\n },\n label\n );\n })\n )\n );\n\n return items;\n }\n}\n","import routes from './routes';\nimport PrivateDiscussionsPage from './PrivateDiscussionsPage';\n\nexport default (app) => {\n routes(app);\n PrivateDiscussionsPage(app);\n};\n","import IndexPage from 'flarum/forum/components/IndexPage';\nimport PrivateDiscussionsUserPage from './PrivateDiscussionsUserPage';\n\nexport default (app) => {\n app.routes.byobuUserPrivate = { path: '/u/:username/private', component: PrivateDiscussionsUserPage };\n app.routes.byobuPrivate = { path: '/private', component: IndexPage };\n};\n","import { extend } from 'flarum/common/extend';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport PrivateComposing from './PrivateComposing';\n\nexport default (app) => {\n extend(IndexPage.prototype, 'navItems', (items) => {\n const user = app.session.user;\n\n if (user) {\n items.add(\n 'privateDiscussions',\n LinkButton.component(\n {\n icon: app.forum.data.attributes['byobu.icon-badge'],\n href: app.route('byobuPrivate'),\n },\n app.translator.trans('fof-byobu.forum.nav.nav_item')\n ),\n 75\n );\n }\n });\n\n extend(IndexPage.prototype, 'setTitle', function () {\n if (app.current.get('routeName') === 'byobuPrivate') {\n app.setTitle(app.translator.trans('fof-byobu.forum.user.dropdown_label'));\n }\n });\n\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (app.current.get('routeName') === 'byobuPrivate') {\n params.filter.q = (params.filter.q || '') + ' is:private';\n\n params.include.push('recipientUsers');\n params.include.push('recipientGroups');\n }\n });\n\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\n if (app.current.get('routeName') === 'byobuPrivate') {\n let compose = new PrivateComposing();\n\n items.replace('newDiscussion', compose.component());\n }\n });\n};\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionReplyNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n const content = notification.content() || {};\n\n return app.route.discussion(discussion, content.postNumber);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_reply_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionUserLeftNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_user_left_text', {\n user: user,\n });\n }\n}\n","import Notification from 'flarum/forum/components/Notification';\n\nexport default class PrivateDiscussionAddedNotification extends Notification {\n icon() {\n return app.forum.data.attributes['byobu.icon-badge'];\n }\n\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n\n return app.route.discussion(discussion);\n }\n\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('fof-byobu.forum.notifications.pd_added_text', {\n user: user,\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\nimport PrivateDiscussionNotification from './PrivateDiscussionNotification';\nimport PrivateDiscussionRepliedNotification from './PrivateDiscussionReplyNotification';\nimport PrivateDiscussionUserLeftNotification from './PrivateDiscussionUserLeftNotification';\nimport PrivateDiscussionAddedNotification from './PrivateDiscussionAddedNotification';\n\nexport default function (app) {\n app.notificationComponents.byobuPrivateDiscussionCreated = PrivateDiscussionNotification;\n app.notificationComponents.byobuPrivateDiscussionReplied = PrivateDiscussionRepliedNotification;\n app.notificationComponents.byobuRecipientRemoved = PrivateDiscussionUserLeftNotification;\n app.notificationComponents.byobuPrivateDiscussionAdded = PrivateDiscussionAddedNotification;\n\n grid();\n}\n\nfunction grid() {\n // Add notification preferences.\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('byobuPrivateDiscussionCreated', {\n name: 'byobuPrivateDiscussionCreated',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_label'),\n });\n items.add('byobuPrivateDiscussionReplied', {\n name: 'byobuPrivateDiscussionReplied',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_reply_label'),\n });\n items.add('byobuPrivateDiscussionAdded', {\n name: 'byobuPrivateDiscussionAdded',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_added_label'),\n });\n items.add('byobuRecipientRemoved', {\n name: 'byobuRecipientRemoved',\n icon: app.forum.data.attributes['byobu.icon-badge'],\n label: app.translator.trans('fof-byobu.forum.notifications.pd_user_left_label'),\n });\n });\n}\n","import AddRecipientModal from './AddRecipientModal';\n\nexport const modals = {\n AddRecipientModal: AddRecipientModal,\n};\n","import PrivateDiscussionComposer from './PrivateDiscussionComposer';\nimport PrivateDiscussionList from './PrivateDiscussionList';\n\nexport const discussions = {\n PrivateDiscussionComposer: PrivateDiscussionComposer,\n PrivateDiscussionList: PrivateDiscussionList,\n};\n","import events from './events';\nimport extend from './extend';\nimport pages from './pages';\nimport notifications from './notifications';\n\nexport * from './modals';\nexport * from './pages/discussions';\n\napp.initializers.add('fof-byobu', function (app) {\n events(app);\n extend(app);\n\n pages(app);\n notifications(app);\n});\n","import RecipientLeft from './RecipientLeft';\nimport RecipientsModified from './RecipientsModified';\n\nexport default (app) => {\n app.postComponents.recipientsModified = RecipientsModified;\n app.postComponents.recipientLeft = RecipientLeft;\n};\n"],"sourceRoot":""} \ No newline at end of file