summaryrefslogtreecommitdiff
path: root/priv/static/packs/flavours/glitch/async
diff options
context:
space:
mode:
Diffstat (limited to 'priv/static/packs/flavours/glitch/async')
-rw-r--r--priv/static/packs/flavours/glitch/async/account_gallery.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/account_gallery.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/account_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/account_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/block_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/block_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/blocks.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/blocks.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/bookmarked_statuses.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/bookmarked_statuses.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/community_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/community_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/compose.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/compose.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/direct_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/direct_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/domain_blocks.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/domain_blocks.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/embed_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/embed_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/emoji_picker.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/favourited_statuses.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/favourited_statuses.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/favourites.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/favourites.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/follow_requests.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/follow_requests.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/followers.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/followers.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/following.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/following.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/generic_not_found.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/getting_started.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/getting_started.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/getting_started_misc.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/getting_started_misc.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/hashtag_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/hashtag_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/home_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/home_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/list_editor.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/list_editor.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/list_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/list_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/lists.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/lists.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/mute_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/mute_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/mutes.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/mutes.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/notifications.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/notifications.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/onboarding_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/onboarding_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/pinned_statuses.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/pinned_statuses.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/public_timeline.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/public_timeline.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/reblogs.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/reblogs.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/report_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/report_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/settings_modal.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/settings_modal.js.map2
-rw-r--r--priv/static/packs/flavours/glitch/async/status.js2
-rw-r--r--priv/static/packs/flavours/glitch/async/status.js.map2
70 files changed, 70 insertions, 70 deletions
diff --git a/priv/static/packs/flavours/glitch/async/account_gallery.js b/priv/static/packs/flavours/glitch/async/account_gallery.js
index 50c23a1cf..a282e6ebc 100644
--- a/priv/static/packs/flavours/glitch/async/account_gallery.js
+++ b/priv/static/packs/flavours/glitch/async/account_gallery.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{833:function(e,t,a){"use strict";a.r(t);var n=a(0),o=a(2),i=a(7),c=a(1),s=a(3),r=a.n(s),l=a(13),d=a(14),p=a.n(d),u=a(5),h=a.n(u),b=a(22),m=a(32),O=a(299),g=a(730),f=a(1052),j=a(18),v=a(103),y=a(211),_=a(12),I=a.n(_),M=a(23),L=a(16),w=a(149),C=function(e){function t(){for(var t,a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return t=e.call.apply(e,[this].concat(n))||this,Object(c.a)(Object(o.a)(t),"state",{visible:"hide_all"!==L.g&&!t.props.attachment.getIn(["status","sensitive"])||"show_all"===L.g,loaded:!1}),Object(c.a)(Object(o.a)(t),"setCanvasRef",(function(e){t.canvas=e})),Object(c.a)(Object(o.a)(t),"handleImageLoad",(function(){t.setState({loaded:!0})})),Object(c.a)(Object(o.a)(t),"handleMouseEnter",(function(e){t.hoverToPlay()&&e.target.play()})),Object(c.a)(Object(o.a)(t),"handleMouseLeave",(function(e){t.hoverToPlay()&&(e.target.pause(),e.target.currentTime=0)})),Object(c.a)(Object(o.a)(t),"handleClick",(function(e){0!==e.button||e.ctrlKey||e.metaKey||(e.preventDefault(),t.state.visible?t.props.onOpenMedia(t.props.attachment):t.setState({visible:!0}))})),t}Object(i.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){this.props.attachment.get("blurhash")&&this._decode()},a.componentDidUpdate=function(e){e.attachment.get("blurhash")!==this.props.attachment.get("blurhash")&&this.props.attachment.get("blurhash")&&this._decode()},a._decode=function(){var e=this.props.attachment.get("blurhash"),t=Object(y.decode)(e,32,32);if(t){var a=this.canvas.getContext("2d"),n=new ImageData(t,32,32);a.putImageData(n,0,0)}},a.hoverToPlay=function(){return!L.a&&-1!==["gifv","video"].indexOf(this.props.attachment.get("type"))},a.render=function(){var e=this.props,t=e.attachment,a=e.displayWidth,o=this.state,i=o.visible,c=o.loaded,s=Math.floor((a-4)/3)-4+"px",l=s,d=t.get("status"),p=d.get("spoiler_text")||t.get("description"),u="";if("unknown"===t.get("type"));else if("audio"===t.get("type"))u=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(M.a,{id:"music"}));else if("image"===t.get("type")){var h=100*((t.getIn(["meta","focus","x"])||0)/2+.5),b=100*((t.getIn(["meta","focus","y"])||0)/-2+.5);u=Object(n.a)("img",{src:t.get("preview_url"),alt:t.get("description"),title:t.get("description"),style:{objectPosition:h+"% "+b+"%"},onLoad:this.handleImageLoad})}else if(-1!==["gifv","video"].indexOf(t.get("type"))){var m=!Object(w.a)()&&L.a,O="video"===t.get("type")?Object(n.a)(M.a,{id:"play"}):"GIF";u=Object(n.a)("div",{className:I()("media-gallery__gifv",{autoplay:m})},void 0,Object(n.a)("video",{className:"media-gallery__item-gifv-thumbnail","aria-label":t.get("description"),title:t.get("description"),role:"application",src:t.get("url"),onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,autoPlay:m,loop:!0,muted:!0}),Object(n.a)("span",{className:"media-gallery__gifv__label"},void 0,O))}var g=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(M.a,{id:"eye-slash"}));return Object(n.a)("div",{className:"account-gallery__item",style:{width:s,height:l}},void 0,Object(n.a)("a",{className:"media-gallery__item-thumbnail",href:d.get("url"),onClick:this.handleClick,title:p,target:"_blank",rel:"noopener noreferrer"},void 0,r.a.createElement("canvas",{width:32,height:32,ref:this.setCanvasRef,className:I()("media-gallery__preview",{"media-gallery__preview--hidden":i&&c})}),i?u:g))},t}(j.a);Object(c.a)(C,"propTypes",{attachment:p.a.map.isRequired,displayWidth:h.a.number.isRequired,onOpenMedia:h.a.func.isRequired});var R,x,k,S=a(1056),T=a(467),N=a(1051),D=a(1029),A=a(42);a.d(t,"default",(function(){return q}));var E=function(e){function t(){for(var t,a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return t=e.call.apply(e,[this].concat(n))||this,Object(c.a)(Object(o.a)(t),"handleLoadMore",(function(){t.props.onLoadMore(t.props.maxId)})),t}return Object(i.a)(t,e),t.prototype.render=function(){return Object(n.a)(N.a,{disabled:this.props.disabled,onClick:this.handleLoadMore})},t}(j.a);Object(c.a)(E,"propTypes",{maxId:h.a.string,onLoadMore:h.a.func.isRequired});var q=Object(l.connect)((function(e,t){return{isAccount:!!e.getIn(["accounts",t.params.accountId]),attachments:Object(v.a)(e,t.params.accountId),isLoading:e.getIn(["timelines","account:"+t.params.accountId+":media","isLoading"]),hasMore:e.getIn(["timelines","account:"+t.params.accountId+":media","hasMore"])}}))((k=x=function(e){function t(){for(var t,a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return t=e.call.apply(e,[this].concat(n))||this,Object(c.a)(Object(o.a)(t),"state",{width:323}),Object(c.a)(Object(o.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(c.a)(Object(o.a)(t),"handleScrollToBottom",(function(){t.props.hasMore&&t.handleLoadMore(t.props.attachments.size>0?t.props.attachments.last().getIn(["status","id"]):void 0)})),Object(c.a)(Object(o.a)(t),"handleScroll",(function(e){var a=e.target,n=a.scrollTop;150>a.scrollHeight-n-a.clientHeight&&!t.props.isLoading&&t.handleScrollToBottom()})),Object(c.a)(Object(o.a)(t),"handleLoadMore",(function(e){t.props.dispatch(Object(m.p)(t.props.params.accountId,{maxId:e}))})),Object(c.a)(Object(o.a)(t),"handleLoadOlder",(function(e){e.preventDefault(),t.handleScrollToBottom()})),Object(c.a)(Object(o.a)(t),"shouldUpdateScroll",(function(e,t){var a=t.location;return!(((e||{}).location||{}).state||{}).mastodonModalOpen&&!(a.state&&a.state.mastodonModalOpen)})),Object(c.a)(Object(o.a)(t),"setColumnRef",(function(e){t.column=e})),Object(c.a)(Object(o.a)(t),"handleOpenMedia",(function(e){if("video"===e.get("type"))t.props.dispatch(Object(A.d)("VIDEO",{media:e,status:e.get("status")}));else if("audio"===e.get("type"))t.props.dispatch(Object(A.d)("AUDIO",{media:e,status:e.get("status")}));else{var a=e.getIn(["status","media_attachments"]),n=a.findIndex((function(t){return t.get("id")===e.get("id")}));t.props.dispatch(Object(A.d)("MEDIA",{media:a,index:n,status:e.get("status")}))}})),Object(c.a)(Object(o.a)(t),"handleRef",(function(e){e&&t.setState({width:e.offsetWidth})})),t}Object(i.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){this.props.dispatch(Object(b.F)(this.props.params.accountId)),this.props.dispatch(Object(m.p)(this.props.params.accountId))},a.componentWillReceiveProps=function(e){e.params.accountId!==this.props.params.accountId&&e.params.accountId&&(this.props.dispatch(Object(b.F)(e.params.accountId)),this.props.dispatch(Object(m.p)(this.props.params.accountId)))},a.render=function(){var e=this,t=this.props,a=t.attachments,o=t.isLoading,i=t.hasMore,c=t.isAccount,s=t.multiColumn,l=this.state.width;if(!c)return Object(n.a)(g.a,{},void 0,Object(n.a)(D.a,{}));if(!a&&o)return Object(n.a)(g.a,{},void 0,Object(n.a)(O.a,{}));var d=null;return!i||o&&0===a.size||(d=Object(n.a)(N.a,{visible:!o,onClick:this.handleLoadOlder})),r.a.createElement(g.a,{ref:this.setColumnRef},Object(n.a)(f.a,{onClick:this.handleHeaderClick,multiColumn:s}),Object(n.a)(T.a,{scrollKey:"account_gallery",shouldUpdateScroll:this.shouldUpdateScroll},void 0,Object(n.a)("div",{className:"scrollable scrollable--flex",onScroll:this.handleScroll},void 0,Object(n.a)(S.a,{accountId:this.props.params.accountId}),r.a.createElement("div",{role:"feed",className:"account-gallery__container",ref:this.handleRef},a.map((function(t,o){return null===t?Object(n.a)(E,{maxId:o>0?a.getIn(o-1,"id"):null,onLoadMore:e.handleLoadMore},"more:"+a.getIn(o+1,"id")):Object(n.a)(C,{attachment:t,displayWidth:l,onOpenMedia:e.handleOpenMedia},t.get("id"))})),d),o&&0===a.size&&Object(n.a)("div",{className:"scrollable__append"},void 0,Object(n.a)(O.a,{})))))},t}(j.a),Object(c.a)(x,"propTypes",{params:h.a.object.isRequired,dispatch:h.a.func.isRequired,attachments:p.a.list.isRequired,isLoading:h.a.bool,hasMore:h.a.bool,isAccount:h.a.bool,multiColumn:h.a.bool}),R=k))||R}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{859:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return H}));var n=a(0),o=a(2),c=a(9),i=a(6),s=a(8),r=a(1),l=a(3),d=a.n(l),p=a(15),u=a(16),h=a.n(u),b=a(5),m=a.n(b),f=a(24),O=a(34),g=a(305),j=a(756),v=a(1079),y=a(21),_=a(108),I=a(215),M=a(14),L=a.n(M),w=a(25),R=a(18),C=a(154);var x=function(t){Object(s.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,n=new Array(a),c=0;c<a;c++)n[c]=arguments[c];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(o.a)(e),"state",{visible:"hide_all"!==R.g&&!e.props.attachment.getIn(["status","sensitive"])||"show_all"===R.g,loaded:!1}),Object(r.a)(Object(o.a)(e),"setCanvasRef",(function(t){e.canvas=t})),Object(r.a)(Object(o.a)(e),"handleImageLoad",(function(){e.setState({loaded:!0})})),Object(r.a)(Object(o.a)(e),"handleMouseEnter",(function(t){e.hoverToPlay()&&t.target.play()})),Object(r.a)(Object(o.a)(e),"handleMouseLeave",(function(t){e.hoverToPlay()&&(t.target.pause(),t.target.currentTime=0)})),Object(r.a)(Object(o.a)(e),"handleClick",(function(t){0!==t.button||t.ctrlKey||t.metaKey||(t.preventDefault(),e.state.visible?e.props.onOpenMedia(e.props.attachment):e.setState({visible:!0}))})),e}var c=a.prototype;return c.componentDidMount=function(){this.props.attachment.get("blurhash")&&this._decode()},c.componentDidUpdate=function(t){t.attachment.get("blurhash")!==this.props.attachment.get("blurhash")&&this.props.attachment.get("blurhash")&&this._decode()},c._decode=function(){var t=this.props.attachment.get("blurhash"),e=Object(I.decode)(t,32,32);if(e){var a=this.canvas.getContext("2d"),n=new ImageData(e,32,32);a.putImageData(n,0,0)}},c.hoverToPlay=function(){return!R.a&&-1!==["gifv","video"].indexOf(this.props.attachment.get("type"))},c.render=function(){var t=this.props,e=t.attachment,a=t.displayWidth,o=this.state,c=o.visible,i=o.loaded,s=Math.floor((a-4)/3)-4+"px",r=s,l=e.get("status"),p=l.get("spoiler_text")||e.get("description"),u="";if("unknown"===e.get("type"));else if("audio"===e.get("type"))u=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(w.a,{id:"music"}));else if("image"===e.get("type")){var h=100*((e.getIn(["meta","focus","x"])||0)/2+.5),b=100*((e.getIn(["meta","focus","y"])||0)/-2+.5);u=Object(n.a)("img",{src:e.get("preview_url"),alt:e.get("description"),title:e.get("description"),style:{objectPosition:h+"% "+b+"%"},onLoad:this.handleImageLoad})}else if(-1!==["gifv","video"].indexOf(e.get("type"))){var m=!Object(C.a)()&&R.a,f="video"===e.get("type")?Object(n.a)(w.a,{id:"play"}):"GIF";u=Object(n.a)("div",{className:L()("media-gallery__gifv",{autoplay:m})},void 0,Object(n.a)("video",{className:"media-gallery__item-gifv-thumbnail","aria-label":e.get("description"),title:e.get("description"),role:"application",src:e.get("url"),onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,autoPlay:m,loop:!0,muted:!0}),Object(n.a)("span",{className:"media-gallery__gifv__label"},void 0,f))}var O=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(w.a,{id:"eye-slash"}));return(Object(n.a)("div",{className:"account-gallery__item",style:{width:s,height:r}},void 0,Object(n.a)("a",{className:"media-gallery__item-thumbnail",href:l.get("url"),onClick:this.handleClick,title:p,target:"_blank",rel:"noopener noreferrer"},void 0,d.a.createElement("canvas",{width:32,height:32,ref:this.setCanvasRef,className:L()("media-gallery__preview",{"media-gallery__preview--hidden":c&&i})}),c?u:O)))},a}(y.a);Object(r.a)(x,"propTypes",{attachment:h.a.map.isRequired,displayWidth:m.a.number.isRequired,onOpenMedia:m.a.func.isRequired});var S,k,D,T=a(1083),N=a(472),A=a(1078),E=a(1056),q=a(45);function P(t){return function(){var e,a=Object(i.a)(t);if(U()){var n=Object(i.a)(this).constructor;e=Reflect.construct(a,arguments,n)}else e=a.apply(this,arguments);return Object(c.a)(this,e)}}function U(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}var W=function(t){Object(s.a)(e,t);P(e);function e(){for(var e,a=arguments.length,n=new Array(a),c=0;c<a;c++)n[c]=arguments[c];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(o.a)(e),"handleLoadMore",(function(){e.props.onLoadMore(e.props.maxId)})),e}return e.prototype.render=function(){return Object(n.a)(A.a,{disabled:this.props.disabled,onClick:this.handleLoadMore})},e}(y.a);Object(r.a)(W,"propTypes",{maxId:m.a.string,onLoadMore:m.a.func.isRequired});var H=Object(p.connect)((function(t,e){return{isAccount:!!t.getIn(["accounts",e.params.accountId]),attachments:Object(_.a)(t,e.params.accountId),isLoading:t.getIn(["timelines","account:"+e.params.accountId+":media","isLoading"]),hasMore:t.getIn(["timelines","account:"+e.params.accountId+":media","hasMore"])}}))((D=k=function(t){Object(s.a)(e,t);P(e);function e(){for(var e,a=arguments.length,n=new Array(a),c=0;c<a;c++)n[c]=arguments[c];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(o.a)(e),"state",{width:323}),Object(r.a)(Object(o.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(o.a)(e),"handleScrollToBottom",(function(){e.props.hasMore&&e.handleLoadMore(e.props.attachments.size>0?e.props.attachments.last().getIn(["status","id"]):void 0)})),Object(r.a)(Object(o.a)(e),"handleScroll",(function(t){var a=t.target,n=a.scrollTop;150>a.scrollHeight-n-a.clientHeight&&!e.props.isLoading&&e.handleScrollToBottom()})),Object(r.a)(Object(o.a)(e),"handleLoadMore",(function(t){e.props.dispatch(Object(O.p)(e.props.params.accountId,{maxId:t}))})),Object(r.a)(Object(o.a)(e),"handleLoadOlder",(function(t){t.preventDefault(),e.handleScrollToBottom()})),Object(r.a)(Object(o.a)(e),"shouldUpdateScroll",(function(t,e){var a=e.location;return!(((t||{}).location||{}).state||{}).mastodonModalOpen&&!(a.state&&a.state.mastodonModalOpen)})),Object(r.a)(Object(o.a)(e),"setColumnRef",(function(t){e.column=t})),Object(r.a)(Object(o.a)(e),"handleOpenMedia",(function(t){if("video"===t.get("type"))e.props.dispatch(Object(q.d)("VIDEO",{media:t,status:t.get("status")}));else if("audio"===t.get("type"))e.props.dispatch(Object(q.d)("AUDIO",{media:t,status:t.get("status")}));else{var a=t.getIn(["status","media_attachments"]),n=a.findIndex((function(e){return e.get("id")===t.get("id")}));e.props.dispatch(Object(q.d)("MEDIA",{media:a,index:n,status:t.get("status")}))}})),Object(r.a)(Object(o.a)(e),"handleRef",(function(t){t&&e.setState({width:t.offsetWidth})})),e}var a=e.prototype;return a.componentDidMount=function(){this.props.dispatch(Object(f.F)(this.props.params.accountId)),this.props.dispatch(Object(O.p)(this.props.params.accountId))},a.componentWillReceiveProps=function(t){t.params.accountId!==this.props.params.accountId&&t.params.accountId&&(this.props.dispatch(Object(f.F)(t.params.accountId)),this.props.dispatch(Object(O.p)(this.props.params.accountId)))},a.render=function(){var t=this,e=this.props,a=e.attachments,o=e.isLoading,c=e.hasMore,i=e.isAccount,s=e.multiColumn,r=this.state.width;if(!i)return Object(n.a)(j.a,{},void 0,Object(n.a)(E.a,{}));if(!a&&o)return Object(n.a)(j.a,{},void 0,Object(n.a)(g.a,{}));var l=null;return!c||o&&0===a.size||(l=Object(n.a)(A.a,{visible:!o,onClick:this.handleLoadOlder})),d.a.createElement(j.a,{ref:this.setColumnRef},Object(n.a)(v.a,{onClick:this.handleHeaderClick,multiColumn:s}),Object(n.a)(N.a,{scrollKey:"account_gallery",shouldUpdateScroll:this.shouldUpdateScroll},void 0,Object(n.a)("div",{className:"scrollable scrollable--flex",onScroll:this.handleScroll},void 0,Object(n.a)(T.a,{accountId:this.props.params.accountId}),d.a.createElement("div",{role:"feed",className:"account-gallery__container",ref:this.handleRef},a.map((function(e,o){return null===e?Object(n.a)(W,{maxId:o>0?a.getIn(o-1,"id"):null,onLoadMore:t.handleLoadMore},"more:"+a.getIn(o+1,"id")):Object(n.a)(x,{attachment:e,displayWidth:r,onOpenMedia:t.handleOpenMedia},e.get("id"))})),l),o&&0===a.size&&Object(n.a)("div",{className:"scrollable__append"},void 0,Object(n.a)(g.a,{})))))},e}(y.a),Object(r.a)(k,"propTypes",{params:m.a.object.isRequired,dispatch:m.a.func.isRequired,attachments:h.a.list.isRequired,isLoading:m.a.bool,hasMore:m.a.bool,isAccount:m.a.bool,multiColumn:m.a.bool}),S=D))||S}}]);
//# sourceMappingURL=account_gallery.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/account_gallery.js.map b/priv/static/packs/flavours/glitch/async/account_gallery.js.map
index 2fcee6618..0aeddd9ef 100644
--- a/priv/static/packs/flavours/glitch/async/account_gallery.js.map
+++ b/priv/static/packs/flavours/glitch/async/account_gallery.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","props","attachment","getIn","loaded","c","canvas","setState","e","hoverToPlay","target","play","pause","currentTime","button","ctrlKey","metaKey","preventDefault","state","onOpenMedia","componentDidMount","this","get","_decode","componentDidUpdate","prevProps","hash","pixels","decode","ctx","getContext","imageData","ImageData","putImageData","autoPlayGif","indexOf","render","displayWidth","width","Math","floor","height","status","title","thumbnail","className","id","x","y","src","alt","style","objectPosition","onLoad","handleImageLoad","autoPlay","isIOS","label","classNames","autoplay","aria-label","role","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","loop","muted","icon","href","onClick","handleClick","rel","ref","setCanvasRef","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","number","func","LoadMoreMedia","onLoadMore","maxId","disabled","handleLoadMore","string","AccountGallery","connect","isAccount","params","accountId","attachments","getAccountGallery","isLoading","hasMore","column","scrollTop","size","last","undefined","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","prevRouterProps","location","mastodonModalOpen","openModal","media","index","findIndex","offsetWidth","fetchAccount","componentWillReceiveProps","nextProps","multiColumn","loadOlder","handleLoadOlder","setColumnRef","handleHeaderClick","scrollKey","shouldUpdateScroll","onScroll","handleScroll","handleRef","handleOpenMedia","object","list","bool"],"mappings":"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","file":"flavours/glitch/async/account_gallery.js","sourcesContent":["import { decode } from 'blurhash';\nimport classNames from 'classnames';\nimport Icon from 'flavours/glitch/components/icon';\nimport { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state';\nimport { isIOS } from 'flavours/glitch/util/is_mobile';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n static propTypes = {\n attachment: ImmutablePropTypes.map.isRequired,\n displayWidth: PropTypes.number.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n };\n\n state = {\n visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n loaded: false,\n };\n\n componentDidMount () {\n if (this.props.attachment.get('blurhash')) {\n this._decode();\n }\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.attachment.get('blurhash') !== this.props.attachment.get('blurhash') && this.props.attachment.get('blurhash')) {\n this._decode();\n }\n }\n\n _decode () {\n const hash = this.props.attachment.get('blurhash');\n const pixels = decode(hash, 32, 32);\n\n if (pixels) {\n const ctx = this.canvas.getContext('2d');\n const imageData = new ImageData(pixels, 32, 32);\n\n ctx.putImageData(imageData, 0, 0);\n }\n }\n\n setCanvasRef = c => {\n this.canvas = c;\n }\n\n handleImageLoad = () => {\n this.setState({ loaded: true });\n }\n\n handleMouseEnter = e => {\n if (this.hoverToPlay()) {\n e.target.play();\n }\n }\n\n handleMouseLeave = e => {\n if (this.hoverToPlay()) {\n e.target.pause();\n e.target.currentTime = 0;\n }\n }\n\n hoverToPlay () {\n return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1;\n }\n\n handleClick = e => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n\n if (this.state.visible) {\n this.props.onOpenMedia(this.props.attachment);\n } else {\n this.setState({ visible: true });\n }\n }\n }\n\n render () {\n const { attachment, displayWidth } = this.props;\n const { visible, loaded } = this.state;\n\n const width = `${Math.floor((displayWidth - 4) / 3) - 4}px`;\n const height = width;\n const status = attachment.get('status');\n const title = status.get('spoiler_text') || attachment.get('description');\n\n let thumbnail = '';\n\n if (attachment.get('type') === 'unknown') {\n // Skip\n } else if (attachment.get('type') === 'audio') {\n thumbnail = (\n <span className='account-gallery__item__icons'>\n <Icon id='music' />\n </span>\n );\n } else if (attachment.get('type') === 'image') {\n const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;\n const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n\n thumbnail = (\n <img\n src={attachment.get('preview_url')}\n alt={attachment.get('description')}\n title={attachment.get('description')}\n style={{ objectPosition: `${x}% ${y}%` }}\n onLoad={this.handleImageLoad}\n />\n );\n } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) {\n const autoPlay = !isIOS() && autoPlayGif;\n const label = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF';\n\n thumbnail = (\n <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>\n <video\n className='media-gallery__item-gifv-thumbnail'\n aria-label={attachment.get('description')}\n title={attachment.get('description')}\n role='application'\n src={attachment.get('url')}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n autoPlay={autoPlay}\n loop\n muted\n />\n\n <span className='media-gallery__gifv__label'>{label}</span>\n </div>\n );\n }\n\n const icon = (\n <span className='account-gallery__item__icons'>\n <Icon id='eye-slash' />\n </span>\n );\n\n return (\n <div className='account-gallery__item' style={{ width, height }}>\n <a className='media-gallery__item-thumbnail' href={status.get('url')} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'>\n <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} />\n {visible ? thumbnail : icon}\n </a>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from 'flavours/glitch/actions/accounts';\nimport { expandAccountMediaTimeline } from 'flavours/glitch/actions/timelines';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'flavours/glitch/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from 'flavours/glitch/components/load_more';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n attachments: getAccountGallery(state, props.params.accountId),\n isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),\n});\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n static propTypes = {\n maxId: PropTypes.string,\n onLoadMore: PropTypes.func.isRequired,\n };\n\n handleLoadMore = () => {\n this.props.onLoadMore(this.props.maxId);\n }\n\n render () {\n return (\n <LoadMore\n disabled={this.props.disabled}\n onClick={this.handleLoadMore}\n />\n );\n }\n\n}\n\nexport default @connect(mapStateToProps)\nclass AccountGallery extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n attachments: ImmutablePropTypes.list.isRequired,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n state = {\n width: 323,\n };\n\n componentDidMount () {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScrollToBottom = () => {\n if (this.props.hasMore) {\n this.handleLoadMore(this.props.attachments.size > 0 ? this.props.attachments.last().getIn(['status', 'id']) : undefined);\n }\n }\n\n handleScroll = e => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n const offset = scrollHeight - scrollTop - clientHeight;\n\n if (150 > offset && !this.props.isLoading) {\n this.handleScrollToBottom();\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId }));\n };\n\n handleLoadOlder = e => {\n e.preventDefault();\n this.handleScrollToBottom();\n }\n\n shouldUpdateScroll = (prevRouterProps, { location }) => {\n if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n return !(location.state && location.state.mastodonModalOpen);\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n handleOpenMedia = attachment => {\n if (attachment.get('type') === 'video') {\n this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') }));\n } else if (attachment.get('type') === 'audio') {\n this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') }));\n } else {\n const media = attachment.getIn(['status', 'media_attachments']);\n const index = media.findIndex(x => x.get('id') === attachment.get('id'));\n\n this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') }));\n }\n }\n\n handleRef = c => {\n if (c) {\n this.setState({ width: c.offsetWidth });\n }\n }\n\n render () {\n const { attachments, isLoading, hasMore, isAccount, multiColumn } = this.props;\n const { width } = this.state;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!attachments && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n let loadOlder = null;\n\n if (hasMore && !(isLoading && attachments.size === 0)) {\n loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n }\n\n return (\n <Column ref={this.setColumnRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={this.shouldUpdateScroll}>\n <div className='scrollable scrollable--flex' onScroll={this.handleScroll}>\n <HeaderContainer accountId={this.props.params.accountId} />\n\n <div role='feed' className='account-gallery__container' ref={this.handleRef}>\n {attachments.map((attachment, index) => attachment === null ? (\n <LoadMoreMedia key={'more:' + attachments.getIn(index + 1, 'id')} maxId={index > 0 ? attachments.getIn(index - 1, 'id') : null} onLoadMore={this.handleLoadMore} />\n ) : (\n <MediaItem key={attachment.get('id')} attachment={attachment} displayWidth={width} onOpenMedia={this.handleOpenMedia} />\n ))}\n\n {loadOlder}\n </div>\n\n {isLoading && attachments.size === 0 && (\n <div className='scrollable__append'>\n <LoadingIndicator />\n </div>\n )}\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","props","attachment","getIn","loaded","c","canvas","setState","e","hoverToPlay","target","play","pause","currentTime","button","ctrlKey","metaKey","preventDefault","state","onOpenMedia","componentDidMount","this","get","_decode","componentDidUpdate","prevProps","hash","pixels","decode","ctx","getContext","imageData","ImageData","putImageData","autoPlayGif","indexOf","render","displayWidth","width","Math","floor","height","status","title","thumbnail","className","id","x","y","src","alt","style","objectPosition","onLoad","handleImageLoad","autoPlay","isIOS","label","classNames","autoplay","aria-label","role","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","loop","muted","icon","href","onClick","handleClick","rel","ref","setCanvasRef","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","number","func","LoadMoreMedia","onLoadMore","maxId","disabled","handleLoadMore","string","AccountGallery","connect","isAccount","params","accountId","attachments","getAccountGallery","isLoading","hasMore","column","scrollTop","size","last","undefined","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","prevRouterProps","location","mastodonModalOpen","openModal","media","index","findIndex","offsetWidth","fetchAccount","componentWillReceiveProps","nextProps","multiColumn","loadOlder","handleLoadOlder","setColumnRef","handleHeaderClick","scrollKey","shouldUpdateScroll","onScroll","handleScroll","handleRef","handleOpenMedia","object","list","bool"],"mappings":"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","file":"flavours/glitch/async/account_gallery.js","sourcesContent":["import { decode } from 'blurhash';\nimport classNames from 'classnames';\nimport Icon from 'flavours/glitch/components/icon';\nimport { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state';\nimport { isIOS } from 'flavours/glitch/util/is_mobile';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n static propTypes = {\n attachment: ImmutablePropTypes.map.isRequired,\n displayWidth: PropTypes.number.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n };\n\n state = {\n visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n loaded: false,\n };\n\n componentDidMount () {\n if (this.props.attachment.get('blurhash')) {\n this._decode();\n }\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.attachment.get('blurhash') !== this.props.attachment.get('blurhash') && this.props.attachment.get('blurhash')) {\n this._decode();\n }\n }\n\n _decode () {\n const hash = this.props.attachment.get('blurhash');\n const pixels = decode(hash, 32, 32);\n\n if (pixels) {\n const ctx = this.canvas.getContext('2d');\n const imageData = new ImageData(pixels, 32, 32);\n\n ctx.putImageData(imageData, 0, 0);\n }\n }\n\n setCanvasRef = c => {\n this.canvas = c;\n }\n\n handleImageLoad = () => {\n this.setState({ loaded: true });\n }\n\n handleMouseEnter = e => {\n if (this.hoverToPlay()) {\n e.target.play();\n }\n }\n\n handleMouseLeave = e => {\n if (this.hoverToPlay()) {\n e.target.pause();\n e.target.currentTime = 0;\n }\n }\n\n hoverToPlay () {\n return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1;\n }\n\n handleClick = e => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n\n if (this.state.visible) {\n this.props.onOpenMedia(this.props.attachment);\n } else {\n this.setState({ visible: true });\n }\n }\n }\n\n render () {\n const { attachment, displayWidth } = this.props;\n const { visible, loaded } = this.state;\n\n const width = `${Math.floor((displayWidth - 4) / 3) - 4}px`;\n const height = width;\n const status = attachment.get('status');\n const title = status.get('spoiler_text') || attachment.get('description');\n\n let thumbnail = '';\n\n if (attachment.get('type') === 'unknown') {\n // Skip\n } else if (attachment.get('type') === 'audio') {\n thumbnail = (\n <span className='account-gallery__item__icons'>\n <Icon id='music' />\n </span>\n );\n } else if (attachment.get('type') === 'image') {\n const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;\n const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n\n thumbnail = (\n <img\n src={attachment.get('preview_url')}\n alt={attachment.get('description')}\n title={attachment.get('description')}\n style={{ objectPosition: `${x}% ${y}%` }}\n onLoad={this.handleImageLoad}\n />\n );\n } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) {\n const autoPlay = !isIOS() && autoPlayGif;\n const label = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF';\n\n thumbnail = (\n <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>\n <video\n className='media-gallery__item-gifv-thumbnail'\n aria-label={attachment.get('description')}\n title={attachment.get('description')}\n role='application'\n src={attachment.get('url')}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n autoPlay={autoPlay}\n loop\n muted\n />\n\n <span className='media-gallery__gifv__label'>{label}</span>\n </div>\n );\n }\n\n const icon = (\n <span className='account-gallery__item__icons'>\n <Icon id='eye-slash' />\n </span>\n );\n\n return (\n <div className='account-gallery__item' style={{ width, height }}>\n <a className='media-gallery__item-thumbnail' href={status.get('url')} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'>\n <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} />\n {visible ? thumbnail : icon}\n </a>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from 'flavours/glitch/actions/accounts';\nimport { expandAccountMediaTimeline } from 'flavours/glitch/actions/timelines';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'flavours/glitch/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from 'flavours/glitch/components/load_more';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n attachments: getAccountGallery(state, props.params.accountId),\n isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),\n});\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n static propTypes = {\n maxId: PropTypes.string,\n onLoadMore: PropTypes.func.isRequired,\n };\n\n handleLoadMore = () => {\n this.props.onLoadMore(this.props.maxId);\n }\n\n render () {\n return (\n <LoadMore\n disabled={this.props.disabled}\n onClick={this.handleLoadMore}\n />\n );\n }\n\n}\n\nexport default @connect(mapStateToProps)\nclass AccountGallery extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n attachments: ImmutablePropTypes.list.isRequired,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n state = {\n width: 323,\n };\n\n componentDidMount () {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScrollToBottom = () => {\n if (this.props.hasMore) {\n this.handleLoadMore(this.props.attachments.size > 0 ? this.props.attachments.last().getIn(['status', 'id']) : undefined);\n }\n }\n\n handleScroll = e => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n const offset = scrollHeight - scrollTop - clientHeight;\n\n if (150 > offset && !this.props.isLoading) {\n this.handleScrollToBottom();\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId }));\n };\n\n handleLoadOlder = e => {\n e.preventDefault();\n this.handleScrollToBottom();\n }\n\n shouldUpdateScroll = (prevRouterProps, { location }) => {\n if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n return !(location.state && location.state.mastodonModalOpen);\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n handleOpenMedia = attachment => {\n if (attachment.get('type') === 'video') {\n this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') }));\n } else if (attachment.get('type') === 'audio') {\n this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') }));\n } else {\n const media = attachment.getIn(['status', 'media_attachments']);\n const index = media.findIndex(x => x.get('id') === attachment.get('id'));\n\n this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') }));\n }\n }\n\n handleRef = c => {\n if (c) {\n this.setState({ width: c.offsetWidth });\n }\n }\n\n render () {\n const { attachments, isLoading, hasMore, isAccount, multiColumn } = this.props;\n const { width } = this.state;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!attachments && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n let loadOlder = null;\n\n if (hasMore && !(isLoading && attachments.size === 0)) {\n loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n }\n\n return (\n <Column ref={this.setColumnRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={this.shouldUpdateScroll}>\n <div className='scrollable scrollable--flex' onScroll={this.handleScroll}>\n <HeaderContainer accountId={this.props.params.accountId} />\n\n <div role='feed' className='account-gallery__container' ref={this.handleRef}>\n {attachments.map((attachment, index) => attachment === null ? (\n <LoadMoreMedia key={'more:' + attachments.getIn(index + 1, 'id')} maxId={index > 0 ? attachments.getIn(index - 1, 'id') : null} onLoadMore={this.handleLoadMore} />\n ) : (\n <MediaItem key={attachment.get('id')} attachment={attachment} displayWidth={width} onOpenMedia={this.handleOpenMedia} />\n ))}\n\n {loadOlder}\n </div>\n\n {isLoading && attachments.size === 0 && (\n <div className='scrollable__append'>\n <LoadingIndicator />\n </div>\n )}\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/account_timeline.js b/priv/static/packs/flavours/glitch/async/account_timeline.js
index ebf40ef53..80863af8d 100644
--- a/priv/static/packs/flavours/glitch/async/account_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/account_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{769:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return A}));var s,c,i,o=a(0),n=a(2),p=a(7),r=a(1),u=a(3),d=a.n(u),l=a(13),h=a(14),b=a.n(h),m=a(5),j=a.n(m),O=a(22),I=a(32),f=a(1037),w=a(299),R=a(730),g=a(1052),L=a(1056),M=a(1121),v=a(4),y=a(18),C=a(6),k=a(290),q=a(1029),A=Object(l.connect)((function(t,e){var a=e.params.accountId,s=e.withReplies,c=void 0!==s&&s,i=c?a+":with_replies":a;return{isAccount:!!t.getIn(["accounts",a]),statusIds:t.getIn(["timelines","account:"+i,"items"],Object(v.List)()),featuredStatusIds:c?Object(v.List)():t.getIn(["timelines","account:"+a+":pinned","items"],Object(v.List)()),isLoading:t.getIn(["timelines","account:"+i,"isLoading"]),hasMore:t.getIn(["timelines","account:"+i,"hasMore"])}}))((i=c=function(t){function e(){for(var e,a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];return e=t.call.apply(t,[this].concat(s))||this,Object(r.a)(Object(n.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(n.a)(e),"handleLoadMore",(function(t){e.props.dispatch(Object(I.q)(e.props.params.accountId,{maxId:t,withReplies:e.props.withReplies}))})),Object(r.a)(Object(n.a)(e),"setRef",(function(t){e.column=t})),e}Object(p.a)(e,t);var a=e.prototype;return a.componentWillMount=function(){var t=this.props,e=t.params.accountId,a=t.withReplies;this.props.dispatch(Object(O.F)(e)),this.props.dispatch(Object(k.d)(e)),a||this.props.dispatch(Object(I.o)(e)),this.props.dispatch(Object(I.q)(e,{withReplies:a}))},a.componentWillReceiveProps=function(t){(t.params.accountId!==this.props.params.accountId&&t.params.accountId||t.withReplies!==this.props.withReplies)&&(this.props.dispatch(Object(O.F)(t.params.accountId)),this.props.dispatch(Object(k.d)(t.params.accountId)),t.withReplies||this.props.dispatch(Object(I.o)(t.params.accountId)),this.props.dispatch(Object(I.q)(t.params.accountId,{withReplies:t.params.withReplies})))},a.render=function(){var t=this.props,e=t.statusIds,a=t.featuredStatusIds,s=t.isLoading,c=t.hasMore,i=t.isAccount,n=t.multiColumn;return i?!e&&s?Object(o.a)(R.a,{},void 0,Object(o.a)(w.a,{})):d.a.createElement(R.a,{ref:this.setRef,name:"account"},Object(o.a)(g.a,{onClick:this.handleHeaderClick,multiColumn:n}),Object(o.a)(f.a,{prepend:Object(o.a)(L.a,{accountId:this.props.params.accountId}),alwaysPrepend:!0,scrollKey:"account_timeline",statusIds:e,featuredStatusIds:a,isLoading:s,hasMore:c,onLoadMore:this.handleLoadMore,emptyMessage:Object(o.a)(C.b,{id:"empty_column.account_timeline",defaultMessage:"No toots here!"}),bindToDocument:!n})):Object(o.a)(R.a,{},void 0,Object(o.a)(M.a,{multiColumn:n}),Object(o.a)(q.a,{}))},e}(y.a),Object(r.a)(c,"propTypes",{params:j.a.object.isRequired,dispatch:j.a.func.isRequired,statusIds:b.a.list,featuredStatusIds:b.a.list,isLoading:j.a.bool,hasMore:j.a.bool,withReplies:j.a.bool,isAccount:j.a.bool,multiColumn:j.a.bool}),s=i))||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{795:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return A}));var s,c,i,o=a(0),n=a(2),p=(a(9),a(6),a(8)),r=a(1),u=a(3),d=a.n(u),l=a(15),h=a(16),m=a.n(h),b=a(5),j=a.n(b),O=a(24),I=a(34),f=a(1064),w=a(305),R=a(756),g=a(1079),v=a(1083),L=a(1153),M=a(4),y=a(21),C=a(7),k=a(290),q=a(1056);var A=Object(l.connect)((function(t,e){var a=e.params.accountId,s=e.withReplies,c=void 0!==s&&s,i=c?a+":with_replies":a;return{isAccount:!!t.getIn(["accounts",a]),statusIds:t.getIn(["timelines","account:"+i,"items"],Object(M.List)()),featuredStatusIds:c?Object(M.List)():t.getIn(["timelines","account:"+a+":pinned","items"],Object(M.List)()),isLoading:t.getIn(["timelines","account:"+i,"isLoading"]),hasMore:t.getIn(["timelines","account:"+i,"hasMore"])}}))((i=c=function(t){Object(p.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];return e=t.call.apply(t,[this].concat(s))||this,Object(r.a)(Object(n.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(n.a)(e),"handleLoadMore",(function(t){e.props.dispatch(Object(I.q)(e.props.params.accountId,{maxId:t,withReplies:e.props.withReplies}))})),Object(r.a)(Object(n.a)(e),"setRef",(function(t){e.column=t})),e}var s=a.prototype;return s.componentWillMount=function(){var t=this.props,e=t.params.accountId,a=t.withReplies;this.props.dispatch(Object(O.F)(e)),this.props.dispatch(Object(k.d)(e)),a||this.props.dispatch(Object(I.o)(e)),this.props.dispatch(Object(I.q)(e,{withReplies:a}))},s.componentWillReceiveProps=function(t){(t.params.accountId!==this.props.params.accountId&&t.params.accountId||t.withReplies!==this.props.withReplies)&&(this.props.dispatch(Object(O.F)(t.params.accountId)),this.props.dispatch(Object(k.d)(t.params.accountId)),t.withReplies||this.props.dispatch(Object(I.o)(t.params.accountId)),this.props.dispatch(Object(I.q)(t.params.accountId,{withReplies:t.params.withReplies})))},s.render=function(){var t=this.props,e=t.statusIds,a=t.featuredStatusIds,s=t.isLoading,c=t.hasMore,i=t.isAccount,n=t.multiColumn;return i?!e&&s?Object(o.a)(R.a,{},void 0,Object(o.a)(w.a,{})):d.a.createElement(R.a,{ref:this.setRef,name:"account"},Object(o.a)(g.a,{onClick:this.handleHeaderClick,multiColumn:n}),Object(o.a)(f.a,{prepend:Object(o.a)(v.a,{accountId:this.props.params.accountId}),alwaysPrepend:!0,scrollKey:"account_timeline",statusIds:e,featuredStatusIds:a,isLoading:s,hasMore:c,onLoadMore:this.handleLoadMore,emptyMessage:Object(o.a)(C.b,{id:"empty_column.account_timeline",defaultMessage:"No toots here!"}),bindToDocument:!n,timelineId:"account"})):Object(o.a)(R.a,{},void 0,Object(o.a)(L.a,{multiColumn:n}),Object(o.a)(q.a,{}))},a}(y.a),Object(r.a)(c,"propTypes",{params:j.a.object.isRequired,dispatch:j.a.func.isRequired,statusIds:m.a.list,featuredStatusIds:m.a.list,isLoading:j.a.bool,hasMore:j.a.bool,withReplies:j.a.bool,isAccount:j.a.bool,multiColumn:j.a.bool}),s=i))||s}}]);
//# sourceMappingURL=account_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/account_timeline.js.map b/priv/static/packs/flavours/glitch/async/account_timeline.js.map
index 2288ad945..af4549145 100644
--- a/priv/static/packs/flavours/glitch/async/account_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/account_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_timeline/index.js"],"names":["AccountTimeline","connect","state","accountId","params","withReplies","path","isAccount","getIn","statusIds","ImmutableList","featuredStatusIds","isLoading","hasMore","column","scrollTop","maxId","props","dispatch","expandAccountTimeline","c","componentWillMount","this","fetchAccount","fetchAccountIdentityProofs","expandAccountFeaturedTimeline","componentWillReceiveProps","nextProps","render","multiColumn","ref","setRef","name","onClick","handleHeaderClick","prepend","alwaysPrepend","scrollKey","onLoadMore","handleLoadMore","emptyMessage","id","defaultMessage","bindToDocument","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"4VA+BMA,EADUC,mBAZQ,SAACC,EAAD,GAA4D,IAAxCC,EAAuC,EAAjDC,OAAUD,UAAuC,IAA1BE,mBAA0B,SAC3EC,EAAOD,EAAiBF,EAAN,gBAAiCA,EAEzD,MAAO,CACLI,YAAaL,EAAMM,MAAM,CAAC,WAAYL,IACtCM,UAAWP,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,SAAUI,kBAClEC,kBAAmBN,EAAcK,iBAAkBR,EAAMM,MAAM,CAAC,YAAD,WAAyBL,EAAzB,UAA6C,SAAUO,kBACtHE,UAAWV,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,cACxDO,QAAWX,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,e,yMAyCtC,WAClB,EAAKQ,OAAOC,e,6CAGG,SAAAC,GACf,EAAKC,MAAMC,SAASC,YAAsB,EAAKF,MAAMb,OAAOD,UAAW,CAAEa,QAAOX,YAAa,EAAKY,MAAMZ,kB,qCAGjG,SAAAe,GACP,EAAKN,OAASM,K,8CA/BhBC,mBAAA,WAAuB,IAAD,EAC2BC,KAAKL,MAAlCd,EADE,EACZC,OAAUD,UAAaE,EADX,EACWA,YAE/BiB,KAAKL,MAAMC,SAASK,YAAapB,IACjCmB,KAAKL,MAAMC,SAASM,YAA2BrB,IAC1CE,GACHiB,KAAKL,MAAMC,SAASO,YAA8BtB,IAEpDmB,KAAKL,MAAMC,SAASC,YAAsBhB,EAAW,CAAEE,kB,EAGzDqB,0BAAA,SAA2BC,IACpBA,EAAUvB,OAAOD,YAAcmB,KAAKL,MAAMb,OAAOD,WAAawB,EAAUvB,OAAOD,WAAcwB,EAAUtB,cAAgBiB,KAAKL,MAAMZ,eACrIiB,KAAKL,MAAMC,SAASK,YAAaI,EAAUvB,OAAOD,YAClDmB,KAAKL,MAAMC,SAASM,YAA2BG,EAAUvB,OAAOD,YAC3DwB,EAAUtB,aACbiB,KAAKL,MAAMC,SAASO,YAA8BE,EAAUvB,OAAOD,YAErEmB,KAAKL,MAAMC,SAASC,YAAsBQ,EAAUvB,OAAOD,UAAW,CAAEE,YAAasB,EAAUvB,OAAOC,iB,EAgB1GuB,OAAA,WAAW,IAAD,EAC6EN,KAAKL,MAAlFR,EADA,EACAA,UAAWE,EADX,EACWA,kBAAmBC,EAD9B,EAC8BA,UAAWC,EADzC,EACyCA,QAASN,EADlD,EACkDA,UAAWsB,EAD7D,EAC6DA,YAErE,OAAKtB,GASAE,GAAaG,EAEd,YAAC,IAAD,UACE,YAAC,IAAD,KAMJ,kBAAC,IAAD,CAAQkB,IAAKR,KAAKS,OAAQC,KAAK,WAC7B,YAAC,IAAD,CAAqBC,QAASX,KAAKY,kBAAmBL,YAAaA,IAEnE,YAAC,IAAD,CACEM,QAAS,YAAC,IAAD,CAAiBhC,UAAWmB,KAAKL,MAAMb,OAAOD,YACvDiC,eAAa,EACbC,UAAU,mBACV5B,UAAWA,EACXE,kBAAmBA,EACnBC,UAAWA,EACXC,QAASA,EACTyB,WAAYhB,KAAKiB,eACjBC,aAAc,YAAC,IAAD,CAAkBC,GAAG,gCAAgCC,eAAe,mBAClFC,gBAAiBd,KA7BnB,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBA,YAAaA,IAC/B,YAAC,IAAD,M,GAvDoBe,K,0BAET,CACjBxC,OAAQyC,IAAUC,OAAOC,WACzB7B,SAAU2B,IAAUG,KAAKD,WACzBtC,UAAWwC,IAAmBC,KAC9BvC,kBAAmBsC,IAAmBC,KACtCtC,UAAWiC,IAAUM,KACrBtC,QAASgC,IAAUM,KACnB9C,YAAawC,IAAUM,KACvB5C,UAAWsC,IAAUM,KACrBtB,YAAagB,IAAUM,O","file":"flavours/glitch/async/account_timeline.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from 'flavours/glitch/actions/accounts';\nimport { expandAccountFeaturedTimeline, expandAccountTimeline } from 'flavours/glitch/actions/timelines';\nimport StatusList from '../../components/status_list';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from './containers/header_container';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport { List as ImmutableList } from 'immutable';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport { fetchAccountIdentityProofs } from '../../actions/identity_proofs';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\n\nconst mapStateToProps = (state, { params: { accountId }, withReplies = false }) => {\n const path = withReplies ? `${accountId}:with_replies` : accountId;\n\n return {\n isAccount: !!state.getIn(['accounts', accountId]),\n statusIds: state.getIn(['timelines', `account:${path}`, 'items'], ImmutableList()),\n featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()),\n isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']),\n };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountTimeline extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list,\n featuredStatusIds: ImmutablePropTypes.list,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n withReplies: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n const { params: { accountId }, withReplies } = this.props;\n\n this.props.dispatch(fetchAccount(accountId));\n this.props.dispatch(fetchAccountIdentityProofs(accountId));\n if (!withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(accountId));\n }\n this.props.dispatch(expandAccountTimeline(accountId, { withReplies }));\n }\n\n componentWillReceiveProps (nextProps) {\n if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchAccountIdentityProofs(nextProps.params.accountId));\n if (!nextProps.withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId));\n }\n this.props.dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies }));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies }));\n }\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!statusIds && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n return (\n <Column ref={this.setRef} name='account'>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <StatusList\n prepend={<HeaderContainer accountId={this.props.params.accountId} />}\n alwaysPrepend\n scrollKey='account_timeline'\n statusIds={statusIds}\n featuredStatusIds={featuredStatusIds}\n isLoading={isLoading}\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.account_timeline' defaultMessage='No toots here!' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/account_timeline/index.js"],"names":["AccountTimeline","connect","state","accountId","params","withReplies","path","isAccount","getIn","statusIds","ImmutableList","featuredStatusIds","isLoading","hasMore","column","scrollTop","maxId","props","dispatch","expandAccountTimeline","c","componentWillMount","this","fetchAccount","fetchAccountIdentityProofs","expandAccountFeaturedTimeline","componentWillReceiveProps","nextProps","render","multiColumn","ref","setRef","name","onClick","handleHeaderClick","prepend","alwaysPrepend","scrollKey","onLoadMore","handleLoadMore","emptyMessage","id","defaultMessage","bindToDocument","timelineId","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"wWAkBA,IAaMA,EADUC,mBAZQ,SAACC,EAAD,GAA4D,IAAxCC,EAAuC,EAAjDC,OAAUD,UAAuC,IAA1BE,mBAA0B,SAC3EC,EAAOD,EAAiBF,EAAN,gBAAiCA,EAEzD,MAAO,CACLI,YAAaL,EAAMM,MAAM,CAAC,WAAYL,IACtCM,UAAWP,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,SAAUI,kBAClEC,kBAAmBN,EAAcK,iBAAkBR,EAAMM,MAAM,CAAC,YAAD,WAAyBL,EAAzB,UAA6C,SAAUO,kBACtHE,UAAWV,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,cACxDO,QAAWX,EAAMM,MAAM,CAAC,YAAD,WAAyBF,EAAQ,e,oOAyCtC,WAClB,EAAKQ,OAAOC,e,6CAGG,SAAAC,GACf,EAAKC,MAAMC,SAASC,YAAsB,EAAKF,MAAMb,OAAOD,UAAW,CAAEa,QAAOX,YAAa,EAAKY,MAAMZ,kB,qCAGjG,SAAAe,GACP,EAAKN,OAASM,K,6BA/BhBC,mBAAA,WAAuB,IAAD,EAC2BC,KAAKL,MAAlCd,EADE,EACZC,OAAUD,UAAaE,EADX,EACWA,YAE/BiB,KAAKL,MAAMC,SAASK,YAAapB,IACjCmB,KAAKL,MAAMC,SAASM,YAA2BrB,IAC1CE,GACHiB,KAAKL,MAAMC,SAASO,YAA8BtB,IAEpDmB,KAAKL,MAAMC,SAASC,YAAsBhB,EAAW,CAAEE,kB,EAGzDqB,0BAAA,SAA2BC,IACpBA,EAAUvB,OAAOD,YAAcmB,KAAKL,MAAMb,OAAOD,WAAawB,EAAUvB,OAAOD,WAAcwB,EAAUtB,cAAgBiB,KAAKL,MAAMZ,eACrIiB,KAAKL,MAAMC,SAASK,YAAaI,EAAUvB,OAAOD,YAClDmB,KAAKL,MAAMC,SAASM,YAA2BG,EAAUvB,OAAOD,YAC3DwB,EAAUtB,aACbiB,KAAKL,MAAMC,SAASO,YAA8BE,EAAUvB,OAAOD,YAErEmB,KAAKL,MAAMC,SAASC,YAAsBQ,EAAUvB,OAAOD,UAAW,CAAEE,YAAasB,EAAUvB,OAAOC,iB,EAgB1GuB,OAAA,WAAW,IAAD,EAC6EN,KAAKL,MAAlFR,EADA,EACAA,UAAWE,EADX,EACWA,kBAAmBC,EAD9B,EAC8BA,UAAWC,EADzC,EACyCA,QAASN,EADlD,EACkDA,UAAWsB,EAD7D,EAC6DA,YAErE,OAAKtB,GASAE,GAAaG,EAEd,YAAC,IAAD,UACE,YAAC,IAAD,KAMJ,kBAAC,IAAD,CAAQkB,IAAKR,KAAKS,OAAQC,KAAK,WAC7B,YAAC,IAAD,CAAqBC,QAASX,KAAKY,kBAAmBL,YAAaA,IAEnE,YAAC,IAAD,CACEM,QAAS,YAAC,IAAD,CAAiBhC,UAAWmB,KAAKL,MAAMb,OAAOD,YACvDiC,eAAa,EACbC,UAAU,mBACV5B,UAAWA,EACXE,kBAAmBA,EACnBC,UAAWA,EACXC,QAASA,EACTyB,WAAYhB,KAAKiB,eACjBC,aAAc,YAAC,IAAD,CAAkBC,GAAG,gCAAgCC,eAAe,mBAClFC,gBAAiBd,EACjBe,WAAW,aA9Bb,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBf,YAAaA,IAC/B,YAAC,IAAD,M,GAvDoBgB,K,0BAET,CACjBzC,OAAQ0C,IAAUC,OAAOC,WACzB9B,SAAU4B,IAAUG,KAAKD,WACzBvC,UAAWyC,IAAmBC,KAC9BxC,kBAAmBuC,IAAmBC,KACtCvC,UAAWkC,IAAUM,KACrBvC,QAASiC,IAAUM,KACnB/C,YAAayC,IAAUM,KACvB7C,UAAWuC,IAAUM,KACrBvB,YAAaiB,IAAUM,O","file":"flavours/glitch/async/account_timeline.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from 'flavours/glitch/actions/accounts';\nimport { expandAccountFeaturedTimeline, expandAccountTimeline } from 'flavours/glitch/actions/timelines';\nimport StatusList from '../../components/status_list';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from './containers/header_container';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport { List as ImmutableList } from 'immutable';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport { fetchAccountIdentityProofs } from '../../actions/identity_proofs';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\n\nconst mapStateToProps = (state, { params: { accountId }, withReplies = false }) => {\n const path = withReplies ? `${accountId}:with_replies` : accountId;\n\n return {\n isAccount: !!state.getIn(['accounts', accountId]),\n statusIds: state.getIn(['timelines', `account:${path}`, 'items'], ImmutableList()),\n featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()),\n isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']),\n };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountTimeline extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list,\n featuredStatusIds: ImmutablePropTypes.list,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n withReplies: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n const { params: { accountId }, withReplies } = this.props;\n\n this.props.dispatch(fetchAccount(accountId));\n this.props.dispatch(fetchAccountIdentityProofs(accountId));\n if (!withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(accountId));\n }\n this.props.dispatch(expandAccountTimeline(accountId, { withReplies }));\n }\n\n componentWillReceiveProps (nextProps) {\n if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchAccountIdentityProofs(nextProps.params.accountId));\n if (!nextProps.withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId));\n }\n this.props.dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies }));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies }));\n }\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!statusIds && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n return (\n <Column ref={this.setRef} name='account'>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <StatusList\n prepend={<HeaderContainer accountId={this.props.params.accountId} />}\n alwaysPrepend\n scrollKey='account_timeline'\n statusIds={statusIds}\n featuredStatusIds={featuredStatusIds}\n isLoading={isLoading}\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.account_timeline' defaultMessage='No toots here!' />}\n bindToDocument={!multiColumn}\n timelineId='account'\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/block_modal.js b/priv/static/packs/flavours/glitch/async/block_modal.js
index 7a5c639aa..ff78212cd 100644
--- a/priv/static/packs/flavours/glitch/async/block_modal.js
+++ b/priv/static/packs/flavours/glitch/async/block_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{781:function(o,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return O}));var c,e=t(0),a=t(2),i=t(7),r=t(1),l=t(3),s=t.n(l),b=t(13),d=t(6),u=t(103),f=t(66),p=t(42),j=t(22),m=t(99),O=Object(b.connect)((function(){var o=Object(u.d)();return function(n){return{account:o(n,n.getIn(["blocks","new","account_id"]))}}}),(function(o){return{onConfirm:function(n){o(Object(j.z)(n.get("id")))},onBlockAndReport:function(n){o(Object(j.z)(n.get("id"))),o(Object(m.k)(n))},onClose:function(){o(Object(p.c)())}}}))(c=Object(d.g)(c=function(o){function n(){for(var n,t=arguments.length,c=new Array(t),e=0;e<t;e++)c[e]=arguments[e];return n=o.call.apply(o,[this].concat(c))||this,Object(r.a)(Object(a.a)(n),"handleClick",(function(){n.props.onClose(),n.props.onConfirm(n.props.account)})),Object(r.a)(Object(a.a)(n),"handleSecondary",(function(){n.props.onClose(),n.props.onBlockAndReport(n.props.account)})),Object(r.a)(Object(a.a)(n),"handleCancel",(function(){n.props.onClose()})),Object(r.a)(Object(a.a)(n),"setRef",(function(o){n.button=o})),n}Object(i.a)(n,o);var t=n.prototype;return t.componentDidMount=function(){this.button.focus()},t.render=function(){var o=this.props.account;return Object(e.a)("div",{className:"modal-root__modal block-modal"},void 0,Object(e.a)("div",{className:"block-modal__container"},void 0,Object(e.a)("p",{},void 0,Object(e.a)(d.b,{id:"confirmations.block.message",defaultMessage:"Are you sure you want to block {name}?",values:{name:Object(e.a)("strong",{},void 0,"@",o.get("acct"))}}))),Object(e.a)("div",{className:"block-modal__action-bar"},void 0,Object(e.a)(f.a,{onClick:this.handleCancel,className:"block-modal__cancel-button"},void 0,Object(e.a)(d.b,{id:"confirmation_modal.cancel",defaultMessage:"Cancel"})),Object(e.a)(f.a,{onClick:this.handleSecondary,className:"confirmation-modal__secondary-button"},void 0,Object(e.a)(d.b,{id:"confirmations.block.block_and_report",defaultMessage:"Block & Report"})),s.a.createElement(f.a,{onClick:this.handleClick,ref:this.setRef},Object(e.a)(d.b,{id:"confirmations.block.confirm",defaultMessage:"Block"}))))},n}(s.a.PureComponent))||c)||c}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{807:function(o,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return O}));var c,e=t(0),a=t(2),i=(t(9),t(6),t(8)),r=t(1),l=t(3),s=t.n(l),b=t(15),d=t(7),u=t(108),f=t(68),p=t(45),j=t(24),m=t(104);var O=Object(b.connect)((function(){var o=Object(u.d)();return function(n){return{account:o(n,n.getIn(["blocks","new","account_id"]))}}}),(function(o){return{onConfirm:function(n){o(Object(j.z)(n.get("id")))},onBlockAndReport:function(n){o(Object(j.z)(n.get("id"))),o(Object(m.k)(n))},onClose:function(){o(Object(p.c)())}}}))(c=Object(d.g)(c=function(o){Object(i.a)(t,o);var n;n=t;function t(){for(var n,t=arguments.length,c=new Array(t),e=0;e<t;e++)c[e]=arguments[e];return n=o.call.apply(o,[this].concat(c))||this,Object(r.a)(Object(a.a)(n),"handleClick",(function(){n.props.onClose(),n.props.onConfirm(n.props.account)})),Object(r.a)(Object(a.a)(n),"handleSecondary",(function(){n.props.onClose(),n.props.onBlockAndReport(n.props.account)})),Object(r.a)(Object(a.a)(n),"handleCancel",(function(){n.props.onClose()})),Object(r.a)(Object(a.a)(n),"setRef",(function(o){n.button=o})),n}var c=t.prototype;return c.componentDidMount=function(){this.button.focus()},c.render=function(){var o=this.props.account;return(Object(e.a)("div",{className:"modal-root__modal block-modal"},void 0,Object(e.a)("div",{className:"block-modal__container"},void 0,Object(e.a)("p",{},void 0,Object(e.a)(d.b,{id:"confirmations.block.message",defaultMessage:"Are you sure you want to block {name}?",values:{name:Object(e.a)("strong",{},void 0,"@",o.get("acct"))}}))),Object(e.a)("div",{className:"block-modal__action-bar"},void 0,Object(e.a)(f.a,{onClick:this.handleCancel,className:"block-modal__cancel-button"},void 0,Object(e.a)(d.b,{id:"confirmation_modal.cancel",defaultMessage:"Cancel"})),Object(e.a)(f.a,{onClick:this.handleSecondary,className:"confirmation-modal__secondary-button"},void 0,Object(e.a)(d.b,{id:"confirmations.block.block_and_report",defaultMessage:"Block & Report"})),s.a.createElement(f.a,{onClick:this.handleClick,ref:this.setRef},Object(e.a)(d.b,{id:"confirmations.block.confirm",defaultMessage:"Block"})))))},t}(s.a.PureComponent))||c)||c}}]);
//# sourceMappingURL=block_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/block_modal.js.map b/priv/static/packs/flavours/glitch/async/block_modal.js.map
index 4214332d9..a99478646 100644
--- a/priv/static/packs/flavours/glitch/async/block_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/block_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/block_modal.js"],"names":["BlockModal","connect","getAccount","makeGetAccount","state","account","getIn","dispatch","onConfirm","blockAccount","get","onBlockAndReport","initReport","onClose","closeModal","injectIntl","props","c","button","componentDidMount","this","focus","render","className","id","defaultMessage","values","name","onClick","handleCancel","handleSecondary","handleClick","ref","setRef","React","PureComponent"],"mappings":"oPAwCMA,EAFUC,mBA3BY,WAC1B,IAAMC,EAAaC,cAMnB,OAJwB,SAAAC,GAAK,MAAK,CAChCC,QAASH,EAAWE,EAAOA,EAAME,MAAM,CAAC,SAAU,MAAO,qBAMlC,SAAAC,GACzB,MAAO,CACLC,UADK,SACKH,GACRE,EAASE,YAAaJ,EAAQK,IAAI,SAGpCC,iBALK,SAKYN,GACfE,EAASE,YAAaJ,EAAQK,IAAI,QAClCH,EAASK,YAAWP,KAGtBQ,QAVK,WAWHN,EAASO,mB,GAMdC,Y,+LAee,WACZ,EAAKC,MAAMH,UACX,EAAKG,MAAMR,UAAU,EAAKQ,MAAMX,Y,8CAGhB,WAChB,EAAKW,MAAMH,UACX,EAAKG,MAAML,iBAAiB,EAAKK,MAAMX,Y,2CAG1B,WACb,EAAKW,MAAMH,a,qCAGJ,SAACI,GACR,EAAKC,OAASD,K,8CAnBhBE,kBAAA,WACEC,KAAKF,OAAOG,S,EAqBdC,OAAA,WAAW,IACDjB,EAAYe,KAAKJ,MAAjBX,QAER,OACE,mBAAKkB,UAAU,sCAAf,EACE,mBAAKA,UAAU,+BAAf,EACE,0BACE,YAAC,IAAD,CACEC,GAAG,8BACHC,eAAe,yCACfC,OAAQ,CAAEC,KAAM,mCAAUtB,EAAQK,IAAI,cAK5C,mBAAKa,UAAU,gCAAf,EACE,YAAC,IAAD,CAAQK,QAASR,KAAKS,aAAcN,UAAU,mCAA9C,EACE,YAAC,IAAD,CAAkBC,GAAG,4BAA4BC,eAAe,YAElE,YAAC,IAAD,CAAQG,QAASR,KAAKU,gBAAiBP,UAAU,6CAAjD,EACE,YAAC,IAAD,CAAkBC,GAAG,uCAAuCC,eAAe,oBAE7E,kBAAC,IAAD,CAAQG,QAASR,KAAKW,YAAaC,IAAKZ,KAAKa,QAC3C,YAAC,IAAD,CAAkBT,GAAG,8BAA8BC,eAAe,c,GAvDrDS,IAAMC,iB","file":"flavours/glitch/async/block_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport { makeGetAccount } from '../../../selectors';\nimport Button from '../../../components/button';\nimport { closeModal } from '../../../actions/modal';\nimport { blockAccount } from '../../../actions/accounts';\nimport { initReport } from '../../../actions/reports';\n\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = state => ({\n account: getAccount(state, state.getIn(['blocks', 'new', 'account_id'])),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onConfirm(account) {\n dispatch(blockAccount(account.get('id')));\n },\n\n onBlockAndReport(account) {\n dispatch(blockAccount(account.get('id')));\n dispatch(initReport(account));\n },\n\n onClose() {\n dispatch(closeModal());\n },\n };\n};\n\nexport default @connect(makeMapStateToProps, mapDispatchToProps)\n@injectIntl\nclass BlockModal extends React.PureComponent {\n\n static propTypes = {\n account: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onBlockAndReport: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount() {\n this.button.focus();\n }\n\n handleClick = () => {\n this.props.onClose();\n this.props.onConfirm(this.props.account);\n }\n\n handleSecondary = () => {\n this.props.onClose();\n this.props.onBlockAndReport(this.props.account);\n }\n\n handleCancel = () => {\n this.props.onClose();\n }\n\n setRef = (c) => {\n this.button = c;\n }\n\n render () {\n const { account } = this.props;\n\n return (\n <div className='modal-root__modal block-modal'>\n <div className='block-modal__container'>\n <p>\n <FormattedMessage\n id='confirmations.block.message'\n defaultMessage='Are you sure you want to block {name}?'\n values={{ name: <strong>@{account.get('acct')}</strong> }}\n />\n </p>\n </div>\n\n <div className='block-modal__action-bar'>\n <Button onClick={this.handleCancel} className='block-modal__cancel-button'>\n <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />\n </Button>\n <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'>\n <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' />\n </Button>\n <Button onClick={this.handleClick} ref={this.setRef}>\n <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' />\n </Button>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/block_modal.js"],"names":["BlockModal","connect","getAccount","makeGetAccount","state","account","getIn","dispatch","onConfirm","blockAccount","get","onBlockAndReport","initReport","onClose","closeModal","injectIntl","props","c","button","componentDidMount","this","focus","render","className","id","defaultMessage","values","name","onClick","handleCancel","handleSecondary","handleClick","ref","setRef","React","PureComponent"],"mappings":"iQAWA,IA6BMA,EAFUC,mBA3BY,WAC1B,IAAMC,EAAaC,cAMnB,OAJwB,SAAAC,GAAK,MAAK,CAChCC,QAASH,EAAWE,EAAOA,EAAME,MAAM,CAAC,SAAU,MAAO,qBAMlC,SAAAC,GACzB,MAAO,CACLC,UADK,SACKH,GACRE,EAASE,YAAaJ,EAAQK,IAAI,SAGpCC,iBALK,SAKYN,GACfE,EAASE,YAAaJ,EAAQK,IAAI,QAClCH,EAASK,YAAWP,KAGtBQ,QAVK,WAWHN,EAASO,mB,GAMdC,Y,0NAee,WACZ,EAAKC,MAAMH,UACX,EAAKG,MAAMR,UAAU,EAAKQ,MAAMX,Y,8CAGhB,WAChB,EAAKW,MAAMH,UACX,EAAKG,MAAML,iBAAiB,EAAKK,MAAMX,Y,2CAG1B,WACb,EAAKW,MAAMH,a,qCAGJ,SAACI,GACR,EAAKC,OAASD,K,6BAnBhBE,kBAAA,WACEC,KAAKF,OAAOG,S,EAqBdC,OAAA,WAAW,IACDjB,EAAYe,KAAKJ,MAAjBX,QAER,OACE,mBAAKkB,UAAU,sCAAf,EACE,mBAAKA,UAAU,+BAAf,EACE,0BACE,YAAC,IAAD,CACEC,GAAG,8BACHC,eAAe,yCACfC,OAAQ,CAAEC,KAAM,mCAAUtB,EAAQK,IAAI,cAK5C,mBAAKa,UAAU,gCAAf,EACE,YAAC,IAAD,CAAQK,QAASR,KAAKS,aAAcN,UAAU,mCAA9C,EACE,YAAC,IAAD,CAAkBC,GAAG,4BAA4BC,eAAe,YAElE,YAAC,IAAD,CAAQG,QAASR,KAAKU,gBAAiBP,UAAU,6CAAjD,EACE,YAAC,IAAD,CAAkBC,GAAG,uCAAuCC,eAAe,oBAE7E,kBAAC,IAAD,CAAQG,QAASR,KAAKW,YAAaC,IAAKZ,KAAKa,QAC3C,YAAC,IAAD,CAAkBT,GAAG,8BAA8BC,eAAe,e,GAvDrDS,IAAMC,iB","file":"flavours/glitch/async/block_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport { makeGetAccount } from '../../../selectors';\nimport Button from '../../../components/button';\nimport { closeModal } from '../../../actions/modal';\nimport { blockAccount } from '../../../actions/accounts';\nimport { initReport } from '../../../actions/reports';\n\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = state => ({\n account: getAccount(state, state.getIn(['blocks', 'new', 'account_id'])),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onConfirm(account) {\n dispatch(blockAccount(account.get('id')));\n },\n\n onBlockAndReport(account) {\n dispatch(blockAccount(account.get('id')));\n dispatch(initReport(account));\n },\n\n onClose() {\n dispatch(closeModal());\n },\n };\n};\n\nexport default @connect(makeMapStateToProps, mapDispatchToProps)\n@injectIntl\nclass BlockModal extends React.PureComponent {\n\n static propTypes = {\n account: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onBlockAndReport: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount() {\n this.button.focus();\n }\n\n handleClick = () => {\n this.props.onClose();\n this.props.onConfirm(this.props.account);\n }\n\n handleSecondary = () => {\n this.props.onClose();\n this.props.onBlockAndReport(this.props.account);\n }\n\n handleCancel = () => {\n this.props.onClose();\n }\n\n setRef = (c) => {\n this.button = c;\n }\n\n render () {\n const { account } = this.props;\n\n return (\n <div className='modal-root__modal block-modal'>\n <div className='block-modal__container'>\n <p>\n <FormattedMessage\n id='confirmations.block.message'\n defaultMessage='Are you sure you want to block {name}?'\n values={{ name: <strong>@{account.get('acct')}</strong> }}\n />\n </p>\n </div>\n\n <div className='block-modal__action-bar'>\n <Button onClick={this.handleCancel} className='block-modal__cancel-button'>\n <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />\n </Button>\n <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'>\n <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' />\n </Button>\n <Button onClick={this.handleClick} ref={this.setRef}>\n <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' />\n </Button>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/blocks.js b/priv/static/packs/flavours/glitch/async/blocks.js
index 868309ca2..7287b772f 100644
--- a/priv/static/packs/flavours/glitch/async/blocks.js
+++ b/priv/static/packs/flavours/glitch/async/blocks.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{777:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return q}));var a,o,c,s=n(0),i=n(2),r=n(7),u=n(1),d=n(62),l=n.n(d),b=(n(3),n(13)),p=n(14),h=n.n(p),j=n(5),f=n.n(j),m=n(299),O=n(1022),g=n(730),M=n(735),k=n(466),v=n(225),y=n(6),w=n(18),I=Object(y.f)({heading:{id:"column.blocks",defaultMessage:"Blocked users"}}),q=Object(b.connect)((function(e){return{accountIds:e.getIn(["user_lists","blocks","items"]),hasMore:!!e.getIn(["user_lists","blocks","next"])}}))(a=Object(y.g)((c=o=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(u.a)(Object(i.a)(t),"handleLoadMore",l()((function(){t.props.dispatch(Object(v.d)())}),300,{leading:!0})),t}Object(r.a)(t,e);var n=t.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(v.e)())},n.render=function(){var e=this.props,t=e.intl,n=e.accountIds,a=e.hasMore,o=e.multiColumn;if(!n)return Object(s.a)(g.a,{},void 0,Object(s.a)(m.a,{}));var c=Object(s.a)(y.b,{id:"empty_column.blocks",defaultMessage:"You haven't blocked any users yet."});return Object(s.a)(g.a,{name:"blocks",bindToDocument:!o,icon:"ban",heading:t.formatMessage(I.heading)},void 0,Object(s.a)(M.a,{}),Object(s.a)(O.a,{scrollKey:"blocks",onLoadMore:this.handleLoadMore,hasMore:a,emptyMessage:c,bindToDocument:!o},void 0,n.map((function(e){return Object(s.a)(k.a,{id:e},e)}))))},t}(w.a),Object(u.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:h.a.list,hasMore:f.a.bool,intl:f.a.object.isRequired,multiColumn:f.a.bool}),a=c))||a)||a}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{803:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return q}));var n,o,c,s=a(0),r=a(2),i=(a(9),a(6),a(8)),u=a(1),d=a(65),l=a.n(d),b=(a(3),a(15)),p=a(16),h=a.n(p),j=a(5),f=a.n(j),m=a(305),O=a(1048),g=a(756),M=a(761),v=a(471),k=a(229),y=a(7),w=a(21);var I=Object(y.f)({heading:{id:"column.blocks",defaultMessage:"Blocked users"}}),q=Object(b.connect)((function(e){return{accountIds:e.getIn(["user_lists","blocks","items"]),hasMore:!!e.getIn(["user_lists","blocks","next"])}}))(n=Object(y.g)((c=o=function(e){Object(i.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleLoadMore",l()((function(){t.props.dispatch(Object(k.d)())}),300,{leading:!0})),t}var n=a.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(k.e)())},n.render=function(){var e=this.props,t=e.intl,a=e.accountIds,n=e.hasMore,o=e.multiColumn;if(!a)return Object(s.a)(g.a,{},void 0,Object(s.a)(m.a,{}));var c=Object(s.a)(y.b,{id:"empty_column.blocks",defaultMessage:"You haven't blocked any users yet."});return(Object(s.a)(g.a,{name:"blocks",bindToDocument:!o,icon:"ban",heading:t.formatMessage(I.heading)},void 0,Object(s.a)(M.a,{}),Object(s.a)(O.a,{scrollKey:"blocks",onLoadMore:this.handleLoadMore,hasMore:n,emptyMessage:c,bindToDocument:!o},void 0,a.map((function(e){return Object(s.a)(v.a,{id:e},e)})))))},a}(w.a),Object(u.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:h.a.list,hasMore:f.a.bool,intl:f.a.object.isRequired,multiColumn:f.a.bool}),n=c))||n)||n}}]);
//# sourceMappingURL=blocks.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/blocks.js.map b/priv/static/packs/flavours/glitch/async/blocks.js.map
index bf2305454..0f1981357 100644
--- a/priv/static/packs/flavours/glitch/async/blocks.js.map
+++ b/priv/static/packs/flavours/glitch/async/blocks.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/blocks/index.js"],"names":["messages","defineMessages","heading","Blocks","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandBlocks","leading","componentWillMount","this","fetchBlocks","render","intl","multiColumn","emptyMessage","id","defaultMessage","name","bindToDocument","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"uTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,qDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,SAAU,UACjDC,UAAWH,EAAME,MAAM,CAAC,aAAc,SAAU,Y,GAIjDE,a,mMAgBkB,KAAS,WACxB,EAAKC,MAAMC,SAASC,iBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC2CF,KAAKL,MAAhDQ,EADA,EACAA,KAAMZ,EADN,EACMA,WAAYE,EADlB,EACkBA,QAASW,EAD3B,EAC2BA,YAEnC,IAAKb,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMc,EAAe,YAAC,IAAD,CAAkBC,GAAG,sBAAsBC,eAAe,uCAE/E,OACE,YAAC,IAAD,CAAQC,KAAK,SAASC,gBAAiBL,EAAaM,KAAK,MAAMvB,QAASgB,EAAKQ,cAAc1B,EAASE,eAApG,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,SACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTY,aAAcA,EACdI,gBAAiBL,QALnB,EAOGb,EAAWwB,KAAI,SAAAT,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,S,GA3CdU,K,0BAEA,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzB7B,WAAY+B,IAAmBC,KAC/B9B,QAASyB,IAAUM,KACnBrB,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUM,O","file":"flavours/glitch/async/blocks.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport ScrollableList from '../../components/scrollable_list';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport { fetchBlocks, expandBlocks } from 'flavours/glitch/actions/blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.blocks', defaultMessage: 'Blocked users' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'blocks', 'items']),\n hasMore: !!state.getIn(['user_lists', 'blocks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Blocks extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchBlocks());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandBlocks());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.blocks' defaultMessage=\"You haven't blocked any users yet.\" />;\n\n return (\n <Column name='blocks' bindToDocument={!multiColumn} icon='ban' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/blocks/index.js"],"names":["messages","defineMessages","heading","Blocks","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandBlocks","leading","componentWillMount","this","fetchBlocks","render","intl","multiColumn","emptyMessage","id","defaultMessage","name","bindToDocument","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"mUAcA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,qDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,SAAU,UACjDC,UAAWH,EAAME,MAAM,CAAC,aAAc,SAAU,Y,GAIjDE,a,8NAgBkB,KAAS,WACxB,EAAKC,MAAMC,SAASC,iBACnB,IAAK,CAAEC,SAAS,K,6BANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC2CF,KAAKL,MAAhDQ,EADA,EACAA,KAAMZ,EADN,EACMA,WAAYE,EADlB,EACkBA,QAASW,EAD3B,EAC2BA,YAEnC,IAAKb,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMc,EAAe,YAAC,IAAD,CAAkBC,GAAG,sBAAsBC,eAAe,uCAE/E,OACE,YAAC,IAAD,CAAQC,KAAK,SAASC,gBAAiBL,EAAaM,KAAK,MAAMvB,QAASgB,EAAKQ,cAAc1B,EAASE,eAApG,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,SACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTY,aAAcA,EACdI,gBAAiBL,QALnB,EAOGb,EAAWwB,KAAI,SAAAT,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,U,GA3CdU,K,0BAEA,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzB7B,WAAY+B,IAAmBC,KAC/B9B,QAASyB,IAAUM,KACnBrB,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUM,O","file":"flavours/glitch/async/blocks.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport ScrollableList from '../../components/scrollable_list';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport { fetchBlocks, expandBlocks } from 'flavours/glitch/actions/blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.blocks', defaultMessage: 'Blocked users' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'blocks', 'items']),\n hasMore: !!state.getIn(['user_lists', 'blocks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Blocks extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchBlocks());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandBlocks());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.blocks' defaultMessage=\"You haven't blocked any users yet.\" />;\n\n return (\n <Column name='blocks' bindToDocument={!multiColumn} icon='ban' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js b/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js
index 7621abf44..45e9d1417 100644
--- a/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js
+++ b/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{776:function(t,e,o){"use strict";o.r(e),o.d(e,"default",(function(){return C}));var a,n,s,i=o(0),c=o(2),r=o(7),u=o(1),l=o(62),d=o.n(l),b=o(3),h=o.n(b),m=o(13),p=o(5),k=o.n(p),O=o(14),j=o.n(O),f=o(202),g=o(730),M=o(732),I=o(249),v=o(1037),w=o(6),y=o(18),L=Object(w.f)({heading:{id:"column.bookmarks",defaultMessage:"Bookmarks"}}),C=Object(m.connect)((function(t){return{statusIds:t.getIn(["status_lists","bookmarks","items"]),isLoading:t.getIn(["status_lists","bookmarks","isLoading"],!0),hasMore:!!t.getIn(["status_lists","bookmarks","next"])}}))(a=Object(w.g)((s=n=function(t){function e(){for(var e,o=arguments.length,a=new Array(o),n=0;n<o;n++)a[n]=arguments[n];return e=t.call.apply(t,[this].concat(a))||this,Object(u.a)(Object(c.a)(e),"handlePin",(function(){var t=e.props,o=t.columnId,a=t.dispatch;a(o?Object(I.h)(o):Object(I.e)("BOOKMARKS",{}))})),Object(u.a)(Object(c.a)(e),"handleMove",(function(t){var o=e.props,a=o.columnId;(0,o.dispatch)(Object(I.g)(a,t))})),Object(u.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(u.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(u.a)(Object(c.a)(e),"handleLoadMore",d()((function(){e.props.dispatch(Object(f.g)())}),300,{leading:!0})),e}Object(r.a)(e,t);var o=e.prototype;return o.componentWillMount=function(){this.props.dispatch(Object(f.h)())},o.render=function(){var t=this.props,e=t.intl,o=t.statusIds,a=t.columnId,n=t.multiColumn,s=t.hasMore,c=t.isLoading,r=!!a,u=Object(i.a)(w.b,{id:"empty_column.bookmarked_statuses",defaultMessage:"You don't have any bookmarked toots yet. When you bookmark one, it will show up here."});return h.a.createElement(g.a,{bindToDocument:!n,ref:this.setRef,name:"bookmarks"},Object(i.a)(M.a,{icon:"bookmark",title:e.formatMessage(L.heading),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:r,multiColumn:n,showBackButton:!0}),Object(i.a)(v.a,{trackScroll:!r,statusIds:o,scrollKey:"bookmarked_statuses-"+a,hasMore:s,isLoading:c,onLoadMore:this.handleLoadMore,emptyMessage:u,bindToDocument:!n}))},e}(y.a),Object(u.a)(n,"propTypes",{dispatch:k.a.func.isRequired,statusIds:j.a.list.isRequired,intl:k.a.object.isRequired,columnId:k.a.string,multiColumn:k.a.bool,hasMore:k.a.bool,isLoading:k.a.bool}),a=s))||a)||a}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{802:function(t,e,o){"use strict";o.r(e),o.d(e,"default",(function(){return C}));var a,n,s,i=o(0),c=o(2),r=(o(9),o(6),o(8)),u=o(1),l=o(65),d=o.n(l),b=o(3),h=o.n(b),m=o(15),p=o(5),k=o.n(p),O=o(16),j=o.n(O),f=o(206),g=o(756),M=o(758),v=o(252),I=o(1064),w=o(7),y=o(21);var L=Object(w.f)({heading:{id:"column.bookmarks",defaultMessage:"Bookmarks"}}),C=Object(m.connect)((function(t){return{statusIds:t.getIn(["status_lists","bookmarks","items"]),isLoading:t.getIn(["status_lists","bookmarks","isLoading"],!0),hasMore:!!t.getIn(["status_lists","bookmarks","next"])}}))(a=Object(w.g)((s=n=function(t){Object(r.a)(o,t);var e;e=o;function o(){for(var e,o=arguments.length,a=new Array(o),n=0;n<o;n++)a[n]=arguments[n];return e=t.call.apply(t,[this].concat(a))||this,Object(u.a)(Object(c.a)(e),"handlePin",(function(){var t=e.props,o=t.columnId,a=t.dispatch;a(o?Object(v.h)(o):Object(v.e)("BOOKMARKS",{}))})),Object(u.a)(Object(c.a)(e),"handleMove",(function(t){var o=e.props,a=o.columnId;(0,o.dispatch)(Object(v.g)(a,t))})),Object(u.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(u.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(u.a)(Object(c.a)(e),"handleLoadMore",d()((function(){e.props.dispatch(Object(f.g)())}),300,{leading:!0})),e}var a=o.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(f.h)())},a.render=function(){var t=this.props,e=t.intl,o=t.statusIds,a=t.columnId,n=t.multiColumn,s=t.hasMore,c=t.isLoading,r=!!a,u=Object(i.a)(w.b,{id:"empty_column.bookmarked_statuses",defaultMessage:"You don't have any bookmarked toots yet. When you bookmark one, it will show up here."});return h.a.createElement(g.a,{bindToDocument:!n,ref:this.setRef,name:"bookmarks"},Object(i.a)(M.a,{icon:"bookmark",title:e.formatMessage(L.heading),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:r,multiColumn:n,showBackButton:!0}),Object(i.a)(I.a,{trackScroll:!r,statusIds:o,scrollKey:"bookmarked_statuses-"+a,hasMore:s,isLoading:c,onLoadMore:this.handleLoadMore,emptyMessage:u,bindToDocument:!n}))},o}(y.a),Object(u.a)(n,"propTypes",{dispatch:k.a.func.isRequired,statusIds:j.a.list.isRequired,intl:k.a.object.isRequired,columnId:k.a.string,multiColumn:k.a.bool,hasMore:k.a.bool,isLoading:k.a.bool}),a=s))||a)||a}}]);
//# sourceMappingURL=bookmarked_statuses.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js.map b/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js.map
index d784d0af2..050a31135 100644
--- a/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js.map
+++ b/priv/static/packs/flavours/glitch/async/bookmarked_statuses.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js"],"names":["messages","defineMessages","heading","Bookmarks","connect","state","statusIds","getIn","isLoading","hasMore","injectIntl","props","columnId","dispatch","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","expandBookmarkedStatuses","leading","componentWillMount","this","fetchBookmarkedStatuses","render","intl","multiColumn","pinned","emptyMessage","id","defaultMessage","bindToDocument","ref","setRef","name","icon","title","formatMessage","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","trackScroll","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","string","bool"],"mappings":"uTAaMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,oDAWHC,EAFUC,mBANQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,YAAa,UACrDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,YAAa,cAAc,GACnEE,UAAWJ,EAAME,MAAM,CAAC,eAAgB,YAAa,Y,GAItDG,a,+LAiBa,WAAO,IAAD,EACe,EAAKC,MAA5BC,EADQ,EACRA,SAAUC,EADF,EACEA,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,YAAa,Q,yCAIvB,SAACC,GAAS,IAAD,EACW,EAAKL,MAA5BC,EADY,EACZA,UACRC,EAFoB,EACFA,UACTI,YAAWL,EAAUI,O,gDAGZ,WAClB,EAAKE,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGC,KAAS,WACxB,EAAKT,MAAME,SAASQ,iBACnB,IAAK,CAAEC,SAAS,K,8CA7BnBC,mBAAA,WACEC,KAAKb,MAAME,SAASY,gB,EA8BtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKb,MAApEgB,EADA,EACAA,KAAMrB,EADN,EACMA,UAAWM,EADjB,EACiBA,SAAUgB,EAD3B,EAC2BA,YAAanB,EADxC,EACwCA,QAASD,EADjD,EACiDA,UACnDqB,IAAWjB,EAEXkB,EAAe,YAAC,IAAD,CAAkBC,GAAG,mCAAmCC,eAAe,0FAE5F,OACE,kBAAC,IAAD,CAAQC,gBAAiBL,EAAaM,IAAKV,KAAKW,OAAQC,KAAK,aAC3D,YAAC,IAAD,CACEC,KAAK,WACLC,MAAOX,EAAKY,cAAcvC,EAASE,SACnCsC,MAAOhB,KAAKiB,UACZC,OAAQlB,KAAKmB,WACbC,QAASpB,KAAKqB,kBACdhB,OAAQA,EACRD,YAAaA,EACbkB,gBAAc,IAGhB,YAAC,IAAD,CACEC,aAAclB,EACdvB,UAAWA,EACX0C,UAAS,uBAAyBpC,EAClCH,QAASA,EACTD,UAAWA,EACXyC,WAAYzB,KAAK0B,eACjBpB,aAAcA,EACdG,gBAAiBL,M,GAtEHuB,K,0BAEH,CACjBtC,SAAUuC,IAAUC,KAAKC,WACzBhD,UAAWiD,IAAmBC,KAAKF,WACnC3B,KAAMyB,IAAUK,OAAOH,WACvB1C,SAAUwC,IAAUM,OACpB9B,YAAawB,IAAUO,KACvBlD,QAAS2C,IAAUO,KACnBnD,UAAW4C,IAAUO,O","file":"flavours/glitch/async/bookmarked_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'flavours/glitch/actions/bookmarks';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'bookmarks', 'items']),\n isLoading: state.getIn(['status_lists', 'bookmarks', 'isLoading'], true),\n hasMore: !!state.getIn(['status_lists', 'bookmarks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Bookmarks extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchBookmarkedStatuses());\n }\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('BOOKMARKS', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandBookmarkedStatuses());\n }, 300, { leading: true })\n\n render () {\n const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;\n const pinned = !!columnId;\n\n const emptyMessage = <FormattedMessage id='empty_column.bookmarked_statuses' defaultMessage=\"You don't have any bookmarked toots yet. When you bookmark one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='bookmarks'>\n <ColumnHeader\n icon='bookmark'\n title={intl.formatMessage(messages.heading)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n />\n\n <StatusList\n trackScroll={!pinned}\n statusIds={statusIds}\n scrollKey={`bookmarked_statuses-${columnId}`}\n hasMore={hasMore}\n isLoading={isLoading}\n onLoadMore={this.handleLoadMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js"],"names":["messages","defineMessages","heading","Bookmarks","connect","state","statusIds","getIn","isLoading","hasMore","injectIntl","props","columnId","dispatch","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","expandBookmarkedStatuses","leading","componentWillMount","this","fetchBookmarkedStatuses","render","intl","multiColumn","pinned","emptyMessage","id","defaultMessage","bindToDocument","ref","setRef","name","icon","title","formatMessage","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","trackScroll","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","string","bool"],"mappings":"mUAaA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,oDAWHC,EAFUC,mBANQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,YAAa,UACrDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,YAAa,cAAc,GACnEE,UAAWJ,EAAME,MAAM,CAAC,eAAgB,YAAa,Y,GAItDG,a,0NAiBa,WAAO,IAAD,EACe,EAAKC,MAA5BC,EADQ,EACRA,SAAUC,EADF,EACEA,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,YAAa,Q,yCAIvB,SAACC,GAAS,IAAD,EACW,EAAKL,MAA5BC,EADY,EACZA,UACRC,EAFoB,EACFA,UACTI,YAAWL,EAAUI,O,gDAGZ,WAClB,EAAKE,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGC,KAAS,WACxB,EAAKT,MAAME,SAASQ,iBACnB,IAAK,CAAEC,SAAS,K,6BA7BnBC,mBAAA,WACEC,KAAKb,MAAME,SAASY,gB,EA8BtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKb,MAApEgB,EADA,EACAA,KAAMrB,EADN,EACMA,UAAWM,EADjB,EACiBA,SAAUgB,EAD3B,EAC2BA,YAAanB,EADxC,EACwCA,QAASD,EADjD,EACiDA,UACnDqB,IAAWjB,EAEXkB,EAAe,YAAC,IAAD,CAAkBC,GAAG,mCAAmCC,eAAe,0FAE5F,OACE,kBAAC,IAAD,CAAQC,gBAAiBL,EAAaM,IAAKV,KAAKW,OAAQC,KAAK,aAC3D,YAAC,IAAD,CACEC,KAAK,WACLC,MAAOX,EAAKY,cAAcvC,EAASE,SACnCsC,MAAOhB,KAAKiB,UACZC,OAAQlB,KAAKmB,WACbC,QAASpB,KAAKqB,kBACdhB,OAAQA,EACRD,YAAaA,EACbkB,gBAAc,IAGhB,YAAC,IAAD,CACEC,aAAclB,EACdvB,UAAWA,EACX0C,UAAS,uBAAyBpC,EAClCH,QAASA,EACTD,UAAWA,EACXyC,WAAYzB,KAAK0B,eACjBpB,aAAcA,EACdG,gBAAiBL,M,GAtEHuB,K,0BAEH,CACjBtC,SAAUuC,IAAUC,KAAKC,WACzBhD,UAAWiD,IAAmBC,KAAKF,WACnC3B,KAAMyB,IAAUK,OAAOH,WACvB1C,SAAUwC,IAAUM,OACpB9B,YAAawB,IAAUO,KACvBlD,QAAS2C,IAAUO,KACnBnD,UAAW4C,IAAUO,O","file":"flavours/glitch/async/bookmarked_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'flavours/glitch/actions/bookmarks';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'bookmarks', 'items']),\n isLoading: state.getIn(['status_lists', 'bookmarks', 'isLoading'], true),\n hasMore: !!state.getIn(['status_lists', 'bookmarks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Bookmarks extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchBookmarkedStatuses());\n }\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('BOOKMARKS', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandBookmarkedStatuses());\n }, 300, { leading: true })\n\n render () {\n const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;\n const pinned = !!columnId;\n\n const emptyMessage = <FormattedMessage id='empty_column.bookmarked_statuses' defaultMessage=\"You don't have any bookmarked toots yet. When you bookmark one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='bookmarks'>\n <ColumnHeader\n icon='bookmark'\n title={intl.formatMessage(messages.heading)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n />\n\n <StatusList\n trackScroll={!pinned}\n statusIds={statusIds}\n scrollKey={`bookmarked_statuses-${columnId}`}\n hasMore={hasMore}\n isLoading={isLoading}\n onLoadMore={this.handleLoadMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/community_timeline.js b/priv/static/packs/flavours/glitch/async/community_timeline.js
index 73d1c24bc..75e21406f 100644
--- a/priv/static/packs/flavours/glitch/async/community_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/community_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{831:function(e,n,t){"use strict";t.r(n);var o,i,c,a=t(0),l=t(2),d=t(7),r=t(1),s=t(3),u=t.n(s),m=t(13),p=t(6),h=t(5),b=t.n(h),f=t(1033),y=t(734),j=t(732),O=t(32),M=t(249),g=t(1115),v=t(69),I=Object(m.connect)((function(e,n){var t=n.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex((function(e){return e.get("uuid")===t}));return{settings:t&&i>=0?o.get(i).get("params"):e.getIn(["settings","community"])}}),(function(e,n){var t=n.columnId;return{onChange:function(n,o){e(t?Object(M.f)(t,n,o):Object(v.c)(["community"].concat(n),o))}}}))(g.a),C=t(739);t.d(n,"default",(function(){return k}));var w=Object(p.f)({title:{id:"column.community",defaultMessage:"Local timeline"}}),k=Object(m.connect)((function(e,n){var t=n.columnId,o=t,i=e.getIn(["settings","columns"]),c=i.findIndex((function(e){return e.get("uuid")===o})),a=t&&c>=0?i.get(c).getIn(["params","other","onlyMedia"]):e.getIn(["settings","community","other","onlyMedia"]),l=e.getIn(["timelines","community"+(a?":media":"")]);return{hasUnread:!!l&&l.get("unread")>0,onlyMedia:a}}))(o=Object(p.g)((c=i=function(e){function n(){for(var n,t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n=e.call.apply(e,[this].concat(o))||this,Object(r.a)(Object(l.a)(n),"handlePin",(function(){var e=n.props,t=e.columnId,o=e.dispatch,i=e.onlyMedia;o(t?Object(M.h)(t):Object(M.e)("COMMUNITY",{other:{onlyMedia:i}}))})),Object(r.a)(Object(l.a)(n),"handleMove",(function(e){var t=n.props,o=t.columnId;(0,t.dispatch)(Object(M.g)(o,e))})),Object(r.a)(Object(l.a)(n),"handleHeaderClick",(function(){n.column.scrollTop()})),Object(r.a)(Object(l.a)(n),"setRef",(function(e){n.column=e})),Object(r.a)(Object(l.a)(n),"handleLoadMore",(function(e){var t=n.props,o=t.dispatch,i=t.onlyMedia;o(Object(O.r)({maxId:e,onlyMedia:i}))})),n}Object(d.a)(n,e);var t=n.prototype;return t.componentDidMount=function(){var e=this.props,n=e.dispatch,t=e.onlyMedia;n(Object(O.r)({onlyMedia:t})),this.disconnect=n(Object(C.a)({onlyMedia:t}))},t.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var n=this.props,t=n.dispatch,o=n.onlyMedia;this.disconnect(),t(Object(O.r)({onlyMedia:o})),this.disconnect=t(Object(C.a)({onlyMedia:o}))}},t.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,n=e.intl,t=e.hasUnread,o=e.columnId,i=e.multiColumn,c=e.onlyMedia,l=!!o;return u.a.createElement(y.a,{ref:this.setRef,name:"local",bindToDocument:!i,label:n.formatMessage(w.title)},Object(a.a)(j.a,{icon:"users",active:t,title:n.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:i},void 0,Object(a.a)(I,{columnId:o})),Object(a.a)(f.a,{trackScroll:!l,scrollKey:"community_timeline-"+o,timelineId:"community"+(c?":media":""),onLoadMore:this.handleLoadMore,emptyMessage:Object(a.a)(p.b,{id:"empty_column.community",defaultMessage:"The local timeline is empty. Write something publicly to get the ball rolling!"}),bindToDocument:!i}))},n}(u.a.PureComponent),Object(r.a)(i,"defaultProps",{onlyMedia:!1}),Object(r.a)(i,"contextTypes",{router:b.a.object}),o=c))||o)||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{857:function(e,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return k}));var o,i,c,a=t(0),l=t(2),d=(t(9),t(6),t(8)),r=t(1),s=t(3),u=t.n(s),m=t(15),p=t(7),h=t(5),b=t.n(h),f=t(1059),y=t(760),j=t(758),O=t(34),M=t(252),g=t(1147),v=t(73),I=Object(m.connect)((function(e,n){var t=n.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex((function(e){return e.get("uuid")===t}));return{settings:t&&i>=0?o.get(i).get("params"):e.getIn(["settings","community"])}}),(function(e,n){var t=n.columnId;return{onChange:function(n,o){e(t?Object(M.f)(t,n,o):Object(v.c)(["community"].concat(n),o))}}}))(g.a),C=t(765);var w=Object(p.f)({title:{id:"column.community",defaultMessage:"Local timeline"}}),k=Object(m.connect)((function(e,n){var t=n.columnId,o=t,i=e.getIn(["settings","columns"]),c=i.findIndex((function(e){return e.get("uuid")===o})),a=t&&c>=0?i.get(c).getIn(["params","other","onlyMedia"]):e.getIn(["settings","community","other","onlyMedia"]),l=e.getIn(["timelines","community"+(a?":media":"")]);return{hasUnread:!!l&&l.get("unread")>0,onlyMedia:a}}))(o=Object(p.g)((c=i=function(e){Object(d.a)(t,e);var n;n=t;function t(){for(var n,t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n=e.call.apply(e,[this].concat(o))||this,Object(r.a)(Object(l.a)(n),"handlePin",(function(){var e=n.props,t=e.columnId,o=e.dispatch,i=e.onlyMedia;o(t?Object(M.h)(t):Object(M.e)("COMMUNITY",{other:{onlyMedia:i}}))})),Object(r.a)(Object(l.a)(n),"handleMove",(function(e){var t=n.props,o=t.columnId;(0,t.dispatch)(Object(M.g)(o,e))})),Object(r.a)(Object(l.a)(n),"handleHeaderClick",(function(){n.column.scrollTop()})),Object(r.a)(Object(l.a)(n),"setRef",(function(e){n.column=e})),Object(r.a)(Object(l.a)(n),"handleLoadMore",(function(e){var t=n.props,o=t.dispatch,i=t.onlyMedia;o(Object(O.r)({maxId:e,onlyMedia:i}))})),n}var o=t.prototype;return o.componentDidMount=function(){var e=this.props,n=e.dispatch,t=e.onlyMedia;n(Object(O.r)({onlyMedia:t})),this.disconnect=n(Object(C.a)({onlyMedia:t}))},o.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var n=this.props,t=n.dispatch,o=n.onlyMedia;this.disconnect(),t(Object(O.r)({onlyMedia:o})),this.disconnect=t(Object(C.a)({onlyMedia:o}))}},o.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},o.render=function(){var e=this.props,n=e.intl,t=e.hasUnread,o=e.columnId,i=e.multiColumn,c=e.onlyMedia,l=!!o;return u.a.createElement(y.a,{ref:this.setRef,name:"local",bindToDocument:!i,label:n.formatMessage(w.title)},Object(a.a)(j.a,{icon:"users",active:t,title:n.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:i},void 0,Object(a.a)(I,{columnId:o})),Object(a.a)(f.a,{trackScroll:!l,scrollKey:"community_timeline-"+o,timelineId:"community"+(c?":media":""),onLoadMore:this.handleLoadMore,emptyMessage:Object(a.a)(p.b,{id:"empty_column.community",defaultMessage:"The local timeline is empty. Write something publicly to get the ball rolling!"}),bindToDocument:!i}))},t}(u.a.PureComponent),Object(r.a)(i,"defaultProps",{onlyMedia:!1}),Object(r.a)(i,"contextTypes",{router:b.a.object}),o=c))||o)||o}}]);
//# sourceMappingURL=community_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/community_timeline.js.map b/priv/static/packs/flavours/glitch/async/community_timeline.js.map
index 690da36f0..da2a24bdf 100644
--- a/priv/static/packs/flavours/glitch/async/community_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/community_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/community_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/community_timeline/index.js"],"names":["connect","state","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","onChange","key","checked","changeColumnParams","changeSetting","ColumnSettings","messages","defineMessages","title","CommunityTimeline","onlyMedia","timelineState","hasUnread","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandCommunityTimeline","componentDidMount","this","disconnect","connectCommunityStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","multiColumn","pinned","ref","setRef","name","bindToDocument","label","formatMessage","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","id","defaultMessage","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/community_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n\n return {\n settings: (uuid && index >= 0) ? columns.get(index).get('params') : state.getIn(['settings', 'community']),\n };\n};\n \nconst mapDispatchToProps = (dispatch, { columnId }) => {\n return {\n onChange (key, checked) {\n if (columnId) {\n dispatch(changeColumnParams(columnId, key, checked));\n } else {\n dispatch(changeSetting(['community', ...key], checked));\n }\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandCommunityTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectCommunityStream } from 'flavours/glitch/actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.community', defaultMessage: 'Local timeline' },\n});\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']);\n const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]);\n\n return {\n hasUnread: !!timelineState && timelineState.get('unread') > 0,\n onlyMedia,\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass CommunityTimeline extends React.PureComponent {\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n onlyMedia: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch, onlyMedia } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('COMMUNITY', { other: { onlyMedia } }));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandCommunityTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.onlyMedia !== this.props.onlyMedia) {\n const { dispatch, onlyMedia } = this.props;\n\n this.disconnect();\n dispatch(expandCommunityTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandCommunityTimeline({ maxId, onlyMedia }));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} name='local' bindToDocument={!multiColumn} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='users'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer columnId={columnId} />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`community_timeline-${columnId}`}\n timelineId={`community${onlyMedia ? ':media' : ''}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/community_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/community_timeline/index.js"],"names":["connect","state","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","onChange","key","checked","changeColumnParams","changeSetting","ColumnSettings","messages","defineMessages","title","CommunityTimeline","onlyMedia","timelineState","hasUnread","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandCommunityTimeline","componentDidMount","this","disconnect","connectCommunityStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","multiColumn","pinned","ref","setRef","name","bindToDocument","label","formatMessage","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","id","defaultMessage","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/community_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n\n return {\n settings: (uuid && index >= 0) ? columns.get(index).get('params') : state.getIn(['settings', 'community']),\n };\n};\n \nconst mapDispatchToProps = (dispatch, { columnId }) => {\n return {\n onChange (key, checked) {\n if (columnId) {\n dispatch(changeColumnParams(columnId, key, checked));\n } else {\n dispatch(changeSetting(['community', ...key], checked));\n }\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandCommunityTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectCommunityStream } from 'flavours/glitch/actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.community', defaultMessage: 'Local timeline' },\n});\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']);\n const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]);\n\n return {\n hasUnread: !!timelineState && timelineState.get('unread') > 0,\n onlyMedia,\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass CommunityTimeline extends React.PureComponent {\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n onlyMedia: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch, onlyMedia } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('COMMUNITY', { other: { onlyMedia } }));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandCommunityTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.onlyMedia !== this.props.onlyMedia) {\n const { dispatch, onlyMedia } = this.props;\n\n this.disconnect();\n dispatch(expandCommunityTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandCommunityTimeline({ maxId, onlyMedia }));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} name='local' bindToDocument={!multiColumn} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='users'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer columnId={columnId} />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`community_timeline-${columnId}`}\n timelineId={`community${onlyMedia ? ':media' : ''}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/compose.js b/priv/static/packs/flavours/glitch/async/compose.js
index 18da703a5..dbbe43090 100644
--- a/priv/static/packs/flavours/glitch/async/compose.js
+++ b/priv/static/packs/flavours/glitch/async/compose.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{572:function(t,e,n){"use strict";var a=n(13),o=n(6),i=n(540),r=n(19),c=n(42),s=n(303),l=n(306),u=Object(o.f)({missingDescriptionMessage:{id:"confirmations.missing_media_description.message",defaultMessage:"At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot."},missingDescriptionConfirm:{id:"confirmations.missing_media_description.confirm",defaultMessage:"Send anyway"},missingDescriptionEdit:{id:"confirmations.missing_media_description.edit",defaultMessage:"Edit media"}});e.a=Object(o.g)(Object(a.connect)((function(t){var e=t.getIn(["local_settings","always_show_spoilers_field"]),n=t.getIn(["compose","in_reply_to"]),a=n?t.getIn(["statuses",n,"visibility"]):null,o=t.getIn(["local_settings","side_arm"]),i=a?Object(l.a)(a,o):null,r=null;switch(t.getIn(["local_settings","side_arm_reply_mode"])){case"copy":r=a;break;case"restrict":r=i}return r=r||o,{advancedOptions:t.getIn(["compose","advanced_options"]),focusDate:t.getIn(["compose","focusDate"]),caretPosition:t.getIn(["compose","caretPosition"]),isSubmitting:t.getIn(["compose","is_submitting"]),isChangingUpload:t.getIn(["compose","is_changing_upload"]),isUploading:t.getIn(["compose","is_uploading"]),layout:t.getIn(["local_settings","layout"]),media:t.getIn(["compose","media_attachments"]),preselectDate:t.getIn(["compose","preselectDate"]),privacy:t.getIn(["compose","privacy"]),sideArm:r,sensitive:t.getIn(["compose","sensitive"]),showSearch:t.getIn(["search","submitted"])&&!t.getIn(["search","hidden"]),spoiler:e||t.getIn(["compose","spoiler"]),spoilerText:t.getIn(["compose","spoiler_text"]),suggestions:t.getIn(["compose","suggestions"]),text:t.getIn(["compose","text"]),anyMedia:t.getIn(["compose","media_attachments"]).size>0,spoilersAlwaysOn:e,mediaDescriptionConfirmation:t.getIn(["local_settings","confirm_missing_media_description"]),preselectOnReply:t.getIn(["local_settings","preselect_on_reply"])}}),(function(t,e){var n=e.intl;return{onChange:function(e){t(Object(r.Q)(e))},onSubmit:function(e){t(Object(r.ob)(e))},onClearSuggestions:function(){t(Object(r.ab)())},onFetchSuggestions:function(e){t(Object(r.eb)(e))},onSuggestionSelected:function(e,n,a,o){t(Object(r.nb)(e,n,a,o))},onChangeSpoilerText:function(e){t(Object(r.U)(e))},onPaste:function(e){t(Object(r.rb)(e))},onPickEmoji:function(e,n){t(Object(r.gb)(e,n))},onChangeSpoilerness:function(){t(Object(r.V)())},onChangeVisibility:function(e){t(Object(r.W)(e))},onMediaDescriptionConfirm:function(e,a){t(Object(c.d)("CONFIRM",{message:n.formatMessage(u.missingDescriptionMessage),confirm:n.formatMessage(u.missingDescriptionConfirm),onConfirm:function(){return t(Object(r.ob)(e))},secondary:n.formatMessage(u.missingDescriptionEdit),onSecondary:function(){return t(Object(c.d)("FOCAL_POINT",{id:a}))},onDoNotAsk:function(){return t(Object(s.b)(["confirm_missing_media_description"],!1))}}))}}}))(i.a))},60:function(t,e,n){var a,o;(function(){(function(){(function(){this.Rails={linkClickSelector:"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]",buttonClickSelector:{selector:"button[data-remote]:not([form]), button[data-confirm]:not([form])",exclude:"form button"},inputChangeSelector:"select[data-remote], input[data-remote], textarea[data-remote]",formSubmitSelector:"form",formInputClickSelector:"form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])",formDisableSelector:"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled",formEnableSelector:"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled",fileInputSelector:"input[name][type=file]:not([disabled])",linkDisableSelector:"a[data-disable-with], a[data-disable]",buttonDisableSelector:"button[data-remote][data-disable-with], button[data-remote][data-disable]"}}).call(this)}).call(this);var i=this.Rails;(function(){(function(){var t;t=null,i.loadCSPNonce=function(){var e;return t=null!=(e=document.querySelector("meta[name=csp-nonce]"))?e.content:void 0},i.cspNonce=function(){return null!=t?t:i.loadCSPNonce()}}).call(this),function(){var t;t=Element.prototype.matches||Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector,i.matches=function(e,n){return null!=n.exclude?t.call(e,n.selector)&&!t.call(e,n.exclude):t.call(e,n)},i.getData=function(t,e){var n;return null!=(n=t._ujsData)?n[e]:void 0},i.setData=function(t,e,n){return null==t._ujsData&&(t._ujsData={}),t._ujsData[e]=n},i.$=function(t){return Array.prototype.slice.call(document.querySelectorAll(t))}}.call(this),function(){var t,e,n;t=i.$,n=i.csrfToken=function(){var t;return(t=document.querySelector("meta[name=csrf-token]"))&&t.content},e=i.csrfParam=function(){var t;return(t=document.querySelector("meta[name=csrf-param]"))&&t.content},i.CSRFProtection=function(t){var e;if(null!=(e=n()))return t.setRequestHeader("X-CSRF-Token",e)},i.refreshCSRFTokens=function(){var a,o;if(o=n(),a=e(),null!=o&&null!=a)return t('form input[name="'+a+'"]').forEach((function(t){return t.value=o}))}}.call(this),function(){var t,e,n,a;n=i.matches,"function"!=typeof(t=window.CustomEvent)&&((t=function(t,e){var n;return(n=document.createEvent("CustomEvent")).initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}).prototype=window.Event.prototype,a=t.prototype.preventDefault,t.prototype.preventDefault=function(){var t;return t=a.call(this),this.cancelable&&!this.defaultPrevented&&Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),t}),e=i.fire=function(e,n,a){var o;return o=new t(n,{bubbles:!0,cancelable:!0,detail:a}),e.dispatchEvent(o),!o.defaultPrevented},i.stopEverything=function(t){return e(t.target,"ujs:everythingStopped"),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()},i.delegate=function(t,e,a,o){return t.addEventListener(a,(function(t){var a;for(a=t.target;a instanceof Element&&!n(a,e);)a=a.parentNode;if(a instanceof Element&&!1===o.call(a,t))return t.preventDefault(),t.stopPropagation()}))}}.call(this),function(){var t,e,n,a,o,r;a=i.cspNonce,e=i.CSRFProtection,i.fire,t={"*":"*/*",text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript",script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},i.ajax=function(t){var e;return t=o(t),e=n(t,(function(){var n,a;return a=r(null!=(n=e.response)?n:e.responseText,e.getResponseHeader("Content-Type")),2===Math.floor(e.status/100)?"function"==typeof t.success&&t.success(a,e.statusText,e):"function"==typeof t.error&&t.error(a,e.statusText,e),"function"==typeof t.complete?t.complete(e,e.statusText):void 0})),!(null!=t.beforeSend&&!t.beforeSend(e,t))&&(e.readyState===XMLHttpRequest.OPENED?e.send(t.data):void 0)},o=function(e){return e.url=e.url||location.href,e.type=e.type.toUpperCase(),"GET"===e.type&&e.data&&(e.url.indexOf("?")<0?e.url+="?"+e.data:e.url+="&"+e.data),null==t[e.dataType]&&(e.dataType="*"),e.accept=t[e.dataType],"*"!==e.dataType&&(e.accept+=", */*; q=0.01"),e},n=function(t,n){var a;return(a=new XMLHttpRequest).open(t.type,t.url,!0),a.setRequestHeader("Accept",t.accept),"string"==typeof t.data&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),t.crossDomain||a.setRequestHeader("X-Requested-With","XMLHttpRequest"),e(a),a.withCredentials=!!t.withCredentials,a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)return n(a)},a},r=function(t,e){var n,o;if("string"==typeof t&&"string"==typeof e)if(e.match(/\bjson\b/))try{t=JSON.parse(t)}catch(t){}else if(e.match(/\b(?:java|ecma)script\b/))(o=document.createElement("script")).setAttribute("nonce",a()),o.text=t,document.head.appendChild(o).parentNode.removeChild(o);else if(e.match(/\b(xml|html|svg)\b/)){n=new DOMParser,e=e.replace(/;.+/,"");try{t=n.parseFromString(t,e)}catch(t){}}return t},i.href=function(t){return t.href},i.isCrossDomain=function(t){var e,n;(e=document.createElement("a")).href=location.href,n=document.createElement("a");try{return n.href=t,!((!n.protocol||":"===n.protocol)&&!n.host||e.protocol+"//"+e.host==n.protocol+"//"+n.host)}catch(t){return t,!0}}}.call(this),function(){var t,e;t=i.matches,e=function(t){return Array.prototype.slice.call(t)},i.serializeElement=function(n,a){var o,i;return o=[n],t(n,"form")&&(o=e(n.elements)),i=[],o.forEach((function(n){if(n.name&&!n.disabled)return t(n,"select")?e(n.options).forEach((function(t){if(t.selected)return i.push({name:n.name,value:t.value})})):n.checked||-1===["radio","checkbox","submit"].indexOf(n.type)?i.push({name:n.name,value:n.value}):void 0})),a&&i.push(a),i.map((function(t){return null!=t.name?encodeURIComponent(t.name)+"="+encodeURIComponent(t.value):t})).join("&")},i.formElements=function(n,a){return t(n,"form")?e(n.elements).filter((function(e){return t(e,a)})):e(n.querySelectorAll(a))}}.call(this),function(){var t,e,n;e=i.fire,n=i.stopEverything,i.handleConfirm=function(e){if(!t(this))return n(e)},t=function(t){var n,a,o;if(!(o=t.getAttribute("data-confirm")))return!0;if(n=!1,e(t,"confirm")){try{n=confirm(o)}catch(t){}a=e(t,"confirm:complete",[n])}return n&&a}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u,d;l=i.matches,s=i.getData,u=i.setData,d=i.stopEverything,c=i.formElements,i.handleDisabledElement=function(t){if(this,this.disabled)return d(t)},i.enableElement=function(t){var e;return e=t instanceof Event?t.target:t,l(e,i.linkDisableSelector)?r(e):l(e,i.buttonDisableSelector)||l(e,i.formEnableSelector)?a(e):l(e,i.formSubmitSelector)?o(e):void 0},i.disableElement=function(a){var o;return o=a instanceof Event?a.target:a,l(o,i.linkDisableSelector)?n(o):l(o,i.buttonDisableSelector)||l(o,i.formDisableSelector)?t(o):l(o,i.formSubmitSelector)?e(o):void 0},n=function(t){var e;return null!=(e=t.getAttribute("data-disable-with"))&&(u(t,"ujs:enable-with",t.innerHTML),t.innerHTML=e),t.addEventListener("click",d),u(t,"ujs:disabled",!0)},r=function(t){var e;return null!=(e=s(t,"ujs:enable-with"))&&(t.innerHTML=e,u(t,"ujs:enable-with",null)),t.removeEventListener("click",d),u(t,"ujs:disabled",null)},e=function(e){return c(e,i.formDisableSelector).forEach(t)},t=function(t){var e;return null!=(e=t.getAttribute("data-disable-with"))&&(l(t,"button")?(u(t,"ujs:enable-with",t.innerHTML),t.innerHTML=e):(u(t,"ujs:enable-with",t.value),t.value=e)),t.disabled=!0,u(t,"ujs:disabled",!0)},o=function(t){return c(t,i.formEnableSelector).forEach(a)},a=function(t){var e;return null!=(e=s(t,"ujs:enable-with"))&&(l(t,"button")?t.innerHTML=e:t.value=e,u(t,"ujs:enable-with",null)),t.disabled=!1,u(t,"ujs:disabled",null)}}.call(this),function(){var t;t=i.stopEverything,i.handleMethod=function(e){var n,a,o,r,c,s;if(this,s=this.getAttribute("data-method"))return c=i.href(this),a=i.csrfToken(),n=i.csrfParam(),o=document.createElement("form"),r="<input name='_method' value='"+s+"' type='hidden' />",null==n||null==a||i.isCrossDomain(c)||(r+="<input name='"+n+"' value='"+a+"' type='hidden' />"),r+='<input type="submit" />',o.method="post",o.action=c,o.target=this.target,o.innerHTML=r,o.style.display="none",document.body.appendChild(o),o.querySelector('[type="submit"]').click(),t(e)}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u=[].slice;r=i.matches,n=i.getData,s=i.setData,e=i.fire,l=i.stopEverything,t=i.ajax,a=i.isCrossDomain,c=i.serializeElement,o=function(t){var e;return null!=(e=t.getAttribute("data-remote"))&&"false"!==e},i.handleRemote=function(d){var m,f,p,b,g,h,v;return!o(b=this)||(e(b,"ajax:before")?(v=b.getAttribute("data-with-credentials"),p=b.getAttribute("data-type")||"script",r(b,i.formSubmitSelector)?(m=n(b,"ujs:submit-button"),g=n(b,"ujs:submit-button-formmethod")||b.method,h=n(b,"ujs:submit-button-formaction")||b.getAttribute("action")||location.href,"GET"===g.toUpperCase()&&(h=h.replace(/\?.*$/,"")),"multipart/form-data"===b.enctype?(f=new FormData(b),null!=m&&f.append(m.name,m.value)):f=c(b,m),s(b,"ujs:submit-button",null),s(b,"ujs:submit-button-formmethod",null),s(b,"ujs:submit-button-formaction",null)):r(b,i.buttonClickSelector)||r(b,i.inputChangeSelector)?(g=b.getAttribute("data-method"),h=b.getAttribute("data-url"),f=c(b,b.getAttribute("data-params"))):(g=b.getAttribute("data-method"),h=i.href(b),f=b.getAttribute("data-params")),t({type:g||"GET",url:h,data:f,dataType:p,beforeSend:function(t,n){return e(b,"ajax:beforeSend",[t,n])?e(b,"ajax:send",[t]):(e(b,"ajax:stopped"),!1)},success:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:success",t)},error:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:error",t)},complete:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:complete",t)},crossDomain:a(h),withCredentials:null!=v&&"false"!==v}),l(d)):(e(b,"ajax:stopped"),!1))},i.formSubmitButtonClick=function(t){var e;if(this,e=this.form)return this.name&&s(e,"ujs:submit-button",{name:this.name,value:this.value}),s(e,"ujs:formnovalidate-button",this.formNoValidate),s(e,"ujs:submit-button-formaction",this.getAttribute("formaction")),s(e,"ujs:submit-button-formmethod",this.getAttribute("formmethod"))},i.preventInsignificantClick=function(t){var e,n,a;if(this,a=(this.getAttribute("data-method")||"GET").toUpperCase(),e=this.getAttribute("data-params"),n=(t.metaKey||t.ctrlKey)&&"GET"===a&&!e,null!=t.button&&0!==t.button||n)return t.stopImmediatePropagation()}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u,d,m,f,p,b;if(r=i.fire,n=i.delegate,s=i.getData,t=i.$,b=i.refreshCSRFTokens,e=i.CSRFProtection,f=i.loadCSPNonce,o=i.enableElement,a=i.disableElement,u=i.handleDisabledElement,l=i.handleConfirm,p=i.preventInsignificantClick,m=i.handleRemote,c=i.formSubmitButtonClick,d=i.handleMethod,"undefined"!=typeof jQuery&&null!==jQuery&&null!=jQuery.ajax){if(jQuery.rails)throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only.");jQuery.rails=i,jQuery.ajaxPrefilter((function(t,n,a){if(!t.crossDomain)return e(a)}))}i.start=function(){if(window._rails_loaded)throw new Error("rails-ujs has already been loaded!");return window.addEventListener("pageshow",(function(){return t(i.formEnableSelector).forEach((function(t){if(s(t,"ujs:disabled"))return o(t)})),t(i.linkDisableSelector).forEach((function(t){if(s(t,"ujs:disabled"))return o(t)}))})),n(document,i.linkDisableSelector,"ajax:complete",o),n(document,i.linkDisableSelector,"ajax:stopped",o),n(document,i.buttonDisableSelector,"ajax:complete",o),n(document,i.buttonDisableSelector,"ajax:stopped",o),n(document,i.linkClickSelector,"click",p),n(document,i.linkClickSelector,"click",u),n(document,i.linkClickSelector,"click",l),n(document,i.linkClickSelector,"click",a),n(document,i.linkClickSelector,"click",m),n(document,i.linkClickSelector,"click",d),n(document,i.buttonClickSelector,"click",p),n(document,i.buttonClickSelector,"click",u),n(document,i.buttonClickSelector,"click",l),n(document,i.buttonClickSelector,"click",a),n(document,i.buttonClickSelector,"click",m),n(document,i.inputChangeSelector,"change",u),n(document,i.inputChangeSelector,"change",l),n(document,i.inputChangeSelector,"change",m),n(document,i.formSubmitSelector,"submit",u),n(document,i.formSubmitSelector,"submit",l),n(document,i.formSubmitSelector,"submit",m),n(document,i.formSubmitSelector,"submit",(function(t){return setTimeout((function(){return a(t)}),13)})),n(document,i.formSubmitSelector,"ajax:send",a),n(document,i.formSubmitSelector,"ajax:complete",o),n(document,i.formInputClickSelector,"click",p),n(document,i.formInputClickSelector,"click",u),n(document,i.formInputClickSelector,"click",l),n(document,i.formInputClickSelector,"click",c),document.addEventListener("DOMContentLoaded",b),document.addEventListener("DOMContentLoaded",f),window._rails_loaded=!0},window.Rails===i&&r(document,"rails:attachBindings")&&i.start()}.call(this)}).call(this),t.exports?t.exports=i:void 0===(o="function"==typeof(a=i)?a.call(e,n,e,t):a)||(t.exports=o)}).call(this)},758:function(t,e,n){"use strict";var a=n(13),o=n(742),i=n(16);e.a=Object(a.connect)((function(t){return{account:t.getIn(["accounts",i.m])}}))(o.a)},812:function(t,e,n){"use strict";n.r(e);var a,o,i,r,c=n(0),s=n(7),l=n(3),u=n.n(l),d=n(572),m=n(758),f=n(13),p=n(19),b=n(6),g=n(12),h=n.n(g),v=n(747),j=n(92),y=n(34),S=n.n(y),C=n(1144),O=n(16),k=n(42),_=n(2),w=n(1),E=n(5),M=n.n(E),D=n(14),x=n.n(D),I=n(316),T=n(18),A=n(23),N=n(302),P=n(145),L=Object(b.f)({community:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},logout:{id:"navigation_bar.logout",defaultMessage:"Logout"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},settings:{id:"navigation_bar.app_settings",defaultMessage:"App settings"},start:{id:"getting_started.heading",defaultMessage:"Getting started"}}),R=Object(b.g)((i=o=function(t){function e(){for(var e,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return e=t.call.apply(t,[this].concat(a))||this,Object(w.a)(Object(_.a)(e),"handleLogoutClick",(function(t){return t.preventDefault(),t.stopPropagation(),e.props.onLogout(),!1})),e}return Object(s.a)(e,t),e.prototype.render=function(){var t=this.props,e=t.intl,n=t.columns,a=t.unreadNotifications,o=t.showNotificationsBadge,i=t.onSettingsClick,r=N.b.bind(null,(function(t){return!n||!n.some((function(e){return e.get("id")===t}))}));return Object(c.a)("nav",{className:"drawer--header"},void 0,Object(c.a)(I.a,{"aria-label":e.formatMessage(L.start),title:e.formatMessage(L.start),to:"/getting-started"},void 0,Object(c.a)(A.a,{id:"asterisk"})),r("HOME",Object(c.a)(I.a,{"aria-label":e.formatMessage(L.home_timeline),title:e.formatMessage(L.home_timeline),to:"/timelines/home"},void 0,Object(c.a)(A.a,{id:"home"}))),r("NOTIFICATIONS",Object(c.a)(I.a,{"aria-label":e.formatMessage(L.notifications),title:e.formatMessage(L.notifications),to:"/notifications"},void 0,Object(c.a)("span",{className:"icon-badge-wrapper"},void 0,Object(c.a)(A.a,{id:"bell"}),o&&a>0&&Object(c.a)("div",{className:"icon-badge"})))),r("COMMUNITY",Object(c.a)(I.a,{"aria-label":e.formatMessage(L.community),title:e.formatMessage(L.community),to:"/timelines/public/local"},void 0,Object(c.a)(A.a,{id:"users"}))),r("PUBLIC",Object(c.a)(I.a,{"aria-label":e.formatMessage(L.public),title:e.formatMessage(L.public),to:"/timelines/public"},void 0,Object(c.a)(A.a,{id:"globe"}))),Object(c.a)("a",{"aria-label":e.formatMessage(L.settings),onClick:i,href:"#",title:e.formatMessage(L.settings)},void 0,Object(c.a)(A.a,{id:"cogs"})),Object(c.a)("a",{"aria-label":e.formatMessage(L.logout),onClick:this.handleLogoutClick,href:P.f,title:e.formatMessage(L.logout)},void 0,Object(c.a)(A.a,{id:"sign-out"})))},e}(T.a),Object(w.a)(o,"propTypes",{columns:x.a.list,unreadNotifications:M.a.number,showNotificationsBadge:M.a.bool,intl:M.a.object,onSettingsClick:M.a.func,onLogout:M.a.func.isRequired}),a=i))||a,q=n(60),H=n.n(q),F=Object(b.f)({logoutMessage:{id:"confirmations.logout.message",defaultMessage:"Are you sure you want to log out?"},logoutConfirm:{id:"confirmations.logout.confirm",defaultMessage:"Log out"}}),U=Object(b.g)(Object(f.connect)((function(t){return{columns:t.getIn(["settings","columns"]),unreadNotifications:t.getIn(["notifications","unread"]),showNotificationsBadge:t.getIn(["local_settings","notifications","tab_badge"])}}),(function(t,e){var n=e.intl;return{onSettingsClick:function(e){e.preventDefault(),e.stopPropagation(),t(Object(k.d)("SETTINGS",{}))},onLogout:function(){t(Object(k.d)("CONFIRM",{message:n.formatMessage(F.logoutMessage),confirm:n.formatMessage(F.logoutConfirm),onConfirm:function(){return function(){var t=document.createElement("form"),e=document.createElement("input");e.setAttribute("name","_method"),e.setAttribute("value","delete"),e.setAttribute("type","hidden"),t.appendChild(e);var n=H.a.csrfToken(),a=H.a.csrfParam();if(a&&n){var o=document.createElement("input");o.setAttribute("name",a),o.setAttribute("value",n),o.setAttribute("type","hidden"),t.appendChild(o)}var i=document.createElement("input");i.setAttribute("type","submit"),t.appendChild(i),t.method="post",t.action=P.f,t.style.display="none",document.body.appendChild(t),i.click()}()}}))}}}))(R));n.d(e,"default",(function(){return G}));var B=Object(b.f)({compose:{id:"navigation_bar.compose",defaultMessage:"Compose new toot"}}),G=Object(f.connect)((function(t,e){return{showSearch:e.multiColumn?t.getIn(["search","submitted"])&&!t.getIn(["search","hidden"]):e.isSearchPage}}),(function(t,e){e.intl;return{onMount:function(){t(Object(p.ib)())},onUnmount:function(){t(Object(p.qb)())}}}))(r=Object(b.g)(r=function(t){function e(){return t.apply(this,arguments)||this}Object(s.a)(e,t);var n=e.prototype;return n.componentDidMount=function(){this.props.isSearchPage||this.props.onMount()},n.componentWillUnmount=function(){this.props.isSearchPage||this.props.onUnmount()},n.render=function(){var t=this.props,e=t.intl,n=t.multiColumn,a=t.isSearchPage,o=t.showSearch,i=h()("drawer","mbstobon");return Object(c.a)("div",{className:i,role:"region","aria-label":e.formatMessage(B.compose)},void 0,n&&Object(c.a)(U,{}),(n||a)&&Object(c.a)(v.a,{}),Object(c.a)("div",{className:"drawer__pager"},void 0,!a&&Object(c.a)("div",{className:"drawer__inner"},void 0,Object(c.a)(m.a,{}),Object(c.a)(d.a,{}),Object(c.a)("div",{className:"drawer__inner__mastodon"},void 0,O.k?Object(c.a)("img",{alt:"",draggable:"false",src:O.k}):Object(c.a)("button",{className:"mastodon"}))),Object(c.a)(j.a,{defaultStyle:{x:a?0:-100},style:{x:S()(o||a?0:-100,{stiffness:210,damping:20})}},void 0,(function(t){var e=t.x;return Object(c.a)("div",{className:"drawer__inner darker",style:{transform:"translateX("+e+"%)",visibility:-100===e?"hidden":"visible"}},void 0,Object(c.a)(C.a,{}))}))))},e}(u.a.PureComponent))||r)||r}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{580:function(t,e,n){"use strict";var a=n(15),o=n(7),i=n(548),r=n(20),c=n(45),s=n(309),l=n(312),u=Object(o.f)({missingDescriptionMessage:{id:"confirmations.missing_media_description.message",defaultMessage:"At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot."},missingDescriptionConfirm:{id:"confirmations.missing_media_description.confirm",defaultMessage:"Send anyway"},missingDescriptionEdit:{id:"confirmations.missing_media_description.edit",defaultMessage:"Edit media"}});e.a=Object(o.g)(Object(a.connect)((function(t){var e=t.getIn(["local_settings","always_show_spoilers_field"]),n=t.getIn(["compose","in_reply_to"]),a=n?t.getIn(["statuses",n,"visibility"]):null,o=t.getIn(["local_settings","side_arm"]),i=a?Object(l.a)(a,o):null,r=null;switch(t.getIn(["local_settings","side_arm_reply_mode"])){case"copy":r=a;break;case"restrict":r=i}return r=r||o,{advancedOptions:t.getIn(["compose","advanced_options"]),focusDate:t.getIn(["compose","focusDate"]),caretPosition:t.getIn(["compose","caretPosition"]),isSubmitting:t.getIn(["compose","is_submitting"]),isChangingUpload:t.getIn(["compose","is_changing_upload"]),isUploading:t.getIn(["compose","is_uploading"]),layout:t.getIn(["local_settings","layout"]),media:t.getIn(["compose","media_attachments"]),preselectDate:t.getIn(["compose","preselectDate"]),privacy:t.getIn(["compose","privacy"]),sideArm:r,sensitive:t.getIn(["compose","sensitive"]),showSearch:t.getIn(["search","submitted"])&&!t.getIn(["search","hidden"]),spoiler:e||t.getIn(["compose","spoiler"]),spoilerText:t.getIn(["compose","spoiler_text"]),suggestions:t.getIn(["compose","suggestions"]),text:t.getIn(["compose","text"]),anyMedia:t.getIn(["compose","media_attachments"]).size>0,spoilersAlwaysOn:e,mediaDescriptionConfirmation:t.getIn(["local_settings","confirm_missing_media_description"]),preselectOnReply:t.getIn(["local_settings","preselect_on_reply"])}}),(function(t,e){var n=e.intl;return{onChange:function(e){t(Object(r.Q)(e))},onSubmit:function(e){t(Object(r.ob)(e))},onClearSuggestions:function(){t(Object(r.ab)())},onFetchSuggestions:function(e){t(Object(r.eb)(e))},onSuggestionSelected:function(e,n,a,o){t(Object(r.nb)(e,n,a,o))},onChangeSpoilerText:function(e){t(Object(r.U)(e))},onPaste:function(e){t(Object(r.rb)(e))},onPickEmoji:function(e,n){t(Object(r.gb)(e,n))},onChangeSpoilerness:function(){t(Object(r.V)())},onChangeVisibility:function(e){t(Object(r.W)(e))},onMediaDescriptionConfirm:function(e,a,o){void 0===o&&(o=null),t(Object(c.d)("CONFIRM",{message:n.formatMessage(u.missingDescriptionMessage),confirm:n.formatMessage(u.missingDescriptionConfirm),onConfirm:function(){o&&t(Object(r.W)(o)),t(Object(r.ob)(e))},secondary:n.formatMessage(u.missingDescriptionEdit),onSecondary:function(){return t(Object(c.d)("FOCAL_POINT",{id:a}))},onDoNotAsk:function(){return t(Object(s.b)(["confirm_missing_media_description"],!1))}}))}}}))(i.a))},61:function(t,e,n){var a,o;(function(){(function(){(function(){this.Rails={linkClickSelector:"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]",buttonClickSelector:{selector:"button[data-remote]:not([form]), button[data-confirm]:not([form])",exclude:"form button"},inputChangeSelector:"select[data-remote], input[data-remote], textarea[data-remote]",formSubmitSelector:"form",formInputClickSelector:"form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])",formDisableSelector:"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled",formEnableSelector:"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled",fileInputSelector:"input[name][type=file]:not([disabled])",linkDisableSelector:"a[data-disable-with], a[data-disable]",buttonDisableSelector:"button[data-remote][data-disable-with], button[data-remote][data-disable]"}}).call(this)}).call(this);var i=this.Rails;(function(){(function(){var t;t=null,i.loadCSPNonce=function(){var e;return t=null!=(e=document.querySelector("meta[name=csp-nonce]"))?e.content:void 0},i.cspNonce=function(){return null!=t?t:i.loadCSPNonce()}}).call(this),function(){var t;t=Element.prototype.matches||Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector,i.matches=function(e,n){return null!=n.exclude?t.call(e,n.selector)&&!t.call(e,n.exclude):t.call(e,n)},i.getData=function(t,e){var n;return null!=(n=t._ujsData)?n[e]:void 0},i.setData=function(t,e,n){return null==t._ujsData&&(t._ujsData={}),t._ujsData[e]=n},i.$=function(t){return Array.prototype.slice.call(document.querySelectorAll(t))}}.call(this),function(){var t,e,n;t=i.$,n=i.csrfToken=function(){var t;return(t=document.querySelector("meta[name=csrf-token]"))&&t.content},e=i.csrfParam=function(){var t;return(t=document.querySelector("meta[name=csrf-param]"))&&t.content},i.CSRFProtection=function(t){var e;if(null!=(e=n()))return t.setRequestHeader("X-CSRF-Token",e)},i.refreshCSRFTokens=function(){var a,o;if(o=n(),a=e(),null!=o&&null!=a)return t('form input[name="'+a+'"]').forEach((function(t){return t.value=o}))}}.call(this),function(){var t,e,n,a;n=i.matches,"function"!=typeof(t=window.CustomEvent)&&((t=function(t,e){var n;return(n=document.createEvent("CustomEvent")).initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}).prototype=window.Event.prototype,a=t.prototype.preventDefault,t.prototype.preventDefault=function(){var t;return t=a.call(this),this.cancelable&&!this.defaultPrevented&&Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),t}),e=i.fire=function(e,n,a){var o;return o=new t(n,{bubbles:!0,cancelable:!0,detail:a}),e.dispatchEvent(o),!o.defaultPrevented},i.stopEverything=function(t){return e(t.target,"ujs:everythingStopped"),t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()},i.delegate=function(t,e,a,o){return t.addEventListener(a,(function(t){var a;for(a=t.target;a instanceof Element&&!n(a,e);)a=a.parentNode;if(a instanceof Element&&!1===o.call(a,t))return t.preventDefault(),t.stopPropagation()}))}}.call(this),function(){var t,e,n,a,o,r;a=i.cspNonce,e=i.CSRFProtection,i.fire,t={"*":"*/*",text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript",script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},i.ajax=function(t){var e;return t=o(t),e=n(t,(function(){var n,a;return a=r(null!=(n=e.response)?n:e.responseText,e.getResponseHeader("Content-Type")),2===Math.floor(e.status/100)?"function"==typeof t.success&&t.success(a,e.statusText,e):"function"==typeof t.error&&t.error(a,e.statusText,e),"function"==typeof t.complete?t.complete(e,e.statusText):void 0})),!(null!=t.beforeSend&&!t.beforeSend(e,t))&&(e.readyState===XMLHttpRequest.OPENED?e.send(t.data):void 0)},o=function(e){return e.url=e.url||location.href,e.type=e.type.toUpperCase(),"GET"===e.type&&e.data&&(e.url.indexOf("?")<0?e.url+="?"+e.data:e.url+="&"+e.data),null==t[e.dataType]&&(e.dataType="*"),e.accept=t[e.dataType],"*"!==e.dataType&&(e.accept+=", */*; q=0.01"),e},n=function(t,n){var a;return(a=new XMLHttpRequest).open(t.type,t.url,!0),a.setRequestHeader("Accept",t.accept),"string"==typeof t.data&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),t.crossDomain||a.setRequestHeader("X-Requested-With","XMLHttpRequest"),e(a),a.withCredentials=!!t.withCredentials,a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)return n(a)},a},r=function(t,e){var n,o;if("string"==typeof t&&"string"==typeof e)if(e.match(/\bjson\b/))try{t=JSON.parse(t)}catch(t){}else if(e.match(/\b(?:java|ecma)script\b/))(o=document.createElement("script")).setAttribute("nonce",a()),o.text=t,document.head.appendChild(o).parentNode.removeChild(o);else if(e.match(/\b(xml|html|svg)\b/)){n=new DOMParser,e=e.replace(/;.+/,"");try{t=n.parseFromString(t,e)}catch(t){}}return t},i.href=function(t){return t.href},i.isCrossDomain=function(t){var e,n;(e=document.createElement("a")).href=location.href,n=document.createElement("a");try{return n.href=t,!((!n.protocol||":"===n.protocol)&&!n.host||e.protocol+"//"+e.host==n.protocol+"//"+n.host)}catch(t){return t,!0}}}.call(this),function(){var t,e;t=i.matches,e=function(t){return Array.prototype.slice.call(t)},i.serializeElement=function(n,a){var o,i;return o=[n],t(n,"form")&&(o=e(n.elements)),i=[],o.forEach((function(n){if(n.name&&!n.disabled&&!t(n,"fieldset[disabled] *"))return t(n,"select")?e(n.options).forEach((function(t){if(t.selected)return i.push({name:n.name,value:t.value})})):n.checked||-1===["radio","checkbox","submit"].indexOf(n.type)?i.push({name:n.name,value:n.value}):void 0})),a&&i.push(a),i.map((function(t){return null!=t.name?encodeURIComponent(t.name)+"="+encodeURIComponent(t.value):t})).join("&")},i.formElements=function(n,a){return t(n,"form")?e(n.elements).filter((function(e){return t(e,a)})):e(n.querySelectorAll(a))}}.call(this),function(){var t,e,n;e=i.fire,n=i.stopEverything,i.handleConfirm=function(e){if(!t(this))return n(e)},i.confirm=function(t,e){return confirm(t)},t=function(t){var n,a,o;if(!(o=t.getAttribute("data-confirm")))return!0;if(n=!1,e(t,"confirm")){try{n=i.confirm(o,t)}catch(t){}a=e(t,"confirm:complete",[n])}return n&&a}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u,d,m;u=i.matches,s=i.getData,d=i.setData,m=i.stopEverything,c=i.formElements,i.handleDisabledElement=function(t){if(this,this.disabled)return m(t)},i.enableElement=function(t){var e;if(t instanceof Event){if(l(t))return;e=t.target}else e=t;return u(e,i.linkDisableSelector)?r(e):u(e,i.buttonDisableSelector)||u(e,i.formEnableSelector)?a(e):u(e,i.formSubmitSelector)?o(e):void 0},i.disableElement=function(a){var o;return o=a instanceof Event?a.target:a,u(o,i.linkDisableSelector)?n(o):u(o,i.buttonDisableSelector)||u(o,i.formDisableSelector)?t(o):u(o,i.formSubmitSelector)?e(o):void 0},n=function(t){var e;if(!s(t,"ujs:disabled"))return null!=(e=t.getAttribute("data-disable-with"))&&(d(t,"ujs:enable-with",t.innerHTML),t.innerHTML=e),t.addEventListener("click",m),d(t,"ujs:disabled",!0)},r=function(t){var e;return null!=(e=s(t,"ujs:enable-with"))&&(t.innerHTML=e,d(t,"ujs:enable-with",null)),t.removeEventListener("click",m),d(t,"ujs:disabled",null)},e=function(e){return c(e,i.formDisableSelector).forEach(t)},t=function(t){var e;if(!s(t,"ujs:disabled"))return null!=(e=t.getAttribute("data-disable-with"))&&(u(t,"button")?(d(t,"ujs:enable-with",t.innerHTML),t.innerHTML=e):(d(t,"ujs:enable-with",t.value),t.value=e)),t.disabled=!0,d(t,"ujs:disabled",!0)},o=function(t){return c(t,i.formEnableSelector).forEach(a)},a=function(t){var e;return null!=(e=s(t,"ujs:enable-with"))&&(u(t,"button")?t.innerHTML=e:t.value=e,d(t,"ujs:enable-with",null)),t.disabled=!1,d(t,"ujs:disabled",null)},l=function(t){var e,n;return null!=(null!=(n=null!=(e=t.detail)?e[0]:void 0)?n.getResponseHeader("X-Xhr-Redirect"):void 0)}}.call(this),function(){var t;t=i.stopEverything,i.handleMethod=function(e){var n,a,o,r,c,s;if(this,s=this.getAttribute("data-method"))return c=i.href(this),a=i.csrfToken(),n=i.csrfParam(),o=document.createElement("form"),r="<input name='_method' value='"+s+"' type='hidden' />",null==n||null==a||i.isCrossDomain(c)||(r+="<input name='"+n+"' value='"+a+"' type='hidden' />"),r+='<input type="submit" />',o.method="post",o.action=c,o.target=this.target,o.innerHTML=r,o.style.display="none",document.body.appendChild(o),o.querySelector('[type="submit"]').click(),t(e)}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u=[].slice;r=i.matches,n=i.getData,s=i.setData,e=i.fire,l=i.stopEverything,t=i.ajax,a=i.isCrossDomain,c=i.serializeElement,o=function(t){var e;return null!=(e=t.getAttribute("data-remote"))&&"false"!==e},i.handleRemote=function(d){var m,f,p,b,g,h,v;return!o(b=this)||(e(b,"ajax:before")?(v=b.getAttribute("data-with-credentials"),p=b.getAttribute("data-type")||"script",r(b,i.formSubmitSelector)?(m=n(b,"ujs:submit-button"),g=n(b,"ujs:submit-button-formmethod")||b.method,h=n(b,"ujs:submit-button-formaction")||b.getAttribute("action")||location.href,"GET"===g.toUpperCase()&&(h=h.replace(/\?.*$/,"")),"multipart/form-data"===b.enctype?(f=new FormData(b),null!=m&&f.append(m.name,m.value)):f=c(b,m),s(b,"ujs:submit-button",null),s(b,"ujs:submit-button-formmethod",null),s(b,"ujs:submit-button-formaction",null)):r(b,i.buttonClickSelector)||r(b,i.inputChangeSelector)?(g=b.getAttribute("data-method"),h=b.getAttribute("data-url"),f=c(b,b.getAttribute("data-params"))):(g=b.getAttribute("data-method"),h=i.href(b),f=b.getAttribute("data-params")),t({type:g||"GET",url:h,data:f,dataType:p,beforeSend:function(t,n){return e(b,"ajax:beforeSend",[t,n])?e(b,"ajax:send",[t]):(e(b,"ajax:stopped"),!1)},success:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:success",t)},error:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:error",t)},complete:function(){var t;return t=1<=arguments.length?u.call(arguments,0):[],e(b,"ajax:complete",t)},crossDomain:a(h),withCredentials:null!=v&&"false"!==v}),l(d)):(e(b,"ajax:stopped"),!1))},i.formSubmitButtonClick=function(t){var e;if(this,e=this.form)return this.name&&s(e,"ujs:submit-button",{name:this.name,value:this.value}),s(e,"ujs:formnovalidate-button",this.formNoValidate),s(e,"ujs:submit-button-formaction",this.getAttribute("formaction")),s(e,"ujs:submit-button-formmethod",this.getAttribute("formmethod"))},i.preventInsignificantClick=function(t){var e,n,a;if(this,a=(this.getAttribute("data-method")||"GET").toUpperCase(),e=this.getAttribute("data-params"),n=(t.metaKey||t.ctrlKey)&&"GET"===a&&!e,null!=t.button&&0!==t.button||n)return t.stopImmediatePropagation()}}.call(this),function(){var t,e,n,a,o,r,c,s,l,u,d,m,f,p,b;if(r=i.fire,n=i.delegate,s=i.getData,t=i.$,b=i.refreshCSRFTokens,e=i.CSRFProtection,f=i.loadCSPNonce,o=i.enableElement,a=i.disableElement,u=i.handleDisabledElement,l=i.handleConfirm,p=i.preventInsignificantClick,m=i.handleRemote,c=i.formSubmitButtonClick,d=i.handleMethod,"undefined"!=typeof jQuery&&null!==jQuery&&null!=jQuery.ajax){if(jQuery.rails)throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only.");jQuery.rails=i,jQuery.ajaxPrefilter((function(t,n,a){if(!t.crossDomain)return e(a)}))}i.start=function(){if(window._rails_loaded)throw new Error("rails-ujs has already been loaded!");return window.addEventListener("pageshow",(function(){return t(i.formEnableSelector).forEach((function(t){if(s(t,"ujs:disabled"))return o(t)})),t(i.linkDisableSelector).forEach((function(t){if(s(t,"ujs:disabled"))return o(t)}))})),n(document,i.linkDisableSelector,"ajax:complete",o),n(document,i.linkDisableSelector,"ajax:stopped",o),n(document,i.buttonDisableSelector,"ajax:complete",o),n(document,i.buttonDisableSelector,"ajax:stopped",o),n(document,i.linkClickSelector,"click",p),n(document,i.linkClickSelector,"click",u),n(document,i.linkClickSelector,"click",l),n(document,i.linkClickSelector,"click",a),n(document,i.linkClickSelector,"click",m),n(document,i.linkClickSelector,"click",d),n(document,i.buttonClickSelector,"click",p),n(document,i.buttonClickSelector,"click",u),n(document,i.buttonClickSelector,"click",l),n(document,i.buttonClickSelector,"click",a),n(document,i.buttonClickSelector,"click",m),n(document,i.inputChangeSelector,"change",u),n(document,i.inputChangeSelector,"change",l),n(document,i.inputChangeSelector,"change",m),n(document,i.formSubmitSelector,"submit",u),n(document,i.formSubmitSelector,"submit",l),n(document,i.formSubmitSelector,"submit",m),n(document,i.formSubmitSelector,"submit",(function(t){return setTimeout((function(){return a(t)}),13)})),n(document,i.formSubmitSelector,"ajax:send",a),n(document,i.formSubmitSelector,"ajax:complete",o),n(document,i.formInputClickSelector,"click",p),n(document,i.formInputClickSelector,"click",u),n(document,i.formInputClickSelector,"click",l),n(document,i.formInputClickSelector,"click",c),document.addEventListener("DOMContentLoaded",b),document.addEventListener("DOMContentLoaded",f),window._rails_loaded=!0},window.Rails===i&&r(document,"rails:attachBindings")&&i.start()}.call(this)}).call(this),t.exports?t.exports=i:void 0===(o="function"==typeof(a=i)?a.call(e,n,e,t):a)||(t.exports=o)}).call(this)},784:function(t,e,n){"use strict";var a=n(15),o=n(768),i=n(18);e.a=Object(a.connect)((function(t){return{account:t.getIn(["accounts",i.m])}}))(o.a)},838:function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return B}));var a,o,i,r=n(0),c=(n(9),n(6),n(8)),s=n(3),l=n.n(s),u=n(580),d=n(784),m=n(15),f=n(20),p=n(7),b=n(14),g=n.n(b),h=n(773),v=n(97),j=n(35),y=n.n(j),S=n(1177),C=n(18),O=n(45),k=n(2),_=n(1),w=n(5),E=n.n(w),M=n(16),D=n.n(M),x=n(322),I=n(21),T=n(25),A=n(308),N=n(150);var P,L=Object(p.f)({community:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},logout:{id:"navigation_bar.logout",defaultMessage:"Logout"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},settings:{id:"navigation_bar.app_settings",defaultMessage:"App settings"},start:{id:"getting_started.heading",defaultMessage:"Getting started"}}),R=Object(p.g)((i=o=function(t){Object(c.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return e=t.call.apply(t,[this].concat(a))||this,Object(_.a)(Object(k.a)(e),"handleLogoutClick",(function(t){return t.preventDefault(),t.stopPropagation(),e.props.onLogout(),!1})),e}return n.prototype.render=function(){var t=this.props,e=t.intl,n=t.columns,a=t.unreadNotifications,o=t.showNotificationsBadge,i=t.onSettingsClick,c=A.b.bind(null,(function(t){return!n||!n.some((function(e){return e.get("id")===t}))}));return Object(r.a)("nav",{className:"drawer--header"},void 0,Object(r.a)(x.a,{"aria-label":e.formatMessage(L.start),title:e.formatMessage(L.start),to:"/getting-started"},void 0,Object(r.a)(T.a,{id:"asterisk"})),c("HOME",Object(r.a)(x.a,{"aria-label":e.formatMessage(L.home_timeline),title:e.formatMessage(L.home_timeline),to:"/timelines/home"},void 0,Object(r.a)(T.a,{id:"home"}))),c("NOTIFICATIONS",Object(r.a)(x.a,{"aria-label":e.formatMessage(L.notifications),title:e.formatMessage(L.notifications),to:"/notifications"},void 0,Object(r.a)("span",{className:"icon-badge-wrapper"},void 0,Object(r.a)(T.a,{id:"bell"}),o&&a>0&&Object(r.a)("div",{className:"icon-badge"})))),c("COMMUNITY",Object(r.a)(x.a,{"aria-label":e.formatMessage(L.community),title:e.formatMessage(L.community),to:"/timelines/public/local"},void 0,Object(r.a)(T.a,{id:"users"}))),c("PUBLIC",Object(r.a)(x.a,{"aria-label":e.formatMessage(L.public),title:e.formatMessage(L.public),to:"/timelines/public"},void 0,Object(r.a)(T.a,{id:"globe"}))),Object(r.a)("a",{"aria-label":e.formatMessage(L.settings),onClick:i,href:"#",title:e.formatMessage(L.settings)},void 0,Object(r.a)(T.a,{id:"cogs"})),Object(r.a)("a",{"aria-label":e.formatMessage(L.logout),onClick:this.handleLogoutClick,href:N.f,title:e.formatMessage(L.logout)},void 0,Object(r.a)(T.a,{id:"sign-out"})))},n}(I.a),Object(_.a)(o,"propTypes",{columns:D.a.list,unreadNotifications:E.a.number,showNotificationsBadge:E.a.bool,intl:E.a.object,onSettingsClick:E.a.func,onLogout:E.a.func.isRequired}),a=i))||a,q=n(61),H=n.n(q),F=Object(p.f)({logoutMessage:{id:"confirmations.logout.message",defaultMessage:"Are you sure you want to log out?"},logoutConfirm:{id:"confirmations.logout.confirm",defaultMessage:"Log out"}}),U=Object(p.g)(Object(m.connect)((function(t){return{columns:t.getIn(["settings","columns"]),unreadNotifications:t.getIn(["notifications","unread"]),showNotificationsBadge:t.getIn(["local_settings","notifications","tab_badge"])}}),(function(t,e){var n=e.intl;return{onSettingsClick:function(e){e.preventDefault(),e.stopPropagation(),t(Object(O.d)("SETTINGS",{}))},onLogout:function(){t(Object(O.d)("CONFIRM",{message:n.formatMessage(F.logoutMessage),confirm:n.formatMessage(F.logoutConfirm),onConfirm:function(){return function(){var t=document.createElement("form"),e=document.createElement("input");e.setAttribute("name","_method"),e.setAttribute("value","delete"),e.setAttribute("type","hidden"),t.appendChild(e);var n=H.a.csrfToken(),a=H.a.csrfParam();if(a&&n){var o=document.createElement("input");o.setAttribute("name",a),o.setAttribute("value",n),o.setAttribute("type","hidden"),t.appendChild(o)}var i=document.createElement("input");i.setAttribute("type","submit"),t.appendChild(i),t.method="post",t.action=N.f,t.style.display="none",document.body.appendChild(t),i.click()}()}}))}}}))(R));var X=Object(p.f)({compose:{id:"navigation_bar.compose",defaultMessage:"Compose new toot"}}),B=Object(m.connect)((function(t,e){return{showSearch:e.multiColumn?t.getIn(["search","submitted"])&&!t.getIn(["search","hidden"]):e.isSearchPage}}),(function(t,e){e.intl;return{onMount:function(){t(Object(f.ib)())},onUnmount:function(){t(Object(f.qb)())}}}))(P=Object(p.g)(P=function(t){Object(c.a)(n,t);var e;e=n;function n(){return t.apply(this,arguments)||this}var a=n.prototype;return a.componentDidMount=function(){this.props.isSearchPage||this.props.onMount()},a.componentWillUnmount=function(){this.props.isSearchPage||this.props.onUnmount()},a.render=function(){var t=this.props,e=t.intl,n=t.multiColumn,a=t.isSearchPage,o=t.showSearch,i=g()("drawer","mbstobon");return Object(r.a)("div",{className:i,role:"region","aria-label":e.formatMessage(X.compose)},void 0,n&&Object(r.a)(U,{}),(n||a)&&Object(r.a)(h.a,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,!a&&Object(r.a)("div",{className:"drawer__inner"},void 0,Object(r.a)(d.a,{}),Object(r.a)(u.a,{}),Object(r.a)("div",{className:"drawer__inner__mastodon"},void 0,C.k?Object(r.a)("img",{alt:"",draggable:"false",src:C.k}):Object(r.a)("button",{className:"mastodon"}))),Object(r.a)(v.a,{defaultStyle:{x:a?0:-100},style:{x:y()(o||a?0:-100,{stiffness:210,damping:20})}},void 0,(function(t){var e=t.x;return(Object(r.a)("div",{className:"drawer__inner darker",style:{transform:"translateX("+e+"%)",visibility:-100===e?"hidden":"visible"}},void 0,Object(r.a)(S.a,{})))}))))},n}(l.a.PureComponent))||P)||P}}]);
//# sourceMappingURL=compose.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/compose.js.map b/priv/static/packs/flavours/glitch/async/compose.js.map
index 8df71764e..5770307aa 100644
--- a/priv/static/packs/flavours/glitch/async/compose.js.map
+++ b/priv/static/packs/flavours/glitch/async/compose.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js","webpack:///./node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/components/header.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/header_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/util/log_out.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/index.js"],"names":["messages","defineMessages","missingDescriptionMessage","missingDescriptionConfirm","missingDescriptionEdit","injectIntl","connect","state","spoilersAlwaysOn","getIn","inReplyTo","replyPrivacy","sideArmBasePrivacy","sideArmRestrictedPrivacy","privacyPreference","sideArmPrivacy","advancedOptions","focusDate","caretPosition","isSubmitting","isChangingUpload","isUploading","layout","media","preselectDate","privacy","sideArm","sensitive","showSearch","spoiler","spoilerText","suggestions","text","anyMedia","size","mediaDescriptionConfirmation","preselectOnReply","dispatch","intl","onChange","changeCompose","onSubmit","routerHistory","submitCompose","onClearSuggestions","clearComposeSuggestions","onFetchSuggestions","token","fetchComposeSuggestions","onSuggestionSelected","position","suggestion","path","selectComposeSuggestion","onChangeSpoilerText","changeComposeSpoilerText","onPaste","files","uploadCompose","onPickEmoji","emoji","insertEmojiCompose","onChangeSpoilerness","changeComposeSpoilerness","onChangeVisibility","value","changeComposeVisibility","onMediaDescriptionConfirm","mediaId","openModal","message","formatMessage","confirm","onConfirm","secondary","onSecondary","id","onDoNotAsk","changeLocalSetting","ComposeForm","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","call","nonce","loadCSPNonce","ref","document","querySelector","content","cspNonce","m","Element","prototype","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","key","setData","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","Object","defineProperty","get","obj","name","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","addEventListener","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","indexOf","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","replace","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","push","checked","map","encodeURIComponent","join","formElements","form","filter","el","allowAction","handleConfirm","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","args","arguments","length","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","start","_rails_loaded","setTimeout","module","exports","account","me","NavigationBar","community","home_timeline","logout","notifications","public","settings","Header","props","onLogout","render","columns","unreadNotifications","showNotificationsBadge","onSettingsClick","renderForColumn","conditionalRender","bind","columnId","some","column","className","Link","aria-label","title","to","onClick","handleLogoutClick","signOutLink","ImmutablePureComponent","ImmutablePropTypes","list","PropTypes","number","bool","object","func","isRequired","logoutMessage","logoutConfirm","methodInput","csrfInput","submitButton","logOut","compose","Compose","ownProps","multiColumn","isSearchPage","onMount","mountCompose","onUnmount","unmountCompose","componentDidMount","componentWillUnmount","computedClass","classNames","role","mascot","alt","draggable","src","defaultStyle","x","spring","stiffness","damping","transform","visibility","React","PureComponent"],"mappings":"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","file":"flavours/glitch/async/compose.js","sourcesContent":["import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ComposeForm from '../components/compose_form';\nimport {\n changeCompose,\n changeComposeSpoilerText,\n changeComposeSpoilerness,\n changeComposeVisibility,\n clearComposeSuggestions,\n fetchComposeSuggestions,\n insertEmojiCompose,\n selectComposeSuggestion,\n submitCompose,\n uploadCompose,\n} from 'flavours/glitch/actions/compose';\nimport {\n openModal,\n} from 'flavours/glitch/actions/modal';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\n\nimport { privacyPreference } from 'flavours/glitch/util/privacy_preference';\n\nconst messages = defineMessages({\n missingDescriptionMessage: { id: 'confirmations.missing_media_description.message',\n defaultMessage: 'At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.' },\n missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm',\n defaultMessage: 'Send anyway' },\n missingDescriptionEdit: { id: 'confirmations.missing_media_description.edit',\n defaultMessage: 'Edit media' },\n});\n\n// State mapping.\nfunction mapStateToProps (state) {\n const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']);\n const inReplyTo = state.getIn(['compose', 'in_reply_to']);\n const replyPrivacy = inReplyTo ? state.getIn(['statuses', inReplyTo, 'visibility']) : null;\n const sideArmBasePrivacy = state.getIn(['local_settings', 'side_arm']);\n const sideArmRestrictedPrivacy = replyPrivacy ? privacyPreference(replyPrivacy, sideArmBasePrivacy) : null;\n let sideArmPrivacy = null;\n switch (state.getIn(['local_settings', 'side_arm_reply_mode'])) {\n case 'copy':\n sideArmPrivacy = replyPrivacy;\n break;\n case 'restrict':\n sideArmPrivacy = sideArmRestrictedPrivacy;\n break;\n }\n sideArmPrivacy = sideArmPrivacy || sideArmBasePrivacy;\n return {\n advancedOptions: state.getIn(['compose', 'advanced_options']),\n focusDate: state.getIn(['compose', 'focusDate']),\n caretPosition: state.getIn(['compose', 'caretPosition']),\n isSubmitting: state.getIn(['compose', 'is_submitting']),\n isChangingUpload: state.getIn(['compose', 'is_changing_upload']),\n isUploading: state.getIn(['compose', 'is_uploading']),\n layout: state.getIn(['local_settings', 'layout']),\n media: state.getIn(['compose', 'media_attachments']),\n preselectDate: state.getIn(['compose', 'preselectDate']),\n privacy: state.getIn(['compose', 'privacy']),\n sideArm: sideArmPrivacy,\n sensitive: state.getIn(['compose', 'sensitive']),\n showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n spoiler: spoilersAlwaysOn || state.getIn(['compose', 'spoiler']),\n spoilerText: state.getIn(['compose', 'spoiler_text']),\n suggestions: state.getIn(['compose', 'suggestions']),\n text: state.getIn(['compose', 'text']),\n anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,\n spoilersAlwaysOn: spoilersAlwaysOn,\n mediaDescriptionConfirmation: state.getIn(['local_settings', 'confirm_missing_media_description']),\n preselectOnReply: state.getIn(['local_settings', 'preselect_on_reply']),\n };\n};\n\n// Dispatch mapping.\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange(text) {\n dispatch(changeCompose(text));\n },\n\n onSubmit(routerHistory) {\n dispatch(submitCompose(routerHistory));\n },\n\n onClearSuggestions() {\n dispatch(clearComposeSuggestions());\n },\n\n onFetchSuggestions(token) {\n dispatch(fetchComposeSuggestions(token));\n },\n\n onSuggestionSelected(position, token, suggestion, path) {\n dispatch(selectComposeSuggestion(position, token, suggestion, path));\n },\n\n onChangeSpoilerText(text) {\n dispatch(changeComposeSpoilerText(text));\n },\n\n onPaste(files) {\n dispatch(uploadCompose(files));\n },\n\n onPickEmoji(position, emoji) {\n dispatch(insertEmojiCompose(position, emoji));\n },\n\n onChangeSpoilerness() {\n dispatch(changeComposeSpoilerness());\n },\n\n onChangeVisibility(value) {\n dispatch(changeComposeVisibility(value));\n },\n\n onMediaDescriptionConfirm(routerHistory, mediaId) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.missingDescriptionMessage),\n confirm: intl.formatMessage(messages.missingDescriptionConfirm),\n onConfirm: () => dispatch(submitCompose(routerHistory)),\n secondary: intl.formatMessage(messages.missingDescriptionEdit),\n onSecondary: () => dispatch(openModal('FOCAL_POINT', { id: mediaId })),\n onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ComposeForm));\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = confirm(message);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n }\n\n formContent += '<input type=\"submit\" />';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","import { connect } from 'react-redux';\nimport NavigationBar from '../components/navigation_bar';\nimport { me } from 'flavours/glitch/util/initial_state';\n\nconst mapStateToProps = state => {\n return {\n account: state.getIn(['accounts', me]),\n };\n};\n\nexport default connect(mapStateToProps)(NavigationBar);\n","// Package imports.\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\n// Components.\nimport Icon from 'flavours/glitch/components/icon';\n\n// Utils.\nimport { conditionalRender } from 'flavours/glitch/util/react_helpers';\nimport { signOutLink } from 'flavours/glitch/util/backend_links';\n\n// Messages.\nconst messages = defineMessages({\n community: {\n defaultMessage: 'Local timeline',\n id: 'navigation_bar.community_timeline',\n },\n home_timeline: {\n defaultMessage: 'Home',\n id: 'tabs_bar.home',\n },\n logout: {\n defaultMessage: 'Logout',\n id: 'navigation_bar.logout',\n },\n notifications: {\n defaultMessage: 'Notifications',\n id: 'tabs_bar.notifications',\n },\n public: {\n defaultMessage: 'Federated timeline',\n id: 'navigation_bar.public_timeline',\n },\n settings: {\n defaultMessage: 'App settings',\n id: 'navigation_bar.app_settings',\n },\n start: {\n defaultMessage: 'Getting started',\n id: 'getting_started.heading',\n },\n});\n\nexport default @injectIntl\nclass Header extends ImmutablePureComponent {\n static propTypes = {\n columns: ImmutablePropTypes.list,\n unreadNotifications: PropTypes.number,\n showNotificationsBadge: PropTypes.bool,\n intl: PropTypes.object,\n onSettingsClick: PropTypes.func,\n onLogout: PropTypes.func.isRequired,\n };\n\n handleLogoutClick = e => {\n e.preventDefault();\n e.stopPropagation();\n\n this.props.onLogout();\n\n return false;\n }\n\n render () {\n const { intl, columns, unreadNotifications, showNotificationsBadge, onSettingsClick } = this.props;\n\n // Only renders the component if the column isn't being shown.\n const renderForColumn = conditionalRender.bind(null,\n columnId => !columns || !columns.some(\n column => column.get('id') === columnId\n )\n );\n\n // The result.\n return (\n <nav className='drawer--header'>\n <Link\n aria-label={intl.formatMessage(messages.start)}\n title={intl.formatMessage(messages.start)}\n to='/getting-started'\n ><Icon id='asterisk' /></Link>\n {renderForColumn('HOME', (\n <Link\n aria-label={intl.formatMessage(messages.home_timeline)}\n title={intl.formatMessage(messages.home_timeline)}\n to='/timelines/home'\n ><Icon id='home' /></Link>\n ))}\n {renderForColumn('NOTIFICATIONS', (\n <Link\n aria-label={intl.formatMessage(messages.notifications)}\n title={intl.formatMessage(messages.notifications)}\n to='/notifications'\n >\n <span className='icon-badge-wrapper'>\n <Icon id='bell' />\n { showNotificationsBadge && unreadNotifications > 0 && <div className='icon-badge' />}\n </span>\n </Link>\n ))}\n {renderForColumn('COMMUNITY', (\n <Link\n aria-label={intl.formatMessage(messages.community)}\n title={intl.formatMessage(messages.community)}\n to='/timelines/public/local'\n ><Icon id='users' /></Link>\n ))}\n {renderForColumn('PUBLIC', (\n <Link\n aria-label={intl.formatMessage(messages.public)}\n title={intl.formatMessage(messages.public)}\n to='/timelines/public'\n ><Icon id='globe' /></Link>\n ))}\n <a\n aria-label={intl.formatMessage(messages.settings)}\n onClick={onSettingsClick}\n href='#'\n title={intl.formatMessage(messages.settings)}\n ><Icon id='cogs' /></a>\n <a\n aria-label={intl.formatMessage(messages.logout)}\n onClick={this.handleLogoutClick}\n href={ signOutLink }\n title={intl.formatMessage(messages.logout)}\n ><Icon id='sign-out' /></a>\n </nav>\n );\n };\n}\n","import { openModal } from 'flavours/glitch/actions/modal';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport Header from '../components/header';\nimport { logOut } from 'flavours/glitch/util/log_out';\n\nconst messages = defineMessages({\n logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = state => {\n return {\n columns: state.getIn(['settings', 'columns']),\n unreadNotifications: state.getIn(['notifications', 'unread']),\n showNotificationsBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onSettingsClick (e) {\n e.preventDefault();\n e.stopPropagation();\n dispatch(openModal('SETTINGS', {}));\n },\n onLogout () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.logoutMessage),\n confirm: intl.formatMessage(messages.logoutConfirm),\n onConfirm: () => logOut(),\n }));\n },\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Header));\n","import Rails from 'rails-ujs';\nimport { signOutLink } from 'flavours/glitch/util/backend_links';\n\nexport const logOut = () => {\n const form = document.createElement('form');\n\n const methodInput = document.createElement('input');\n methodInput.setAttribute('name', '_method');\n methodInput.setAttribute('value', 'delete');\n methodInput.setAttribute('type', 'hidden');\n form.appendChild(methodInput);\n\n const csrfToken = Rails.csrfToken();\n const csrfParam = Rails.csrfParam();\n\n if (csrfParam && csrfToken) {\n const csrfInput = document.createElement('input');\n csrfInput.setAttribute('name', csrfParam);\n csrfInput.setAttribute('value', csrfToken);\n csrfInput.setAttribute('type', 'hidden');\n form.appendChild(csrfInput);\n }\n\n const submitButton = document.createElement('input');\n submitButton.setAttribute('type', 'submit');\n form.appendChild(submitButton);\n\n form.method = 'post';\n form.action = signOutLink;\n form.style.display = 'none';\n\n document.body.appendChild(form);\n submitButton.click();\n};\n","import React from 'react';\nimport ComposeFormContainer from './containers/compose_form_container';\nimport NavigationContainer from './containers/navigation_container';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport { mountCompose, unmountCompose } from 'flavours/glitch/actions/compose';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport classNames from 'classnames';\nimport SearchContainer from './containers/search_container';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport SearchResultsContainer from './containers/search_results_container';\nimport { me, mascot } from 'flavours/glitch/util/initial_state';\nimport HeaderContainer from './containers/header_container';\n\nconst messages = defineMessages({\n compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new toot' },\n});\n\nconst mapStateToProps = (state, ownProps) => ({\n showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onMount () {\n dispatch(mountCompose());\n },\n\n onUnmount () {\n dispatch(unmountCompose());\n },\n});\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Compose extends React.PureComponent {\n static propTypes = {\n multiColumn: PropTypes.bool,\n showSearch: PropTypes.bool,\n isSearchPage: PropTypes.bool,\n onMount: PropTypes.func,\n onUnmount: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.onMount();\n }\n }\n\n componentWillUnmount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.onUnmount();\n }\n }\n\n render () {\n const {\n intl,\n multiColumn,\n isSearchPage,\n showSearch,\n } = this.props;\n const computedClass = classNames('drawer', 'mbstobon');\n\n return (\n <div className={computedClass} role='region' aria-label={intl.formatMessage(messages.compose)}>\n {multiColumn && <HeaderContainer />}\n\n {(multiColumn || isSearchPage) && <SearchContainer />}\n\n <div className='drawer__pager'>\n {!isSearchPage && <div className='drawer__inner'>\n <NavigationContainer />\n\n <ComposeFormContainer />\n\n <div className='drawer__inner__mastodon'>\n {mascot ? <img alt='' draggable='false' src={mascot} /> : <button className='mastodon' />}\n </div>\n </div>}\n\n <Motion defaultStyle={{ x: isSearchPage ? 0 : -100 }} style={{ x: spring(showSearch || isSearchPage ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) => (\n <div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n <SearchResultsContainer />\n </div>\n )}\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/components/header.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/containers/header_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/util/log_out.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/compose/index.js"],"names":["messages","defineMessages","missingDescriptionMessage","missingDescriptionConfirm","missingDescriptionEdit","injectIntl","connect","state","spoilersAlwaysOn","getIn","inReplyTo","replyPrivacy","sideArmBasePrivacy","sideArmRestrictedPrivacy","privacyPreference","sideArmPrivacy","advancedOptions","focusDate","caretPosition","isSubmitting","isChangingUpload","isUploading","layout","media","preselectDate","privacy","sideArm","sensitive","showSearch","spoiler","spoilerText","suggestions","text","anyMedia","size","mediaDescriptionConfirmation","preselectOnReply","dispatch","intl","onChange","changeCompose","onSubmit","routerHistory","submitCompose","onClearSuggestions","clearComposeSuggestions","onFetchSuggestions","token","fetchComposeSuggestions","onSuggestionSelected","position","suggestion","path","selectComposeSuggestion","onChangeSpoilerText","changeComposeSpoilerText","onPaste","files","uploadCompose","onPickEmoji","emoji","insertEmojiCompose","onChangeSpoilerness","changeComposeSpoilerness","onChangeVisibility","value","changeComposeVisibility","onMediaDescriptionConfirm","mediaId","overriddenVisibility","openModal","message","formatMessage","confirm","onConfirm","secondary","onSecondary","id","onDoNotAsk","changeLocalSetting","ComposeForm","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","call","nonce","loadCSPNonce","ref","document","querySelector","content","cspNonce","m","Element","prototype","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","key","setData","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","Object","defineProperty","get","obj","name","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","addEventListener","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","indexOf","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","replace","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","push","checked","map","encodeURIComponent","join","formElements","form","filter","el","allowAction","handleConfirm","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","args","arguments","length","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","start","_rails_loaded","setTimeout","module","exports","account","me","NavigationBar","community","home_timeline","logout","notifications","public","settings","Header","props","onLogout","render","columns","unreadNotifications","showNotificationsBadge","onSettingsClick","renderForColumn","conditionalRender","bind","columnId","some","column","className","Link","aria-label","title","to","onClick","handleLogoutClick","signOutLink","ImmutablePureComponent","ImmutablePropTypes","list","PropTypes","number","bool","object","func","isRequired","logoutMessage","logoutConfirm","methodInput","csrfInput","submitButton","logOut","compose","Compose","ownProps","multiColumn","isSearchPage","onMount","mountCompose","onUnmount","unmountCompose","componentDidMount","componentWillUnmount","computedClass","classNames","role","mascot","alt","draggable","src","defaultStyle","x","spring","stiffness","damping","transform","visibility","React","PureComponent"],"mappings":"2FAAA,8DAsBMA,EAAWC,YAAe,CAC9BC,0BAA0B,CAAD,6NAEzBC,0BAA0B,CAAD,mFAEzBC,uBAAuB,CAAD,iFA2GTC,gBAAWC,mBAtG1B,SAA0BC,GACxB,IAAMC,EAAmBD,EAAME,MAAM,CAAC,iBAAkB,+BAClDC,EAAYH,EAAME,MAAM,CAAC,UAAW,gBACpCE,EAAeD,EAAYH,EAAME,MAAM,CAAC,WAAYC,EAAW,eAAiB,KAChFE,EAAqBL,EAAME,MAAM,CAAC,iBAAkB,aACpDI,EAA2BF,EAAeG,YAAkBH,EAAcC,GAAsB,KAClGG,EAAiB,KACrB,OAAQR,EAAME,MAAM,CAAC,iBAAkB,yBACrC,IAAK,OACHM,EAAiBJ,EACjB,MACF,IAAK,WACHI,EAAiBF,EAIrB,OADAE,EAAiBA,GAAkBH,EAC5B,CACLI,gBAAiBT,EAAME,MAAM,CAAC,UAAW,qBACzCQ,UAAWV,EAAME,MAAM,CAAC,UAAW,cACnCS,cAAeX,EAAME,MAAM,CAAC,UAAW,kBACvCU,aAAcZ,EAAME,MAAM,CAAC,UAAW,kBACtCW,iBAAkBb,EAAME,MAAM,CAAC,UAAW,uBAC1CY,YAAad,EAAME,MAAM,CAAC,UAAW,iBACrCa,OAAQf,EAAME,MAAM,CAAC,iBAAkB,WACvCc,MAAOhB,EAAME,MAAM,CAAC,UAAW,sBAC/Be,cAAejB,EAAME,MAAM,CAAC,UAAW,kBACvCgB,QAASlB,EAAME,MAAM,CAAC,UAAW,YACjCiB,QAASX,EACTY,UAAWpB,EAAME,MAAM,CAAC,UAAW,cACnCmB,WAAYrB,EAAME,MAAM,CAAC,SAAU,gBAAkBF,EAAME,MAAM,CAAC,SAAU,WAC5EoB,QAASrB,GAAoBD,EAAME,MAAM,CAAC,UAAW,YACrDqB,YAAavB,EAAME,MAAM,CAAC,UAAW,iBACrCsB,YAAaxB,EAAME,MAAM,CAAC,UAAW,gBACrCuB,KAAMzB,EAAME,MAAM,CAAC,UAAW,SAC9BwB,SAAU1B,EAAME,MAAM,CAAC,UAAW,sBAAsByB,KAAO,EAC/D1B,iBAAkBA,EAClB2B,6BAA8B5B,EAAME,MAAM,CAAC,iBAAkB,sCAC7D2B,iBAAkB7B,EAAME,MAAM,CAAC,iBAAkB,2BAK1B,SAAC4B,EAAD,OAAaC,EAAb,EAAaA,KAAb,MAAyB,CAElDC,SAFkD,SAEzCP,GACPK,EAASG,YAAcR,KAGzBS,SANkD,SAMzCC,GACPL,EAASM,aAAcD,KAGzBE,mBAVkD,WAWhDP,EAASQ,iBAGXC,mBAdkD,SAc/BC,GACjBV,EAASW,aAAwBD,KAGnCE,qBAlBkD,SAkB7BC,EAAUH,EAAOI,EAAYC,GAChDf,EAASgB,aAAwBH,EAAUH,EAAOI,EAAYC,KAGhEE,oBAtBkD,SAsB9BtB,GAClBK,EAASkB,YAAyBvB,KAGpCwB,QA1BkD,SA0B1CC,GACNpB,EAASqB,aAAcD,KAGzBE,YA9BkD,SA8BtCT,EAAUU,GACpBvB,EAASwB,aAAmBX,EAAUU,KAGxCE,oBAlCkD,WAmChDzB,EAAS0B,gBAGXC,mBAtCkD,SAsC/BC,GACjB5B,EAAS6B,YAAwBD,KAGnCE,0BA1CkD,SA0CxBzB,EAAe0B,EAASC,QAA6B,IAA7BA,MAAuB,MACvEhC,EAASiC,YAAU,UAAW,CAC5BC,QAASjC,EAAKkC,cAAcxE,EAASE,2BACrCuE,QAASnC,EAAKkC,cAAcxE,EAASG,2BACrCuE,UAAW,WACLL,GACFhC,EAAS6B,YAAwBG,IAEnChC,EAASM,aAAcD,KAEzBiC,UAAWrC,EAAKkC,cAAcxE,EAASI,wBACvCwE,YAAa,kBAAMvC,EAASiC,YAAU,cAAe,CAAEO,GAAIT,MAC3DU,WAAY,kBAAMzC,EAAS0C,YAAmB,CAAC,sCAAsC,YAMjEzE,CAA6C0E,O,mBCtIvE,SAMA,YAEE,YACE,WACEC,KAAKC,MAAQ,CACXC,kBAAmB,yGACnBC,oBAAqB,CACnBC,SAAU,oEACVC,QAAS,eAEXC,oBAAqB,iEACrBC,mBAAoB,OACpBC,uBAAwB,6MACxBC,oBAAqB,sMACrBC,mBAAoB,4MACpBC,kBAAmB,yCACnBC,oBAAqB,wCACrBC,sBAAuB,+EAExBC,KAAKd,QACPc,KAnBWd,MAoBd,IAAIC,EApBUD,KAoBMC,OACpB,YACE,WACE,IAAIc,EACJA,EAAQ,KAERd,EAAMe,aAAe,WACnB,IAAIC,EACJ,OAAOF,EAAkE,OAAzDE,EAAMC,SAASC,cAAc,yBAAmCF,EAAIG,aAAU,GAGhGnB,EAAMoB,SAAW,WACf,OAAgB,MAATN,EAAgBA,EAAQd,EAAMe,kBAEtCF,KAAKd,MACR,WACE,IAAasB,EACbA,EAAIC,QAAQC,UAAUC,SAAWF,QAAQC,UAAUE,iBAAmBH,QAAQC,UAAUG,oBAAsBJ,QAAQC,UAAUI,mBAAqBL,QAAQC,UAAUK,kBAAoBN,QAAQC,UAAUM,sBAE7M7B,EAAMwB,QAAU,SAAUM,EAAS3B,GACjC,OAAwB,MAApBA,EAASC,QACJiB,EAAER,KAAKiB,EAAS3B,EAASA,YAAckB,EAAER,KAAKiB,EAAS3B,EAASC,SAEhEiB,EAAER,KAAKiB,EAAS3B,IAM3BH,EAAM+B,QAAU,SAAUD,EAASE,GACjC,IAAIhB,EACJ,OAAmC,OAA3BA,EAAMc,EAAe,UAAad,EAAIgB,QAAO,GAGvDhC,EAAMiC,QAAU,SAAUH,EAASE,EAAKjD,GAKtC,OAJwB,MAApB+C,EAAe,WACjBA,EAAe,SAAI,IAGdA,EAAe,SAAEE,GAAOjD,GAGjCiB,EAAMkC,EAAI,SAAU/B,GAClB,OAAOgC,MAAMZ,UAAUa,MAAMvB,KAAKI,SAASoB,iBAAiBlC,MAE7DU,KAAKd,MACR,WACE,IAAImC,EAAGI,EAAWC,EAClBL,EAAIlC,EAAMkC,EAEVK,EAAYvC,EAAMuC,UAAY,WAC5B,IAAIC,EAEJ,OADAA,EAAOvB,SAASC,cAAc,2BACfsB,EAAKrB,SAGtBmB,EAAYtC,EAAMsC,UAAY,WAC5B,IAAIE,EAEJ,OADAA,EAAOvB,SAASC,cAAc,2BACfsB,EAAKrB,SAGtBnB,EAAMyC,eAAiB,SAAUC,GAC/B,IAAI7E,EAGJ,GAAa,OAFbA,EAAQ0E,KAGN,OAAOG,EAAIC,iBAAiB,eAAgB9E,IAIhDmC,EAAM4C,kBAAoB,WACxB,IAAIC,EAAOhF,EAIX,GAHAA,EAAQ0E,IACRM,EAAQP,IAEK,MAATzE,GAA0B,MAATgF,EACnB,OAAOX,EAAE,oBAAsBW,EAAQ,MAAMC,SAAQ,SAAUC,GAC7D,OAAOA,EAAMhE,MAAQlB,OAI1BgD,KAAKd,MACR,WACE,IAAIiD,EAAaC,EAAMzB,EAAS0B,EAChC1B,EAAUxB,EAAMwB,QAGW,mBAF3BwB,EAAcG,OAAOH,gBAGnBA,EAAc,SAAqBI,EAAOC,GACxC,IAAIC,EAGJ,OAFAA,EAAMrC,SAASsC,YAAY,gBACvBC,gBAAgBJ,EAAOC,EAAOI,QAASJ,EAAOK,WAAYL,EAAOM,QAC9DL,IAGG/B,UAAY4B,OAAOS,MAAMrC,UACrC2B,EAAiBF,EAAYzB,UAAU2B,eAEvCF,EAAYzB,UAAU2B,eAAiB,WACrC,IAAIW,EAWJ,OAVAA,EAASX,EAAerC,KAAKd,MAEzBA,KAAK2D,aAAe3D,KAAK+D,kBAC3BC,OAAOC,eAAejE,KAAM,mBAAoB,CAC9CkE,IAAK,WACH,OAAO,KAKNJ,IAIXZ,EAAOjD,EAAMiD,KAAO,SAAUiB,EAAKC,EAAMC,GACvC,IAAIhB,EAOJ,OANAA,EAAQ,IAAIJ,EAAYmB,EAAM,CAC5BV,SAAS,EACTC,YAAY,EACZC,OAAQS,IAEVF,EAAIG,cAAcjB,IACVA,EAAMU,kBAGhB9D,EAAMsE,eAAiB,SAAUC,GAI/B,OAHAtB,EAAKsB,EAAEC,OAAQ,yBACfD,EAAErB,iBACFqB,EAAEE,kBACKF,EAAEG,4BAGX1E,EAAM2E,SAAW,SAAU7C,EAAS3B,EAAUyE,EAAWC,GACvD,OAAO/C,EAAQgD,iBAAiBF,GAAW,SAAUL,GACnD,IAAIC,EAGJ,IAFAA,EAASD,EAAEC,OAEAA,aAAkBlD,UAAYE,EAAQgD,EAAQrE,IACvDqE,EAASA,EAAOO,WAGlB,GAAIP,aAAkBlD,UAAuC,IAA5BuD,EAAQhE,KAAK2D,EAAQD,GAEpD,OADAA,EAAErB,iBACKqB,EAAEE,uBAId5D,KAAKd,MACR,WACE,IAAIiF,EAAevC,EAAgBwC,EAAW7D,EAAgB8D,EAAgBC,EAC9E/D,EAAWpB,EAAMoB,SAAUqB,EAAiBzC,EAAMyC,eAAuBzC,EAAMiD,KAC/E+B,EAAgB,CACd,IAAK,MACLlI,KAAM,aACNsI,KAAM,YACNC,IAAK,4BACLC,KAAM,oCACNC,OAAQ,6FAGVvF,EAAMwF,KAAO,SAAUC,GACrB,IAAI/C,EAmBJ,OAlBA+C,EAAUP,EAAeO,GACzB/C,EAAMuC,EAAUQ,GAAS,WACvB,IAAIzE,EAAK0E,EAaT,OAZAA,EAAWP,EAAwC,OAAvBnE,EAAM0B,EAAIgD,UAAoB1E,EAAM0B,EAAIiD,aAAcjD,EAAIkD,kBAAkB,iBAEnE,IAAjCC,KAAKC,MAAMpD,EAAIqD,OAAS,KACK,mBAApBN,EAAQO,SACjBP,EAAQO,QAAQN,EAAUhD,EAAIuD,WAAYvD,GAGf,mBAAlB+C,EAAQS,OACjBT,EAAQS,MAAMR,EAAUhD,EAAIuD,WAAYvD,GAIT,mBAArB+C,EAAQU,SAA0BV,EAAQU,SAASzD,EAAKA,EAAIuD,iBAAc,OAGhE,MAAtBR,EAAQW,aAAuBX,EAAQW,WAAW1D,EAAK+C,MAIvD/C,EAAI2D,aAAeC,eAAeC,OAC7B7D,EAAI8D,KAAKf,EAAQrB,WAD1B,IAKFc,EAAiB,SAAwBO,GAsBvC,OArBAA,EAAQgB,IAAMhB,EAAQgB,KAAOC,SAASC,KACtClB,EAAQmB,KAAOnB,EAAQmB,KAAKC,cAEP,QAAjBpB,EAAQmB,MAAkBnB,EAAQrB,OAChCqB,EAAQgB,IAAIK,QAAQ,KAAO,EAC7BrB,EAAQgB,KAAO,IAAMhB,EAAQrB,KAE7BqB,EAAQgB,KAAO,IAAMhB,EAAQrB,MAIM,MAAnCY,EAAcS,EAAQsB,YACxBtB,EAAQsB,SAAW,KAGrBtB,EAAQuB,OAAShC,EAAcS,EAAQsB,UAEd,MAArBtB,EAAQsB,WACVtB,EAAQuB,QAAU,iBAGbvB,GAGTR,EAAY,SAAmBQ,EAASwB,GACtC,IAAIvE,EAsBJ,OArBAA,EAAM,IAAI4D,gBACNY,KAAKzB,EAAQmB,KAAMnB,EAAQgB,KAAK,GACpC/D,EAAIC,iBAAiB,SAAU8C,EAAQuB,QAEX,iBAAjBvB,EAAQrB,MACjB1B,EAAIC,iBAAiB,eAAgB,oDAGlC8C,EAAQ0B,aACXzE,EAAIC,iBAAiB,mBAAoB,kBAG3CF,EAAeC,GACfA,EAAI0E,kBAAoB3B,EAAQ2B,gBAEhC1E,EAAI2E,mBAAqB,WACvB,GAAI3E,EAAI2D,aAAeC,eAAegB,KACpC,OAAOL,EAAKvE,IAITA,GAGTyC,EAAkB,SAAyBO,EAAUkB,GACnD,IAAIW,EAAQhC,EAEZ,GAAwB,iBAAbG,GAAyC,iBAATkB,EACzC,GAAIA,EAAKY,MAAM,YACb,IACE9B,EAAW+B,KAAKC,MAAMhC,GACtB,MAAOQ,SACJ,GAAIU,EAAKY,MAAM,4BACpBjC,EAAStE,SAAS0G,cAAc,WACzBC,aAAa,QAASxG,KAC7BmE,EAAOzI,KAAO4I,EACdzE,SAAS4G,KAAKC,YAAYvC,GAAQR,WAAWgD,YAAYxC,QACpD,GAAIqB,EAAKY,MAAM,sBAAuB,CAC3CD,EAAS,IAAIS,UACbpB,EAAOA,EAAKqB,QAAQ,MAAO,IAE3B,IACEvC,EAAW6B,EAAOW,gBAAgBxC,EAAUkB,GAC5C,MAAOV,KAIb,OAAOR,GAGT1F,EAAM2G,KAAO,SAAU7E,GACrB,OAAOA,EAAQ6E,MAGjB3G,EAAMmI,cAAgB,SAAU1B,GAC9B,IAAO2B,EAAcC,GACrBD,EAAenH,SAAS0G,cAAc,MACzBhB,KAAOD,SAASC,KAC7B0B,EAAYpH,SAAS0G,cAAc,KAEnC,IAEE,OADAU,EAAU1B,KAAOF,MACN4B,EAAUC,UAAmC,MAAvBD,EAAUC,YAAsBD,EAAUE,MAAQH,EAAaE,SAAW,KAAOF,EAAaG,MAASF,EAAUC,SAAW,KAAOD,EAAUE,MAC9K,MAAOrC,GAEP,OADIA,GACG,KAGVrF,KAAKd,MACR,WACE,IAAIyB,EAASgH,EACbhH,EAAUxB,EAAMwB,QAEhBgH,EAAU,SAAiBjE,GACzB,OAAOpC,MAAMZ,UAAUa,MAAMvB,KAAK0D,IAGpCvE,EAAMyI,iBAAmB,SAAU3G,EAAS4G,GAC1C,IAAIC,EAAQtF,EAsCZ,OArCAsF,EAAS,CAAC7G,GAENN,EAAQM,EAAS,UACnB6G,EAASH,EAAQ1G,EAAQ8G,WAG3BvF,EAAS,GACTsF,EAAO7F,SAAQ,SAAUC,GACvB,GAAKA,EAAMoB,OAAQpB,EAAM8F,WAIrBrH,EAAQuB,EAAO,wBAInB,OAAIvB,EAAQuB,EAAO,UACVyF,EAAQzF,EAAM0C,SAAS3C,SAAQ,SAAUgG,GAC9C,GAAIA,EAAOC,SACT,OAAO1F,EAAO2F,KAAK,CACjB7E,KAAMpB,EAAMoB,KACZpF,MAAO+J,EAAO/J,WAIXgE,EAAMkG,UAAoE,IAAzD,CAAC,QAAS,WAAY,UAAUnC,QAAQ/D,EAAM6D,MACjEvD,EAAO2F,KAAK,CACjB7E,KAAMpB,EAAMoB,KACZpF,MAAOgE,EAAMhE,aAHV,KAQL2J,GACFrF,EAAO2F,KAAKN,GAGPrF,EAAO6F,KAAI,SAAUrG,GAC1B,OAAkB,MAAdA,EAAMsB,KACDgF,mBAAmBtG,EAAMsB,MAAQ,IAAMgF,mBAAmBtG,EAAM9D,OAEhE8D,KAERuG,KAAK,MAGVpJ,EAAMqJ,aAAe,SAAUC,EAAMnJ,GACnC,OAAIqB,EAAQ8H,EAAM,QACTd,EAAQc,EAAKV,UAAUW,QAAO,SAAUC,GAC7C,OAAOhI,EAAQgI,EAAIrJ,MAGdqI,EAAQc,EAAKjH,iBAAiBlC,MAGxCU,KAAKd,MACR,WACE,IAAI0J,EAAaxG,EAAMqB,EACvBrB,EAAOjD,EAAMiD,KAAMqB,EAAiBtE,EAAMsE,eAE1CtE,EAAM0J,cAAgB,SAAUnF,GAC9B,IAAKkF,EAAY1J,MACf,OAAOuE,EAAeC,IAI1BvE,EAAMT,QAAU,SAAUF,EAASyC,GACjC,OAAOvC,QAAQF,IAGjBoK,EAAc,SAAqB3H,GACjC,IAAI6H,EAAQC,EAAUvK,EAGtB,KAFAA,EAAUyC,EAAQ+H,aAAa,iBAG7B,OAAO,EAKT,GAFAF,GAAS,EAEL1G,EAAKnB,EAAS,WAAY,CAC5B,IACE6H,EAAS3J,EAAMT,QAAQF,EAASyC,GAChC,MAAOoE,IAET0D,EAAW3G,EAAKnB,EAAS,mBAAoB,CAAC6H,IAGhD,OAAOA,GAAUC,IAElB/I,KAAKd,MACR,WACE,IAAI+J,EAAoBC,EAAqBC,EAAoBC,EAAmBC,EAAoBC,EAAmBd,EAActH,EAASqI,EAAe5I,EAASS,EAASqC,EACnL9C,EAAUxB,EAAMwB,QAASO,EAAU/B,EAAM+B,QAASE,EAAUjC,EAAMiC,QAASqC,EAAiBtE,EAAMsE,eAAgB+E,EAAerJ,EAAMqJ,aAEvIrJ,EAAMqK,sBAAwB,SAAU9F,GAItC,GAFUxE,UAEE8I,SACV,OAAOvE,EAAeC,IAI1BvE,EAAMsK,cAAgB,SAAU/F,GAC9B,IAAIzC,EAEJ,GAAIyC,aAAaX,MAAO,CACtB,GAAIwG,EAAc7F,GAChB,OAGFzC,EAAUyC,EAAEC,YAEZ1C,EAAUyC,EAGZ,OAAI/C,EAAQM,EAAS9B,EAAMW,qBAClBwJ,EAAkBrI,GAChBN,EAAQM,EAAS9B,EAAMY,wBAA0BY,EAAQM,EAAS9B,EAAMS,oBAC1EwJ,EAAkBnI,GAChBN,EAAQM,EAAS9B,EAAMM,oBACzB4J,EAAmBpI,QADrB,GAKT9B,EAAMuK,eAAiB,SAAUhG,GAC/B,IAAIzC,EAGJ,OAFAA,EAAUyC,aAAaX,MAAQW,EAAEC,OAASD,EAEtC/C,EAAQM,EAAS9B,EAAMW,qBAClBqJ,EAAmBlI,GACjBN,EAAQM,EAAS9B,EAAMY,wBAA0BY,EAAQM,EAAS9B,EAAMQ,qBAC1EsJ,EAAmBhI,GACjBN,EAAQM,EAAS9B,EAAMM,oBACzByJ,EAAoBjI,QADtB,GAKTkI,EAAqB,SAA4BlI,GAC/C,IAAI0I,EAEJ,IAAIzI,EAAQD,EAAS,gBAYrB,OANmB,OAFnB0I,EAAc1I,EAAQ+H,aAAa,wBAGjC5H,EAAQH,EAAS,kBAAmBA,EAAQ2I,WAC5C3I,EAAQ2I,UAAYD,GAGtB1I,EAAQgD,iBAAiB,QAASR,GAC3BrC,EAAQH,EAAS,gBAAgB,IAG1CqI,EAAoB,SAA2BrI,GAC7C,IAAI4I,EASJ,OANoB,OAFpBA,EAAe3I,EAAQD,EAAS,sBAG9BA,EAAQ2I,UAAYC,EACpBzI,EAAQH,EAAS,kBAAmB,OAGtCA,EAAQ6I,oBAAoB,QAASrG,GAC9BrC,EAAQH,EAAS,eAAgB,OAG1CiI,EAAsB,SAA6BT,GACjD,OAAOD,EAAaC,EAAMtJ,EAAMQ,qBAAqBsC,QAAQgH,IAG/DA,EAAqB,SAA4BhI,GAC/C,IAAI0I,EAEJ,IAAIzI,EAAQD,EAAS,gBAiBrB,OAXmB,OAFnB0I,EAAc1I,EAAQ+H,aAAa,wBAG7BrI,EAAQM,EAAS,WACnBG,EAAQH,EAAS,kBAAmBA,EAAQ2I,WAC5C3I,EAAQ2I,UAAYD,IAEpBvI,EAAQH,EAAS,kBAAmBA,EAAQ/C,OAC5C+C,EAAQ/C,MAAQyL,IAIpB1I,EAAQ+G,UAAW,EACZ5G,EAAQH,EAAS,gBAAgB,IAG1CoI,EAAqB,SAA4BZ,GAC/C,OAAOD,EAAaC,EAAMtJ,EAAMS,oBAAoBqC,QAAQmH,IAG9DA,EAAoB,SAA2BnI,GAC7C,IAAI4I,EAcJ,OAXoB,OAFpBA,EAAe3I,EAAQD,EAAS,sBAG1BN,EAAQM,EAAS,UACnBA,EAAQ2I,UAAYC,EAEpB5I,EAAQ/C,MAAQ2L,EAGlBzI,EAAQH,EAAS,kBAAmB,OAGtCA,EAAQ+G,UAAW,EACZ5G,EAAQH,EAAS,eAAgB,OAG1CsI,EAAgB,SAAuBhH,GACrC,IAAIpC,EAAK0B,EAET,OAA2E,OAA5D,OADfA,EAA8B,OAAvB1B,EAAMoC,EAAMO,QAAkB3C,EAAI,QAAK,GACxB0B,EAAIkD,kBAAkB,uBAAoB,KAEjE/E,KAAKd,MACR,WACE,IAAIuE,EACJA,EAAiBtE,EAAMsE,eAEvBtE,EAAM4K,aAAe,SAAUrG,GAC7B,IAAIjC,EAAWC,EAAW+G,EAAMuB,EAAalE,EAAYmE,EAIzD,GAHO/K,KACP+K,EADO/K,KACO8J,aAAa,eAwB3B,OAlBAlD,EAAO3G,EAAM2G,KAPN5G,MAQPwC,EAAYvC,EAAMuC,YAClBD,EAAYtC,EAAMsC,YAClBgH,EAAOrI,SAAS0G,cAAc,QAC9BkD,EAAc,gCAAkCC,EAAS,qBAExC,MAAbxI,GAAkC,MAAbC,GAAsBvC,EAAMmI,cAAcxB,KACjEkE,GAAe,gBAAkBvI,EAAY,YAAcC,EAAY,sBAGzEsI,GAAe,0BACfvB,EAAKwB,OAAS,OACdxB,EAAKyB,OAASpE,EACd2C,EAAK9E,OApBEzE,KAoBYyE,OACnB8E,EAAKmB,UAAYI,EACjBvB,EAAK0B,MAAMC,QAAU,OACrBhK,SAASiK,KAAKpD,YAAYwB,GAC1BA,EAAKpI,cAAc,mBAAmBiK,QAC/B7G,EAAeC,KAEvB1D,KAAKd,MACR,WACE,IAAIyF,EACAvC,EACAlB,EACAoG,EACAiD,EACA5J,EACAiH,EACAxG,EACAqC,EACAlC,EAAQ,GAAGA,MACfZ,EAAUxB,EAAMwB,QAASO,EAAU/B,EAAM+B,QAASE,EAAUjC,EAAMiC,QAASgB,EAAOjD,EAAMiD,KAAMqB,EAAiBtE,EAAMsE,eAAgBkB,EAAOxF,EAAMwF,KAAM2C,EAAgBnI,EAAMmI,cAAeM,EAAmBzI,EAAMyI,iBAEtN2C,EAAW,SAAkBtJ,GAC3B,IAAI/C,EAEJ,OAAgB,OADhBA,EAAQ+C,EAAQ+H,aAAa,iBACK,UAAV9K,GAG1BiB,EAAMqL,aAAe,SAAU9G,GAC7B,IAAI+G,EAAQlH,EAAM2C,EAAUjF,EAASgJ,EAAQrE,EAAKW,EAGlD,OAAKgE,EAFLtJ,EAAU/B,QAMLkD,EAAKnB,EAAS,gBAKnBsF,EAAkBtF,EAAQ+H,aAAa,yBACvC9C,EAAWjF,EAAQ+H,aAAa,cAAgB,SAE5CrI,EAAQM,EAAS9B,EAAMM,qBACzBgL,EAASvJ,EAAQD,EAAS,qBAC1BgJ,EAAS/I,EAAQD,EAAS,iCAAmCA,EAAQgJ,OACrErE,EAAM1E,EAAQD,EAAS,iCAAmCA,EAAQ+H,aAAa,WAAanD,SAASC,KAExE,QAAzBmE,EAAOjE,gBACTJ,EAAMA,EAAIwB,QAAQ,QAAS,KAGL,wBAApBnG,EAAQyJ,SACVnH,EAAO,IAAIoH,SAAS1J,GAEN,MAAVwJ,GACFlH,EAAKqH,OAAOH,EAAOnH,KAAMmH,EAAOvM,QAGlCqF,EAAOqE,EAAiB3G,EAASwJ,GAGnCrJ,EAAQH,EAAS,oBAAqB,MACtCG,EAAQH,EAAS,+BAAgC,MACjDG,EAAQH,EAAS,+BAAgC,OACxCN,EAAQM,EAAS9B,EAAME,sBAAwBsB,EAAQM,EAAS9B,EAAMK,sBAC/EyK,EAAShJ,EAAQ+H,aAAa,eAC9BpD,EAAM3E,EAAQ+H,aAAa,YAC3BzF,EAAOqE,EAAiB3G,EAASA,EAAQ+H,aAAa,kBAEtDiB,EAAShJ,EAAQ+H,aAAa,eAC9BpD,EAAMzG,EAAM2G,KAAK7E,GACjBsC,EAAOtC,EAAQ+H,aAAa,gBAG9BrE,EAAK,CACHoB,KAAMkE,GAAU,MAChBrE,IAAKA,EACLrC,KAAMA,EACN2C,SAAUA,EACVX,WAAY,SAAoB1D,EAAK+C,GACnC,OAAIxC,EAAKnB,EAAS,kBAAmB,CAACY,EAAK+C,IAClCxC,EAAKnB,EAAS,YAAa,CAACY,KAEnCO,EAAKnB,EAAS,iBACP,IAGXkE,QAAS,WACP,IAAI0F,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASxJ,EAAMvB,KAAK8K,UAAW,GAAK,GACnD1I,EAAKnB,EAAS,eAAgB4J,IAEvCxF,MAAO,WACL,IAAIwF,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASxJ,EAAMvB,KAAK8K,UAAW,GAAK,GACnD1I,EAAKnB,EAAS,aAAc4J,IAErCvF,SAAU,WACR,IAAIuF,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASxJ,EAAMvB,KAAK8K,UAAW,GAAK,GACnD1I,EAAKnB,EAAS,gBAAiB4J,IAExCvE,YAAagB,EAAc1B,GAC3BW,gBAAoC,MAAnBA,GAA+C,UAApBA,IAEvC9C,EAAeC,KAtEpBtB,EAAKnB,EAAS,iBACP,KAwEX9B,EAAM6L,sBAAwB,SAAUtH,GACtC,IAAY+E,EAIZ,GAHSvJ,KACTuJ,EADSvJ,KACKuJ,KAed,OAhBSvJ,KAOEoE,MACTlC,EAAQqH,EAAM,oBAAqB,CACjCnF,KATKpE,KASQoE,KACbpF,MAVKgB,KAUShB,QAIlBkD,EAAQqH,EAAM,4BAdLvJ,KAcyC+L,gBAClD7J,EAAQqH,EAAM,+BAfLvJ,KAe4C8J,aAAa,eAC3D5H,EAAQqH,EAAM,+BAhBZvJ,KAgBmD8J,aAAa,gBAG3E7J,EAAM+L,0BAA4B,SAAUxH,GAC1C,IAAIH,EAAM4H,EAAyClB,EAQnD,GAPO/K,KACP+K,GADO/K,KACQ8J,aAAa,gBAAkB,OAAOhD,cACrDzC,EAFOrE,KAEK8J,aAAa,eAEzBmC,GADYzH,EAAE0H,SAAW1H,EAAE2H,UACsB,QAAXpB,IAAqB1G,EACxB,MAAZG,EAAE+G,QAA+B,IAAb/G,EAAE+G,QAEjBU,EAC1B,OAAOzH,EAAEG,6BAGZ7D,KAAKd,MACR,WACE,IAAImC,EAAGO,EAAgBkC,EAAU4F,EAAgBD,EAAerH,EAAM4I,EAAuB9J,EAAS2H,EAAeW,EAAuBO,EAAcS,EAActK,EAAcgL,EAA2BnJ,EAGjN,GAFAK,EAAOjD,EAAMiD,KAAM0B,EAAW3E,EAAM2E,SAAU5C,EAAU/B,EAAM+B,QAASG,EAAIlC,EAAMkC,EAAGU,EAAoB5C,EAAM4C,kBAAmBH,EAAiBzC,EAAMyC,eAAgB1B,EAAef,EAAMe,aAAcuJ,EAAgBtK,EAAMsK,cAAeC,EAAiBvK,EAAMuK,eAAgBF,EAAwBrK,EAAMqK,sBAAuBX,EAAgB1J,EAAM0J,cAAeqC,EAA4B/L,EAAM+L,0BAA2BV,EAAerL,EAAMqL,aAAcQ,EAAwB7L,EAAM6L,sBAAuBjB,EAAe5K,EAAM4K,aAErgB,oBAAXuB,QAAqC,OAAXA,QAAkC,MAAfA,OAAO3G,KAAc,CAC3E,GAAI2G,OAAOC,MACT,MAAM,IAAIC,MAAM,kEAGlBF,OAAOC,MAAQpM,EACfmM,OAAOG,eAAc,SAAU7G,EAAS8G,EAAiB7J,GACvD,IAAK+C,EAAQ0B,YACX,OAAO1E,EAAeC,MAK5B1C,EAAMwM,MAAQ,WACZ,GAAIrJ,OAAOsJ,cACT,MAAM,IAAIJ,MAAM,sCAiDlB,OA9CAlJ,OAAO2B,iBAAiB,YAAY,WAMlC,OALA5C,EAAElC,EAAMS,oBAAoBqC,SAAQ,SAAU0G,GAC5C,GAAIzH,EAAQyH,EAAI,gBACd,OAAOc,EAAcd,MAGlBtH,EAAElC,EAAMW,qBAAqBmC,SAAQ,SAAU0G,GACpD,GAAIzH,EAAQyH,EAAI,gBACd,OAAOc,EAAcd,SAI3B7E,EAAS1D,SAAUjB,EAAMW,oBAAqB,gBAAiB2J,GAC/D3F,EAAS1D,SAAUjB,EAAMW,oBAAqB,eAAgB2J,GAC9D3F,EAAS1D,SAAUjB,EAAMY,sBAAuB,gBAAiB0J,GACjE3F,EAAS1D,SAAUjB,EAAMY,sBAAuB,eAAgB0J,GAChE3F,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAAS8L,GACrDpH,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAASoK,GACrD1F,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAASyJ,GACrD/E,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAASsK,GACrD5F,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAASoL,GACrD1G,EAAS1D,SAAUjB,EAAMC,kBAAmB,QAAS2K,GACrDjG,EAAS1D,SAAUjB,EAAME,oBAAqB,QAAS6L,GACvDpH,EAAS1D,SAAUjB,EAAME,oBAAqB,QAASmK,GACvD1F,EAAS1D,SAAUjB,EAAME,oBAAqB,QAASwJ,GACvD/E,EAAS1D,SAAUjB,EAAME,oBAAqB,QAASqK,GACvD5F,EAAS1D,SAAUjB,EAAME,oBAAqB,QAASmL,GACvD1G,EAAS1D,SAAUjB,EAAMK,oBAAqB,SAAUgK,GACxD1F,EAAS1D,SAAUjB,EAAMK,oBAAqB,SAAUqJ,GACxD/E,EAAS1D,SAAUjB,EAAMK,oBAAqB,SAAUgL,GACxD1G,EAAS1D,SAAUjB,EAAMM,mBAAoB,SAAU+J,GACvD1F,EAAS1D,SAAUjB,EAAMM,mBAAoB,SAAUoJ,GACvD/E,EAAS1D,SAAUjB,EAAMM,mBAAoB,SAAU+K,GACvD1G,EAAS1D,SAAUjB,EAAMM,mBAAoB,UAAU,SAAUiE,GAC/D,OAAOmI,YAAW,WAChB,OAAOnC,EAAehG,KACrB,OAELI,EAAS1D,SAAUjB,EAAMM,mBAAoB,YAAaiK,GAC1D5F,EAAS1D,SAAUjB,EAAMM,mBAAoB,gBAAiBgK,GAC9D3F,EAAS1D,SAAUjB,EAAMO,uBAAwB,QAASwL,GAC1DpH,EAAS1D,SAAUjB,EAAMO,uBAAwB,QAAS8J,GAC1D1F,EAAS1D,SAAUjB,EAAMO,uBAAwB,QAASmJ,GAC1D/E,EAAS1D,SAAUjB,EAAMO,uBAAwB,QAASsL,GAC1D5K,SAAS6D,iBAAiB,mBAAoBlC,GAC9C3B,SAAS6D,iBAAiB,mBAAoB/D,GACvCoC,OAAOsJ,eAAgB,GAG5BtJ,OAAOnD,QAAUA,GAASiD,EAAKhC,SAAU,yBAC3CjB,EAAMwM,SAEP3L,KAAKd,QACPc,KAAKd,MAE0B4M,EAAOC,QACvCD,EAAOC,QAAU5M,OAEL,0BAAZ,KAAY,oCAEba,KAAKd,O,iCChyBR,6BAUe3E,uBANS,SAAAC,GACtB,MAAO,CACLwR,QAASxR,EAAME,MAAM,CAAC,WAAYuR,SAIvB1R,CAAyB2R,M,oVCMxC,I,EAAMjS,EAAWC,YAAe,CAC9BiS,UAAU,CAAD,wEAITC,cAAc,CAAD,0CAIbC,OAAO,CAAD,oDAINC,cAAc,CAAD,4DAIbC,OAAO,CAAD,yEAINC,SAAS,CAAD,gEAIRb,MAAM,CAAD,iEAODc,EADUnS,a,kOAWM,SAAAoJ,GAMlB,OALAA,EAAErB,iBACFqB,EAAEE,kBAEF,EAAK8I,MAAMC,YAEJ,K,qBAGTC,OAAA,WAAW,IAAD,EACgF1N,KAAKwN,MAArFnQ,EADA,EACAA,KAAMsQ,EADN,EACMA,QAASC,EADf,EACeA,oBAAqBC,EADpC,EACoCA,uBAAwBC,EAD5D,EAC4DA,gBAG9DC,EAAkBC,IAAkBC,KAAK,MAC7C,SAAAC,GAAQ,OAAKP,IAAYA,EAAQQ,MAC/B,SAAAC,GAAM,OAAIA,EAAOlK,IAAI,QAAUgK,QAKnC,OACE,mBAAKG,UAAU,uBAAf,EACE,YAACC,EAAA,EAAD,CACEC,aAAYlR,EAAKkC,cAAcxE,EAAS0R,OACxC+B,MAAOnR,EAAKkC,cAAcxE,EAAS0R,OACnCgC,GAAG,yBAHL,EAIC,YAAC,IAAD,CAAM7O,GAAG,cACTmO,EAAgB,OACf,YAACO,EAAA,EAAD,CACEC,aAAYlR,EAAKkC,cAAcxE,EAASmS,eACxCsB,MAAOnR,EAAKkC,cAAcxE,EAASmS,eACnCuB,GAAG,wBAHL,EAIC,YAAC,IAAD,CAAM7O,GAAG,WAEXmO,EAAgB,gBACf,YAACO,EAAA,EAAD,CACEC,aAAYlR,EAAKkC,cAAcxE,EAASqS,eACxCoB,MAAOnR,EAAKkC,cAAcxE,EAASqS,eACnCqB,GAAG,uBAHL,EAKE,oBAAMJ,UAAU,2BAAhB,EACE,YAAC,IAAD,CAAMzO,GAAG,SACPiO,GAA0BD,EAAsB,GAAK,mBAAKS,UAAU,kBAI3EN,EAAgB,YACf,YAACO,EAAA,EAAD,CACEC,aAAYlR,EAAKkC,cAAcxE,EAASkS,WACxCuB,MAAOnR,EAAKkC,cAAcxE,EAASkS,WACnCwB,GAAG,gCAHL,EAIC,YAAC,IAAD,CAAM7O,GAAG,YAEXmO,EAAgB,SACf,YAACO,EAAA,EAAD,CACEC,aAAYlR,EAAKkC,cAAcxE,EAASsS,QACxCmB,MAAOnR,EAAKkC,cAAcxE,EAASsS,QACnCoB,GAAG,0BAHL,EAIC,YAAC,IAAD,CAAM7O,GAAG,YAEZ,iBACE2O,aAAYlR,EAAKkC,cAAcxE,EAASuS,UACxCoB,QAASZ,EACTlH,KAAK,IACL4H,MAAOnR,EAAKkC,cAAcxE,EAASuS,gBAJrC,EAKC,YAAC,IAAD,CAAM1N,GAAG,UACV,iBACE2O,aAAYlR,EAAKkC,cAAcxE,EAASoS,QACxCuB,QAAS1O,KAAK2O,kBACd/H,KAAOgI,IACPJ,MAAOnR,EAAKkC,cAAcxE,EAASoS,cAJrC,EAKC,YAAC,IAAD,CAAMvN,GAAG,gB,GAjFGiP,K,0BACA,CACjBlB,QAASmB,IAAmBC,KAC5BnB,oBAAqBoB,IAAUC,OAC/BpB,uBAAwBmB,IAAUE,KAClC7R,KAAM2R,IAAUG,OAChBrB,gBAAiBkB,IAAUI,KAC3B3B,SAAUuB,IAAUI,KAAKC,a,0BCjDvBtU,EAAWC,YAAe,CAC9BsU,cAAc,CAAD,sFACbC,cAAc,CAAD,8DA0BAnU,cAAWC,mBAvBF,SAAAC,GACtB,MAAO,CACLqS,QAASrS,EAAME,MAAM,CAAC,WAAY,YAClCoS,oBAAqBtS,EAAME,MAAM,CAAC,gBAAiB,WACnDqS,uBAAwBvS,EAAME,MAAM,CAAC,iBAAkB,gBAAiB,kBAIjD,SAAC4B,EAAD,OAAaC,EAAb,EAAaA,KAAb,MAAyB,CAClDyQ,gBADkD,SACjCtJ,GACfA,EAAErB,iBACFqB,EAAEE,kBACFtH,EAASiC,YAAU,WAAY,MAEjCoO,SANkD,WAOhDrQ,EAASiC,YAAU,UAAW,CAC5BC,QAASjC,EAAKkC,cAAcxE,EAASuU,eACrC9P,QAASnC,EAAKkC,cAAcxE,EAASwU,eACrC9P,UAAW,kBC1BK,WACpB,IAAM8J,EAAOrI,SAAS0G,cAAc,QAE9B4H,EAActO,SAAS0G,cAAc,SAC3C4H,EAAY3H,aAAa,OAAQ,WACjC2H,EAAY3H,aAAa,QAAS,UAClC2H,EAAY3H,aAAa,OAAQ,UACjC0B,EAAKxB,YAAYyH,GAEjB,IAAMhN,EAAYvC,IAAMuC,YAClBD,EAAYtC,IAAMsC,YAExB,GAAIA,GAAaC,EAAW,CAC1B,IAAMiN,EAAYvO,SAAS0G,cAAc,SACzC6H,EAAU5H,aAAa,OAAQtF,GAC/BkN,EAAU5H,aAAa,QAASrF,GAChCiN,EAAU5H,aAAa,OAAQ,UAC/B0B,EAAKxB,YAAY0H,GAGnB,IAAMC,EAAexO,SAAS0G,cAAc,SAC5C8H,EAAa7H,aAAa,OAAQ,UAClC0B,EAAKxB,YAAY2H,GAEjBnG,EAAKwB,OAAS,OACdxB,EAAKyB,OAAS4D,IACdrF,EAAK0B,MAAMC,QAAU,OAErBhK,SAASiK,KAAKpD,YAAYwB,GAC1BmG,EAAatE,QDHQuE,WAKGtU,CAA6CkS,IElBvE,IAAMxS,EAAWC,YAAe,CAC9B4U,QAAQ,CAAD,iEAkBHC,EAFUxU,mBAbQ,SAACC,EAAOwU,GAAR,MAAsB,CAC5CnT,WAAYmT,EAASC,YAAczU,EAAME,MAAM,CAAC,SAAU,gBAAkBF,EAAME,MAAM,CAAC,SAAU,WAAasU,EAASE,iBAGhG,SAAC5S,EAAD,KAAaC,KAAb,MAAyB,CAClD4S,QADkD,WAEhD7S,EAAS8S,iBAGXC,UALkD,WAMhD/S,EAASgT,oB,GAIZhV,Y,sHAWCiV,kBAAA,WAC2BrQ,KAAKwN,MAAtBwC,cAGNhQ,KAAKwN,MAAMyC,W,EAIfK,qBAAA,WAC2BtQ,KAAKwN,MAAtBwC,cAGNhQ,KAAKwN,MAAM2C,a,EAIfzC,OAAA,WAAW,IAAD,EAMJ1N,KAAKwN,MAJPnQ,EAFM,EAENA,KACA0S,EAHM,EAGNA,YACAC,EAJM,EAINA,aACArT,EALM,EAKNA,WAEI4T,EAAgBC,IAAW,SAAU,YAE3C,OACE,mBAAKnC,UAAWkC,EAAeE,KAAK,SAASlC,aAAYlR,EAAKkC,cAAcxE,EAAS6U,eAArF,EACGG,GAAe,YAAC,EAAD,KAEdA,GAAeC,IAAiB,YAAC,IAAD,IAElC,mBAAK3B,UAAU,sBAAf,GACI2B,GAAgB,mBAAK3B,UAAU,sBAAf,EAChB,YAAC,IAAD,IAEA,YAAC,IAAD,IAEA,mBAAKA,UAAU,gCAAf,EACGqC,IAAS,mBAAKC,IAAI,GAAGC,UAAU,QAAQC,IAAKH,MAAa,sBAAQrC,UAAU,eAIhF,YAAC,IAAD,CAAQyC,aAAc,CAAEC,EAAGf,EAAe,GAAK,KAAO/E,MAAO,CAAE8F,EAAGC,IAAOrU,GAAcqT,EAAe,GAAK,IAAK,CAAEiB,UAAW,IAAKC,QAAS,YAA3I,GACG,gBAAGH,EAAH,EAAGA,EAAH,OACC,mBAAK1C,UAAU,uBAAuBpD,MAAO,CAAEkG,UAAU,cAAeJ,EAAhB,KAAuBK,YAAmB,MAAPL,EAAa,SAAW,iBAAnH,EACE,YAAC,IAAD,Y,GAvDMM,IAAMC,iB","file":"flavours/glitch/async/compose.js","sourcesContent":["import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ComposeForm from '../components/compose_form';\nimport {\n changeCompose,\n changeComposeSpoilerText,\n changeComposeSpoilerness,\n changeComposeVisibility,\n clearComposeSuggestions,\n fetchComposeSuggestions,\n insertEmojiCompose,\n selectComposeSuggestion,\n submitCompose,\n uploadCompose,\n} from 'flavours/glitch/actions/compose';\nimport {\n openModal,\n} from 'flavours/glitch/actions/modal';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\n\nimport { privacyPreference } from 'flavours/glitch/util/privacy_preference';\n\nconst messages = defineMessages({\n missingDescriptionMessage: { id: 'confirmations.missing_media_description.message',\n defaultMessage: 'At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.' },\n missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm',\n defaultMessage: 'Send anyway' },\n missingDescriptionEdit: { id: 'confirmations.missing_media_description.edit',\n defaultMessage: 'Edit media' },\n});\n\n// State mapping.\nfunction mapStateToProps (state) {\n const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']);\n const inReplyTo = state.getIn(['compose', 'in_reply_to']);\n const replyPrivacy = inReplyTo ? state.getIn(['statuses', inReplyTo, 'visibility']) : null;\n const sideArmBasePrivacy = state.getIn(['local_settings', 'side_arm']);\n const sideArmRestrictedPrivacy = replyPrivacy ? privacyPreference(replyPrivacy, sideArmBasePrivacy) : null;\n let sideArmPrivacy = null;\n switch (state.getIn(['local_settings', 'side_arm_reply_mode'])) {\n case 'copy':\n sideArmPrivacy = replyPrivacy;\n break;\n case 'restrict':\n sideArmPrivacy = sideArmRestrictedPrivacy;\n break;\n }\n sideArmPrivacy = sideArmPrivacy || sideArmBasePrivacy;\n return {\n advancedOptions: state.getIn(['compose', 'advanced_options']),\n focusDate: state.getIn(['compose', 'focusDate']),\n caretPosition: state.getIn(['compose', 'caretPosition']),\n isSubmitting: state.getIn(['compose', 'is_submitting']),\n isChangingUpload: state.getIn(['compose', 'is_changing_upload']),\n isUploading: state.getIn(['compose', 'is_uploading']),\n layout: state.getIn(['local_settings', 'layout']),\n media: state.getIn(['compose', 'media_attachments']),\n preselectDate: state.getIn(['compose', 'preselectDate']),\n privacy: state.getIn(['compose', 'privacy']),\n sideArm: sideArmPrivacy,\n sensitive: state.getIn(['compose', 'sensitive']),\n showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n spoiler: spoilersAlwaysOn || state.getIn(['compose', 'spoiler']),\n spoilerText: state.getIn(['compose', 'spoiler_text']),\n suggestions: state.getIn(['compose', 'suggestions']),\n text: state.getIn(['compose', 'text']),\n anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,\n spoilersAlwaysOn: spoilersAlwaysOn,\n mediaDescriptionConfirmation: state.getIn(['local_settings', 'confirm_missing_media_description']),\n preselectOnReply: state.getIn(['local_settings', 'preselect_on_reply']),\n };\n};\n\n// Dispatch mapping.\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange(text) {\n dispatch(changeCompose(text));\n },\n\n onSubmit(routerHistory) {\n dispatch(submitCompose(routerHistory));\n },\n\n onClearSuggestions() {\n dispatch(clearComposeSuggestions());\n },\n\n onFetchSuggestions(token) {\n dispatch(fetchComposeSuggestions(token));\n },\n\n onSuggestionSelected(position, token, suggestion, path) {\n dispatch(selectComposeSuggestion(position, token, suggestion, path));\n },\n\n onChangeSpoilerText(text) {\n dispatch(changeComposeSpoilerText(text));\n },\n\n onPaste(files) {\n dispatch(uploadCompose(files));\n },\n\n onPickEmoji(position, emoji) {\n dispatch(insertEmojiCompose(position, emoji));\n },\n\n onChangeSpoilerness() {\n dispatch(changeComposeSpoilerness());\n },\n\n onChangeVisibility(value) {\n dispatch(changeComposeVisibility(value));\n },\n\n onMediaDescriptionConfirm(routerHistory, mediaId, overriddenVisibility = null) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.missingDescriptionMessage),\n confirm: intl.formatMessage(messages.missingDescriptionConfirm),\n onConfirm: () => {\n if (overriddenVisibility) {\n dispatch(changeComposeVisibility(overriddenVisibility));\n };\n dispatch(submitCompose(routerHistory));\n },\n secondary: intl.formatMessage(messages.missingDescriptionEdit),\n onSecondary: () => dispatch(openModal('FOCAL_POINT', { id: mediaId })),\n onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ComposeForm));\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n }\n\n formContent += '<input type=\"submit\" />';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","import { connect } from 'react-redux';\nimport NavigationBar from '../components/navigation_bar';\nimport { me } from 'flavours/glitch/util/initial_state';\n\nconst mapStateToProps = state => {\n return {\n account: state.getIn(['accounts', me]),\n };\n};\n\nexport default connect(mapStateToProps)(NavigationBar);\n","// Package imports.\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\n// Components.\nimport Icon from 'flavours/glitch/components/icon';\n\n// Utils.\nimport { conditionalRender } from 'flavours/glitch/util/react_helpers';\nimport { signOutLink } from 'flavours/glitch/util/backend_links';\n\n// Messages.\nconst messages = defineMessages({\n community: {\n defaultMessage: 'Local timeline',\n id: 'navigation_bar.community_timeline',\n },\n home_timeline: {\n defaultMessage: 'Home',\n id: 'tabs_bar.home',\n },\n logout: {\n defaultMessage: 'Logout',\n id: 'navigation_bar.logout',\n },\n notifications: {\n defaultMessage: 'Notifications',\n id: 'tabs_bar.notifications',\n },\n public: {\n defaultMessage: 'Federated timeline',\n id: 'navigation_bar.public_timeline',\n },\n settings: {\n defaultMessage: 'App settings',\n id: 'navigation_bar.app_settings',\n },\n start: {\n defaultMessage: 'Getting started',\n id: 'getting_started.heading',\n },\n});\n\nexport default @injectIntl\nclass Header extends ImmutablePureComponent {\n static propTypes = {\n columns: ImmutablePropTypes.list,\n unreadNotifications: PropTypes.number,\n showNotificationsBadge: PropTypes.bool,\n intl: PropTypes.object,\n onSettingsClick: PropTypes.func,\n onLogout: PropTypes.func.isRequired,\n };\n\n handleLogoutClick = e => {\n e.preventDefault();\n e.stopPropagation();\n\n this.props.onLogout();\n\n return false;\n }\n\n render () {\n const { intl, columns, unreadNotifications, showNotificationsBadge, onSettingsClick } = this.props;\n\n // Only renders the component if the column isn't being shown.\n const renderForColumn = conditionalRender.bind(null,\n columnId => !columns || !columns.some(\n column => column.get('id') === columnId\n )\n );\n\n // The result.\n return (\n <nav className='drawer--header'>\n <Link\n aria-label={intl.formatMessage(messages.start)}\n title={intl.formatMessage(messages.start)}\n to='/getting-started'\n ><Icon id='asterisk' /></Link>\n {renderForColumn('HOME', (\n <Link\n aria-label={intl.formatMessage(messages.home_timeline)}\n title={intl.formatMessage(messages.home_timeline)}\n to='/timelines/home'\n ><Icon id='home' /></Link>\n ))}\n {renderForColumn('NOTIFICATIONS', (\n <Link\n aria-label={intl.formatMessage(messages.notifications)}\n title={intl.formatMessage(messages.notifications)}\n to='/notifications'\n >\n <span className='icon-badge-wrapper'>\n <Icon id='bell' />\n { showNotificationsBadge && unreadNotifications > 0 && <div className='icon-badge' />}\n </span>\n </Link>\n ))}\n {renderForColumn('COMMUNITY', (\n <Link\n aria-label={intl.formatMessage(messages.community)}\n title={intl.formatMessage(messages.community)}\n to='/timelines/public/local'\n ><Icon id='users' /></Link>\n ))}\n {renderForColumn('PUBLIC', (\n <Link\n aria-label={intl.formatMessage(messages.public)}\n title={intl.formatMessage(messages.public)}\n to='/timelines/public'\n ><Icon id='globe' /></Link>\n ))}\n <a\n aria-label={intl.formatMessage(messages.settings)}\n onClick={onSettingsClick}\n href='#'\n title={intl.formatMessage(messages.settings)}\n ><Icon id='cogs' /></a>\n <a\n aria-label={intl.formatMessage(messages.logout)}\n onClick={this.handleLogoutClick}\n href={ signOutLink }\n title={intl.formatMessage(messages.logout)}\n ><Icon id='sign-out' /></a>\n </nav>\n );\n };\n}\n","import { openModal } from 'flavours/glitch/actions/modal';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport Header from '../components/header';\nimport { logOut } from 'flavours/glitch/util/log_out';\n\nconst messages = defineMessages({\n logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = state => {\n return {\n columns: state.getIn(['settings', 'columns']),\n unreadNotifications: state.getIn(['notifications', 'unread']),\n showNotificationsBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onSettingsClick (e) {\n e.preventDefault();\n e.stopPropagation();\n dispatch(openModal('SETTINGS', {}));\n },\n onLogout () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.logoutMessage),\n confirm: intl.formatMessage(messages.logoutConfirm),\n onConfirm: () => logOut(),\n }));\n },\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Header));\n","import Rails from '@rails/ujs';\nimport { signOutLink } from 'flavours/glitch/util/backend_links';\n\nexport const logOut = () => {\n const form = document.createElement('form');\n\n const methodInput = document.createElement('input');\n methodInput.setAttribute('name', '_method');\n methodInput.setAttribute('value', 'delete');\n methodInput.setAttribute('type', 'hidden');\n form.appendChild(methodInput);\n\n const csrfToken = Rails.csrfToken();\n const csrfParam = Rails.csrfParam();\n\n if (csrfParam && csrfToken) {\n const csrfInput = document.createElement('input');\n csrfInput.setAttribute('name', csrfParam);\n csrfInput.setAttribute('value', csrfToken);\n csrfInput.setAttribute('type', 'hidden');\n form.appendChild(csrfInput);\n }\n\n const submitButton = document.createElement('input');\n submitButton.setAttribute('type', 'submit');\n form.appendChild(submitButton);\n\n form.method = 'post';\n form.action = signOutLink;\n form.style.display = 'none';\n\n document.body.appendChild(form);\n submitButton.click();\n};\n","import React from 'react';\nimport ComposeFormContainer from './containers/compose_form_container';\nimport NavigationContainer from './containers/navigation_container';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport { mountCompose, unmountCompose } from 'flavours/glitch/actions/compose';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport classNames from 'classnames';\nimport SearchContainer from './containers/search_container';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport SearchResultsContainer from './containers/search_results_container';\nimport { me, mascot } from 'flavours/glitch/util/initial_state';\nimport HeaderContainer from './containers/header_container';\n\nconst messages = defineMessages({\n compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new toot' },\n});\n\nconst mapStateToProps = (state, ownProps) => ({\n showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onMount () {\n dispatch(mountCompose());\n },\n\n onUnmount () {\n dispatch(unmountCompose());\n },\n});\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Compose extends React.PureComponent {\n static propTypes = {\n multiColumn: PropTypes.bool,\n showSearch: PropTypes.bool,\n isSearchPage: PropTypes.bool,\n onMount: PropTypes.func,\n onUnmount: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.onMount();\n }\n }\n\n componentWillUnmount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.onUnmount();\n }\n }\n\n render () {\n const {\n intl,\n multiColumn,\n isSearchPage,\n showSearch,\n } = this.props;\n const computedClass = classNames('drawer', 'mbstobon');\n\n return (\n <div className={computedClass} role='region' aria-label={intl.formatMessage(messages.compose)}>\n {multiColumn && <HeaderContainer />}\n\n {(multiColumn || isSearchPage) && <SearchContainer />}\n\n <div className='drawer__pager'>\n {!isSearchPage && <div className='drawer__inner'>\n <NavigationContainer />\n\n <ComposeFormContainer />\n\n <div className='drawer__inner__mastodon'>\n {mascot ? <img alt='' draggable='false' src={mascot} /> : <button className='mastodon' />}\n </div>\n </div>}\n\n <Motion defaultStyle={{ x: isSearchPage ? 0 : -100 }} style={{ x: spring(showSearch || isSearchPage ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) => (\n <div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n <SearchResultsContainer />\n </div>\n )}\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/direct_timeline.js b/priv/static/packs/flavours/glitch/async/direct_timeline.js
index 66e783179..4b19a1383 100644
--- a/priv/static/packs/flavours/glitch/async/direct_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/direct_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{809:function(e,t,n){"use strict";n.r(t);var a,o,s,i,c=n(0),r=n(2),d=n(7),l=n(1),u=n(3),p=n.n(u),b=n(13),m=n(1033),h=n(734),f=n(732),v=n(32),j=n(101),O=n(249),g=n(6),M=n(1074),y=Object(g.f)({filter_regex:{id:"home.column_settings.filter_regex",defaultMessage:"Filter out by regular expressions"},settings:{id:"home.settings",defaultMessage:"Column settings"}}),_=Object(g.g)(a=function(e){function t(){return e.apply(this,arguments)||this}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange,a=e.intl;return Object(c.a)("div",{},void 0,Object(c.a)("span",{className:"column-settings__section"},void 0,Object(c.a)(g.b,{id:"home.column_settings.advanced",defaultMessage:"Advanced"})),Object(c.a)("div",{className:"column-settings__row"},void 0,Object(c.a)(M.a,{settings:t,settingPath:["regex","body"],onChange:n,label:a.formatMessage(y.filter_regex)})))},t}(p.a.PureComponent))||a,C=n(69),k=Object(b.connect)((function(e){return{settings:e.getIn(["settings","direct"])}}),(function(e){return{onChange:function(t,n){e(Object(C.c)(["direct"].concat(t),n))}}}))(_),w=n(739),I=n(8),x=n(30),R=n(62),L=n.n(R),E=n(5),N=n.n(E),S=n(14),D=n.n(S),T=n(18),U=n(150),A=n(262),H=n(741),q=n(750),K=n(210),P=n(39),W=n(98),z=n(295),V=n(16),B=n(12),F=n.n(B),J=Object(g.f)({more:{id:"status.more",defaultMessage:"More"},open:{id:"conversation.open",defaultMessage:"View conversation"},reply:{id:"status.reply",defaultMessage:"Reply"},markAsRead:{id:"conversation.mark_as_read",defaultMessage:"Mark as read"},delete:{id:"conversation.delete",defaultMessage:"Delete conversation"},muteConversation:{id:"status.mute_conversation",defaultMessage:"Mute conversation"},unmuteConversation:{id:"status.unmute_conversation",defaultMessage:"Unmute conversation"}}),Y=Object(g.g)((i=s=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(l.a)(Object(r.a)(t),"state",{isExpanded:void 0}),Object(l.a)(Object(r.a)(t),"parseClick",(function(e,n){var a=t.context.router,o=t.props,s=o.lastStatus,i=o.unread,c=o.markRead;if(a&&0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)){void 0===n&&(i&&c(),n="/statuses/"+s.get("id"));var r=Object(I.default)({},a.history.location.state);r.mastodonBackSteps=(r.mastodonBackSteps||0)+1,a.history.push(n,r),e.preventDefault()}})),Object(l.a)(Object(r.a)(t),"handleEmojiMouseEnter",(function(e){var t=e.target;t.src=t.getAttribute("data-original")})),Object(l.a)(Object(r.a)(t),"handleEmojiMouseLeave",(function(e){var t=e.target;t.src=t.getAttribute("data-static")})),Object(l.a)(Object(r.a)(t),"handleClick",(function(){if(t.context.router){var e=t.props,n=e.lastStatus,a=e.unread,o=e.markRead;a&&o(),t.context.router.history.push("/statuses/"+n.get("id"))}})),Object(l.a)(Object(r.a)(t),"handleMarkAsRead",(function(){t.props.markRead()})),Object(l.a)(Object(r.a)(t),"handleReply",(function(){t.props.reply(t.props.lastStatus,t.context.router.history)})),Object(l.a)(Object(r.a)(t),"handleDelete",(function(){t.props.delete()})),Object(l.a)(Object(r.a)(t),"handleHotkeyMoveUp",(function(){t.props.onMoveUp(t.props.conversationId)})),Object(l.a)(Object(r.a)(t),"handleHotkeyMoveDown",(function(){t.props.onMoveDown(t.props.conversationId)})),Object(l.a)(Object(r.a)(t),"handleConversationMute",(function(){t.props.onMute(t.props.lastStatus)})),Object(l.a)(Object(r.a)(t),"handleShowMore",(function(){t.props.lastStatus.get("spoiler_text")&&t.setExpansion(!t.state.isExpanded)})),Object(l.a)(Object(r.a)(t),"setExpansion",(function(e){t.setState({isExpanded:e})})),Object(l.a)(Object(r.a)(t),"setNamesRef",(function(e){t.namesNode=e})),t}Object(d.a)(t,e);var n=t.prototype;return n._updateEmojis=function(){var e=this.namesNode;if(e&&!V.a)for(var t=e.querySelectorAll(".custom-emoji"),n=0;n<t.length;n++){var a=t[n];a.classList.contains("status-emoji")||(a.classList.add("status-emoji"),a.addEventListener("mouseenter",this.handleEmojiMouseEnter,!1),a.addEventListener("mouseleave",this.handleEmojiMouseLeave,!1))}},n.componentDidMount=function(){this._updateEmojis()},n.componentDidUpdate=function(){this._updateEmojis()},n.render=function(){var e=this.props,t=e.accounts,n=e.lastStatus,a=e.unread,o=e.intl,s=this.state.isExpanded;if(null===n)return null;var i=[{text:o.formatMessage(J.open),action:this.handleClick},null];i.push({text:o.formatMessage(n.get("muted")?J.unmuteConversation:J.muteConversation),action:this.handleConversationMute}),a&&(i.push({text:o.formatMessage(J.markAsRead),action:this.handleMarkAsRead}),i.push(null)),i.push({text:o.formatMessage(J.delete),action:this.handleDelete});var r=t.map((function(e){return Object(c.a)(K.a,{to:"/accounts/"+e.get("id"),href:e.get("url"),title:e.get("acct")},e.get("id"),Object(c.a)("bdi",{},void 0,Object(c.a)("strong",{className:"display-name__html",dangerouslySetInnerHTML:{__html:e.get("display_name_html")}})))})).reduce((function(e,t){return[e,", ",t]})),d={reply:this.handleReply,open:this.handleClick,moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,toggleHidden:this.handleShowMore},l=null;return n.get("media_attachments").size>0&&(l=Object(c.a)(A.a,{compact:!0,media:n.get("media_attachments")})),Object(c.a)(z.HotKeys,{handlers:d},void 0,Object(c.a)("div",{className:F()("conversation focusable muted",{"conversation--unread":a}),tabIndex:"0"},void 0,Object(c.a)("div",{className:"conversation__avatar"},void 0,Object(c.a)(q.a,{accounts:t,size:48})),Object(c.a)("div",{className:"conversation__content"},void 0,Object(c.a)("div",{className:"conversation__content__info"},void 0,Object(c.a)("div",{className:"conversation__content__relative-time"},void 0,a&&Object(c.a)("span",{className:"conversation__unread"})," ",Object(c.a)(W.default,{timestamp:n.get("created_at")})),p.a.createElement("div",{className:"conversation__content__names",ref:this.setNamesRef},Object(c.a)(g.b,{id:"conversation.with",defaultMessage:"With {names}",values:{names:Object(c.a)("span",{},void 0,r)}}))),Object(c.a)(U.a,{status:n,parseClick:this.parseClick,expanded:s,onExpandedToggle:this.handleShowMore,collapsable:!0,media:l}),Object(c.a)("div",{className:"status__action-bar"},void 0,Object(c.a)(P.a,{className:"status__action-bar-button",title:o.formatMessage(J.reply),icon:"reply",onClick:this.handleReply}),Object(c.a)("div",{className:"status__action-bar-dropdown"},void 0,Object(c.a)(H.a,{status:n,items:i,icon:"ellipsis-h",size:18,direction:"right",title:o.formatMessage(J.more)}))))))},t}(T.a),Object(l.a)(s,"contextTypes",{router:N.a.object}),Object(l.a)(s,"propTypes",{conversationId:N.a.string.isRequired,accounts:D.a.list.isRequired,lastStatus:D.a.map,unread:N.a.bool.isRequired,onMoveUp:N.a.func,onMoveDown:N.a.func,markRead:N.a.func.isRequired,delete:N.a.func.isRequired,intl:N.a.object.isRequired}),o=i))||o,G=n(103),Q=n(19),X=n(42),Z=n(113),$=Object(g.f)({replyConfirm:{id:"confirmations.reply.confirm",defaultMessage:"Reply"},replyMessage:{id:"confirmations.reply.message",defaultMessage:"Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?"}}),ee=Object(g.g)(Object(b.connect)((function(){var e=Object(G.f)();return function(t,n){var a=n.conversationId,o=t.getIn(["conversations","items"]).find((function(e){return e.get("id")===a})),s=o.get("last_status",null);return{accounts:o.get("accounts").map((function(e){return t.getIn(["accounts",e],null)})),unread:o.get("unread"),lastStatus:s&&e(t,{id:s})}}}),(function(e,t){var n=t.intl,a=t.conversationId;return{markRead:function(){e(Object(j.k)(a))},reply:function(t,a){e((function(o,s){0!==s().getIn(["compose","text"]).trim().length?e(Object(X.d)("CONFIRM",{message:n.formatMessage($.replyMessage),confirm:n.formatMessage($.replyConfirm),onConfirm:function(){return e(Object(Q.lb)(t,a))}})):e(Object(Q.lb)(t,a))}))},delete:function(){e(Object(j.i)(a))},onMute:function(t){t.get("muted")?e(Object(Z.j)(t.get("id"))):e(Object(Z.h)(t.get("id")))},onToggleHidden:function(t){t.get("hidden")?e(Object(Z.revealStatus)(t.get("id"))):e(Object(Z.hideStatus)(t.get("id")))}}}))(Y)),te=n(1022),ne=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(l.a)(Object(r.a)(t),"getCurrentIndex",(function(e){return t.props.conversations.findIndex((function(t){return t.get("id")===e}))})),Object(l.a)(Object(r.a)(t),"handleMoveUp",(function(e){var n=t.getCurrentIndex(e)-1;t._selectChild(n,!0)})),Object(l.a)(Object(r.a)(t),"handleMoveDown",(function(e){var n=t.getCurrentIndex(e)+1;t._selectChild(n,!1)})),Object(l.a)(Object(r.a)(t),"setRef",(function(e){t.node=e})),Object(l.a)(Object(r.a)(t),"handleLoadOlder",L()((function(){var e=t.props.conversations.last();e&&e.get("last_status")&&t.props.onLoadMore(e.get("last_status"))}),300,{leading:!0})),t}Object(d.a)(t,e);var n=t.prototype;return n._selectChild=function(e,t){var n=this.node.node,a=n.querySelector("article:nth-of-type("+(e+1)+") .focusable");a&&(t&&n.scrollTop>a.offsetTop?a.scrollIntoView(!0):!t&&n.scrollTop+n.clientHeight<a.offsetTop+a.offsetHeight&&a.scrollIntoView(!1),a.focus())},n.render=function(){var e=this,t=this.props,n=t.conversations,a=t.onLoadMore,o=Object(x.default)(t,["conversations","onLoadMore"]);return p.a.createElement(te.a,Object(I.default)({},o,{onLoadMore:a&&this.handleLoadOlder,scrollKey:"direct",ref:this.setRef}),n.map((function(t){return Object(c.a)(ee,{conversationId:t.get("id"),onMoveUp:e.handleMoveUp,onMoveDown:e.handleMoveDown},t.get("id"))})))},t}(T.a);Object(l.a)(ne,"propTypes",{conversations:D.a.list.isRequired,hasMore:N.a.bool,isLoading:N.a.bool,onLoadMore:N.a.func});var ae,oe=Object(b.connect)((function(e){return{conversations:e.getIn(["conversations","items"]),isLoading:e.getIn(["conversations","isLoading"],!0),hasMore:e.getIn(["conversations","hasMore"],!1)}}),(function(e){return{onLoadMore:function(t){return e(Object(j.j)({maxId:t}))}}}))(ne);n.d(t,"default",(function(){return ie}));var se=Object(g.f)({title:{id:"column.direct",defaultMessage:"Direct messages"}}),ie=Object(b.connect)((function(e){return{hasUnread:e.getIn(["timelines","direct","unread"])>0,conversationsMode:e.getIn(["settings","direct","conversations"])}}))(ae=Object(g.g)(ae=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(l.a)(Object(r.a)(t),"handlePin",(function(){var e=t.props,n=e.columnId,a=e.dispatch;a(n?Object(O.h)(n):Object(O.e)("DIRECT",{}))})),Object(l.a)(Object(r.a)(t),"handleMove",(function(e){var n=t.props,a=n.columnId;(0,n.dispatch)(Object(O.g)(a,e))})),Object(l.a)(Object(r.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(l.a)(Object(r.a)(t),"setRef",(function(e){t.column=e})),Object(l.a)(Object(r.a)(t),"handleLoadMoreTimeline",(function(e){t.props.dispatch(Object(v.s)({maxId:e}))})),Object(l.a)(Object(r.a)(t),"handleLoadMoreConversations",(function(e){t.props.dispatch(Object(j.j)({maxId:e}))})),Object(l.a)(Object(r.a)(t),"handleTimelineClick",(function(){t.props.dispatch(Object(C.c)(["direct","conversations"],!1))})),Object(l.a)(Object(r.a)(t),"handleConversationsClick",(function(){t.props.dispatch(Object(C.c)(["direct","conversations"],!0))})),t}Object(d.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this.props,t=e.dispatch,n=e.conversationsMode;t(Object(j.l)()),t(n?Object(j.j)():Object(v.s)()),this.disconnect=t(Object(w.b)())},n.componentDidUpdate=function(e){var t=this.props,n=t.dispatch,a=t.conversationsMode;e.conversationsMode&&!a?n(Object(v.s)()):!e.conversationsMode&&a&&n(Object(j.j)())},n.componentWillUnmount=function(){this.props.dispatch(Object(j.m)()),this.disconnect&&(this.disconnect(),this.disconnect=null)},n.render=function(){var e,t=this.props,n=t.intl,a=t.hasUnread,o=t.columnId,s=t.multiColumn,i=t.conversationsMode,r=!!o;return e=i?Object(c.a)(oe,{trackScroll:!r,scrollKey:"direct_timeline-"+o,timelineId:"direct",onLoadMore:this.handleLoadMore,emptyMessage:Object(c.a)(g.b,{id:"empty_column.direct",defaultMessage:"You don't have any direct messages yet. When you send or receive one, it will show up here."})}):Object(c.a)(m.a,{trackScroll:!r,scrollKey:"direct_timeline-"+o,timelineId:"direct",onLoadMore:this.handleLoadMoreTimeline,emptyMessage:Object(c.a)(g.b,{id:"empty_column.direct",defaultMessage:"You don't have any direct messages yet. When you send or receive one, it will show up here."})}),p.a.createElement(h.a,{bindToDocument:!s,ref:this.setRef,label:n.formatMessage(se.title)},Object(c.a)(f.a,{icon:"envelope",active:a,title:n.formatMessage(se.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:r,multiColumn:s},void 0,Object(c.a)(k,{})),Object(c.a)("div",{className:"notification__filter-bar"},void 0,Object(c.a)("button",{className:i?"active":"",onClick:this.handleConversationsClick},void 0,Object(c.a)(g.b,{id:"direct.conversations_mode",defaultMessage:"Conversations"})),Object(c.a)("button",{className:i?"":"active",onClick:this.handleTimelineClick},void 0,Object(c.a)(g.b,{id:"direct.timeline_mode",defaultMessage:"Timeline"}))),e)},t}(p.a.PureComponent))||ae)||ae}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{835:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return ie}));var a,o=n(0),s=n(2),i=(n(9),n(6),n(8)),c=n(1),r=n(3),d=n.n(r),l=n(15),u=n(1059),p=n(760),b=n(758),h=n(34),v=n(106),m=n(252),f=n(7),j=n(1102);var O,g,M,y=Object(f.f)({filter_regex:{id:"home.column_settings.filter_regex",defaultMessage:"Filter out by regular expressions"},settings:{id:"home.settings",defaultMessage:"Column settings"}}),_=Object(f.g)(a=function(e){Object(i.a)(n,e);var t;t=n;function n(){return e.apply(this,arguments)||this}return n.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange,a=e.intl;return(Object(o.a)("div",{},void 0,Object(o.a)("span",{className:"column-settings__section"},void 0,Object(o.a)(f.b,{id:"home.column_settings.advanced",defaultMessage:"Advanced"})),Object(o.a)("div",{className:"column-settings__row"},void 0,Object(o.a)(j.a,{settings:t,settingPath:["regex","body"],onChange:n,label:a.formatMessage(y.filter_regex)}))))},n}(d.a.PureComponent))||a,C=n(73),k=Object(l.connect)((function(e){return{settings:e.getIn(["settings","direct"])}}),(function(e){return{onChange:function(t,n){e(Object(C.c)(["direct"].concat(t),n))}}}))(_),w=n(765),I=n(10),x=n(32),R=n(65),L=n.n(R),E=n(5),N=n.n(E),S=n(16),D=n.n(S),T=n(21),U=n(155),A=n(265),H=n(767),q=n(776),K=n(214),P=n(41),W=n(102),z=n(301),V=n(18),B=n(14),F=n.n(B);var J=Object(f.f)({more:{id:"status.more",defaultMessage:"More"},open:{id:"conversation.open",defaultMessage:"View conversation"},reply:{id:"status.reply",defaultMessage:"Reply"},markAsRead:{id:"conversation.mark_as_read",defaultMessage:"Mark as read"},delete:{id:"conversation.delete",defaultMessage:"Delete conversation"},muteConversation:{id:"status.mute_conversation",defaultMessage:"Mute conversation"},unmuteConversation:{id:"status.unmute_conversation",defaultMessage:"Unmute conversation"}}),Y=Object(f.g)((M=g=function(e){Object(i.a)(n,e);var t;t=n;function n(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(c.a)(Object(s.a)(t),"state",{isExpanded:void 0}),Object(c.a)(Object(s.a)(t),"parseClick",(function(e,n){var a=t.context.router,o=t.props,s=o.lastStatus,i=o.unread,c=o.markRead;if(a&&0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)){void 0===n&&(i&&c(),n="/statuses/"+s.get("id"));var r=Object(I.default)({},a.history.location.state);r.mastodonBackSteps=(r.mastodonBackSteps||0)+1,a.history.push(n,r),e.preventDefault()}})),Object(c.a)(Object(s.a)(t),"handleEmojiMouseEnter",(function(e){var t=e.target;t.src=t.getAttribute("data-original")})),Object(c.a)(Object(s.a)(t),"handleEmojiMouseLeave",(function(e){var t=e.target;t.src=t.getAttribute("data-static")})),Object(c.a)(Object(s.a)(t),"handleClick",(function(){if(t.context.router){var e=t.props,n=e.lastStatus,a=e.unread,o=e.markRead;a&&o(),t.context.router.history.push("/statuses/"+n.get("id"))}})),Object(c.a)(Object(s.a)(t),"handleMarkAsRead",(function(){t.props.markRead()})),Object(c.a)(Object(s.a)(t),"handleReply",(function(){t.props.reply(t.props.lastStatus,t.context.router.history)})),Object(c.a)(Object(s.a)(t),"handleDelete",(function(){t.props.delete()})),Object(c.a)(Object(s.a)(t),"handleHotkeyMoveUp",(function(){t.props.onMoveUp(t.props.conversationId)})),Object(c.a)(Object(s.a)(t),"handleHotkeyMoveDown",(function(){t.props.onMoveDown(t.props.conversationId)})),Object(c.a)(Object(s.a)(t),"handleConversationMute",(function(){t.props.onMute(t.props.lastStatus)})),Object(c.a)(Object(s.a)(t),"handleShowMore",(function(){t.props.lastStatus.get("spoiler_text")&&t.setExpansion(!t.state.isExpanded)})),Object(c.a)(Object(s.a)(t),"setExpansion",(function(e){t.setState({isExpanded:e})})),Object(c.a)(Object(s.a)(t),"setNamesRef",(function(e){t.namesNode=e})),t}var a=n.prototype;return a._updateEmojis=function(){var e=this.namesNode;if(e&&!V.a)for(var t=e.querySelectorAll(".custom-emoji"),n=0;n<t.length;n++){var a=t[n];a.classList.contains("status-emoji")||(a.classList.add("status-emoji"),a.addEventListener("mouseenter",this.handleEmojiMouseEnter,!1),a.addEventListener("mouseleave",this.handleEmojiMouseLeave,!1))}},a.componentDidMount=function(){this._updateEmojis()},a.componentDidUpdate=function(){this._updateEmojis()},a.render=function(){var e=this.props,t=e.accounts,n=e.lastStatus,a=e.unread,s=e.intl,i=this.state.isExpanded;if(null===n)return null;var c=[{text:s.formatMessage(J.open),action:this.handleClick},null];c.push({text:s.formatMessage(n.get("muted")?J.unmuteConversation:J.muteConversation),action:this.handleConversationMute}),a&&(c.push({text:s.formatMessage(J.markAsRead),action:this.handleMarkAsRead}),c.push(null)),c.push({text:s.formatMessage(J.delete),action:this.handleDelete});var r=t.map((function(e){return Object(o.a)(K.a,{to:"/accounts/"+e.get("id"),href:e.get("url"),title:e.get("acct")},e.get("id"),Object(o.a)("bdi",{},void 0,Object(o.a)("strong",{className:"display-name__html",dangerouslySetInnerHTML:{__html:e.get("display_name_html")}})))})).reduce((function(e,t){return[e,", ",t]})),l={reply:this.handleReply,open:this.handleClick,moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,toggleHidden:this.handleShowMore},u=null;return n.get("media_attachments").size>0&&(u=Object(o.a)(A.a,{compact:!0,media:n.get("media_attachments")})),Object(o.a)(z.HotKeys,{handlers:l},void 0,Object(o.a)("div",{className:F()("conversation focusable muted",{"conversation--unread":a}),tabIndex:"0"},void 0,Object(o.a)("div",{className:"conversation__avatar",onClick:this.handleClick,role:"presentation"},void 0,Object(o.a)(q.a,{accounts:t,size:48})),Object(o.a)("div",{className:"conversation__content"},void 0,Object(o.a)("div",{className:"conversation__content__info"},void 0,Object(o.a)("div",{className:"conversation__content__relative-time"},void 0,a&&Object(o.a)("span",{className:"conversation__unread"})," ",Object(o.a)(W.default,{timestamp:n.get("created_at")})),d.a.createElement("div",{className:"conversation__content__names",ref:this.setNamesRef},Object(o.a)(f.b,{id:"conversation.with",defaultMessage:"With {names}",values:{names:Object(o.a)("span",{},void 0,r)}}))),Object(o.a)(U.a,{status:n,parseClick:this.parseClick,expanded:i,onExpandedToggle:this.handleShowMore,collapsable:!0,media:u}),Object(o.a)("div",{className:"status__action-bar"},void 0,Object(o.a)(P.a,{className:"status__action-bar-button",title:s.formatMessage(J.reply),icon:"reply",onClick:this.handleReply}),Object(o.a)("div",{className:"status__action-bar-dropdown"},void 0,Object(o.a)(H.a,{status:n,items:c,icon:"ellipsis-h",size:18,direction:"right",title:s.formatMessage(J.more)}))))))},n}(T.a),Object(c.a)(g,"contextTypes",{router:N.a.object}),Object(c.a)(g,"propTypes",{conversationId:N.a.string.isRequired,accounts:D.a.list.isRequired,lastStatus:D.a.map,unread:N.a.bool.isRequired,onMoveUp:N.a.func,onMoveDown:N.a.func,markRead:N.a.func.isRequired,delete:N.a.func.isRequired,intl:N.a.object.isRequired}),O=M))||O,G=n(108),Q=n(20),X=n(45),Z=n(117),$=Object(f.f)({replyConfirm:{id:"confirmations.reply.confirm",defaultMessage:"Reply"},replyMessage:{id:"confirmations.reply.message",defaultMessage:"Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?"}}),ee=Object(f.g)(Object(l.connect)((function(){var e=Object(G.f)();return function(t,n){var a=n.conversationId,o=t.getIn(["conversations","items"]).find((function(e){return e.get("id")===a})),s=o.get("last_status",null);return{accounts:o.get("accounts").map((function(e){return t.getIn(["accounts",e],null)})),unread:o.get("unread"),lastStatus:s&&e(t,{id:s})}}}),(function(e,t){var n=t.intl,a=t.conversationId;return{markRead:function(){e(Object(v.k)(a))},reply:function(t,a){e((function(o,s){0!==s().getIn(["compose","text"]).trim().length?e(Object(X.d)("CONFIRM",{message:n.formatMessage($.replyMessage),confirm:n.formatMessage($.replyConfirm),onConfirm:function(){return e(Object(Q.lb)(t,a))}})):e(Object(Q.lb)(t,a))}))},delete:function(){e(Object(v.i)(a))},onMute:function(t){t.get("muted")?e(Object(Z.j)(t.get("id"))):e(Object(Z.h)(t.get("id")))},onToggleHidden:function(t){t.get("hidden")?e(Object(Z.revealStatus)(t.get("id"))):e(Object(Z.hideStatus)(t.get("id")))}}}))(Y)),te=n(1048);var ne=function(e){Object(i.a)(n,e);var t;t=n;function n(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(c.a)(Object(s.a)(t),"getCurrentIndex",(function(e){return t.props.conversations.findIndex((function(t){return t.get("id")===e}))})),Object(c.a)(Object(s.a)(t),"handleMoveUp",(function(e){var n=t.getCurrentIndex(e)-1;t._selectChild(n,!0)})),Object(c.a)(Object(s.a)(t),"handleMoveDown",(function(e){var n=t.getCurrentIndex(e)+1;t._selectChild(n,!1)})),Object(c.a)(Object(s.a)(t),"setRef",(function(e){t.node=e})),Object(c.a)(Object(s.a)(t),"handleLoadOlder",L()((function(){var e=t.props.conversations.last();e&&e.get("last_status")&&t.props.onLoadMore(e.get("last_status"))}),300,{leading:!0})),t}var a=n.prototype;return a._selectChild=function(e,t){var n=this.node.node,a=n.querySelector("article:nth-of-type("+(e+1)+") .focusable");a&&(t&&n.scrollTop>a.offsetTop?a.scrollIntoView(!0):!t&&n.scrollTop+n.clientHeight<a.offsetTop+a.offsetHeight&&a.scrollIntoView(!1),a.focus())},a.render=function(){var e=this,t=this.props,n=t.conversations,a=t.onLoadMore,s=Object(x.default)(t,["conversations","onLoadMore"]);return d.a.createElement(te.a,Object(I.default)({},s,{onLoadMore:a&&this.handleLoadOlder,scrollKey:"direct",ref:this.setRef}),n.map((function(t){return Object(o.a)(ee,{conversationId:t.get("id"),onMoveUp:e.handleMoveUp,onMoveDown:e.handleMoveDown},t.get("id"))})))},n}(T.a);Object(c.a)(ne,"propTypes",{conversations:D.a.list.isRequired,hasMore:N.a.bool,isLoading:N.a.bool,onLoadMore:N.a.func});var ae,oe=Object(l.connect)((function(e){return{conversations:e.getIn(["conversations","items"]),isLoading:e.getIn(["conversations","isLoading"],!0),hasMore:e.getIn(["conversations","hasMore"],!1)}}),(function(e){return{onLoadMore:function(t){return e(Object(v.j)({maxId:t}))}}}))(ne);var se=Object(f.f)({title:{id:"column.direct",defaultMessage:"Direct messages"}}),ie=Object(l.connect)((function(e){return{hasUnread:e.getIn(["timelines","direct","unread"])>0,conversationsMode:e.getIn(["settings","direct","conversations"])}}))(ae=Object(f.g)(ae=function(e){Object(i.a)(n,e);var t;t=n;function n(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(c.a)(Object(s.a)(t),"handlePin",(function(){var e=t.props,n=e.columnId,a=e.dispatch;a(n?Object(m.h)(n):Object(m.e)("DIRECT",{}))})),Object(c.a)(Object(s.a)(t),"handleMove",(function(e){var n=t.props,a=n.columnId;(0,n.dispatch)(Object(m.g)(a,e))})),Object(c.a)(Object(s.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(c.a)(Object(s.a)(t),"setRef",(function(e){t.column=e})),Object(c.a)(Object(s.a)(t),"handleLoadMoreTimeline",(function(e){t.props.dispatch(Object(h.s)({maxId:e}))})),Object(c.a)(Object(s.a)(t),"handleLoadMoreConversations",(function(e){t.props.dispatch(Object(v.j)({maxId:e}))})),Object(c.a)(Object(s.a)(t),"handleTimelineClick",(function(){t.props.dispatch(Object(C.c)(["direct","conversations"],!1))})),Object(c.a)(Object(s.a)(t),"handleConversationsClick",(function(){t.props.dispatch(Object(C.c)(["direct","conversations"],!0))})),t}var a=n.prototype;return a.componentDidMount=function(){var e=this.props,t=e.dispatch,n=e.conversationsMode;t(Object(v.l)()),t(n?Object(v.j)():Object(h.s)()),this.disconnect=t(Object(w.b)())},a.componentDidUpdate=function(e){var t=this.props,n=t.dispatch,a=t.conversationsMode;e.conversationsMode&&!a?n(Object(h.s)()):!e.conversationsMode&&a&&n(Object(v.j)())},a.componentWillUnmount=function(){this.props.dispatch(Object(v.m)()),this.disconnect&&(this.disconnect(),this.disconnect=null)},a.render=function(){var e,t=this.props,n=t.intl,a=t.hasUnread,s=t.columnId,i=t.multiColumn,c=t.conversationsMode,r=!!s;return e=c?Object(o.a)(oe,{trackScroll:!r,scrollKey:"direct_timeline-"+s,timelineId:"direct",onLoadMore:this.handleLoadMore,emptyMessage:Object(o.a)(f.b,{id:"empty_column.direct",defaultMessage:"You don't have any direct messages yet. When you send or receive one, it will show up here."})}):Object(o.a)(u.a,{trackScroll:!r,scrollKey:"direct_timeline-"+s,timelineId:"direct",onLoadMore:this.handleLoadMoreTimeline,emptyMessage:Object(o.a)(f.b,{id:"empty_column.direct",defaultMessage:"You don't have any direct messages yet. When you send or receive one, it will show up here."})}),d.a.createElement(p.a,{bindToDocument:!i,ref:this.setRef,label:n.formatMessage(se.title)},Object(o.a)(b.a,{icon:"envelope",active:a,title:n.formatMessage(se.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:r,multiColumn:i},void 0,Object(o.a)(k,{})),Object(o.a)("div",{className:"notification__filter-bar"},void 0,Object(o.a)("button",{className:c?"active":"",onClick:this.handleConversationsClick},void 0,Object(o.a)(f.b,{id:"direct.conversations_mode",defaultMessage:"Conversations"})),Object(o.a)("button",{className:c?"":"active",onClick:this.handleTimelineClick},void 0,Object(o.a)(f.b,{id:"direct.timeline_mode",defaultMessage:"Timeline"}))),e)},n}(d.a.PureComponent))||ae)||ae}}]);
//# sourceMappingURL=direct_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/direct_timeline.js.map b/priv/static/packs/flavours/glitch/async/direct_timeline.js.map
index da686195a..83b0d0c28 100644
--- a/priv/static/packs/flavours/glitch/async/direct_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/direct_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/conversations_list_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/index.js"],"names":["messages","defineMessages","filter_regex","settings","ColumnSettings","injectIntl","render","this","props","onChange","intl","className","id","defaultMessage","settingPath","label","formatMessage","React","PureComponent","connect","state","getIn","dispatch","path","checked","changeSetting","more","open","reply","markAsRead","delete","muteConversation","unmuteConversation","Conversation","isExpanded","undefined","e","destination","router","context","lastStatus","unread","markRead","button","ctrlKey","altKey","metaKey","get","history","location","mastodonBackSteps","push","preventDefault","target","src","getAttribute","onMoveUp","conversationId","onMoveDown","onMute","setExpansion","value","setState","c","namesNode","_updateEmojis","node","autoPlayGif","emojis","querySelectorAll","i","length","emoji","classList","contains","add","addEventListener","handleEmojiMouseEnter","handleEmojiMouseLeave","componentDidMount","componentDidUpdate","accounts","menu","text","action","handleClick","handleConversationMute","handleMarkAsRead","handleDelete","names","map","a","to","href","title","dangerouslySetInnerHTML","__html","reduce","prev","cur","handlers","handleReply","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","toggleHidden","handleShowMore","media","size","compact","classNames","tabIndex","timestamp","ref","setNamesRef","values","status","parseClick","expanded","onExpandedToggle","collapsable","icon","onClick","items","direction","ImmutablePureComponent","PropTypes","object","string","isRequired","ImmutablePropTypes","list","bool","func","replyConfirm","replyMessage","getStatus","makeGetStatus","conversation","find","x","lastStatusId","accountId","markConversationRead","_","getState","trim","openModal","message","confirm","onConfirm","replyCompose","deleteConversation","unmuteStatus","muteStatus","onToggleHidden","revealStatus","hideStatus","ConversationsList","conversations","findIndex","elementIndex","getCurrentIndex","_selectChild","last","onLoadMore","leading","index","align_top","container","element","querySelector","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","other","handleLoadOlder","scrollKey","setRef","item","handleMoveUp","handleMoveDown","hasMore","isLoading","maxId","expandConversations","DirectTimeline","hasUnread","conversationsMode","columnId","removeColumn","addColumn","dir","moveColumn","column","expandDirectTimeline","mountConversations","disconnect","connectDirectStream","prevProps","componentWillUnmount","unmountConversations","contents","multiColumn","pinned","trackScroll","timelineId","handleLoadMore","emptyMessage","handleLoadMoreTimeline","bindToDocument","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","handleConversationsClick","handleTimelineClick"],"mappings":"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","file":"flavours/glitch/async/direct_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport SettingText from '../../../components/setting_text';\n\nconst messages = defineMessages({\n filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },\n settings: { id: 'home.settings', defaultMessage: 'Column settings' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { settings, onChange, intl } = this.props;\n\n return (\n <div>\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.advanced' defaultMessage='Advanced' /></span>\n\n <div className='column-settings__row'>\n <SettingText settings={settings} settingPath={['regex', 'body']} onChange={onChange} label={intl.formatMessage(messages.filter_regex)} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'direct']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (path, checked) {\n dispatch(changeSetting(['direct', ...path], checked));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';\nimport AvatarComposite from 'flavours/glitch/components/avatar_composite';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';\nimport { HotKeys } from 'react-hotkeys';\nimport { autoPlayGif } from 'flavours/glitch/util/initial_state';\nimport classNames from 'classnames';\n\nconst messages = defineMessages({\n more: { id: 'status.more', defaultMessage: 'More' },\n open: { id: 'conversation.open', defaultMessage: 'View conversation' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n markAsRead: { id: 'conversation.mark_as_read', defaultMessage: 'Mark as read' },\n delete: { id: 'conversation.delete', defaultMessage: 'Delete conversation' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n});\n\nexport default @injectIntl\nclass Conversation extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n conversationId: PropTypes.string.isRequired,\n accounts: ImmutablePropTypes.list.isRequired,\n lastStatus: ImmutablePropTypes.map,\n unread:PropTypes.bool.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n markRead: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n isExpanded: undefined,\n };\n\n parseClick = (e, destination) => {\n const { router } = this.context;\n const { lastStatus, unread, markRead } = this.props;\n if (!router) return;\n\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey)) {\n if (destination === undefined) {\n if (unread) {\n markRead();\n }\n destination = `/statuses/${lastStatus.get('id')}`;\n }\n let state = {...router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n router.history.push(destination, state);\n e.preventDefault();\n }\n }\n\n _updateEmojis () {\n const node = this.namesNode;\n\n if (!node || autoPlayGif) {\n return;\n }\n\n const emojis = node.querySelectorAll('.custom-emoji');\n\n for (var i = 0; i < emojis.length; i++) {\n let emoji = emojis[i];\n if (emoji.classList.contains('status-emoji')) {\n continue;\n }\n emoji.classList.add('status-emoji');\n\n emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);\n emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);\n }\n }\n\n componentDidMount () {\n this._updateEmojis();\n }\n\n componentDidUpdate () {\n this._updateEmojis();\n }\n\n handleEmojiMouseEnter = ({ target }) => {\n target.src = target.getAttribute('data-original');\n }\n\n handleEmojiMouseLeave = ({ target }) => {\n target.src = target.getAttribute('data-static');\n }\n\n handleClick = () => {\n if (!this.context.router) {\n return;\n }\n\n const { lastStatus, unread, markRead } = this.props;\n\n if (unread) {\n markRead();\n }\n\n this.context.router.history.push(`/statuses/${lastStatus.get('id')}`);\n }\n\n handleMarkAsRead = () => {\n this.props.markRead();\n }\n\n handleReply = () => {\n this.props.reply(this.props.lastStatus, this.context.router.history);\n }\n\n handleDelete = () => {\n this.props.delete();\n }\n\n handleHotkeyMoveUp = () => {\n this.props.onMoveUp(this.props.conversationId);\n }\n\n handleHotkeyMoveDown = () => {\n this.props.onMoveDown(this.props.conversationId);\n }\n\n handleConversationMute = () => {\n this.props.onMute(this.props.lastStatus);\n }\n\n handleShowMore = () => {\n if (this.props.lastStatus.get('spoiler_text')) {\n this.setExpansion(!this.state.isExpanded);\n }\n };\n\n setExpansion = value => {\n this.setState({ isExpanded: value });\n }\n\n setNamesRef = (c) => {\n this.namesNode = c;\n }\n\n render () {\n const { accounts, lastStatus, unread, intl } = this.props;\n const { isExpanded } = this.state;\n\n if (lastStatus === null) {\n return null;\n }\n\n const menu = [\n { text: intl.formatMessage(messages.open), action: this.handleClick },\n null,\n ];\n\n menu.push({ text: intl.formatMessage(lastStatus.get('muted') ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMute });\n\n if (unread) {\n menu.push({ text: intl.formatMessage(messages.markAsRead), action: this.handleMarkAsRead });\n menu.push(null);\n }\n\n menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete });\n\n const names = accounts.map(a => <Permalink to={`/accounts/${a.get('id')}`} href={a.get('url')} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Permalink>).reduce((prev, cur) => [prev, ', ', cur]);\n\n const handlers = {\n reply: this.handleReply,\n open: this.handleClick,\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n toggleHidden: this.handleShowMore,\n };\n\n let media = null;\n if (lastStatus.get('media_attachments').size > 0) {\n media = <AttachmentList compact media={lastStatus.get('media_attachments')} />;\n }\n\n return (\n <HotKeys handlers={handlers}>\n <div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex='0'>\n <div className='conversation__avatar'>\n <AvatarComposite accounts={accounts} size={48} />\n </div>\n\n <div className='conversation__content'>\n <div className='conversation__content__info'>\n <div className='conversation__content__relative-time'>\n {unread && <span className='conversation__unread' />} <RelativeTimestamp timestamp={lastStatus.get('created_at')} />\n </div>\n\n <div className='conversation__content__names' ref={this.setNamesRef}>\n <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} />\n </div>\n </div>\n\n <StatusContent\n status={lastStatus}\n parseClick={this.parseClick}\n expanded={isExpanded}\n onExpandedToggle={this.handleShowMore}\n collapsable\n media={media}\n />\n\n <div className='status__action-bar'>\n <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.reply)} icon='reply' onClick={this.handleReply} />\n\n <div className='status__action-bar-dropdown'>\n <DropdownMenuContainer status={lastStatus} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} />\n </div>\n </div>\n </div>\n </div>\n </HotKeys>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport Conversation from '../components/conversation';\nimport { markConversationRead, deleteConversation } from 'flavours/glitch/actions/conversations';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport { replyCompose } from 'flavours/glitch/actions/compose';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { muteStatus, unmuteStatus, hideStatus, revealStatus } from 'flavours/glitch/actions/statuses';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n});\n\nconst mapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n return (state, { conversationId }) => {\n const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId);\n const lastStatusId = conversation.get('last_status', null);\n\n return {\n accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)),\n unread: conversation.get('unread'),\n lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }),\n };\n };\n};\n\nconst mapDispatchToProps = (dispatch, { intl, conversationId }) => ({\n\n markRead () {\n dispatch(markConversationRead(conversationId));\n },\n\n reply (status, router) {\n dispatch((_, getState) => {\n let state = getState();\n\n if (state.getIn(['compose', 'text']).trim().length !== 0) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onConfirm: () => dispatch(replyCompose(status, router)),\n }));\n } else {\n dispatch(replyCompose(status, router));\n }\n });\n },\n\n delete () {\n dispatch(deleteConversation(conversationId));\n },\n\n onMute (status) {\n if (status.get('muted')) {\n dispatch(unmuteStatus(status.get('id')));\n } else {\n dispatch(muteStatus(status.get('id')));\n }\n },\n\n onToggleHidden (status) {\n if (status.get('hidden')) {\n dispatch(revealStatus(status.get('id')));\n } else {\n dispatch(hideStatus(status.get('id')));\n }\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Conversation));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ConversationContainer from '../containers/conversation_container';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport { debounce } from 'lodash';\n\nexport default class ConversationsList extends ImmutablePureComponent {\n\n static propTypes = {\n conversations: ImmutablePropTypes.list.isRequired,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n onLoadMore: PropTypes.func,\n };\n\n getCurrentIndex = id => this.props.conversations.findIndex(x => x.get('id') === id)\n\n handleMoveUp = id => {\n const elementIndex = this.getCurrentIndex(id) - 1;\n this._selectChild(elementIndex, true);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.getCurrentIndex(id) + 1;\n this._selectChild(elementIndex, false);\n }\n\n _selectChild (index, align_top) {\n const container = this.node.node;\n const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n setRef = c => {\n this.node = c;\n }\n\n handleLoadOlder = debounce(() => {\n const last = this.props.conversations.last();\n\n if (last && last.get('last_status')) {\n this.props.onLoadMore(last.get('last_status'));\n }\n }, 300, { leading: true })\n\n render () {\n const { conversations, onLoadMore, ...other } = this.props;\n\n return (\n <ScrollableList {...other} onLoadMore={onLoadMore && this.handleLoadOlder} scrollKey='direct' ref={this.setRef}>\n {conversations.map(item => (\n <ConversationContainer\n key={item.get('id')}\n conversationId={item.get('id')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ))}\n </ScrollableList>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ConversationsList from '../components/conversations_list';\nimport { expandConversations } from 'flavours/glitch/actions/conversations';\n\nconst mapStateToProps = state => ({\n conversations: state.getIn(['conversations', 'items']),\n isLoading: state.getIn(['conversations', 'isLoading'], true),\n hasMore: state.getIn(['conversations', 'hasMore'], false),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onLoadMore: maxId => dispatch(expandConversations({ maxId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ConversationsList);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandDirectTimeline } from 'flavours/glitch/actions/timelines';\nimport { mountConversations, unmountConversations, expandConversations } from 'flavours/glitch/actions/conversations';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectDirectStream } from 'flavours/glitch/actions/streaming';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport ConversationsListContainer from './containers/conversations_list_container';\n\nconst messages = defineMessages({\n title: { id: 'column.direct', defaultMessage: 'Direct messages' },\n});\n\nconst mapStateToProps = state => ({\n hasUnread: state.getIn(['timelines', 'direct', 'unread']) > 0,\n conversationsMode: state.getIn(['settings', 'direct', 'conversations']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass DirectTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n conversationsMode: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('DIRECT', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, conversationsMode } = this.props;\n\n dispatch(mountConversations());\n\n if (conversationsMode) {\n dispatch(expandConversations());\n } else {\n dispatch(expandDirectTimeline());\n }\n\n this.disconnect = dispatch(connectDirectStream());\n }\n\n componentDidUpdate(prevProps) {\n const { dispatch, conversationsMode } = this.props;\n\n if (prevProps.conversationsMode && !conversationsMode) {\n dispatch(expandDirectTimeline());\n } else if (!prevProps.conversationsMode && conversationsMode) {\n dispatch(expandConversations());\n }\n }\n\n componentWillUnmount () {\n this.props.dispatch(unmountConversations());\n\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMoreTimeline = maxId => {\n this.props.dispatch(expandDirectTimeline({ maxId }));\n }\n\n handleLoadMoreConversations = maxId => {\n this.props.dispatch(expandConversations({ maxId }));\n }\n\n handleTimelineClick = () => {\n this.props.dispatch(changeSetting(['direct', 'conversations'], false));\n }\n\n handleConversationsClick = () => {\n this.props.dispatch(changeSetting(['direct', 'conversations'], true));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, conversationsMode } = this.props;\n const pinned = !!columnId;\n\n let contents;\n if (conversationsMode) {\n contents = (\n <ConversationsListContainer\n trackScroll={!pinned}\n scrollKey={`direct_timeline-${columnId}`}\n timelineId='direct'\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage=\"You don't have any direct messages yet. When you send or receive one, it will show up here.\" />}\n />\n );\n } else {\n contents = (\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`direct_timeline-${columnId}`}\n timelineId='direct'\n onLoadMore={this.handleLoadMoreTimeline}\n emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage=\"You don't have any direct messages yet. When you send or receive one, it will show up here.\" />}\n />\n );\n }\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='envelope'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n\n <div className='notification__filter-bar'>\n <button\n className={conversationsMode ? 'active' : ''}\n onClick={this.handleConversationsClick}\n >\n <FormattedMessage\n id='direct.conversations_mode'\n defaultMessage='Conversations'\n />\n </button>\n <button\n className={conversationsMode ? '' : 'active'}\n onClick={this.handleTimelineClick}\n >\n <FormattedMessage\n id='direct.timeline_mode'\n defaultMessage='Timeline'\n />\n </button>\n </div>\n\n {contents}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/containers/conversations_list_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/direct_timeline/index.js"],"names":["messages","defineMessages","filter_regex","settings","ColumnSettings","injectIntl","render","this","props","onChange","intl","className","id","defaultMessage","settingPath","label","formatMessage","React","PureComponent","connect","state","getIn","dispatch","path","checked","changeSetting","more","open","reply","markAsRead","delete","muteConversation","unmuteConversation","Conversation","isExpanded","undefined","e","destination","router","context","lastStatus","unread","markRead","button","ctrlKey","altKey","metaKey","get","history","location","mastodonBackSteps","push","preventDefault","target","src","getAttribute","onMoveUp","conversationId","onMoveDown","onMute","setExpansion","value","setState","c","namesNode","_updateEmojis","node","autoPlayGif","emojis","querySelectorAll","i","length","emoji","classList","contains","add","addEventListener","handleEmojiMouseEnter","handleEmojiMouseLeave","componentDidMount","componentDidUpdate","accounts","menu","text","action","handleClick","handleConversationMute","handleMarkAsRead","handleDelete","names","map","a","to","href","title","dangerouslySetInnerHTML","__html","reduce","prev","cur","handlers","handleReply","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","toggleHidden","handleShowMore","media","size","compact","classNames","tabIndex","onClick","role","timestamp","ref","setNamesRef","values","status","parseClick","expanded","onExpandedToggle","collapsable","icon","items","direction","ImmutablePureComponent","PropTypes","object","string","isRequired","ImmutablePropTypes","list","bool","func","replyConfirm","replyMessage","getStatus","makeGetStatus","conversation","find","x","lastStatusId","accountId","markConversationRead","_","getState","trim","openModal","message","confirm","onConfirm","replyCompose","deleteConversation","unmuteStatus","muteStatus","onToggleHidden","revealStatus","hideStatus","ConversationsList","conversations","findIndex","elementIndex","getCurrentIndex","_selectChild","last","onLoadMore","leading","index","align_top","container","element","querySelector","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","other","handleLoadOlder","scrollKey","setRef","item","handleMoveUp","handleMoveDown","hasMore","isLoading","maxId","expandConversations","DirectTimeline","hasUnread","conversationsMode","columnId","removeColumn","addColumn","dir","moveColumn","column","expandDirectTimeline","mountConversations","disconnect","connectDirectStream","prevProps","componentWillUnmount","unmountConversations","contents","multiColumn","pinned","trackScroll","timelineId","handleLoadMore","emptyMessage","handleLoadMoreTimeline","bindToDocument","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","handleConversationsClick","handleTimelineClick"],"mappings":"wRAMA,I,MAAMA,EAAWC,YAAe,CAC9BC,aAAa,CAAD,2FACZC,SAAS,CAAD,uDAIJC,EADUC,Y,8GASdC,OAAA,WAAW,IAAD,EAC6BC,KAAKC,MAAlCL,EADA,EACAA,SAAUM,EADV,EACUA,SAAUC,EADpB,EACoBA,KAE5B,OACE,4BACE,oBAAMC,UAAU,iCAAhB,EAA2C,YAAC,IAAD,CAAkBC,GAAG,gCAAgCC,eAAe,cAE/G,mBAAKF,UAAU,6BAAf,EACE,YAAC,IAAD,CAAaR,SAAUA,EAAUW,YAAa,CAAC,QAAS,QAASL,SAAUA,EAAUM,MAAOL,EAAKM,cAAchB,EAASE,oB,GAhBrGe,IAAMC,iB,UCIpBC,qBAZS,SAAAC,GAAK,MAAK,CAChCjB,SAAUiB,EAAMC,MAAM,CAAC,WAAY,eAGV,SAAAC,GAAQ,MAAK,CAEtCb,SAFsC,SAE5Bc,EAAMC,GACdF,EAASG,YAAc,CAAC,UAAF,OAAeF,GAAOC,QAKjCL,CAA6Cf,G,mLCA5D,IAAMJ,EAAWC,YAAe,CAC9ByB,KAAK,CAAD,wCACJC,KAAK,CAAD,2DACJC,MAAM,CAAD,0CACLC,WAAW,CAAD,8DACVC,OAAO,CAAD,+DACNC,iBAAiB,CAAD,kEAChBC,mBAAmB,CAAD,wEAIdC,EADU5B,a,qNAmBN,CACN6B,gBAAYC,I,yCAGD,SAACC,EAAGC,GAAiB,IACxBC,EAAW,EAAKC,QAAhBD,OADuB,EAEU,EAAK9B,MAAtCgC,EAFuB,EAEvBA,WAAYC,EAFW,EAEXA,OAAQC,EAFG,EAEHA,SAC5B,GAAKJ,GAEY,IAAbF,EAAEO,UAAkBP,EAAEQ,SAAWR,EAAES,QAAUT,EAAEU,SAAU,MACvCX,IAAhBE,IACEI,GACFC,IAEFL,EAAW,aAAgBG,EAAWO,IAAI,OAE5C,IAAI3B,EAAK,qBAAOkB,EAAOU,QAAQC,SAAS7B,OACxCA,EAAM8B,mBAAqB9B,EAAM8B,mBAAqB,GAAK,EAC3DZ,EAAOU,QAAQG,KAAKd,EAAajB,GACjCgB,EAAEgB,qB,oDAiCkB,YAAiB,IAAdC,EAAa,EAAbA,OACzBA,EAAOC,IAAMD,EAAOE,aAAa,oB,oDAGX,YAAiB,IAAdF,EAAa,EAAbA,OACzBA,EAAOC,IAAMD,EAAOE,aAAa,kB,0CAGrB,WACZ,GAAK,EAAKhB,QAAQD,OAAlB,CADkB,MAKuB,EAAK9B,MAAtCgC,EALU,EAKVA,WAAYC,EALF,EAKEA,OAAQC,EALV,EAKUA,SAExBD,GACFC,IAGF,EAAKH,QAAQD,OAAOU,QAAQG,KAA5B,aAA8CX,EAAWO,IAAI,W,+CAG5C,WACjB,EAAKvC,MAAMkC,c,0CAGC,WACZ,EAAKlC,MAAMoB,MAAM,EAAKpB,MAAMgC,WAAY,EAAKD,QAAQD,OAAOU,Y,2CAG/C,WACb,EAAKxC,MAAMsB,Y,iDAGQ,WACnB,EAAKtB,MAAMgD,SAAS,EAAKhD,MAAMiD,mB,mDAGV,WACrB,EAAKjD,MAAMkD,WAAW,EAAKlD,MAAMiD,mB,qDAGV,WACvB,EAAKjD,MAAMmD,OAAO,EAAKnD,MAAMgC,e,6CAGd,WACX,EAAKhC,MAAMgC,WAAWO,IAAI,iBAC5B,EAAKa,cAAc,EAAKxC,MAAMc,e,2CAInB,SAAA2B,GACb,EAAKC,SAAS,CAAE5B,WAAY2B,O,0CAGhB,SAACE,GACb,EAAKC,UAAYD,K,6BAtFnBE,cAAA,WACE,IAAMC,EAAO3D,KAAKyD,UAElB,GAAKE,IAAQC,IAMb,IAFA,IAAMC,EAASF,EAAKG,iBAAiB,iBAE5BC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,IAAK,CACtC,IAAIE,EAAQJ,EAAOE,GACfE,EAAMC,UAAUC,SAAS,kBAG7BF,EAAMC,UAAUE,IAAI,gBAEpBH,EAAMI,iBAAiB,aAAcrE,KAAKsE,uBAAuB,GACjEL,EAAMI,iBAAiB,aAAcrE,KAAKuE,uBAAuB,M,EAIrEC,kBAAA,WACExE,KAAK0D,iB,EAGPe,mBAAA,WACEzE,KAAK0D,iB,EA+DP3D,OAAA,WAAW,IAAD,EACuCC,KAAKC,MAA5CyE,EADA,EACAA,SAAUzC,EADV,EACUA,WAAYC,EADtB,EACsBA,OAAQ/B,EAD9B,EAC8BA,KAC9BwB,EAAe3B,KAAKa,MAApBc,WAER,GAAmB,OAAfM,EACF,OAAO,KAGT,IAAM0C,EAAO,CACX,CAAEC,KAAMzE,EAAKM,cAAchB,EAAS2B,MAAOyD,OAAQ7E,KAAK8E,aACxD,MAGFH,EAAK/B,KAAK,CAAEgC,KAAMzE,EAAKM,cAAcwB,EAAWO,IAAI,SAAW/C,EAASgC,mBAAqBhC,EAAS+B,kBAAmBqD,OAAQ7E,KAAK+E,yBAElI7C,IACFyC,EAAK/B,KAAK,CAAEgC,KAAMzE,EAAKM,cAAchB,EAAS6B,YAAauD,OAAQ7E,KAAKgF,mBACxEL,EAAK/B,KAAK,OAGZ+B,EAAK/B,KAAK,CAAEgC,KAAMzE,EAAKM,cAAchB,EAAS8B,QAASsD,OAAQ7E,KAAKiF,eAEpE,IAAMC,EAAQR,EAASS,KAAI,SAAAC,GAAC,OAAI,YAAC,IAAD,CAAWC,GAAE,aAAeD,EAAE5C,IAAI,MAAS8C,KAAMF,EAAE5C,IAAI,OAA0B+C,MAAOH,EAAE5C,IAAI,SAA1B4C,EAAE5C,IAAI,MAA6B,4BAAK,sBAAQpC,UAAU,qBAAqBoF,wBAAyB,CAAEC,OAAQL,EAAE5C,IAAI,6BAA8CkD,QAAO,SAACC,EAAMC,GAAP,MAAe,CAACD,EAAM,KAAMC,MAEvSC,EAAW,CACfxE,MAAOrB,KAAK8F,YACZ1E,KAAMpB,KAAK8E,YACXiB,OAAQ/F,KAAKgG,mBACbC,SAAUjG,KAAKkG,qBACfC,aAAcnG,KAAKoG,gBAGjBC,EAAQ,KAKZ,OAJIpE,EAAWO,IAAI,qBAAqB8D,KAAO,IAC7CD,EAAQ,YAAC,IAAD,CAAgBE,SAAO,EAACF,MAAOpE,EAAWO,IAAI,wBAItD,YAAC,UAAD,CAASqD,SAAUA,QAAnB,EACE,mBAAKzF,UAAWoG,IAAW,+BAAgC,CAAE,uBAAwBtE,IAAWuE,SAAS,UAAzG,EACE,mBAAKrG,UAAU,uBAAuBsG,QAAS1G,KAAK8E,YAAa6B,KAAK,qBAAtE,EACE,YAAC,IAAD,CAAiBjC,SAAUA,EAAU4B,KAAM,MAG7C,mBAAKlG,UAAU,8BAAf,EACE,mBAAKA,UAAU,oCAAf,EACE,mBAAKA,UAAU,6CAAf,EACG8B,GAAU,oBAAM9B,UAAU,yBAD7B,IACwD,YAAC,UAAD,CAAmBwG,UAAW3E,EAAWO,IAAI,iBAGrG,yBAAKpC,UAAU,+BAA+ByG,IAAK7G,KAAK8G,aACtD,YAAC,IAAD,CAAkBzG,GAAG,oBAAoBC,eAAe,eAAeyG,OAAQ,CAAE7B,MAAO,6BAAOA,QAInG,YAAC,IAAD,CACE8B,OAAQ/E,EACRgF,WAAYjH,KAAKiH,WACjBC,SAAUvF,EACVwF,iBAAkBnH,KAAKoG,eACvBgB,aAAW,EACXf,MAAOA,IAGT,mBAAKjG,UAAU,2BAAf,EACE,YAAC,IAAD,CAAYA,UAAU,4BAA4BmF,MAAOpF,EAAKM,cAAchB,EAAS4B,OAAQgG,KAAK,QAAQX,QAAS1G,KAAK8F,cAExH,mBAAK1F,UAAU,oCAAf,EACE,YAAC,IAAD,CAAuB4G,OAAQ/E,EAAYqF,MAAO3C,EAAM0C,KAAK,aAAaf,KAAM,GAAIiB,UAAU,QAAQhC,MAAOpF,EAAKM,cAAchB,EAAS0B,c,GAtM9HqG,K,6BAEH,CACpBzF,OAAQ0F,IAAUC,S,0BAGD,CACjBxE,eAAgBuE,IAAUE,OAAOC,WACjClD,SAAUmD,IAAmBC,KAAKF,WAClC3F,WAAY4F,IAAmB1C,IAC/BjD,OAAOuF,IAAUM,KAAKH,WACtB3E,SAAUwE,IAAUO,KACpB7E,WAAYsE,IAAUO,KACtB7F,SAAUsF,IAAUO,KAAKJ,WACzBrG,OAAQkG,IAAUO,KAAKJ,WACvBzH,KAAMsH,IAAUC,OAAOE,a,2CCjCrBnI,EAAWC,YAAe,CAC9BuI,aAAa,CAAD,yDACZC,aAAa,CAAD,4JA8DCpI,eAAWc,mBA3DF,WACtB,IAAMuH,EAAYC,cAElB,OAAO,SAACvH,EAAD,GAAgC,IAAtBqC,EAAqB,EAArBA,eACTmF,EAAexH,EAAMC,MAAM,CAAC,gBAAiB,UAAUwH,MAAK,SAAAC,GAAC,OAAIA,EAAE/F,IAAI,QAAUU,KACjFsF,EAAeH,EAAa7F,IAAI,cAAe,MAErD,MAAO,CACLkC,SAAU2D,EAAa7F,IAAI,YAAY2C,KAAI,SAAAsD,GAAS,OAAI5H,EAAMC,MAAM,CAAC,WAAY2H,GAAY,SAC7FvG,OAAQmG,EAAa7F,IAAI,UACzBP,WAAYuG,GAAgBL,EAAUtH,EAAO,CAAER,GAAImI,SAK9B,SAACzH,EAAD,OAAaZ,EAAb,EAAaA,KAAM+C,EAAnB,EAAmBA,eAAnB,MAAyC,CAElEf,SAFkE,WAGhEpB,EAAS2H,YAAqBxF,KAGhC7B,MANkE,SAM3D2F,EAAQjF,GACbhB,GAAS,SAAC4H,EAAGC,GAG4C,IAF3CA,IAEF9H,MAAM,CAAC,UAAW,SAAS+H,OAAO7E,OAC1CjD,EAAS+H,YAAU,UAAW,CAC5BC,QAAS5I,EAAKM,cAAchB,EAASyI,cACrCc,QAAS7I,EAAKM,cAAchB,EAASwI,cACrCgB,UAAW,kBAAMlI,EAASmI,aAAalC,EAAQjF,QAGjDhB,EAASmI,aAAalC,EAAQjF,QAKpCR,OAtBkE,WAuBhER,EAASoI,YAAmBjG,KAG9BE,OA1BkE,SA0B1D4D,GACFA,EAAOxE,IAAI,SACbzB,EAASqI,YAAapC,EAAOxE,IAAI,QAEjCzB,EAASsI,YAAWrC,EAAOxE,IAAI,SAInC8G,eAlCkE,SAkClDtC,GACVA,EAAOxE,IAAI,UACbzB,EAASwI,uBAAavC,EAAOxE,IAAI,QAEjCzB,EAASyI,qBAAWxC,EAAOxE,IAAI,YAMX5B,CAA6Cc,I,eCjElD+H,G,4NASD,SAAApJ,GAAE,OAAI,EAAKJ,MAAMyJ,cAAcC,WAAU,SAAApB,GAAC,OAAIA,EAAE/F,IAAI,QAAUnC,Q,2CAEjE,SAAAA,GACb,IAAMuJ,EAAe,EAAKC,gBAAgBxJ,GAAM,EAChD,EAAKyJ,aAAaF,GAAc,M,6CAGjB,SAAAvJ,GACf,IAAMuJ,EAAe,EAAKC,gBAAgBxJ,GAAM,EAChD,EAAKyJ,aAAaF,GAAc,M,qCAiBzB,SAAApG,GACP,EAAKG,KAAOH,K,6CAGI,KAAS,WACzB,IAAMuG,EAAO,EAAK9J,MAAMyJ,cAAcK,OAElCA,GAAQA,EAAKvH,IAAI,gBACnB,EAAKvC,MAAM+J,WAAWD,EAAKvH,IAAI,kBAEhC,IAAK,CAAEyH,SAAS,K,6BAxBnBH,aAAA,SAAcI,EAAOC,GACnB,IAAMC,EAAYpK,KAAK2D,KAAKA,KACtB0G,EAAUD,EAAUE,cAAV,wBAA+CJ,EAAQ,GAAvD,gBAEZG,IACEF,GAAaC,EAAUG,UAAYF,EAAQG,UAC7CH,EAAQI,gBAAe,IACbN,GAAaC,EAAUG,UAAYH,EAAUM,aAAeL,EAAQG,UAAYH,EAAQM,cAClGN,EAAQI,gBAAe,GAEzBJ,EAAQO,U,EAgBZ7K,OAAA,WAAW,IAAD,SACwCC,KAAKC,MAA7CyJ,EADA,EACAA,cAAeM,EADf,EACeA,WAAea,EAD9B,oDAGR,OACE,kBAAC,KAAD,qBAAoBA,EAApB,CAA2Bb,WAAYA,GAAchK,KAAK8K,gBAAiBC,UAAU,SAASlE,IAAK7G,KAAKgL,SACrGtB,EAAcvE,KAAI,SAAA8F,GAAI,OACrB,YAAC,GAAD,CAEE/H,eAAgB+H,EAAKzI,IAAI,MACzBS,SAAU,EAAKiI,aACf/H,WAAY,EAAKgI,gBAHZF,EAAKzI,IAAI,Y,GAtDqBgF,K,YAA1BiC,G,YAEA,CACjBC,cAAe7B,IAAmBC,KAAKF,WACvCwD,QAAS3D,IAAUM,KACnBsD,UAAW5D,IAAUM,KACrBiC,WAAYvC,IAAUO,OCV1B,I,GAUepH,sBAVS,SAAAC,GAAK,MAAK,CAChC6I,cAAe7I,EAAMC,MAAM,CAAC,gBAAiB,UAC7CuK,UAAWxK,EAAMC,MAAM,CAAC,gBAAiB,cAAc,GACvDsK,QAASvK,EAAMC,MAAM,CAAC,gBAAiB,YAAY,OAG1B,SAAAC,GAAQ,MAAK,CACtCiJ,WAAY,SAAAsB,GAAK,OAAIvK,EAASwK,YAAoB,CAAED,eAGvC1K,CAA6C6I,ICC5D,IAAMhK,GAAWC,YAAe,CAC9B6F,MAAM,CAAD,uDAUDiG,GAFU5K,mBALQ,SAAAC,GAAK,MAAK,CAChC4K,UAAW5K,EAAMC,MAAM,CAAC,YAAa,SAAU,WAAa,EAC5D4K,kBAAmB7K,EAAMC,MAAM,CAAC,WAAY,SAAU,qB,IAIvDhB,Y,yNAYa,WAAO,IAAD,EACe,EAAKG,MAA5B0L,EADQ,EACRA,SAAU5K,EADF,EACEA,SAGhBA,EADE4K,EACOC,YAAaD,GAEbE,YAAU,SAAU,Q,yCAIpB,SAACC,GAAS,IAAD,EACW,EAAK7L,MAA5B0L,EADY,EACZA,UACR5K,EAFoB,EACFA,UACTgL,YAAWJ,EAAUG,O,gDAGZ,WAClB,EAAKE,OAAOzB,e,qCAoCL,SAAA/G,GACP,EAAKwI,OAASxI,K,qDAGS,SAAA8H,GACvB,EAAKrL,MAAMc,SAASkL,YAAqB,CAAEX,c,0DAGf,SAAAA,GAC5B,EAAKrL,MAAMc,SAASwK,YAAoB,CAAED,c,kDAGtB,WACpB,EAAKrL,MAAMc,SAASG,YAAc,CAAC,SAAU,kBAAkB,O,uDAGtC,WACzB,EAAKjB,MAAMc,SAASG,YAAc,CAAC,SAAU,kBAAkB,O,6BAlDjEsD,kBAAA,WAAsB,IAAD,EACqBxE,KAAKC,MAArCc,EADW,EACXA,SAAU2K,EADC,EACDA,kBAElB3K,EAASmL,eAGPnL,EADE2K,EACOH,cAEAU,eAGXjM,KAAKmM,WAAapL,EAASqL,gB,EAG7B3H,mBAAA,SAAmB4H,GAAY,IAAD,EACYrM,KAAKC,MAArCc,EADoB,EACpBA,SAAU2K,EADU,EACVA,kBAEdW,EAAUX,oBAAsBA,EAClC3K,EAASkL,gBACCI,EAAUX,mBAAqBA,GACzC3K,EAASwK,gB,EAIbe,qBAAA,WACEtM,KAAKC,MAAMc,SAASwL,eAEhBvM,KAAKmM,aACPnM,KAAKmM,aACLnM,KAAKmM,WAAa,O,EAwBtBpM,OAAA,WAAW,IAILyM,EAJI,EAC8DxM,KAAKC,MAAnEE,EADA,EACAA,KAAMsL,EADN,EACMA,UAAWE,EADjB,EACiBA,SAAUc,EAD3B,EAC2BA,YAAaf,EADxC,EACwCA,kBAC1CgB,IAAWf,EAyBjB,OArBEa,EADEd,EAEA,YAAC,GAAD,CACEiB,aAAcD,EACd3B,UAAS,mBAAqBY,EAC9BiB,WAAW,SACX5C,WAAYhK,KAAK6M,eACjBC,aAAc,YAAC,IAAD,CAAkBzM,GAAG,sBAAsBC,eAAe,kGAK1E,YAAC,IAAD,CACEqM,aAAcD,EACd3B,UAAS,mBAAqBY,EAC9BiB,WAAW,SACX5C,WAAYhK,KAAK+M,uBACjBD,aAAc,YAAC,IAAD,CAAkBzM,GAAG,sBAAsBC,eAAe,kGAM5E,kBAAC,IAAD,CAAQ0M,gBAAiBP,EAAa5F,IAAK7G,KAAKgL,OAAQxK,MAAOL,EAAKM,cAAchB,GAAS8F,QACzF,YAAC,IAAD,CACE8B,KAAK,WACL4F,OAAQxB,EACRlG,MAAOpF,EAAKM,cAAchB,GAAS8F,OACnC2H,MAAOlN,KAAKmN,UACZC,OAAQpN,KAAKqN,WACb3G,QAAS1G,KAAKsN,kBACdZ,OAAQA,EACRD,YAAaA,QARf,EAUE,YAAC,EAAD,KAGF,mBAAKrM,UAAU,iCAAf,EACE,sBACEA,UAAWsL,EAAoB,SAAW,GAC1ChF,QAAS1G,KAAKuN,+BAFhB,EAIE,YAAC,IAAD,CACElN,GAAG,4BACHC,eAAe,mBAGnB,sBACEF,UAAWsL,EAAoB,GAAK,SACpChF,QAAS1G,KAAKwN,0BAFhB,EAIE,YAAC,IAAD,CACEnN,GAAG,uBACHC,eAAe,eAKpBkM,I,GAlJoB9L,IAAMC,iB","file":"flavours/glitch/async/direct_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport SettingText from '../../../components/setting_text';\n\nconst messages = defineMessages({\n filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },\n settings: { id: 'home.settings', defaultMessage: 'Column settings' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { settings, onChange, intl } = this.props;\n\n return (\n <div>\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.advanced' defaultMessage='Advanced' /></span>\n\n <div className='column-settings__row'>\n <SettingText settings={settings} settingPath={['regex', 'body']} onChange={onChange} label={intl.formatMessage(messages.filter_regex)} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'direct']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (path, checked) {\n dispatch(changeSetting(['direct', ...path], checked));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';\nimport AvatarComposite from 'flavours/glitch/components/avatar_composite';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';\nimport { HotKeys } from 'react-hotkeys';\nimport { autoPlayGif } from 'flavours/glitch/util/initial_state';\nimport classNames from 'classnames';\n\nconst messages = defineMessages({\n more: { id: 'status.more', defaultMessage: 'More' },\n open: { id: 'conversation.open', defaultMessage: 'View conversation' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n markAsRead: { id: 'conversation.mark_as_read', defaultMessage: 'Mark as read' },\n delete: { id: 'conversation.delete', defaultMessage: 'Delete conversation' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n});\n\nexport default @injectIntl\nclass Conversation extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n conversationId: PropTypes.string.isRequired,\n accounts: ImmutablePropTypes.list.isRequired,\n lastStatus: ImmutablePropTypes.map,\n unread:PropTypes.bool.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n markRead: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n isExpanded: undefined,\n };\n\n parseClick = (e, destination) => {\n const { router } = this.context;\n const { lastStatus, unread, markRead } = this.props;\n if (!router) return;\n\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey)) {\n if (destination === undefined) {\n if (unread) {\n markRead();\n }\n destination = `/statuses/${lastStatus.get('id')}`;\n }\n let state = {...router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n router.history.push(destination, state);\n e.preventDefault();\n }\n }\n\n _updateEmojis () {\n const node = this.namesNode;\n\n if (!node || autoPlayGif) {\n return;\n }\n\n const emojis = node.querySelectorAll('.custom-emoji');\n\n for (var i = 0; i < emojis.length; i++) {\n let emoji = emojis[i];\n if (emoji.classList.contains('status-emoji')) {\n continue;\n }\n emoji.classList.add('status-emoji');\n\n emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);\n emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);\n }\n }\n\n componentDidMount () {\n this._updateEmojis();\n }\n\n componentDidUpdate () {\n this._updateEmojis();\n }\n\n handleEmojiMouseEnter = ({ target }) => {\n target.src = target.getAttribute('data-original');\n }\n\n handleEmojiMouseLeave = ({ target }) => {\n target.src = target.getAttribute('data-static');\n }\n\n handleClick = () => {\n if (!this.context.router) {\n return;\n }\n\n const { lastStatus, unread, markRead } = this.props;\n\n if (unread) {\n markRead();\n }\n\n this.context.router.history.push(`/statuses/${lastStatus.get('id')}`);\n }\n\n handleMarkAsRead = () => {\n this.props.markRead();\n }\n\n handleReply = () => {\n this.props.reply(this.props.lastStatus, this.context.router.history);\n }\n\n handleDelete = () => {\n this.props.delete();\n }\n\n handleHotkeyMoveUp = () => {\n this.props.onMoveUp(this.props.conversationId);\n }\n\n handleHotkeyMoveDown = () => {\n this.props.onMoveDown(this.props.conversationId);\n }\n\n handleConversationMute = () => {\n this.props.onMute(this.props.lastStatus);\n }\n\n handleShowMore = () => {\n if (this.props.lastStatus.get('spoiler_text')) {\n this.setExpansion(!this.state.isExpanded);\n }\n };\n\n setExpansion = value => {\n this.setState({ isExpanded: value });\n }\n\n setNamesRef = (c) => {\n this.namesNode = c;\n }\n\n render () {\n const { accounts, lastStatus, unread, intl } = this.props;\n const { isExpanded } = this.state;\n\n if (lastStatus === null) {\n return null;\n }\n\n const menu = [\n { text: intl.formatMessage(messages.open), action: this.handleClick },\n null,\n ];\n\n menu.push({ text: intl.formatMessage(lastStatus.get('muted') ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMute });\n\n if (unread) {\n menu.push({ text: intl.formatMessage(messages.markAsRead), action: this.handleMarkAsRead });\n menu.push(null);\n }\n\n menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete });\n\n const names = accounts.map(a => <Permalink to={`/accounts/${a.get('id')}`} href={a.get('url')} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Permalink>).reduce((prev, cur) => [prev, ', ', cur]);\n\n const handlers = {\n reply: this.handleReply,\n open: this.handleClick,\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n toggleHidden: this.handleShowMore,\n };\n\n let media = null;\n if (lastStatus.get('media_attachments').size > 0) {\n media = <AttachmentList compact media={lastStatus.get('media_attachments')} />;\n }\n\n return (\n <HotKeys handlers={handlers}>\n <div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex='0'>\n <div className='conversation__avatar' onClick={this.handleClick} role='presentation'>\n <AvatarComposite accounts={accounts} size={48} />\n </div>\n\n <div className='conversation__content'>\n <div className='conversation__content__info'>\n <div className='conversation__content__relative-time'>\n {unread && <span className='conversation__unread' />} <RelativeTimestamp timestamp={lastStatus.get('created_at')} />\n </div>\n\n <div className='conversation__content__names' ref={this.setNamesRef}>\n <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} />\n </div>\n </div>\n\n <StatusContent\n status={lastStatus}\n parseClick={this.parseClick}\n expanded={isExpanded}\n onExpandedToggle={this.handleShowMore}\n collapsable\n media={media}\n />\n\n <div className='status__action-bar'>\n <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.reply)} icon='reply' onClick={this.handleReply} />\n\n <div className='status__action-bar-dropdown'>\n <DropdownMenuContainer status={lastStatus} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} />\n </div>\n </div>\n </div>\n </div>\n </HotKeys>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport Conversation from '../components/conversation';\nimport { markConversationRead, deleteConversation } from 'flavours/glitch/actions/conversations';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport { replyCompose } from 'flavours/glitch/actions/compose';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { muteStatus, unmuteStatus, hideStatus, revealStatus } from 'flavours/glitch/actions/statuses';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n});\n\nconst mapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n return (state, { conversationId }) => {\n const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId);\n const lastStatusId = conversation.get('last_status', null);\n\n return {\n accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)),\n unread: conversation.get('unread'),\n lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }),\n };\n };\n};\n\nconst mapDispatchToProps = (dispatch, { intl, conversationId }) => ({\n\n markRead () {\n dispatch(markConversationRead(conversationId));\n },\n\n reply (status, router) {\n dispatch((_, getState) => {\n let state = getState();\n\n if (state.getIn(['compose', 'text']).trim().length !== 0) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onConfirm: () => dispatch(replyCompose(status, router)),\n }));\n } else {\n dispatch(replyCompose(status, router));\n }\n });\n },\n\n delete () {\n dispatch(deleteConversation(conversationId));\n },\n\n onMute (status) {\n if (status.get('muted')) {\n dispatch(unmuteStatus(status.get('id')));\n } else {\n dispatch(muteStatus(status.get('id')));\n }\n },\n\n onToggleHidden (status) {\n if (status.get('hidden')) {\n dispatch(revealStatus(status.get('id')));\n } else {\n dispatch(hideStatus(status.get('id')));\n }\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Conversation));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ConversationContainer from '../containers/conversation_container';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport { debounce } from 'lodash';\n\nexport default class ConversationsList extends ImmutablePureComponent {\n\n static propTypes = {\n conversations: ImmutablePropTypes.list.isRequired,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n onLoadMore: PropTypes.func,\n };\n\n getCurrentIndex = id => this.props.conversations.findIndex(x => x.get('id') === id)\n\n handleMoveUp = id => {\n const elementIndex = this.getCurrentIndex(id) - 1;\n this._selectChild(elementIndex, true);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.getCurrentIndex(id) + 1;\n this._selectChild(elementIndex, false);\n }\n\n _selectChild (index, align_top) {\n const container = this.node.node;\n const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n setRef = c => {\n this.node = c;\n }\n\n handleLoadOlder = debounce(() => {\n const last = this.props.conversations.last();\n\n if (last && last.get('last_status')) {\n this.props.onLoadMore(last.get('last_status'));\n }\n }, 300, { leading: true })\n\n render () {\n const { conversations, onLoadMore, ...other } = this.props;\n\n return (\n <ScrollableList {...other} onLoadMore={onLoadMore && this.handleLoadOlder} scrollKey='direct' ref={this.setRef}>\n {conversations.map(item => (\n <ConversationContainer\n key={item.get('id')}\n conversationId={item.get('id')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ))}\n </ScrollableList>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ConversationsList from '../components/conversations_list';\nimport { expandConversations } from 'flavours/glitch/actions/conversations';\n\nconst mapStateToProps = state => ({\n conversations: state.getIn(['conversations', 'items']),\n isLoading: state.getIn(['conversations', 'isLoading'], true),\n hasMore: state.getIn(['conversations', 'hasMore'], false),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onLoadMore: maxId => dispatch(expandConversations({ maxId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ConversationsList);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandDirectTimeline } from 'flavours/glitch/actions/timelines';\nimport { mountConversations, unmountConversations, expandConversations } from 'flavours/glitch/actions/conversations';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectDirectStream } from 'flavours/glitch/actions/streaming';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport ConversationsListContainer from './containers/conversations_list_container';\n\nconst messages = defineMessages({\n title: { id: 'column.direct', defaultMessage: 'Direct messages' },\n});\n\nconst mapStateToProps = state => ({\n hasUnread: state.getIn(['timelines', 'direct', 'unread']) > 0,\n conversationsMode: state.getIn(['settings', 'direct', 'conversations']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass DirectTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n conversationsMode: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('DIRECT', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, conversationsMode } = this.props;\n\n dispatch(mountConversations());\n\n if (conversationsMode) {\n dispatch(expandConversations());\n } else {\n dispatch(expandDirectTimeline());\n }\n\n this.disconnect = dispatch(connectDirectStream());\n }\n\n componentDidUpdate(prevProps) {\n const { dispatch, conversationsMode } = this.props;\n\n if (prevProps.conversationsMode && !conversationsMode) {\n dispatch(expandDirectTimeline());\n } else if (!prevProps.conversationsMode && conversationsMode) {\n dispatch(expandConversations());\n }\n }\n\n componentWillUnmount () {\n this.props.dispatch(unmountConversations());\n\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMoreTimeline = maxId => {\n this.props.dispatch(expandDirectTimeline({ maxId }));\n }\n\n handleLoadMoreConversations = maxId => {\n this.props.dispatch(expandConversations({ maxId }));\n }\n\n handleTimelineClick = () => {\n this.props.dispatch(changeSetting(['direct', 'conversations'], false));\n }\n\n handleConversationsClick = () => {\n this.props.dispatch(changeSetting(['direct', 'conversations'], true));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, conversationsMode } = this.props;\n const pinned = !!columnId;\n\n let contents;\n if (conversationsMode) {\n contents = (\n <ConversationsListContainer\n trackScroll={!pinned}\n scrollKey={`direct_timeline-${columnId}`}\n timelineId='direct'\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage=\"You don't have any direct messages yet. When you send or receive one, it will show up here.\" />}\n />\n );\n } else {\n contents = (\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`direct_timeline-${columnId}`}\n timelineId='direct'\n onLoadMore={this.handleLoadMoreTimeline}\n emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage=\"You don't have any direct messages yet. When you send or receive one, it will show up here.\" />}\n />\n );\n }\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='envelope'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n\n <div className='notification__filter-bar'>\n <button\n className={conversationsMode ? 'active' : ''}\n onClick={this.handleConversationsClick}\n >\n <FormattedMessage\n id='direct.conversations_mode'\n defaultMessage='Conversations'\n />\n </button>\n <button\n className={conversationsMode ? '' : 'active'}\n onClick={this.handleTimelineClick}\n >\n <FormattedMessage\n id='direct.timeline_mode'\n defaultMessage='Timeline'\n />\n </button>\n </div>\n\n {contents}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/domain_blocks.js b/priv/static/packs/flavours/glitch/async/domain_blocks.js
index d78750fe9..74fac4c3e 100644
--- a/priv/static/packs/flavours/glitch/async/domain_blocks.js
+++ b/priv/static/packs/flavours/glitch/async/domain_blocks.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{814:function(n,e,o){"use strict";o.r(e);var a=o(0),t=o(2),i=o(7),c=o(1),r=o(62),s=o.n(r),d=(o(3),o(13)),u=o(14),l=o.n(u),m=o(5),b=o.n(m),f=o(299),p=o(730),j=o(735);var O,h,g,k,v,M,y=o(81),_=o(6),w=o(39),D=o(18),C=Object(_.f)({unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),U=Object(_.g)((g=h=function(n){function e(){for(var e,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return e=n.call.apply(n,[this].concat(a))||this,Object(c.a)(Object(t.a)(e),"handleDomainUnblock",(function(){e.props.onUnblockDomain(e.props.domain)})),e}return Object(i.a)(e,n),e.prototype.render=function(){var n=this.props,e=n.domain,o=n.intl;return Object(a.a)("div",{className:"domain"},void 0,Object(a.a)("div",{className:"domain__wrapper"},void 0,Object(a.a)("span",{className:"domain__domain-name"},void 0,Object(a.a)("strong",{},void 0,e)),Object(a.a)("div",{className:"domain__buttons"},void 0,Object(a.a)(w.a,{active:!0,icon:"unlock",title:o.formatMessage(C.unblockDomain,{domain:e}),onClick:this.handleDomainUnblock}))))},e}(D.a),Object(c.a)(h,"propTypes",{domain:b.a.string,onUnblockDomain:b.a.func.isRequired,intl:b.a.object.isRequired}),O=g))||O,R=o(42),T=Object(_.f)({blockDomainConfirm:{id:"confirmations.domain_block.confirm",defaultMessage:"Hide entire domain"}}),q=Object(_.g)(Object(d.connect)((function(){return function(n,e){return function(n){if(null==n)throw new TypeError("Cannot destructure undefined")}(e),{}}}),(function(n,e){var o=e.intl;return{onBlockDomain:function(e){n(Object(R.d)("CONFIRM",{message:Object(a.a)(_.b,{id:"confirmations.domain_block.message",defaultMessage:"Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",values:{domain:Object(a.a)("strong",{},void 0,e)}}),confirm:o.formatMessage(T.blockDomainConfirm),onConfirm:function(){return n(Object(y.e)(e))}}))},onUnblockDomain:function(e){n(Object(y.h)(e))}}}))(U)),N=o(1022);o.d(e,"default",(function(){return A}));var I=Object(_.f)({heading:{id:"column.domain_blocks",defaultMessage:"Hidden domains"},unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),A=Object(d.connect)((function(n){return{domains:n.getIn(["domain_lists","blocks","items"]),hasMore:!!n.getIn(["domain_lists","blocks","next"])}}))(k=Object(_.g)((M=v=function(n){function e(){for(var e,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return e=n.call.apply(n,[this].concat(a))||this,Object(c.a)(Object(t.a)(e),"handleLoadMore",s()((function(){e.props.dispatch(Object(y.f)())}),300,{leading:!0})),e}Object(i.a)(e,n);var o=e.prototype;return o.componentWillMount=function(){this.props.dispatch(Object(y.g)())},o.render=function(){var n=this.props,e=n.intl,o=n.domains,t=n.hasMore,i=n.multiColumn;if(!o)return Object(a.a)(p.a,{},void 0,Object(a.a)(f.a,{}));var c=Object(a.a)(_.b,{id:"empty_column.domain_blocks",defaultMessage:"There are no hidden domains yet."});return Object(a.a)(p.a,{bindToDocument:!i,icon:"minus-circle",heading:e.formatMessage(I.heading)},void 0,Object(a.a)(j.a,{}),Object(a.a)(N.a,{scrollKey:"domain_blocks",onLoadMore:this.handleLoadMore,hasMore:t,emptyMessage:c,bindToDocument:!i},void 0,o.map((function(n){return Object(a.a)(q,{domain:n},n)}))))},e}(D.a),Object(c.a)(v,"propTypes",{params:b.a.object.isRequired,dispatch:b.a.func.isRequired,hasMore:b.a.bool,domains:l.a.list,intl:b.a.object.isRequired,multiColumn:b.a.bool}),k=M))||k)||k}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{841:function(n,o,e){"use strict";e.r(o),e.d(o,"default",(function(){return A}));var a=e(0),t=e(2),i=(e(9),e(6),e(8)),c=e(1),r=e(65),s=e.n(r),d=(e(3),e(15)),l=e(16),u=e.n(l),m=e(5),b=e.n(m),f=e(305),p=e(756),j=e(761);var O,k,h,g=e(85),v=e(7),M=e(41),y=e(21);var _,w,D,C=Object(v.f)({unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unblock domain {domain}"}}),U=Object(v.g)((h=k=function(n){Object(i.a)(e,n);var o;o=e;function e(){for(var o,e=arguments.length,a=new Array(e),i=0;i<e;i++)a[i]=arguments[i];return o=n.call.apply(n,[this].concat(a))||this,Object(c.a)(Object(t.a)(o),"handleDomainUnblock",(function(){o.props.onUnblockDomain(o.props.domain)})),o}return e.prototype.render=function(){var n=this.props,o=n.domain,e=n.intl;return(Object(a.a)("div",{className:"domain"},void 0,Object(a.a)("div",{className:"domain__wrapper"},void 0,Object(a.a)("span",{className:"domain__domain-name"},void 0,Object(a.a)("strong",{},void 0,o)),Object(a.a)("div",{className:"domain__buttons"},void 0,Object(a.a)(M.a,{active:!0,icon:"unlock",title:e.formatMessage(C.unblockDomain,{domain:o}),onClick:this.handleDomainUnblock})))))},e}(y.a),Object(c.a)(k,"propTypes",{domain:b.a.string,onUnblockDomain:b.a.func.isRequired,intl:b.a.object.isRequired}),O=h))||O,R=e(45),T=Object(v.f)({blockDomainConfirm:{id:"confirmations.domain_block.confirm",defaultMessage:"Block entire domain"}}),q=Object(v.g)(Object(d.connect)((function(){return function(n,o){return function(n){if(null==n)throw new TypeError("Cannot destructure undefined")}(o),{}}}),(function(n,o){var e=o.intl;return{onBlockDomain:function(o){n(Object(R.d)("CONFIRM",{message:Object(a.a)(v.b,{id:"confirmations.domain_block.message",defaultMessage:"Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",values:{domain:Object(a.a)("strong",{},void 0,o)}}),confirm:e.formatMessage(T.blockDomainConfirm),onConfirm:function(){return n(Object(g.e)(o))}}))},onUnblockDomain:function(o){n(Object(g.h)(o))}}}))(U)),N=e(1048);var I=Object(v.f)({heading:{id:"column.domain_blocks",defaultMessage:"Blocked domains"},unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unblock domain {domain}"}}),A=Object(d.connect)((function(n){return{domains:n.getIn(["domain_lists","blocks","items"]),hasMore:!!n.getIn(["domain_lists","blocks","next"])}}))(_=Object(v.g)((D=w=function(n){Object(i.a)(e,n);var o;o=e;function e(){for(var o,e=arguments.length,a=new Array(e),i=0;i<e;i++)a[i]=arguments[i];return o=n.call.apply(n,[this].concat(a))||this,Object(c.a)(Object(t.a)(o),"handleLoadMore",s()((function(){o.props.dispatch(Object(g.f)())}),300,{leading:!0})),o}var r=e.prototype;return r.componentWillMount=function(){this.props.dispatch(Object(g.g)())},r.render=function(){var n=this.props,o=n.intl,e=n.domains,t=n.hasMore,i=n.multiColumn;if(!e)return Object(a.a)(p.a,{},void 0,Object(a.a)(f.a,{}));var c=Object(a.a)(v.b,{id:"empty_column.domain_blocks",defaultMessage:"There are no blocked domains yet."});return(Object(a.a)(p.a,{bindToDocument:!i,icon:"minus-circle",heading:o.formatMessage(I.heading)},void 0,Object(a.a)(j.a,{}),Object(a.a)(N.a,{scrollKey:"domain_blocks",onLoadMore:this.handleLoadMore,hasMore:t,emptyMessage:c,bindToDocument:!i},void 0,e.map((function(n){return Object(a.a)(q,{domain:n},n)})))))},e}(y.a),Object(c.a)(w,"propTypes",{params:b.a.object.isRequired,dispatch:b.a.func.isRequired,hasMore:b.a.bool,domains:u.a.list,intl:b.a.object.isRequired,multiColumn:b.a.bool}),_=D))||_)||_}}]);
//# sourceMappingURL=domain_blocks.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/domain_blocks.js.map b/priv/static/packs/flavours/glitch/async/domain_blocks.js.map
index a877d0ea5..9534e788e 100644
--- a/priv/static/packs/flavours/glitch/async/domain_blocks.js.map
+++ b/priv/static/packs/flavours/glitch/async/domain_blocks.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/components/domain.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/containers/domain_container.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/domain_blocks/index.js"],"names":["messages","defineMessages","unblockDomain","Account","injectIntl","props","onUnblockDomain","domain","render","this","intl","className","active","icon","title","formatMessage","onClick","handleDomainUnblock","ImmutablePureComponent","PropTypes","string","func","isRequired","object","blockDomainConfirm","connect","state","obj","TypeError","dispatch","onBlockDomain","openModal","message","id","defaultMessage","values","confirm","onConfirm","blockDomain","Domain","heading","Blocks","domains","getIn","hasMore","expandDomainBlocks","leading","componentWillMount","fetchDomainBlocks","multiColumn","emptyMessage","bindToDocument","scrollKey","onLoadMore","handleLoadMore","map","params","bool","ImmutablePropTypes","list"],"mappings":"6QAMMA,EAAWC,YAAe,CAC9BC,cAAc,CAAD,gEAITC,EADUC,a,yMASQ,WACpB,EAAKC,MAAMC,gBAAgB,EAAKD,MAAME,W,sCAGxCC,OAAA,WAAW,IAAD,EACiBC,KAAKJ,MAAtBE,EADA,EACAA,OAAQG,EADR,EACQA,KAEhB,OACE,mBAAKC,UAAU,eAAf,EACE,mBAAKA,UAAU,wBAAf,EACE,oBAAMA,UAAU,4BAAhB,EACE,+BAASJ,IAGX,mBAAKI,UAAU,wBAAf,EACE,YAAC,IAAD,CAAYC,QAAM,EAACC,KAAK,SAASC,MAAOJ,EAAKK,cAAcf,EAASE,cAAe,CAAEK,WAAWS,QAASP,KAAKQ,0B,GAvBpGC,K,0BAED,CACjBX,OAAQY,IAAUC,OAClBd,gBAAiBa,IAAUE,KAAKC,WAChCZ,KAAMS,IAAUI,OAAOD,a,iBCTrBtB,EAAWC,YAAe,CAC9BuB,mBAAmB,CAAD,+EAwBLpB,cAAWqB,mBArBE,WAI1B,OAHwB,SAACC,EAAD,UCZX,SAAmCC,GAChD,GAAW,MAAPA,EAAa,MAAM,IAAIC,UAAU,gCDWb,IAAiB,OAMhB,SAACC,EAAD,OAAanB,EAAb,EAAaA,KAAb,MAAyB,CAClDoB,cADkD,SACnCvB,GACbsB,EAASE,YAAU,UAAW,CAC5BC,QAAS,YAAC,IAAD,CAAkBC,GAAG,qCAAqCC,eAAe,iJAAiJC,OAAQ,CAAE5B,OAAQ,+BAASA,MAC9P6B,QAAS1B,EAAKK,cAAcf,EAASwB,oBACrCa,UAAW,kBAAMR,EAASS,YAAY/B,SAI1CD,gBATkD,SASjCC,GACfsB,EAAS3B,YAAcK,QAIDkB,CAAiDc,I,kDElB3E,IAAMvC,EAAWC,YAAe,CAC9BuC,QAAQ,CAAD,2DACPtC,cAAc,CAAD,gEAUTuC,EAFUhB,mBALQ,SAAAC,GAAK,MAAK,CAChCgB,QAAShB,EAAMiB,MAAM,CAAC,eAAgB,SAAU,UAChDC,UAAWlB,EAAMiB,MAAM,CAAC,eAAgB,SAAU,Y,GAInDvC,a,mMAgBkB,KAAS,WACxB,EAAKC,MAAMwB,SAASgB,iBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEtC,KAAKJ,MAAMwB,SAASmB,gB,EAOtBxC,OAAA,WAAW,IAAD,EACwCC,KAAKJ,MAA7CK,EADA,EACAA,KAAMgC,EADN,EACMA,QAASE,EADf,EACeA,QAASK,EADxB,EACwBA,YAEhC,IAAKP,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMQ,EAAe,YAAC,IAAD,CAAkBjB,GAAG,6BAA6BC,eAAe,qCAEtF,OACE,YAAC,IAAD,CAAQiB,gBAAiBF,EAAapC,KAAK,eAAe2B,QAAS9B,EAAKK,cAAcf,EAASwC,eAA/F,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEY,UAAU,gBACVC,WAAY5C,KAAK6C,eACjBV,QAASA,EACTM,aAAcA,EACdC,gBAAiBF,QALnB,EAOGP,EAAQa,KAAI,SAAAhD,GAAM,OACjB,YAAC,EAAD,CAA8BA,OAAQA,GAAhBA,S,GA3CbW,K,0BAEA,CACjBsC,OAAQrC,IAAUI,OAAOD,WACzBO,SAAUV,IAAUE,KAAKC,WACzBsB,QAASzB,IAAUsC,KACnBf,QAASgB,IAAmBC,KAC5BjD,KAAMS,IAAUI,OAAOD,WACvB2B,YAAa9B,IAAUsC,O","file":"flavours/glitch/async/domain_blocks.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from './icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },\n});\n\nexport default @injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n domain: PropTypes.string,\n onUnblockDomain: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleDomainUnblock = () => {\n this.props.onUnblockDomain(this.props.domain);\n }\n\n render () {\n const { domain, intl } = this.props;\n\n return (\n <div className='domain'>\n <div className='domain__wrapper'>\n <span className='domain__domain-name'>\n <strong>{domain}</strong>\n </span>\n\n <div className='domain__buttons'>\n <IconButton active icon='unlock' title={intl.formatMessage(messages.unblockDomain, { domain })} onClick={this.handleDomainUnblock} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { blockDomain, unblockDomain } from '../actions/domain_blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Domain from '../components/domain';\nimport { openModal } from '../actions/modal';\n\nconst messages = defineMessages({\n blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n const mapStateToProps = (state, { }) => ({\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onBlockDomain (domain) {\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.' values={{ domain: <strong>{domain}</strong> }} />,\n confirm: intl.formatMessage(messages.blockDomainConfirm),\n onConfirm: () => dispatch(blockDomain(domain)),\n }));\n },\n\n onUnblockDomain (domain) {\n dispatch(unblockDomain(domain));\n },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Domain));\n","export default function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n}","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport DomainContainer from '../../containers/domain_container';\nimport { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.domain_blocks', defaultMessage: 'Hidden domains' },\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },\n});\n\nconst mapStateToProps = state => ({\n domains: state.getIn(['domain_lists', 'blocks', 'items']),\n hasMore: !!state.getIn(['domain_lists', 'blocks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Blocks extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n domains: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchDomainBlocks());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandDomainBlocks());\n }, 300, { leading: true });\n\n render () {\n const { intl, domains, hasMore, multiColumn } = this.props;\n\n if (!domains) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.domain_blocks' defaultMessage='There are no hidden domains yet.' />;\n\n return (\n <Column bindToDocument={!multiColumn} icon='minus-circle' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='domain_blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {domains.map(domain =>\n <DomainContainer key={domain} domain={domain} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/components/domain.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/containers/domain_container.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/domain_blocks/index.js"],"names":["messages","defineMessages","unblockDomain","Account","injectIntl","props","onUnblockDomain","domain","render","this","intl","className","active","icon","title","formatMessage","onClick","handleDomainUnblock","ImmutablePureComponent","PropTypes","string","func","isRequired","object","blockDomainConfirm","connect","state","obj","TypeError","dispatch","onBlockDomain","openModal","message","id","defaultMessage","values","confirm","onConfirm","blockDomain","Domain","heading","Blocks","domains","getIn","hasMore","expandDomainBlocks","leading","componentWillMount","fetchDomainBlocks","multiColumn","emptyMessage","bindToDocument","scrollKey","onLoadMore","handleLoadMore","map","params","bool","ImmutablePropTypes","list"],"mappings":"2TAMA,I,MAAMA,EAAWC,YAAe,CAC9BC,cAAc,CAAD,wEAITC,EADUC,a,oOASQ,WACpB,EAAKC,MAAMC,gBAAgB,EAAKD,MAAME,W,qBAGxCC,OAAA,WAAW,IAAD,EACiBC,KAAKJ,MAAtBE,EADA,EACAA,OAAQG,EADR,EACQA,KAEhB,OACE,mBAAKC,UAAU,eAAf,EACE,mBAAKA,UAAU,wBAAf,EACE,oBAAMA,UAAU,4BAAhB,EACE,+BAASJ,IAGX,mBAAKI,UAAU,wBAAf,EACE,YAAC,IAAD,CAAYC,QAAM,EAACC,KAAK,SAASC,MAAOJ,EAAKK,cAAcf,EAASE,cAAe,CAAEK,WAAWS,QAASP,KAAKQ,2B,GAvBpGC,K,0BAED,CACjBX,OAAQY,IAAUC,OAClBd,gBAAiBa,IAAUE,KAAKC,WAChCZ,KAAMS,IAAUI,OAAOD,a,iBCTrBtB,EAAWC,YAAe,CAC9BuB,mBAAmB,CAAD,gFAwBLpB,cAAWqB,mBArBE,WAI1B,OAHwB,SAACC,EAAD,UCZX,SAAmCC,GAChD,GAAW,MAAPA,EAAa,MAAM,IAAIC,UAAU,gCDWb,IAAiB,OAMhB,SAACC,EAAD,OAAanB,EAAb,EAAaA,KAAb,MAAyB,CAClDoB,cADkD,SACnCvB,GACbsB,EAASE,YAAU,UAAW,CAC5BC,QAAS,YAAC,IAAD,CAAkBC,GAAG,qCAAqCC,eAAe,iJAAiJC,OAAQ,CAAE5B,OAAQ,+BAASA,MAC9P6B,QAAS1B,EAAKK,cAAcf,EAASwB,oBACrCa,UAAW,kBAAMR,EAASS,YAAY/B,SAI1CD,gBATkD,SASjCC,GACfsB,EAAS3B,YAAcK,QAIDkB,CAAiDc,I,UElB3E,IAAMvC,EAAWC,YAAe,CAC9BuC,QAAQ,CAAD,4DACPtC,cAAc,CAAD,wEAUTuC,EAFUhB,mBALQ,SAAAC,GAAK,MAAK,CAChCgB,QAAShB,EAAMiB,MAAM,CAAC,eAAgB,SAAU,UAChDC,UAAWlB,EAAMiB,MAAM,CAAC,eAAgB,SAAU,Y,GAInDvC,a,8NAgBkB,KAAS,WACxB,EAAKC,MAAMwB,SAASgB,iBACnB,IAAK,CAAEC,SAAS,K,6BANnBC,mBAAA,WACEtC,KAAKJ,MAAMwB,SAASmB,gB,EAOtBxC,OAAA,WAAW,IAAD,EACwCC,KAAKJ,MAA7CK,EADA,EACAA,KAAMgC,EADN,EACMA,QAASE,EADf,EACeA,QAASK,EADxB,EACwBA,YAEhC,IAAKP,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMQ,EAAe,YAAC,IAAD,CAAkBjB,GAAG,6BAA6BC,eAAe,sCAEtF,OACE,YAAC,IAAD,CAAQiB,gBAAiBF,EAAapC,KAAK,eAAe2B,QAAS9B,EAAKK,cAAcf,EAASwC,eAA/F,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEY,UAAU,gBACVC,WAAY5C,KAAK6C,eACjBV,QAASA,EACTM,aAAcA,EACdC,gBAAiBF,QALnB,EAOGP,EAAQa,KAAI,SAAAhD,GAAM,OACjB,YAAC,EAAD,CAA8BA,OAAQA,GAAhBA,U,GA3CbW,K,0BAEA,CACjBsC,OAAQrC,IAAUI,OAAOD,WACzBO,SAAUV,IAAUE,KAAKC,WACzBsB,QAASzB,IAAUsC,KACnBf,QAASgB,IAAmBC,KAC5BjD,KAAMS,IAAUI,OAAOD,WACvB2B,YAAa9B,IAAUsC,O","file":"flavours/glitch/async/domain_blocks.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from './icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n});\n\nexport default @injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n domain: PropTypes.string,\n onUnblockDomain: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleDomainUnblock = () => {\n this.props.onUnblockDomain(this.props.domain);\n }\n\n render () {\n const { domain, intl } = this.props;\n\n return (\n <div className='domain'>\n <div className='domain__wrapper'>\n <span className='domain__domain-name'>\n <strong>{domain}</strong>\n </span>\n\n <div className='domain__buttons'>\n <IconButton active icon='unlock' title={intl.formatMessage(messages.unblockDomain, { domain })} onClick={this.handleDomainUnblock} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { blockDomain, unblockDomain } from '../actions/domain_blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Domain from '../components/domain';\nimport { openModal } from '../actions/modal';\n\nconst messages = defineMessages({\n blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Block entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n const mapStateToProps = (state, { }) => ({\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onBlockDomain (domain) {\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.' values={{ domain: <strong>{domain}</strong> }} />,\n confirm: intl.formatMessage(messages.blockDomainConfirm),\n onConfirm: () => dispatch(blockDomain(domain)),\n }));\n },\n\n onUnblockDomain (domain) {\n dispatch(unblockDomain(domain));\n },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Domain));\n","export default function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n}","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport DomainContainer from '../../containers/domain_container';\nimport { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.domain_blocks', defaultMessage: 'Blocked domains' },\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n});\n\nconst mapStateToProps = state => ({\n domains: state.getIn(['domain_lists', 'blocks', 'items']),\n hasMore: !!state.getIn(['domain_lists', 'blocks', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Blocks extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n domains: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchDomainBlocks());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandDomainBlocks());\n }, 300, { leading: true });\n\n render () {\n const { intl, domains, hasMore, multiColumn } = this.props;\n\n if (!domains) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.domain_blocks' defaultMessage='There are no blocked domains yet.' />;\n\n return (\n <Column bindToDocument={!multiColumn} icon='minus-circle' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='domain_blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {domains.map(domain =>\n <DomainContainer key={domain} domain={domain} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/embed_modal.js b/priv/static/packs/flavours/glitch/async/embed_modal.js
index 770375048..6b2709250 100644
--- a/priv/static/packs/flavours/glitch/async/embed_modal.js
+++ b/priv/static/packs/flavours/glitch/async/embed_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{782:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return g}));var o,i,s,r=a(0),n=a(2),l=a(7),c=a(1),d=a(3),m=a.n(d),b=a(5),u=a.n(b),p=a(18),f=a(6),h=a(11),j=a(39),O=Object(f.f)({close:{id:"lightbox.close",defaultMessage:"Close"}}),g=Object(f.g)((s=i=function(e){function t(){for(var t,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return t=e.call.apply(e,[this].concat(o))||this,Object(c.a)(Object(n.a)(t),"state",{loading:!1,oembed:null}),Object(c.a)(Object(n.a)(t),"setIframeRef",(function(e){t.iframe=e})),Object(c.a)(Object(n.a)(t),"handleTextareaClick",(function(e){e.target.select()})),t}Object(l.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){var e=this,t=this.props.url;this.setState({loading:!0}),Object(h.a)().post("/api/web/embed",{url:t}).then((function(t){e.setState({loading:!1,oembed:t.data});var a=e.iframe.contentWindow.document;a.open(),a.write(t.data.html),a.close(),a.body.style.margin=0,e.iframe.width=a.body.scrollWidth,e.iframe.height=a.body.scrollHeight})).catch((function(t){e.props.onError(t)}))},a.render=function(){var e=this.props,t=e.intl,a=e.onClose,o=this.state.oembed;return Object(r.a)("div",{className:"modal-root__modal report-modal embed-modal"},void 0,Object(r.a)("div",{className:"report-modal__target"},void 0,Object(r.a)(j.a,{className:"media-modal__close",title:t.formatMessage(O.close),icon:"times",onClick:a,size:16}),Object(r.a)(f.b,{id:"status.embed",defaultMessage:"Embed"})),Object(r.a)("div",{className:"report-modal__container embed-modal__container",style:{display:"block"}},void 0,Object(r.a)("p",{className:"hint"},void 0,Object(r.a)(f.b,{id:"embed.instructions",defaultMessage:"Embed this status on your website by copying the code below."})),Object(r.a)("input",{type:"text",className:"embed-modal__html",readOnly:!0,value:o&&o.html||"",onClick:this.handleTextareaClick}),Object(r.a)("p",{className:"hint"},void 0,Object(r.a)(f.b,{id:"embed.preview",defaultMessage:"Here is what it will look like:"})),m.a.createElement("iframe",{className:"embed-modal__iframe",frameBorder:"0",ref:this.setIframeRef,sandbox:"allow-same-origin",title:"preview"})))},t}(p.a),Object(c.a)(i,"propTypes",{url:u.a.string.isRequired,onClose:u.a.func.isRequired,onError:u.a.func.isRequired,intl:u.a.object.isRequired}),o=s))||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{808:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return g}));var o,i,s,r=a(0),n=a(2),l=(a(9),a(6),a(8)),c=a(1),d=a(3),m=a.n(d),b=a(5),u=a.n(b),p=a(21),f=a(7),h=a(13),j=a(41);var O=Object(f.f)({close:{id:"lightbox.close",defaultMessage:"Close"}}),g=Object(f.g)((s=i=function(e){Object(l.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return t=e.call.apply(e,[this].concat(o))||this,Object(c.a)(Object(n.a)(t),"state",{loading:!1,oembed:null}),Object(c.a)(Object(n.a)(t),"setIframeRef",(function(e){t.iframe=e})),Object(c.a)(Object(n.a)(t),"handleTextareaClick",(function(e){e.target.select()})),t}var o=a.prototype;return o.componentDidMount=function(){var e=this,t=this.props.url;this.setState({loading:!0}),Object(h.a)().post("/api/web/embed",{url:t}).then((function(t){e.setState({loading:!1,oembed:t.data});var a=e.iframe.contentWindow.document;a.open(),a.write(t.data.html),a.close(),a.body.style.margin=0,e.iframe.width=a.body.scrollWidth,e.iframe.height=a.body.scrollHeight})).catch((function(t){e.props.onError(t)}))},o.render=function(){var e=this.props,t=e.intl,a=e.onClose,o=this.state.oembed;return Object(r.a)("div",{className:"modal-root__modal report-modal embed-modal"},void 0,Object(r.a)("div",{className:"report-modal__target"},void 0,Object(r.a)(j.a,{className:"media-modal__close",title:t.formatMessage(O.close),icon:"times",onClick:a,size:16}),Object(r.a)(f.b,{id:"status.embed",defaultMessage:"Embed"})),Object(r.a)("div",{className:"report-modal__container embed-modal__container",style:{display:"block"}},void 0,Object(r.a)("p",{className:"hint"},void 0,Object(r.a)(f.b,{id:"embed.instructions",defaultMessage:"Embed this status on your website by copying the code below."})),Object(r.a)("input",{type:"text",className:"embed-modal__html",readOnly:!0,value:o&&o.html||"",onClick:this.handleTextareaClick}),Object(r.a)("p",{className:"hint"},void 0,Object(r.a)(f.b,{id:"embed.preview",defaultMessage:"Here is what it will look like:"})),m.a.createElement("iframe",{className:"embed-modal__iframe",frameBorder:"0",ref:this.setIframeRef,sandbox:"allow-same-origin",title:"preview"})))},a}(p.a),Object(c.a)(i,"propTypes",{url:u.a.string.isRequired,onClose:u.a.func.isRequired,onError:u.a.func.isRequired,intl:u.a.object.isRequired}),o=s))||o}}]);
//# sourceMappingURL=embed_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/embed_modal.js.map b/priv/static/packs/flavours/glitch/async/embed_modal.js.map
index ea025afc1..848f507d6 100644
--- a/priv/static/packs/flavours/glitch/async/embed_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/embed_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/embed_modal.js"],"names":["messages","defineMessages","close","EmbedModal","injectIntl","loading","oembed","c","iframe","e","target","select","componentDidMount","url","this","props","setState","api","post","then","res","data","iframeDocument","contentWindow","document","open","write","html","body","style","margin","width","scrollWidth","height","scrollHeight","catch","error","onError","render","intl","onClose","state","className","title","formatMessage","icon","onClick","size","id","defaultMessage","display","type","readOnly","value","handleTextareaClick","frameBorder","ref","setIframeRef","sandbox","ImmutablePureComponent","PropTypes","string","isRequired","func","object"],"mappings":"+OAOMA,EAAWC,YAAe,CAC9BC,MAAM,CAAD,8CAIDC,EADUC,a,0LAUN,CACNC,SAAS,EACTC,OAAQ,O,2CAyBK,SAAAC,GACb,EAAKC,OAASD,K,kDAGM,SAACE,GACrBA,EAAEC,OAAOC,Y,8CA3BXC,kBAAA,WAAsB,IAAD,OACXC,EAAQC,KAAKC,MAAbF,IAERC,KAAKE,SAAS,CAAEX,SAAS,IAEzBY,cAAMC,KAAK,iBAAkB,CAAEL,QAAOM,MAAK,SAAAC,GACzC,EAAKJ,SAAS,CAAEX,SAAS,EAAOC,OAAQc,EAAIC,OAE5C,IAAMC,EAAiB,EAAKd,OAAOe,cAAcC,SAEjDF,EAAeG,OACfH,EAAeI,MAAMN,EAAIC,KAAKM,MAC9BL,EAAepB,QAEfoB,EAAeM,KAAKC,MAAMC,OAAS,EACnC,EAAKtB,OAAOuB,MAAST,EAAeM,KAAKI,YACzC,EAAKxB,OAAOyB,OAASX,EAAeM,KAAKM,gBACxCC,OAAM,SAAAC,GACP,EAAKrB,MAAMsB,QAAQD,O,EAYvBE,OAAA,WAAW,IAAD,EACkBxB,KAAKC,MAAvBwB,EADA,EACAA,KAAMC,EADN,EACMA,QACNlC,EAAWQ,KAAK2B,MAAhBnC,OAER,OACE,mBAAKoC,UAAU,mDAAf,EACE,mBAAKA,UAAU,6BAAf,EACE,YAAC,IAAD,CAAYA,UAAU,qBAAqBC,MAAOJ,EAAKK,cAAc5C,EAASE,OAAQ2C,KAAK,QAAQC,QAASN,EAASO,KAAM,KAC3H,YAAC,IAAD,CAAkBC,GAAG,eAAeC,eAAe,WAGrD,mBAAKP,UAAU,iDAAiDb,MAAO,CAAEqB,QAAS,eAAlF,EACE,iBAAGR,UAAU,aAAb,EACE,YAAC,IAAD,CAAkBM,GAAG,qBAAqBC,eAAe,kEAG3D,qBACEE,KAAK,OACLT,UAAU,oBACVU,UAAQ,EACRC,MAAO/C,GAAUA,EAAOqB,MAAQ,GAChCmB,QAAShC,KAAKwC,sBAGhB,iBAAGZ,UAAU,aAAb,EACE,YAAC,IAAD,CAAkBM,GAAG,gBAAgBC,eAAe,qCAGtD,4BACEP,UAAU,sBACVa,YAAY,IACZC,IAAK1C,KAAK2C,aACVC,QAAQ,oBACRf,MAAM,e,GA7EOgB,K,0BAEJ,CACjB9C,IAAK+C,IAAUC,OAAOC,WACtBtB,QAASoB,IAAUG,KAAKD,WACxBzB,QAASuB,IAAUG,KAAKD,WACxBvB,KAAMqB,IAAUI,OAAOF,a","file":"flavours/glitch/async/embed_modal.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport api from 'flavours/glitch/util/api';\nimport IconButton from 'flavours/glitch/components/icon_button';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nexport default @injectIntl\nclass EmbedModal extends ImmutablePureComponent {\n\n static propTypes = {\n url: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n }\n\n state = {\n loading: false,\n oembed: null,\n };\n\n componentDidMount () {\n const { url } = this.props;\n\n this.setState({ loading: true });\n\n api().post('/api/web/embed', { url }).then(res => {\n this.setState({ loading: false, oembed: res.data });\n\n const iframeDocument = this.iframe.contentWindow.document;\n\n iframeDocument.open();\n iframeDocument.write(res.data.html);\n iframeDocument.close();\n\n iframeDocument.body.style.margin = 0;\n this.iframe.width = iframeDocument.body.scrollWidth;\n this.iframe.height = iframeDocument.body.scrollHeight;\n }).catch(error => {\n this.props.onError(error);\n });\n }\n\n setIframeRef = c => {\n this.iframe = c;\n }\n\n handleTextareaClick = (e) => {\n e.target.select();\n }\n\n render () {\n const { intl, onClose } = this.props;\n const { oembed } = this.state;\n\n return (\n <div className='modal-root__modal report-modal embed-modal'>\n <div className='report-modal__target'>\n <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />\n <FormattedMessage id='status.embed' defaultMessage='Embed' />\n </div>\n\n <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}>\n <p className='hint'>\n <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' />\n </p>\n\n <input\n type='text'\n className='embed-modal__html'\n readOnly\n value={oembed && oembed.html || ''}\n onClick={this.handleTextareaClick}\n />\n\n <p className='hint'>\n <FormattedMessage id='embed.preview' defaultMessage='Here is what it will look like:' />\n </p>\n\n <iframe\n className='embed-modal__iframe'\n frameBorder='0'\n ref={this.setIframeRef}\n sandbox='allow-same-origin'\n title='preview'\n />\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/embed_modal.js"],"names":["messages","defineMessages","close","EmbedModal","injectIntl","loading","oembed","c","iframe","e","target","select","componentDidMount","url","this","props","setState","api","post","then","res","data","iframeDocument","contentWindow","document","open","write","html","body","style","margin","width","scrollWidth","height","scrollHeight","catch","error","onError","render","intl","onClose","state","className","title","formatMessage","icon","onClick","size","id","defaultMessage","display","type","readOnly","value","handleTextareaClick","frameBorder","ref","setIframeRef","sandbox","ImmutablePureComponent","PropTypes","string","isRequired","func","object"],"mappings":"2PAOA,IAAMA,EAAWC,YAAe,CAC9BC,MAAM,CAAD,8CAIDC,EADUC,a,qNAUN,CACNC,SAAS,EACTC,OAAQ,O,2CAyBK,SAAAC,GACb,EAAKC,OAASD,K,kDAGM,SAACE,GACrBA,EAAEC,OAAOC,Y,6BA3BXC,kBAAA,WAAsB,IAAD,OACXC,EAAQC,KAAKC,MAAbF,IAERC,KAAKE,SAAS,CAAEX,SAAS,IAEzBY,cAAMC,KAAK,iBAAkB,CAAEL,QAAOM,MAAK,SAAAC,GACzC,EAAKJ,SAAS,CAAEX,SAAS,EAAOC,OAAQc,EAAIC,OAE5C,IAAMC,EAAiB,EAAKd,OAAOe,cAAcC,SAEjDF,EAAeG,OACfH,EAAeI,MAAMN,EAAIC,KAAKM,MAC9BL,EAAepB,QAEfoB,EAAeM,KAAKC,MAAMC,OAAS,EACnC,EAAKtB,OAAOuB,MAAST,EAAeM,KAAKI,YACzC,EAAKxB,OAAOyB,OAASX,EAAeM,KAAKM,gBACxCC,OAAM,SAAAC,GACP,EAAKrB,MAAMsB,QAAQD,O,EAYvBE,OAAA,WAAW,IAAD,EACkBxB,KAAKC,MAAvBwB,EADA,EACAA,KAAMC,EADN,EACMA,QACNlC,EAAWQ,KAAK2B,MAAhBnC,OAER,OACE,mBAAKoC,UAAU,mDAAf,EACE,mBAAKA,UAAU,6BAAf,EACE,YAAC,IAAD,CAAYA,UAAU,qBAAqBC,MAAOJ,EAAKK,cAAc5C,EAASE,OAAQ2C,KAAK,QAAQC,QAASN,EAASO,KAAM,KAC3H,YAAC,IAAD,CAAkBC,GAAG,eAAeC,eAAe,WAGrD,mBAAKP,UAAU,iDAAiDb,MAAO,CAAEqB,QAAS,eAAlF,EACE,iBAAGR,UAAU,aAAb,EACE,YAAC,IAAD,CAAkBM,GAAG,qBAAqBC,eAAe,kEAG3D,qBACEE,KAAK,OACLT,UAAU,oBACVU,UAAQ,EACRC,MAAO/C,GAAUA,EAAOqB,MAAQ,GAChCmB,QAAShC,KAAKwC,sBAGhB,iBAAGZ,UAAU,aAAb,EACE,YAAC,IAAD,CAAkBM,GAAG,gBAAgBC,eAAe,qCAGtD,4BACEP,UAAU,sBACVa,YAAY,IACZC,IAAK1C,KAAK2C,aACVC,QAAQ,oBACRf,MAAM,e,GA7EOgB,K,0BAEJ,CACjB9C,IAAK+C,IAAUC,OAAOC,WACtBtB,QAASoB,IAAUG,KAAKD,WACxBzB,QAASuB,IAAUG,KAAKD,WACxBvB,KAAMqB,IAAUI,OAAOF,a","file":"flavours/glitch/async/embed_modal.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport api from 'flavours/glitch/util/api';\nimport IconButton from 'flavours/glitch/components/icon_button';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nexport default @injectIntl\nclass EmbedModal extends ImmutablePureComponent {\n\n static propTypes = {\n url: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n }\n\n state = {\n loading: false,\n oembed: null,\n };\n\n componentDidMount () {\n const { url } = this.props;\n\n this.setState({ loading: true });\n\n api().post('/api/web/embed', { url }).then(res => {\n this.setState({ loading: false, oembed: res.data });\n\n const iframeDocument = this.iframe.contentWindow.document;\n\n iframeDocument.open();\n iframeDocument.write(res.data.html);\n iframeDocument.close();\n\n iframeDocument.body.style.margin = 0;\n this.iframe.width = iframeDocument.body.scrollWidth;\n this.iframe.height = iframeDocument.body.scrollHeight;\n }).catch(error => {\n this.props.onError(error);\n });\n }\n\n setIframeRef = c => {\n this.iframe = c;\n }\n\n handleTextareaClick = (e) => {\n e.target.select();\n }\n\n render () {\n const { intl, onClose } = this.props;\n const { oembed } = this.state;\n\n return (\n <div className='modal-root__modal report-modal embed-modal'>\n <div className='report-modal__target'>\n <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />\n <FormattedMessage id='status.embed' defaultMessage='Embed' />\n </div>\n\n <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}>\n <p className='hint'>\n <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' />\n </p>\n\n <input\n type='text'\n className='embed-modal__html'\n readOnly\n value={oembed && oembed.html || ''}\n onClick={this.handleTextareaClick}\n />\n\n <p className='hint'>\n <FormattedMessage id='embed.preview' defaultMessage='Here is what it will look like:' />\n </p>\n\n <iframe\n className='embed-modal__iframe'\n frameBorder='0'\n ref={this.setIframeRef}\n sandbox='allow-same-origin'\n title='preview'\n />\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/emoji_picker.js b/priv/static/packs/flavours/glitch/async/emoji_picker.js
index 21db597b1..57833a531 100644
--- a/priv/static/packs/flavours/glitch/async/emoji_picker.js
+++ b/priv/static/packs/flavours/glitch/async/emoji_picker.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{763:function(n,r,i){"use strict";i.r(r);var o=i(1055);i.d(r,"Picker",(function(){return o.a}));var c=i(1032);i.d(r,"Emoji",(function(){return c.a}))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{789:function(n,r,i){"use strict";i.r(r);var o=i(1082);i.d(r,"Picker",(function(){return o.a}));var c=i(1058);i.d(r,"Emoji",(function(){return c.a}))}}]);
//# sourceMappingURL=emoji_picker.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/favourited_statuses.js b/priv/static/packs/flavours/glitch/async/favourited_statuses.js
index aaf19c371..4401228f6 100644
--- a/priv/static/packs/flavours/glitch/async/favourited_statuses.js
+++ b/priv/static/packs/flavours/glitch/async/favourited_statuses.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{775:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return C}));var n,o,s,i=a(0),c=a(2),u=a(7),r=a(1),l=a(62),d=a.n(l),h=a(3),b=a.n(h),p=a(13),f=a(5),j=a.n(f),m=a(14),O=a.n(m),g=a(201),v=a(730),M=a(732),I=a(249),w=a(1037),y=a(6),L=a(18),k=Object(y.f)({heading:{id:"column.favourites",defaultMessage:"Favourites"}}),C=Object(p.connect)((function(t){return{statusIds:t.getIn(["status_lists","favourites","items"]),isLoading:t.getIn(["status_lists","favourites","isLoading"],!0),hasMore:!!t.getIn(["status_lists","favourites","next"])}}))(n=Object(y.g)((s=o=function(t){function e(){for(var e,a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(c.a)(e),"handlePin",(function(){var t=e.props,a=t.columnId,n=t.dispatch;n(a?Object(I.h)(a):Object(I.e)("FAVOURITES",{}))})),Object(r.a)(Object(c.a)(e),"handleMove",(function(t){var a=e.props,n=a.columnId;(0,a.dispatch)(Object(I.g)(n,t))})),Object(r.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(r.a)(Object(c.a)(e),"handleLoadMore",d()((function(){e.props.dispatch(Object(g.g)())}),300,{leading:!0})),e}Object(u.a)(e,t);var a=e.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(g.h)())},a.render=function(){var t=this.props,e=t.intl,a=t.statusIds,n=t.columnId,o=t.multiColumn,s=t.hasMore,c=t.isLoading,u=!!n,r=Object(i.a)(y.b,{id:"empty_column.favourited_statuses",defaultMessage:"You don't have any favourite toots yet. When you favourite one, it will show up here."});return b.a.createElement(v.a,{bindToDocument:!o,ref:this.setRef,name:"favourites",label:e.formatMessage(k.heading)},Object(i.a)(M.a,{icon:"star",title:e.formatMessage(k.heading),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:u,multiColumn:o,showBackButton:!0}),Object(i.a)(w.a,{trackScroll:!u,statusIds:a,scrollKey:"favourited_statuses-"+n,hasMore:s,isLoading:c,onLoadMore:this.handleLoadMore,emptyMessage:r,bindToDocument:!o}))},e}(L.a),Object(r.a)(o,"propTypes",{dispatch:j.a.func.isRequired,statusIds:O.a.list.isRequired,intl:j.a.object.isRequired,columnId:j.a.string,multiColumn:j.a.bool,hasMore:j.a.bool,isLoading:j.a.bool}),n=s))||n)||n}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{801:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return C}));var n,o,s,i=a(0),c=a(2),u=(a(9),a(6),a(8)),r=a(1),l=a(65),d=a.n(l),h=a(3),b=a.n(h),p=a(15),f=a(5),j=a.n(f),m=a(16),O=a.n(m),g=a(205),v=a(756),M=a(758),I=a(252),w=a(1064),y=a(7),L=a(21);var k=Object(y.f)({heading:{id:"column.favourites",defaultMessage:"Favourites"}}),C=Object(p.connect)((function(t){return{statusIds:t.getIn(["status_lists","favourites","items"]),isLoading:t.getIn(["status_lists","favourites","isLoading"],!0),hasMore:!!t.getIn(["status_lists","favourites","next"])}}))(n=Object(y.g)((s=o=function(t){Object(u.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(c.a)(e),"handlePin",(function(){var t=e.props,a=t.columnId,n=t.dispatch;n(a?Object(I.h)(a):Object(I.e)("FAVOURITES",{}))})),Object(r.a)(Object(c.a)(e),"handleMove",(function(t){var a=e.props,n=a.columnId;(0,a.dispatch)(Object(I.g)(n,t))})),Object(r.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(r.a)(Object(c.a)(e),"handleLoadMore",d()((function(){e.props.dispatch(Object(g.g)())}),300,{leading:!0})),e}var n=a.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(g.h)())},n.render=function(){var t=this.props,e=t.intl,a=t.statusIds,n=t.columnId,o=t.multiColumn,s=t.hasMore,c=t.isLoading,u=!!n,r=Object(i.a)(y.b,{id:"empty_column.favourited_statuses",defaultMessage:"You don't have any favourite toots yet. When you favourite one, it will show up here."});return b.a.createElement(v.a,{bindToDocument:!o,ref:this.setRef,name:"favourites",label:e.formatMessage(k.heading)},Object(i.a)(M.a,{icon:"star",title:e.formatMessage(k.heading),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:u,multiColumn:o,showBackButton:!0}),Object(i.a)(w.a,{trackScroll:!u,statusIds:a,scrollKey:"favourited_statuses-"+n,hasMore:s,isLoading:c,onLoadMore:this.handleLoadMore,emptyMessage:r,bindToDocument:!o}))},a}(L.a),Object(r.a)(o,"propTypes",{dispatch:j.a.func.isRequired,statusIds:O.a.list.isRequired,intl:j.a.object.isRequired,columnId:j.a.string,multiColumn:j.a.bool,hasMore:j.a.bool,isLoading:j.a.bool}),n=s))||n)||n}}]);
//# sourceMappingURL=favourited_statuses.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/favourited_statuses.js.map b/priv/static/packs/flavours/glitch/async/favourited_statuses.js.map
index 148d77388..8fbbf1484 100644
--- a/priv/static/packs/flavours/glitch/async/favourited_statuses.js.map
+++ b/priv/static/packs/flavours/glitch/async/favourited_statuses.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/favourited_statuses/index.js"],"names":["messages","defineMessages","heading","Favourites","connect","state","statusIds","getIn","isLoading","hasMore","injectIntl","props","columnId","dispatch","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","expandFavouritedStatuses","leading","componentWillMount","this","fetchFavouritedStatuses","render","intl","multiColumn","pinned","emptyMessage","id","defaultMessage","bindToDocument","ref","setRef","name","label","formatMessage","icon","title","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","trackScroll","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","string","bool"],"mappings":"uTAaMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,sDAWHC,EAFUC,mBANQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,aAAc,UACtDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,aAAc,cAAc,GACpEE,UAAWJ,EAAME,MAAM,CAAC,eAAgB,aAAc,Y,GAIvDG,a,+LAiBa,WAAO,IAAD,EACe,EAAKC,MAA5BC,EADQ,EACRA,SAAUC,EADF,EACEA,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,aAAc,Q,yCAIxB,SAACC,GAAS,IAAD,EACW,EAAKL,MAA5BC,EADY,EACZA,UACRC,EAFoB,EACFA,UACTI,YAAWL,EAAUI,O,gDAGZ,WAClB,EAAKE,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGC,KAAS,WACxB,EAAKT,MAAME,SAASQ,iBACnB,IAAK,CAAEC,SAAS,K,8CA7BnBC,mBAAA,WACEC,KAAKb,MAAME,SAASY,gB,EA8BtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKb,MAApEgB,EADA,EACAA,KAAMrB,EADN,EACMA,UAAWM,EADjB,EACiBA,SAAUgB,EAD3B,EAC2BA,YAAanB,EADxC,EACwCA,QAASD,EADjD,EACiDA,UACnDqB,IAAWjB,EAEXkB,EAAe,YAAC,IAAD,CAAkBC,GAAG,mCAAmCC,eAAe,0FAE5F,OACE,kBAAC,IAAD,CAAQC,gBAAiBL,EAAaM,IAAKV,KAAKW,OAAQC,KAAK,aAAaC,MAAOV,EAAKW,cAActC,EAASE,UAC3G,YAAC,IAAD,CACEqC,KAAK,OACLC,MAAOb,EAAKW,cAActC,EAASE,SACnCuC,MAAOjB,KAAKkB,UACZC,OAAQnB,KAAKoB,WACbC,QAASrB,KAAKsB,kBACdjB,OAAQA,EACRD,YAAaA,EACbmB,gBAAc,IAGhB,YAAC,IAAD,CACEC,aAAcnB,EACdvB,UAAWA,EACX2C,UAAS,uBAAyBrC,EAClCH,QAASA,EACTD,UAAWA,EACX0C,WAAY1B,KAAK2B,eACjBrB,aAAcA,EACdG,gBAAiBL,M,GAtEFwB,K,0BAEJ,CACjBvC,SAAUwC,IAAUC,KAAKC,WACzBjD,UAAWkD,IAAmBC,KAAKF,WACnC5B,KAAM0B,IAAUK,OAAOH,WACvB3C,SAAUyC,IAAUM,OACpB/B,YAAayB,IAAUO,KACvBnD,QAAS4C,IAAUO,KACnBpD,UAAW6C,IAAUO,O","file":"flavours/glitch/async/favourited_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport { fetchFavouritedStatuses, expandFavouritedStatuses } from 'flavours/glitch/actions/favourites';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.favourites', defaultMessage: 'Favourites' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'favourites', 'items']),\n isLoading: state.getIn(['status_lists', 'favourites', 'isLoading'], true),\n hasMore: !!state.getIn(['status_lists', 'favourites', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchFavouritedStatuses());\n }\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('FAVOURITES', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFavouritedStatuses());\n }, 300, { leading: true })\n\n render () {\n const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;\n const pinned = !!columnId;\n\n const emptyMessage = <FormattedMessage id='empty_column.favourited_statuses' defaultMessage=\"You don't have any favourite toots yet. When you favourite one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='favourites' label={intl.formatMessage(messages.heading)}>\n <ColumnHeader\n icon='star'\n title={intl.formatMessage(messages.heading)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n />\n\n <StatusList\n trackScroll={!pinned}\n statusIds={statusIds}\n scrollKey={`favourited_statuses-${columnId}`}\n hasMore={hasMore}\n isLoading={isLoading}\n onLoadMore={this.handleLoadMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/favourited_statuses/index.js"],"names":["messages","defineMessages","heading","Favourites","connect","state","statusIds","getIn","isLoading","hasMore","injectIntl","props","columnId","dispatch","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","expandFavouritedStatuses","leading","componentWillMount","this","fetchFavouritedStatuses","render","intl","multiColumn","pinned","emptyMessage","id","defaultMessage","bindToDocument","ref","setRef","name","label","formatMessage","icon","title","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","trackScroll","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","string","bool"],"mappings":"mUAaA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,sDAWHC,EAFUC,mBANQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,aAAc,UACtDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,aAAc,cAAc,GACpEE,UAAWJ,EAAME,MAAM,CAAC,eAAgB,aAAc,Y,GAIvDG,a,0NAiBa,WAAO,IAAD,EACe,EAAKC,MAA5BC,EADQ,EACRA,SAAUC,EADF,EACEA,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,aAAc,Q,yCAIxB,SAACC,GAAS,IAAD,EACW,EAAKL,MAA5BC,EADY,EACZA,UACRC,EAFoB,EACFA,UACTI,YAAWL,EAAUI,O,gDAGZ,WAClB,EAAKE,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGC,KAAS,WACxB,EAAKT,MAAME,SAASQ,iBACnB,IAAK,CAAEC,SAAS,K,6BA7BnBC,mBAAA,WACEC,KAAKb,MAAME,SAASY,gB,EA8BtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKb,MAApEgB,EADA,EACAA,KAAMrB,EADN,EACMA,UAAWM,EADjB,EACiBA,SAAUgB,EAD3B,EAC2BA,YAAanB,EADxC,EACwCA,QAASD,EADjD,EACiDA,UACnDqB,IAAWjB,EAEXkB,EAAe,YAAC,IAAD,CAAkBC,GAAG,mCAAmCC,eAAe,0FAE5F,OACE,kBAAC,IAAD,CAAQC,gBAAiBL,EAAaM,IAAKV,KAAKW,OAAQC,KAAK,aAAaC,MAAOV,EAAKW,cAActC,EAASE,UAC3G,YAAC,IAAD,CACEqC,KAAK,OACLC,MAAOb,EAAKW,cAActC,EAASE,SACnCuC,MAAOjB,KAAKkB,UACZC,OAAQnB,KAAKoB,WACbC,QAASrB,KAAKsB,kBACdjB,OAAQA,EACRD,YAAaA,EACbmB,gBAAc,IAGhB,YAAC,IAAD,CACEC,aAAcnB,EACdvB,UAAWA,EACX2C,UAAS,uBAAyBrC,EAClCH,QAASA,EACTD,UAAWA,EACX0C,WAAY1B,KAAK2B,eACjBrB,aAAcA,EACdG,gBAAiBL,M,GAtEFwB,K,0BAEJ,CACjBvC,SAAUwC,IAAUC,KAAKC,WACzBjD,UAAWkD,IAAmBC,KAAKF,WACnC5B,KAAM0B,IAAUK,OAAOH,WACvB3C,SAAUyC,IAAUM,OACpB/B,YAAayB,IAAUO,KACvBnD,QAAS4C,IAAUO,KACnBpD,UAAW6C,IAAUO,O","file":"flavours/glitch/async/favourited_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport { fetchFavouritedStatuses, expandFavouritedStatuses } from 'flavours/glitch/actions/favourites';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.favourites', defaultMessage: 'Favourites' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'favourites', 'items']),\n isLoading: state.getIn(['status_lists', 'favourites', 'isLoading'], true),\n hasMore: !!state.getIn(['status_lists', 'favourites', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n isLoading: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchFavouritedStatuses());\n }\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('FAVOURITES', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFavouritedStatuses());\n }, 300, { leading: true })\n\n render () {\n const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;\n const pinned = !!columnId;\n\n const emptyMessage = <FormattedMessage id='empty_column.favourited_statuses' defaultMessage=\"You don't have any favourite toots yet. When you favourite one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='favourites' label={intl.formatMessage(messages.heading)}>\n <ColumnHeader\n icon='star'\n title={intl.formatMessage(messages.heading)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n />\n\n <StatusList\n trackScroll={!pinned}\n statusIds={statusIds}\n scrollKey={`favourited_statuses-${columnId}`}\n hasMore={hasMore}\n isLoading={isLoading}\n onLoadMore={this.handleLoadMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/favourites.js b/priv/static/packs/flavours/glitch/async/favourites.js
index 168e30029..59b9cec75 100644
--- a/priv/static/packs/flavours/glitch/async/favourites.js
+++ b/priv/static/packs/flavours/glitch/async/favourites.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{773:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return C}));var s,o,n,r=a(0),c=a(2),i=a(7),u=a(1),d=a(3),l=a.n(d),p=a(13),h=a(5),f=a.n(h),b=a(14),m=a.n(b),j=a(299),O=a(46),v=a(466),g=a(730),y=a(23),I=a(732),w=a(6),R=a(18),M=a(1022),k=Object(w.f)({heading:{id:"column.favourited_by",defaultMessage:"Favourited by"},refresh:{id:"refresh",defaultMessage:"Refresh"}}),C=Object(p.connect)((function(t,e){return{accountIds:t.getIn(["user_lists","favourited_by",e.params.statusId])}}))(s=Object(w.g)((n=o=function(t){function e(){for(var e,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s))||this,Object(u.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(u.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(u.a)(Object(c.a)(e),"handleRefresh",(function(){e.props.dispatch(Object(O.q)(e.props.params.statusId))})),e}Object(i.a)(e,t);var a=e.prototype;return a.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(O.q)(this.props.params.statusId))},a.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(O.q)(t.params.statusId))},a.render=function(){var t=this.props,e=t.intl,a=t.accountIds,s=t.multiColumn;if(!a)return Object(r.a)(g.a,{},void 0,Object(r.a)(j.a,{}));var o=Object(r.a)(w.b,{id:"empty_column.favourites",defaultMessage:"No one has favourited this toot yet. When someone does, they will show up here."});return l.a.createElement(g.a,{ref:this.setRef},Object(r.a)(I.a,{icon:"star",title:e.formatMessage(k.heading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:s,extraButton:Object(r.a)("button",{className:"column-header__button",title:e.formatMessage(k.refresh),"aria-label":e.formatMessage(k.refresh),onClick:this.handleRefresh},void 0,Object(r.a)(y.a,{id:"refresh"}))}),Object(r.a)(M.a,{scrollKey:"favourites",emptyMessage:o,bindToDocument:!s},void 0,a.map((function(t){return Object(r.a)(v.a,{id:t,withNote:!1},t)}))))},e}(R.a),Object(u.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:m.a.list,multiColumn:f.a.bool,intl:f.a.object.isRequired}),s=n))||s)||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{799:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return C}));var s,o,n,r=a(0),c=a(2),i=(a(9),a(6),a(8)),u=a(1),d=a(3),l=a.n(d),p=a(15),h=a(5),f=a.n(h),b=a(16),m=a.n(b),j=a(305),O=a(47),v=a(471),g=a(756),y=a(25),I=a(758),w=a(7),R=a(21),M=a(1048);var k=Object(w.f)({heading:{id:"column.favourited_by",defaultMessage:"Favourited by"},refresh:{id:"refresh",defaultMessage:"Refresh"}}),C=Object(p.connect)((function(t,e){return{accountIds:t.getIn(["user_lists","favourited_by",e.params.statusId])}}))(s=Object(w.g)((n=o=function(t){Object(i.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s))||this,Object(u.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(u.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),Object(u.a)(Object(c.a)(e),"handleRefresh",(function(){e.props.dispatch(Object(O.q)(e.props.params.statusId))})),e}var s=a.prototype;return s.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(O.q)(this.props.params.statusId))},s.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(O.q)(t.params.statusId))},s.render=function(){var t=this.props,e=t.intl,a=t.accountIds,s=t.multiColumn;if(!a)return Object(r.a)(g.a,{},void 0,Object(r.a)(j.a,{}));var o=Object(r.a)(w.b,{id:"empty_column.favourites",defaultMessage:"No one has favourited this toot yet. When someone does, they will show up here."});return(l.a.createElement(g.a,{ref:this.setRef},Object(r.a)(I.a,{icon:"star",title:e.formatMessage(k.heading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:s,extraButton:Object(r.a)("button",{className:"column-header__button",title:e.formatMessage(k.refresh),"aria-label":e.formatMessage(k.refresh),onClick:this.handleRefresh},void 0,Object(r.a)(y.a,{id:"refresh"}))}),Object(r.a)(M.a,{scrollKey:"favourites",emptyMessage:o,bindToDocument:!s},void 0,a.map((function(t){return Object(r.a)(v.a,{id:t,withNote:!1},t)})))))},a}(R.a),Object(u.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:m.a.list,multiColumn:f.a.bool,intl:f.a.object.isRequired}),s=n))||s)||s}}]);
//# sourceMappingURL=favourites.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/favourites.js.map b/priv/static/packs/flavours/glitch/async/favourites.js.map
index d9b11d0cb..4819f60ec 100644
--- a/priv/static/packs/flavours/glitch/async/favourites.js.map
+++ b/priv/static/packs/flavours/glitch/async/favourites.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/favourites/index.js"],"names":["messages","defineMessages","heading","refresh","Favourites","connect","state","props","accountIds","getIn","params","statusId","injectIntl","column","scrollTop","c","dispatch","fetchFavourites","componentWillMount","this","componentWillReceiveProps","nextProps","render","intl","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","icon","title","formatMessage","onClick","handleHeaderClick","showBackButton","extraButton","className","aria-label","handleRefresh","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"sTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,0DACPC,QAAQ,CAAD,yCASHC,EAFUC,mBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,gBAAiBF,EAAMG,OAAOC,c,GAItEC,a,uMAuBqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGA,WACd,EAAKR,MAAMS,SAASC,YAAgB,EAAKV,MAAMG,OAAOC,c,8CArBxDO,mBAAA,WACOC,KAAKZ,MAAMC,YACdW,KAAKZ,MAAMS,SAASC,YAAgBE,KAAKZ,MAAMG,OAAOC,Y,EAI1DS,0BAAA,SAA2BC,GACrBA,EAAUX,OAAOC,WAAaQ,KAAKZ,MAAMG,OAAOC,UAAYU,EAAUX,OAAOC,UAC/EQ,KAAKZ,MAAMS,SAASC,YAAgBI,EAAUX,OAAOC,Y,EAgBzDW,OAAA,WAAW,IAAD,EACkCH,KAAKZ,MAAvCgB,EADA,EACAA,KAAMf,EADN,EACMA,WAAYgB,EADlB,EACkBA,YAE1B,IAAKhB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMiB,EAAe,YAAC,IAAD,CAAkBC,GAAG,0BAA0BC,eAAe,oFAEnF,OACE,kBAAC,IAAD,CAAQC,IAAKT,KAAKU,QAChB,YAAC,IAAD,CACEC,KAAK,OACLC,MAAOR,EAAKS,cAAchC,EAASE,SACnC+B,QAASd,KAAKe,kBACdC,gBAAc,EACdX,YAAaA,EACbY,YACE,sBAAQC,UAAU,wBAAwBN,MAAOR,EAAKS,cAAchC,EAASG,SAAUmC,aAAYf,EAAKS,cAAchC,EAASG,SAAU8B,QAASd,KAAKoB,oBAAvJ,EAAsK,YAAC,IAAD,CAAMb,GAAG,eAGnL,YAAC,IAAD,CACEc,UAAU,aACVf,aAAcA,EACdgB,gBAAiBjB,QAHnB,EAKGhB,EAAWkC,KAAI,SAAAhB,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIiB,UAAU,GAAtBjB,S,GAjEVkB,K,0BAEJ,CACjBlC,OAAQmC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/B1B,YAAaqB,IAAUM,KACvB5B,KAAMsB,IAAUC,OAAOC,a","file":"flavours/glitch/async/favourites.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport { fetchFavourites } from 'flavours/glitch/actions/interactions';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport Icon from 'flavours/glitch/components/icon';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.favourited_by', defaultMessage: 'Favourited by' },\n refresh: { id: 'refresh', defaultMessage: 'Refresh' },\n});\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchFavourites(this.props.params.statusId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this.props.dispatch(fetchFavourites(nextProps.params.statusId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleRefresh = () => {\n this.props.dispatch(fetchFavourites(this.props.params.statusId));\n }\n\n render () {\n const { intl, accountIds, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.favourites' defaultMessage='No one has favourited this toot yet. When someone does, they will show up here.' />;\n\n return (\n <Column ref={this.setRef}>\n <ColumnHeader\n icon='star'\n title={intl.formatMessage(messages.heading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>\n )}\n />\n <ScrollableList\n scrollKey='favourites'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/favourites/index.js"],"names":["messages","defineMessages","heading","refresh","Favourites","connect","state","props","accountIds","getIn","params","statusId","injectIntl","column","scrollTop","c","dispatch","fetchFavourites","componentWillMount","this","componentWillReceiveProps","nextProps","render","intl","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","icon","title","formatMessage","onClick","handleHeaderClick","showBackButton","extraButton","className","aria-label","handleRefresh","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"kUAcA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,0DACPC,QAAQ,CAAD,yCASHC,EAFUC,mBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,gBAAiBF,EAAMG,OAAOC,c,GAItEC,a,kOAuBqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGA,WACd,EAAKR,MAAMS,SAASC,YAAgB,EAAKV,MAAMG,OAAOC,c,6BArBxDO,mBAAA,WACOC,KAAKZ,MAAMC,YACdW,KAAKZ,MAAMS,SAASC,YAAgBE,KAAKZ,MAAMG,OAAOC,Y,EAI1DS,0BAAA,SAA2BC,GACrBA,EAAUX,OAAOC,WAAaQ,KAAKZ,MAAMG,OAAOC,UAAYU,EAAUX,OAAOC,UAC/EQ,KAAKZ,MAAMS,SAASC,YAAgBI,EAAUX,OAAOC,Y,EAgBzDW,OAAA,WAAW,IAAD,EACkCH,KAAKZ,MAAvCgB,EADA,EACAA,KAAMf,EADN,EACMA,WAAYgB,EADlB,EACkBA,YAE1B,IAAKhB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMiB,EAAe,YAAC,IAAD,CAAkBC,GAAG,0BAA0BC,eAAe,oFAEnF,OACE,kBAAC,IAAD,CAAQC,IAAKT,KAAKU,QAChB,YAAC,IAAD,CACEC,KAAK,OACLC,MAAOR,EAAKS,cAAchC,EAASE,SACnC+B,QAASd,KAAKe,kBACdC,gBAAc,EACdX,YAAaA,EACbY,YACE,sBAAQC,UAAU,wBAAwBN,MAAOR,EAAKS,cAAchC,EAASG,SAAUmC,aAAYf,EAAKS,cAAchC,EAASG,SAAU8B,QAASd,KAAKoB,oBAAvJ,EAAsK,YAAC,IAAD,CAAMb,GAAG,eAGnL,YAAC,IAAD,CACEc,UAAU,aACVf,aAAcA,EACdgB,gBAAiBjB,QAHnB,EAKGhB,EAAWkC,KAAI,SAAAhB,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIiB,UAAU,GAAtBjB,U,GAjEVkB,K,0BAEJ,CACjBlC,OAAQmC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/B1B,YAAaqB,IAAUM,KACvB5B,KAAMsB,IAAUC,OAAOC,a","file":"flavours/glitch/async/favourites.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport { fetchFavourites } from 'flavours/glitch/actions/interactions';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport Icon from 'flavours/glitch/components/icon';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.favourited_by', defaultMessage: 'Favourited by' },\n refresh: { id: 'refresh', defaultMessage: 'Refresh' },\n});\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchFavourites(this.props.params.statusId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this.props.dispatch(fetchFavourites(nextProps.params.statusId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleRefresh = () => {\n this.props.dispatch(fetchFavourites(this.props.params.statusId));\n }\n\n render () {\n const { intl, accountIds, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.favourites' defaultMessage='No one has favourited this toot yet. When someone does, they will show up here.' />;\n\n return (\n <Column ref={this.setRef}>\n <ColumnHeader\n icon='star'\n title={intl.formatMessage(messages.heading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>\n )}\n />\n <ScrollableList\n scrollKey='favourites'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/follow_requests.js b/priv/static/packs/flavours/glitch/async/follow_requests.js
index 40bde6f6f..57ed8204e 100644
--- a/priv/static/packs/flavours/glitch/async/follow_requests.js
+++ b/priv/static/packs/flavours/glitch/async/follow_requests.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{819:function(e,t,a){"use strict";a.r(t);var o,n,c,i,r,s,u=a(0),l=a(2),d=a(7),b=a(1),j=a(62),f=a.n(j),p=(a(3),a(13)),h=a(5),O=a.n(h),m=a(14),v=a.n(m),_=a(299),g=a(730),w=a(735),q=a(103),M=a(210),y=a(91),z=a(93),R=a(39),N=a(6),I=a(18),k=Object(N.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),A=Object(N.g)((c=n=function(e){function t(){return e.apply(this,arguments)||this}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.intl,a=e.account,o=e.onAuthorize,n=e.onReject,c={__html:a.get("note_emojified")};return Object(u.a)("div",{className:"account-authorize__wrapper"},void 0,Object(u.a)("div",{className:"account-authorize"},void 0,Object(u.a)(M.a,{href:a.get("url"),to:"/accounts/"+a.get("id"),className:"detailed-status__display-name"},void 0,Object(u.a)("div",{className:"account-authorize__avatar"},void 0,Object(u.a)(y.a,{account:a,size:48})),Object(u.a)(z.a,{account:a})),Object(u.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:c})),Object(u.a)("div",{className:"account--panel"},void 0,Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(R.a,{title:t.formatMessage(k.authorize),icon:"check",onClick:o})),Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(R.a,{title:t.formatMessage(k.reject),icon:"times",onClick:n}))))},t}(I.a),Object(b.a)(n,"propTypes",{account:v.a.map.isRequired,onAuthorize:O.a.func.isRequired,onReject:O.a.func.isRequired,intl:O.a.object.isRequired}),o=c))||o,C=a(22),T=Object(p.connect)((function(){var e=Object(q.d)();return function(t,a){return{account:e(t,a.id)}}}),(function(e,t){var a=t.id;return{onAuthorize:function(){e(Object(C.y)(a))},onReject:function(){e(Object(C.P)(a))}}}))(A),L=a(1022);a.d(t,"default",(function(){return J}));var D=Object(N.f)({heading:{id:"column.follow_requests",defaultMessage:"Follow requests"}}),J=Object(p.connect)((function(e){return{accountIds:e.getIn(["user_lists","follow_requests","items"]),hasMore:!!e.getIn(["user_lists","follow_requests","next"])}}))(i=Object(N.g)((s=r=function(e){function t(){for(var t,a=arguments.length,o=new Array(a),n=0;n<a;n++)o[n]=arguments[n];return t=e.call.apply(e,[this].concat(o))||this,Object(b.a)(Object(l.a)(t),"handleLoadMore",f()((function(){t.props.dispatch(Object(C.C)())}),300,{leading:!0})),t}Object(d.a)(t,e);var a=t.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(C.G)())},a.render=function(){var e=this.props,t=e.intl,a=e.accountIds,o=e.hasMore,n=e.multiColumn;if(!a)return Object(u.a)(g.a,{name:"follow-requests"},void 0,Object(u.a)(_.a,{}));var c=Object(u.a)(N.b,{id:"empty_column.follow_requests",defaultMessage:"You don't have any follow requests yet. When you receive one, it will show up here."});return Object(u.a)(g.a,{bindToDocument:!n,name:"follow-requests",icon:"user-plus",heading:t.formatMessage(D.heading)},void 0,Object(u.a)(w.a,{}),Object(u.a)(L.a,{scrollKey:"follow_requests",onLoadMore:this.handleLoadMore,hasMore:o,emptyMessage:c,bindToDocument:!n},void 0,a.map((function(e){return Object(u.a)(T,{id:e},e)}))))},t}(I.a),Object(b.a)(r,"propTypes",{params:O.a.object.isRequired,dispatch:O.a.func.isRequired,hasMore:O.a.bool,accountIds:v.a.list,intl:O.a.object.isRequired,multiColumn:O.a.bool}),i=s))||i)||i}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{846:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return J}));var o,n,c,i=a(0),s=a(2),u=(a(9),a(6),a(8)),r=a(1),l=a(65),d=a.n(l),b=(a(3),a(15)),f=a(5),j=a.n(f),p=a(16),h=a.n(p),m=a(305),O=a(756),v=a(761),_=a(108),g=a(214),w=a(96),q=a(98),y=a(41),M=a(7),k=a(21);var z,R,N,I=Object(M.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),A=Object(M.g)((c=n=function(e){Object(u.a)(a,e);var t;t=a;function a(){return e.apply(this,arguments)||this}return a.prototype.render=function(){var e=this.props,t=e.intl,a=e.account,o=e.onAuthorize,n=e.onReject,c={__html:a.get("note_emojified")};return Object(i.a)("div",{className:"account-authorize__wrapper"},void 0,Object(i.a)("div",{className:"account-authorize"},void 0,Object(i.a)(g.a,{href:a.get("url"),to:"/accounts/"+a.get("id"),className:"detailed-status__display-name"},void 0,Object(i.a)("div",{className:"account-authorize__avatar"},void 0,Object(i.a)(w.a,{account:a,size:48})),Object(i.a)(q.a,{account:a})),Object(i.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:c})),Object(i.a)("div",{className:"account--panel"},void 0,Object(i.a)("div",{className:"account--panel__button"},void 0,Object(i.a)(y.a,{title:t.formatMessage(I.authorize),icon:"check",onClick:o})),Object(i.a)("div",{className:"account--panel__button"},void 0,Object(i.a)(y.a,{title:t.formatMessage(I.reject),icon:"times",onClick:n}))))},a}(k.a),Object(r.a)(n,"propTypes",{account:h.a.map.isRequired,onAuthorize:j.a.func.isRequired,onReject:j.a.func.isRequired,intl:j.a.object.isRequired}),o=c))||o,C=a(24),T=Object(b.connect)((function(){var e=Object(_.d)();return function(t,a){return{account:e(t,a.id)}}}),(function(e,t){var a=t.id;return{onAuthorize:function(){e(Object(C.y)(a))},onReject:function(){e(Object(C.P)(a))}}}))(A),L=a(1048),x=a(18);var D=Object(M.f)({heading:{id:"column.follow_requests",defaultMessage:"Follow requests"}}),J=Object(b.connect)((function(e){return{accountIds:e.getIn(["user_lists","follow_requests","items"]),hasMore:!!e.getIn(["user_lists","follow_requests","next"]),locked:!!e.getIn(["accounts",x.m,"locked"]),domain:e.getIn(["meta","domain"])}}))(z=Object(M.g)((N=R=function(e){Object(u.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,o=new Array(a),n=0;n<a;n++)o[n]=arguments[n];return t=e.call.apply(e,[this].concat(o))||this,Object(r.a)(Object(s.a)(t),"handleLoadMore",d()((function(){t.props.dispatch(Object(C.C)())}),300,{leading:!0})),t}var o=a.prototype;return o.componentWillMount=function(){this.props.dispatch(Object(C.G)())},o.render=function(){var e=this.props,t=e.intl,a=e.accountIds,o=e.hasMore,n=e.multiColumn,c=e.locked,s=e.domain;if(!a)return Object(i.a)(O.a,{name:"follow-requests"},void 0,Object(i.a)(m.a,{}));var u=Object(i.a)(M.b,{id:"empty_column.follow_requests",defaultMessage:"You don't have any follow requests yet. When you receive one, it will show up here."}),r=c?null:Object(i.a)("div",{className:"follow_requests-unlocked_explanation"},void 0,Object(i.a)(M.b,{id:"follow_requests.unlocked_explanation",defaultMessage:"Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",values:{domain:s}}));return Object(i.a)(O.a,{bindToDocument:!n,name:"follow-requests",icon:"user-plus",heading:t.formatMessage(D.heading)},void 0,Object(i.a)(v.a,{}),Object(i.a)(L.a,{scrollKey:"follow_requests",onLoadMore:this.handleLoadMore,hasMore:o,emptyMessage:u,bindToDocument:!n,prepend:r},void 0,a.map((function(e){return Object(i.a)(T,{id:e},e)}))))},a}(k.a),Object(r.a)(R,"propTypes",{params:j.a.object.isRequired,dispatch:j.a.func.isRequired,hasMore:j.a.bool,accountIds:h.a.list,locked:j.a.bool,domain:j.a.string,intl:j.a.object.isRequired,multiColumn:j.a.bool}),z=N))||z)||z}}]);
//# sourceMappingURL=follow_requests.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/follow_requests.js.map b/priv/static/packs/flavours/glitch/async/follow_requests.js.map
index 9b3fcd854..c0a2db075 100644
--- a/priv/static/packs/flavours/glitch/async/follow_requests.js.map
+++ b/priv/static/packs/flavours/glitch/async/follow_requests.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/containers/account_authorize_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/index.js"],"names":["messages","defineMessages","authorize","reject","AccountAuthorize","injectIntl","render","this","props","intl","account","onAuthorize","onReject","content","__html","get","className","href","to","size","dangerouslySetInnerHTML","title","formatMessage","icon","onClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","func","object","connect","getAccount","makeGetAccount","state","id","dispatch","authorizeFollowRequest","rejectFollowRequest","heading","FollowRequests","accountIds","getIn","hasMore","expandFollowRequests","leading","componentWillMount","fetchFollowRequests","multiColumn","name","emptyMessage","defaultMessage","bindToDocument","scrollKey","onLoadMore","handleLoadMore","params","bool","list"],"mappings":"mSAUMA,EAAWC,YAAe,CAC9BC,UAAU,CAAD,0DACTC,OAAO,CAAD,sDAIFC,EADUC,a,sGAUdC,OAAA,WAAW,IAAD,EACyCC,KAAKC,MAA9CC,EADA,EACAA,KAAMC,EADN,EACMA,QAASC,EADf,EACeA,YAAaC,EAD5B,EAC4BA,SAC9BC,EAAU,CAAEC,OAAQJ,EAAQK,IAAI,mBAEtC,OACE,mBAAKC,UAAU,mCAAf,EACE,mBAAKA,UAAU,0BAAf,EACE,YAAC,IAAD,CAAWC,KAAMP,EAAQK,IAAI,OAAQG,GAAE,aAAeR,EAAQK,IAAI,MAASC,UAAU,sCAArF,EACE,mBAAKA,UAAU,kCAAf,EAA2C,YAAC,IAAD,CAAQN,QAASA,EAASS,KAAM,MAC3E,YAAC,IAAD,CAAaT,QAASA,KAGxB,mBAAKM,UAAU,2BAA2BI,wBAAyBP,KAGrE,mBAAKG,UAAU,uBAAf,EACE,mBAAKA,UAAU,+BAAf,EAAwC,YAAC,IAAD,CAAYK,MAAOZ,EAAKa,cAActB,EAASE,WAAYqB,KAAK,QAAQC,QAASb,KACzH,mBAAKK,UAAU,+BAAf,EAAwC,YAAC,IAAD,CAAYK,MAAOZ,EAAKa,cAActB,EAASG,QAASoB,KAAK,QAAQC,QAASZ,Q,GA1BjGa,K,0BAEV,CACjBf,QAASgB,IAAmBC,IAAIC,WAChCjB,YAAakB,IAAUC,KAAKF,WAC5BhB,SAAUiB,IAAUC,KAAKF,WACzBnB,KAAMoB,IAAUE,OAAOH,a,iBCGZI,qBApBa,WAC1B,IAAMC,EAAaC,cAMnB,OAJwB,SAACC,EAAO3B,GAAR,MAAmB,CACzCE,QAASuB,EAAWE,EAAO3B,EAAM4B,SAMV,SAACC,EAAD,OAAaD,EAAb,EAAaA,GAAb,MAAuB,CAChDzB,YADgD,WAE9C0B,EAASC,YAAuBF,KAGlCxB,SALgD,WAM9CyB,EAASE,YAAoBH,QAIlBJ,CAAiD5B,G,kDCXhE,IAAMJ,EAAWC,YAAe,CAC9BuC,QAAQ,CAAD,gEAUHC,EAFUT,mBALQ,SAAAG,GAAK,MAAK,CAChCO,WAAYP,EAAMQ,MAAM,CAAC,aAAc,kBAAmB,UAC1DC,UAAWT,EAAMQ,MAAM,CAAC,aAAc,kBAAmB,Y,GAI1DtC,a,mMAgBkB,KAAS,WACxB,EAAKG,MAAM6B,SAASQ,iBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACExC,KAAKC,MAAM6B,SAASW,gB,EAOtB1C,OAAA,WAAW,IAAD,EAC2CC,KAAKC,MAAhDC,EADA,EACAA,KAAMiC,EADN,EACMA,WAAYE,EADlB,EACkBA,QAASK,EAD3B,EAC2BA,YAEnC,IAAKP,EACH,OACE,YAAC,IAAD,CAAQQ,KAAK,wBAAb,EACE,YAAC,IAAD,KAKN,IAAMC,EAAe,YAAC,IAAD,CAAkBf,GAAG,+BAA+BgB,eAAe,wFAExF,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaC,KAAK,kBAAkB3B,KAAK,YAAYiB,QAAS/B,EAAKa,cAActB,EAASwC,eAAnH,EACE,YAAC,IAAD,IAEA,YAAC,IAAD,CACEc,UAAU,kBACVC,WAAYhD,KAAKiD,eACjBZ,QAASA,EACTO,aAAcA,EACdE,gBAAiBJ,QALnB,EAOGP,EAAWf,KAAI,SAAAS,GAAE,OAChB,YAAC,EAAD,CAAoCA,GAAIA,GAARA,S,GA5CfX,K,0BAER,CACjBgC,OAAQ5B,IAAUE,OAAOH,WACzBS,SAAUR,IAAUC,KAAKF,WACzBgB,QAASf,IAAU6B,KACnBhB,WAAYhB,IAAmBiC,KAC/BlD,KAAMoB,IAAUE,OAAOH,WACvBqB,YAAapB,IAAU6B,O","file":"flavours/glitch/async/follow_requests.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },\n reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },\n});\n\nexport default @injectIntl\nclass AccountAuthorize extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n onAuthorize: PropTypes.func.isRequired,\n onReject: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { intl, account, onAuthorize, onReject } = this.props;\n const content = { __html: account.get('note_emojified') };\n\n return (\n <div className='account-authorize__wrapper'>\n <div className='account-authorize'>\n <Permalink href={account.get('url')} to={`/accounts/${account.get('id')}`} className='detailed-status__display-name'>\n <div className='account-authorize__avatar'><Avatar account={account} size={48} /></div>\n <DisplayName account={account} />\n </Permalink>\n\n <div className='account__header__content' dangerouslySetInnerHTML={content} />\n </div>\n\n <div className='account--panel'>\n <div className='account--panel__button'><IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} /></div>\n <div className='account--panel__button'><IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} /></div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport AccountAuthorize from '../components/account_authorize';\nimport { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, props) => ({\n account: getAccount(state, props.id),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { id }) => ({\n onAuthorize () {\n dispatch(authorizeFollowRequest(id));\n },\n\n onReject () {\n dispatch(rejectFollowRequest(id));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(AccountAuthorize);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountAuthorizeContainer from './containers/account_authorize_container';\nimport { fetchFollowRequests, expandFollowRequests } from 'flavours/glitch/actions/accounts';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'follow_requests', 'items']),\n hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass FollowRequests extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchFollowRequests());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowRequests());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column name='follow-requests'>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage=\"You don't have any follow requests yet. When you receive one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} name='follow-requests' icon='user-plus' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <ScrollableList\n scrollKey='follow_requests'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountAuthorizeContainer key={id} id={id} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/containers/account_authorize_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/follow_requests/index.js"],"names":["messages","defineMessages","authorize","reject","AccountAuthorize","injectIntl","render","this","props","intl","account","onAuthorize","onReject","content","__html","get","className","href","to","size","dangerouslySetInnerHTML","title","formatMessage","icon","onClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","func","object","connect","getAccount","makeGetAccount","state","id","dispatch","authorizeFollowRequest","rejectFollowRequest","heading","FollowRequests","accountIds","getIn","hasMore","locked","me","domain","expandFollowRequests","leading","componentWillMount","fetchFollowRequests","multiColumn","name","emptyMessage","defaultMessage","unlockedPrependMessage","values","bindToDocument","scrollKey","onLoadMore","handleLoadMore","prepend","params","bool","list","string"],"mappings":"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","file":"flavours/glitch/async/follow_requests.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },\n reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },\n});\n\nexport default @injectIntl\nclass AccountAuthorize extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n onAuthorize: PropTypes.func.isRequired,\n onReject: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { intl, account, onAuthorize, onReject } = this.props;\n const content = { __html: account.get('note_emojified') };\n\n return (\n <div className='account-authorize__wrapper'>\n <div className='account-authorize'>\n <Permalink href={account.get('url')} to={`/accounts/${account.get('id')}`} className='detailed-status__display-name'>\n <div className='account-authorize__avatar'><Avatar account={account} size={48} /></div>\n <DisplayName account={account} />\n </Permalink>\n\n <div className='account__header__content' dangerouslySetInnerHTML={content} />\n </div>\n\n <div className='account--panel'>\n <div className='account--panel__button'><IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} /></div>\n <div className='account--panel__button'><IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} /></div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport AccountAuthorize from '../components/account_authorize';\nimport { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, props) => ({\n account: getAccount(state, props.id),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { id }) => ({\n onAuthorize () {\n dispatch(authorizeFollowRequest(id));\n },\n\n onReject () {\n dispatch(rejectFollowRequest(id));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(AccountAuthorize);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountAuthorizeContainer from './containers/account_authorize_container';\nimport { fetchFollowRequests, expandFollowRequests } from 'flavours/glitch/actions/accounts';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport { me } from 'flavours/glitch/util/initial_state';\n\nconst messages = defineMessages({\n heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'follow_requests', 'items']),\n hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']),\n locked: !!state.getIn(['accounts', me, 'locked']),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass FollowRequests extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n locked: PropTypes.bool,\n domain: PropTypes.string,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchFollowRequests());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowRequests());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn, locked, domain } = this.props;\n\n if (!accountIds) {\n return (\n <Column name='follow-requests'>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage=\"You don't have any follow requests yet. When you receive one, it will show up here.\" />;\n const unlockedPrependMessage = locked ? null : (\n <div className='follow_requests-unlocked_explanation'>\n <FormattedMessage\n id='follow_requests.unlocked_explanation'\n defaultMessage='Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.'\n values={{ domain: domain }}\n />\n </div>\n );\n\n return (\n <Column bindToDocument={!multiColumn} name='follow-requests' icon='user-plus' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <ScrollableList\n scrollKey='follow_requests'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n prepend={unlockedPrependMessage}\n >\n {accountIds.map(id =>\n <AccountAuthorizeContainer key={id} id={id} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/followers.js b/priv/static/packs/flavours/glitch/async/followers.js
index de0905eb3..fdb647ef2 100644
--- a/priv/static/packs/flavours/glitch/async/followers.js
+++ b/priv/static/packs/flavours/glitch/async/followers.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{770:function(t,a,c){"use strict";c.r(a),c.d(a,"default",(function(){return T}));var o,e,n,s=c(0),r=c(2),p=c(7),i=c(1),u=c(62),l=c.n(u),d=c(3),h=c.n(d),b=c(13),m=c(5),f=c.n(m),j=c(14),O=c.n(j),I=c(299),w=c(22),M=c(6),g=c(466),v=c(730),y=c(1052),C=c(1056),H=c(18),k=c(1029),R=c(1022),T=Object(b.connect)((function(t,a){return{isAccount:!!t.getIn(["accounts",a.params.accountId]),accountIds:t.getIn(["user_lists","followers",a.params.accountId,"items"]),hasMore:!!t.getIn(["user_lists","followers",a.params.accountId,"next"])}}))((n=e=function(t){function a(){for(var a,c=arguments.length,o=new Array(c),e=0;e<c;e++)o[e]=arguments[e];return a=t.call.apply(t,[this].concat(o))||this,Object(i.a)(Object(r.a)(a),"handleHeaderClick",(function(){a.column.scrollTop()})),Object(i.a)(Object(r.a)(a),"handleScroll",(function(t){var c=t.target;c.scrollTop===c.scrollHeight-c.clientHeight&&a.props.hasMore&&a.props.dispatch(Object(w.D)(a.props.params.accountId))})),Object(i.a)(Object(r.a)(a),"handleLoadMore",l()((function(){a.props.dispatch(Object(w.D)(a.props.params.accountId))}),300,{leading:!0})),Object(i.a)(Object(r.a)(a),"setRef",(function(t){a.column=t})),a}Object(p.a)(a,t);var c=a.prototype;return c.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(w.F)(this.props.params.accountId)),this.props.dispatch(Object(w.H)(this.props.params.accountId)))},c.componentWillReceiveProps=function(t){t.params.accountId!==this.props.params.accountId&&t.params.accountId&&(this.props.dispatch(Object(w.F)(t.params.accountId)),this.props.dispatch(Object(w.H)(t.params.accountId)))},c.render=function(){var t=this.props,a=t.accountIds,c=t.hasMore,o=t.isAccount,e=t.multiColumn;if(!o)return Object(s.a)(v.a,{},void 0,Object(s.a)(k.a,{}));if(!a)return Object(s.a)(v.a,{},void 0,Object(s.a)(I.a,{}));var n=Object(s.a)(M.b,{id:"account.followers.empty",defaultMessage:"No one follows this user yet."});return h.a.createElement(v.a,{ref:this.setRef},Object(s.a)(y.a,{onClick:this.handleHeaderClick,multiColumn:e}),Object(s.a)(R.a,{scrollKey:"followers",hasMore:c,onLoadMore:this.handleLoadMore,prepend:Object(s.a)(C.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:n,bindToDocument:!e},void 0,a.map((function(t){return Object(s.a)(g.a,{id:t,withNote:!1},t)}))))},a}(H.a),Object(i.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:O.a.list,hasMore:f.a.bool,isAccount:f.a.bool,multiColumn:f.a.bool}),o=n))||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{796:function(t,a,c){"use strict";c.r(a),c.d(a,"default",(function(){return T}));var o,e,n,s=c(0),r=c(2),p=(c(9),c(6),c(8)),i=c(1),u=c(65),l=c.n(u),d=c(3),h=c.n(d),b=c(15),m=c(5),f=c.n(m),j=c(16),O=c.n(j),I=c(305),w=c(24),v=c(7),M=c(471),g=c(756),y=c(1079),C=c(1083),H=c(21),k=c(1056),R=c(1048);var T=Object(b.connect)((function(t,a){return{isAccount:!!t.getIn(["accounts",a.params.accountId]),accountIds:t.getIn(["user_lists","followers",a.params.accountId,"items"]),hasMore:!!t.getIn(["user_lists","followers",a.params.accountId,"next"])}}))((n=e=function(t){Object(p.a)(c,t);var a;a=c;function c(){for(var a,c=arguments.length,o=new Array(c),e=0;e<c;e++)o[e]=arguments[e];return a=t.call.apply(t,[this].concat(o))||this,Object(i.a)(Object(r.a)(a),"handleHeaderClick",(function(){a.column.scrollTop()})),Object(i.a)(Object(r.a)(a),"handleScroll",(function(t){var c=t.target;c.scrollTop===c.scrollHeight-c.clientHeight&&a.props.hasMore&&a.props.dispatch(Object(w.D)(a.props.params.accountId))})),Object(i.a)(Object(r.a)(a),"handleLoadMore",l()((function(){a.props.dispatch(Object(w.D)(a.props.params.accountId))}),300,{leading:!0})),Object(i.a)(Object(r.a)(a),"setRef",(function(t){a.column=t})),a}var o=c.prototype;return o.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(w.F)(this.props.params.accountId)),this.props.dispatch(Object(w.H)(this.props.params.accountId)))},o.componentWillReceiveProps=function(t){t.params.accountId!==this.props.params.accountId&&t.params.accountId&&(this.props.dispatch(Object(w.F)(t.params.accountId)),this.props.dispatch(Object(w.H)(t.params.accountId)))},o.render=function(){var t=this.props,a=t.accountIds,c=t.hasMore,o=t.isAccount,e=t.multiColumn;if(!o)return Object(s.a)(g.a,{},void 0,Object(s.a)(k.a,{}));if(!a)return Object(s.a)(g.a,{},void 0,Object(s.a)(I.a,{}));var n=Object(s.a)(v.b,{id:"account.followers.empty",defaultMessage:"No one follows this user yet."});return(h.a.createElement(g.a,{ref:this.setRef},Object(s.a)(y.a,{onClick:this.handleHeaderClick,multiColumn:e}),Object(s.a)(R.a,{scrollKey:"followers",hasMore:c,onLoadMore:this.handleLoadMore,prepend:Object(s.a)(C.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:n,bindToDocument:!e},void 0,a.map((function(t){return Object(s.a)(M.a,{id:t,withNote:!1},t)})))))},c}(H.a),Object(i.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:O.a.list,hasMore:f.a.bool,isAccount:f.a.bool,multiColumn:f.a.bool}),o=n))||o}}]);
//# sourceMappingURL=followers.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/followers.js.map b/priv/static/packs/flavours/glitch/async/followers.js.map
index 89f1588f9..cc1470d15 100644
--- a/priv/static/packs/flavours/glitch/async/followers.js.map
+++ b/priv/static/packs/flavours/glitch/async/followers.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/followers/index.js"],"names":["Followers","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","column","scrollTop","e","target","scrollHeight","clientHeight","dispatch","expandFollowers","leading","c","componentWillMount","this","fetchAccount","fetchFollowers","componentWillReceiveProps","nextProps","render","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","onClick","handleHeaderClick","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"oVA2BMA,EADUC,mBANQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,YAAaF,EAAMG,MAAM,CAAC,WAAYF,EAAMG,OAAOC,YACnDC,WAAYN,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,UAC5EE,UAAWP,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,Y,yMA6BvD,WAClB,EAAKG,OAAOC,e,2CAGC,SAACC,GAAO,IAAD,EAC8BA,EAAEC,OADhC,EACZF,YADY,EACDG,aADC,EACaC,cAEgB,EAAKZ,MAAMM,SAC1D,EAAKN,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,e,4CAIzC,KAAS,WACxB,EAAKJ,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,cACrD,IAAK,CAAEW,SAAS,K,qCAEV,SAAAC,GACP,EAAKT,OAASS,K,8CA/BhBC,mBAAA,WACOC,KAAKlB,MAAMK,aACda,KAAKlB,MAAMa,SAASM,YAAaD,KAAKlB,MAAMG,OAAOC,YACnDc,KAAKlB,MAAMa,SAASO,YAAeF,KAAKlB,MAAMG,OAAOC,c,EAIzDiB,0BAAA,SAA2BC,GACrBA,EAAUnB,OAAOC,YAAcc,KAAKlB,MAAMG,OAAOC,WAAakB,EAAUnB,OAAOC,YACjFc,KAAKlB,MAAMa,SAASM,YAAaG,EAAUnB,OAAOC,YAClDc,KAAKlB,MAAMa,SAASO,YAAeE,EAAUnB,OAAOC,c,EAwBxDmB,OAAA,WAAW,IAAD,EACgDL,KAAKlB,MAArDK,EADA,EACAA,WAAYC,EADZ,EACYA,QAASL,EADrB,EACqBA,UAAWuB,EADhC,EACgCA,YAExC,IAAKvB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMoB,EAAe,YAAC,IAAD,CAAkBC,GAAG,0BAA0BC,eAAe,kCAEnF,OACE,kBAAC,IAAD,CAAQC,IAAKV,KAAKW,QAChB,YAAC,IAAD,CAAqBC,QAASZ,KAAKa,kBAAmBP,YAAaA,IAEnE,YAAC,IAAD,CACEQ,UAAU,YACV1B,QAASA,EACT2B,WAAYf,KAAKgB,eACjBC,QAAS,YAAC,IAAD,CAAiB/B,UAAWc,KAAKlB,MAAMG,OAAOC,UAAWgC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,EACda,gBAAiBd,QAPnB,EASGnB,EAAWkC,KAAI,SAAAb,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIc,UAAU,GAAtBd,S,GAhFXe,K,0BAEH,CACjBtC,OAAQuC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/BzC,QAASoC,IAAUM,KACnB/C,UAAWyC,IAAUM,KACrBxB,YAAakB,IAAUM,O","file":"flavours/glitch/async/followers.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowers,\n expandFollowers,\n} from 'flavours/glitch/actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),\n hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),\n});\n\nexport default @connect(mapStateToProps)\nclass Followers extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowers(this.props.params.accountId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchFollowers(nextProps.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n\n if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }, 300, { leading: true });\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { accountIds, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;\n\n return (\n <Column ref={this.setRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='followers'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/followers/index.js"],"names":["Followers","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","column","scrollTop","e","target","scrollHeight","clientHeight","dispatch","expandFollowers","leading","c","componentWillMount","this","fetchAccount","fetchFollowers","componentWillReceiveProps","nextProps","render","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","onClick","handleHeaderClick","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"gWAoBA,IAOMA,EADUC,mBANQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,YAAaF,EAAMG,MAAM,CAAC,WAAYF,EAAMG,OAAOC,YACnDC,WAAYN,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,UAC5EE,UAAWP,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,Y,oOA6BvD,WAClB,EAAKG,OAAOC,e,2CAGC,SAACC,GAAO,IAAD,EAC8BA,EAAEC,OADhC,EACZF,YADY,EACDG,aADC,EACaC,cAEgB,EAAKZ,MAAMM,SAC1D,EAAKN,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,e,4CAIzC,KAAS,WACxB,EAAKJ,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,cACrD,IAAK,CAAEW,SAAS,K,qCAEV,SAAAC,GACP,EAAKT,OAASS,K,6BA/BhBC,mBAAA,WACOC,KAAKlB,MAAMK,aACda,KAAKlB,MAAMa,SAASM,YAAaD,KAAKlB,MAAMG,OAAOC,YACnDc,KAAKlB,MAAMa,SAASO,YAAeF,KAAKlB,MAAMG,OAAOC,c,EAIzDiB,0BAAA,SAA2BC,GACrBA,EAAUnB,OAAOC,YAAcc,KAAKlB,MAAMG,OAAOC,WAAakB,EAAUnB,OAAOC,YACjFc,KAAKlB,MAAMa,SAASM,YAAaG,EAAUnB,OAAOC,YAClDc,KAAKlB,MAAMa,SAASO,YAAeE,EAAUnB,OAAOC,c,EAwBxDmB,OAAA,WAAW,IAAD,EACgDL,KAAKlB,MAArDK,EADA,EACAA,WAAYC,EADZ,EACYA,QAASL,EADrB,EACqBA,UAAWuB,EADhC,EACgCA,YAExC,IAAKvB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMoB,EAAe,YAAC,IAAD,CAAkBC,GAAG,0BAA0BC,eAAe,kCAEnF,OACE,kBAAC,IAAD,CAAQC,IAAKV,KAAKW,QAChB,YAAC,IAAD,CAAqBC,QAASZ,KAAKa,kBAAmBP,YAAaA,IAEnE,YAAC,IAAD,CACEQ,UAAU,YACV1B,QAASA,EACT2B,WAAYf,KAAKgB,eACjBC,QAAS,YAAC,IAAD,CAAiB/B,UAAWc,KAAKlB,MAAMG,OAAOC,UAAWgC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,EACda,gBAAiBd,QAPnB,EASGnB,EAAWkC,KAAI,SAAAb,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIc,UAAU,GAAtBd,U,GAhFXe,K,0BAEH,CACjBtC,OAAQuC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/BzC,QAASoC,IAAUM,KACnB/C,UAAWyC,IAAUM,KACrBxB,YAAakB,IAAUM,O","file":"flavours/glitch/async/followers.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowers,\n expandFollowers,\n} from 'flavours/glitch/actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),\n hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),\n});\n\nexport default @connect(mapStateToProps)\nclass Followers extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowers(this.props.params.accountId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchFollowers(nextProps.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n\n if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }, 300, { leading: true });\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { accountIds, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;\n\n return (\n <Column ref={this.setRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='followers'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/following.js b/priv/static/packs/flavours/glitch/async/following.js
index 98589dd95..60f78c45c 100644
--- a/priv/static/packs/flavours/glitch/async/following.js
+++ b/priv/static/packs/flavours/glitch/async/following.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{771:function(t,a,c){"use strict";c.r(a),c.d(a,"default",(function(){return A}));var o,e,n,s=c(0),r=c(2),i=c(7),p=c(1),u=c(62),l=c.n(u),d=c(3),h=c.n(d),b=c(13),m=c(5),f=c.n(m),j=c(14),O=c.n(j),I=c(299),w=c(22),g=c(6),M=c(466),v=c(730),y=c(1052),C=c(1056),T=c(18),k=c(1029),R=c(1022),A=Object(b.connect)((function(t,a){return{isAccount:!!t.getIn(["accounts",a.params.accountId]),accountIds:t.getIn(["user_lists","following",a.params.accountId,"items"]),hasMore:!!t.getIn(["user_lists","following",a.params.accountId,"next"])}}))((n=e=function(t){function a(){for(var a,c=arguments.length,o=new Array(c),e=0;e<c;e++)o[e]=arguments[e];return a=t.call.apply(t,[this].concat(o))||this,Object(p.a)(Object(r.a)(a),"handleHeaderClick",(function(){a.column.scrollTop()})),Object(p.a)(Object(r.a)(a),"handleScroll",(function(t){var c=t.target;c.scrollTop===c.scrollHeight-c.clientHeight&&a.props.hasMore&&a.props.dispatch(Object(w.E)(a.props.params.accountId))})),Object(p.a)(Object(r.a)(a),"handleLoadMore",l()((function(){a.props.dispatch(Object(w.E)(a.props.params.accountId))}),300,{leading:!0})),Object(p.a)(Object(r.a)(a),"setRef",(function(t){a.column=t})),a}Object(i.a)(a,t);var c=a.prototype;return c.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(w.F)(this.props.params.accountId)),this.props.dispatch(Object(w.I)(this.props.params.accountId)))},c.componentWillReceiveProps=function(t){t.params.accountId!==this.props.params.accountId&&t.params.accountId&&(this.props.dispatch(Object(w.F)(t.params.accountId)),this.props.dispatch(Object(w.I)(t.params.accountId)))},c.render=function(){var t=this.props,a=t.accountIds,c=t.hasMore,o=t.isAccount,e=t.multiColumn;if(!o)return Object(s.a)(v.a,{},void 0,Object(s.a)(k.a,{}));if(!a)return Object(s.a)(v.a,{},void 0,Object(s.a)(I.a,{}));var n=Object(s.a)(g.b,{id:"account.follows.empty",defaultMessage:"This user doesn't follow anyone yet."});return h.a.createElement(v.a,{ref:this.setRef},Object(s.a)(y.a,{onClick:this.handleHeaderClick,multiColumn:e}),Object(s.a)(R.a,{scrollKey:"following",hasMore:c,onLoadMore:this.handleLoadMore,prepend:Object(s.a)(C.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:n,bindToDocument:!e},void 0,a.map((function(t){return Object(s.a)(M.a,{id:t,withNote:!1},t)}))))},a}(T.a),Object(p.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:O.a.list,hasMore:f.a.bool,isAccount:f.a.bool,multiColumn:f.a.bool}),o=n))||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{797:function(a,t,c){"use strict";c.r(t),c.d(t,"default",(function(){return A}));var o,e,n,s=c(0),r=c(2),i=(c(9),c(6),c(8)),p=c(1),u=c(65),l=c.n(u),d=c(3),h=c.n(d),b=c(15),m=c(5),f=c.n(m),j=c(16),O=c.n(j),I=c(305),w=c(24),g=c(7),v=c(471),M=c(756),y=c(1079),C=c(1083),T=c(21),k=c(1056),R=c(1048);var A=Object(b.connect)((function(a,t){return{isAccount:!!a.getIn(["accounts",t.params.accountId]),accountIds:a.getIn(["user_lists","following",t.params.accountId,"items"]),hasMore:!!a.getIn(["user_lists","following",t.params.accountId,"next"])}}))((n=e=function(a){Object(i.a)(c,a);var t;t=c;function c(){for(var t,c=arguments.length,o=new Array(c),e=0;e<c;e++)o[e]=arguments[e];return t=a.call.apply(a,[this].concat(o))||this,Object(p.a)(Object(r.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(p.a)(Object(r.a)(t),"handleScroll",(function(a){var c=a.target;c.scrollTop===c.scrollHeight-c.clientHeight&&t.props.hasMore&&t.props.dispatch(Object(w.E)(t.props.params.accountId))})),Object(p.a)(Object(r.a)(t),"handleLoadMore",l()((function(){t.props.dispatch(Object(w.E)(t.props.params.accountId))}),300,{leading:!0})),Object(p.a)(Object(r.a)(t),"setRef",(function(a){t.column=a})),t}var o=c.prototype;return o.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(w.F)(this.props.params.accountId)),this.props.dispatch(Object(w.I)(this.props.params.accountId)))},o.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(w.F)(a.params.accountId)),this.props.dispatch(Object(w.I)(a.params.accountId)))},o.render=function(){var a=this.props,t=a.accountIds,c=a.hasMore,o=a.isAccount,e=a.multiColumn;if(!o)return Object(s.a)(M.a,{},void 0,Object(s.a)(k.a,{}));if(!t)return Object(s.a)(M.a,{},void 0,Object(s.a)(I.a,{}));var n=Object(s.a)(g.b,{id:"account.follows.empty",defaultMessage:"This user doesn't follow anyone yet."});return(h.a.createElement(M.a,{ref:this.setRef},Object(s.a)(y.a,{onClick:this.handleHeaderClick,multiColumn:e}),Object(s.a)(R.a,{scrollKey:"following",hasMore:c,onLoadMore:this.handleLoadMore,prepend:Object(s.a)(C.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:n,bindToDocument:!e},void 0,t.map((function(a){return Object(s.a)(v.a,{id:a,withNote:!1},a)})))))},c}(T.a),Object(p.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,accountIds:O.a.list,hasMore:f.a.bool,isAccount:f.a.bool,multiColumn:f.a.bool}),o=n))||o}}]);
//# sourceMappingURL=following.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/following.js.map b/priv/static/packs/flavours/glitch/async/following.js.map
index 66ded9c53..7fff787bb 100644
--- a/priv/static/packs/flavours/glitch/async/following.js.map
+++ b/priv/static/packs/flavours/glitch/async/following.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/following/index.js"],"names":["Following","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","column","scrollTop","e","target","scrollHeight","clientHeight","dispatch","expandFollowing","leading","c","componentWillMount","this","fetchAccount","fetchFollowing","componentWillReceiveProps","nextProps","render","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","onClick","handleHeaderClick","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"oVA2BMA,EADUC,mBANQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,YAAaF,EAAMG,MAAM,CAAC,WAAYF,EAAMG,OAAOC,YACnDC,WAAYN,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,UAC5EE,UAAWP,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,Y,yMA6BvD,WAClB,EAAKG,OAAOC,e,2CAGC,SAACC,GAAO,IAAD,EAC8BA,EAAEC,OADhC,EACZF,YADY,EACDG,aADC,EACaC,cAEgB,EAAKZ,MAAMM,SAC1D,EAAKN,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,e,4CAIzC,KAAS,WACxB,EAAKJ,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,cACrD,IAAK,CAAEW,SAAS,K,qCAEV,SAAAC,GACP,EAAKT,OAASS,K,8CA/BhBC,mBAAA,WACOC,KAAKlB,MAAMK,aACda,KAAKlB,MAAMa,SAASM,YAAaD,KAAKlB,MAAMG,OAAOC,YACnDc,KAAKlB,MAAMa,SAASO,YAAeF,KAAKlB,MAAMG,OAAOC,c,EAIzDiB,0BAAA,SAA2BC,GACrBA,EAAUnB,OAAOC,YAAcc,KAAKlB,MAAMG,OAAOC,WAAakB,EAAUnB,OAAOC,YACjFc,KAAKlB,MAAMa,SAASM,YAAaG,EAAUnB,OAAOC,YAClDc,KAAKlB,MAAMa,SAASO,YAAeE,EAAUnB,OAAOC,c,EAwBxDmB,OAAA,WAAW,IAAD,EACgDL,KAAKlB,MAArDK,EADA,EACAA,WAAYC,EADZ,EACYA,QAASL,EADrB,EACqBA,UAAWuB,EADhC,EACgCA,YAExC,IAAKvB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMoB,EAAe,YAAC,IAAD,CAAkBC,GAAG,wBAAwBC,eAAe,yCAEjF,OACE,kBAAC,IAAD,CAAQC,IAAKV,KAAKW,QAChB,YAAC,IAAD,CAAqBC,QAASZ,KAAKa,kBAAmBP,YAAaA,IAEnE,YAAC,IAAD,CACEQ,UAAU,YACV1B,QAASA,EACT2B,WAAYf,KAAKgB,eACjBC,QAAS,YAAC,IAAD,CAAiB/B,UAAWc,KAAKlB,MAAMG,OAAOC,UAAWgC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,EACda,gBAAiBd,QAPnB,EASGnB,EAAWkC,KAAI,SAAAb,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIc,UAAU,GAAtBd,S,GAhFXe,K,0BAEH,CACjBtC,OAAQuC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/BzC,QAASoC,IAAUM,KACnB/C,UAAWyC,IAAUM,KACrBxB,YAAakB,IAAUM,O","file":"flavours/glitch/async/following.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowing,\n expandFollowing,\n} from 'flavours/glitch/actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),\n hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),\n});\n\nexport default @connect(mapStateToProps)\nclass Following extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowing(this.props.params.accountId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchFollowing(nextProps.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n\n if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }, 300, { leading: true });\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { accountIds, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='account.follows.empty' defaultMessage=\"This user doesn't follow anyone yet.\" />;\n\n return (\n <Column ref={this.setRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='following'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/following/index.js"],"names":["Following","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","column","scrollTop","e","target","scrollHeight","clientHeight","dispatch","expandFollowing","leading","c","componentWillMount","this","fetchAccount","fetchFollowing","componentWillReceiveProps","nextProps","render","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","onClick","handleHeaderClick","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"gWAoBA,IAOMA,EADUC,mBANQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,YAAaF,EAAMG,MAAM,CAAC,WAAYF,EAAMG,OAAOC,YACnDC,WAAYN,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,UAC5EE,UAAWP,EAAMG,MAAM,CAAC,aAAc,YAAaF,EAAMG,OAAOC,UAAW,Y,oOA6BvD,WAClB,EAAKG,OAAOC,e,2CAGC,SAACC,GAAO,IAAD,EAC8BA,EAAEC,OADhC,EACZF,YADY,EACDG,aADC,EACaC,cAEgB,EAAKZ,MAAMM,SAC1D,EAAKN,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,e,4CAIzC,KAAS,WACxB,EAAKJ,MAAMa,SAASC,YAAgB,EAAKd,MAAMG,OAAOC,cACrD,IAAK,CAAEW,SAAS,K,qCAEV,SAAAC,GACP,EAAKT,OAASS,K,6BA/BhBC,mBAAA,WACOC,KAAKlB,MAAMK,aACda,KAAKlB,MAAMa,SAASM,YAAaD,KAAKlB,MAAMG,OAAOC,YACnDc,KAAKlB,MAAMa,SAASO,YAAeF,KAAKlB,MAAMG,OAAOC,c,EAIzDiB,0BAAA,SAA2BC,GACrBA,EAAUnB,OAAOC,YAAcc,KAAKlB,MAAMG,OAAOC,WAAakB,EAAUnB,OAAOC,YACjFc,KAAKlB,MAAMa,SAASM,YAAaG,EAAUnB,OAAOC,YAClDc,KAAKlB,MAAMa,SAASO,YAAeE,EAAUnB,OAAOC,c,EAwBxDmB,OAAA,WAAW,IAAD,EACgDL,KAAKlB,MAArDK,EADA,EACAA,WAAYC,EADZ,EACYA,QAASL,EADrB,EACqBA,UAAWuB,EADhC,EACgCA,YAExC,IAAKvB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMoB,EAAe,YAAC,IAAD,CAAkBC,GAAG,wBAAwBC,eAAe,yCAEjF,OACE,kBAAC,IAAD,CAAQC,IAAKV,KAAKW,QAChB,YAAC,IAAD,CAAqBC,QAASZ,KAAKa,kBAAmBP,YAAaA,IAEnE,YAAC,IAAD,CACEQ,UAAU,YACV1B,QAASA,EACT2B,WAAYf,KAAKgB,eACjBC,QAAS,YAAC,IAAD,CAAiB/B,UAAWc,KAAKlB,MAAMG,OAAOC,UAAWgC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,EACda,gBAAiBd,QAPnB,EASGnB,EAAWkC,KAAI,SAAAb,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIc,UAAU,GAAtBd,U,GAhFXe,K,0BAEH,CACjBtC,OAAQuC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/BzC,QAASoC,IAAUM,KACnB/C,UAAWyC,IAAUM,KACrBxB,YAAakB,IAAUM,O","file":"flavours/glitch/async/following.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowing,\n expandFollowing,\n} from 'flavours/glitch/actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),\n hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),\n});\n\nexport default @connect(mapStateToProps)\nclass Following extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowing(this.props.params.accountId));\n }\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(fetchFollowing(nextProps.params.accountId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n\n if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }, 300, { leading: true });\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { accountIds, hasMore, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='account.follows.empty' defaultMessage=\"This user doesn't follow anyone yet.\" />;\n\n return (\n <Column ref={this.setRef}>\n <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='following'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/generic_not_found.js b/priv/static/packs/flavours/glitch/async/generic_not_found.js
index 4546a62ef..dca1026b6 100644
--- a/priv/static/packs/flavours/glitch/async/generic_not_found.js
+++ b/priv/static/packs/flavours/glitch/async/generic_not_found.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{774:function(a,n,e){"use strict";e.r(n);var t=e(0),c=(e(3),e(730)),o=e(1029);n.default=function(){return Object(t.a)(c.a,{},void 0,Object(t.a)(o.a,{fullPage:!0}))}}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{800:function(a,n,e){"use strict";e.r(n);var t=e(0),c=(e(3),e(756)),o=e(1056);n.default=function(){return Object(t.a)(c.a,{},void 0,Object(t.a)(o.a,{fullPage:!0}))}}}]);
//# sourceMappingURL=generic_not_found.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/getting_started.js b/priv/static/packs/flavours/glitch/async/getting_started.js
index cf8a8c738..b1e5d2309 100644
--- a/priv/static/packs/flavours/glitch/async/getting_started.js
+++ b/priv/static/packs/flavours/glitch/async/getting_started.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{759:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var i,a=n(0),s=n(7),o=n(3),r=n.n(o),c=n(6),u=Object(c.g)(i=function(e){function t(){return e.apply(this,arguments)||this}return Object(s.a)(t,e),t.prototype.render=function(){return Object(a.a)("div",{className:"getting-started__footer"},void 0,Object(a.a)("p",{},void 0,Object(a.a)(c.b,{id:"getting_started.mastofe_notice",defaultMessage:"Mastofe is a libre distribution of the frontend from {glitchsoc}, a friendly fork of {mastodon}. You can contribute or report issues at {mastofe}.",values:{mastofe:Object(a.a)("a",{href:"https://git.pleroma.social/pleroma/mastofe",rel:"noopener noreferrer",target:"_blank"},void 0,"Mastofe"),glitchsoc:Object(a.a)("a",{href:"https://github.com/glitch-soc/mastodon",rel:"noopener noreferrer",target:"_blank"},void 0,"glitch-soc"),mastodon:Object(a.a)("a",{href:"https://github.com/tootsuite/mastodon",rel:"noopener noreferrer",target:"_blank"},void 0,"Mastodon"),pleroma:Object(a.a)("a",{href:"https://pleroma.social",rel:"noopener noreferrer",target:"_blank"},void 0,"Pleroma")}})))},t}(r.a.PureComponent))||i},766:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return C}));var i,a,s,o,r=n(0),c=n(7),u=n(1),l=(n(3),n(730)),d=n(1075),f=n(1076),g=n(6),m=n(13),b=n(42),p=n(5),h=n.n(p),_=n(14),O=n.n(_),j=n(18),v=n(16),M=n(22),y=n(4),k=n(54),w=n(28),q=n(145),I=n(742),x=n(759),P=n(198),R=n(838),T=Object(g.f)(((i={heading:{id:"getting_started.heading",defaultMessage:"Getting started"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public_timeline:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},navigation_subheading:{id:"column_subheading.navigation",defaultMessage:"Navigation"},settings_subheading:{id:"column_subheading.settings",defaultMessage:"Settings"},community_timeline:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},direct:{id:"navigation_bar.direct",defaultMessage:"Direct messages"},bookmarks:{id:"navigation_bar.bookmarks",defaultMessage:"Bookmarks"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},settings:{id:"navigation_bar.app_settings",defaultMessage:"App settings"},follow_requests:{id:"navigation_bar.follow_requests",defaultMessage:"Follow requests"},lists:{id:"navigation_bar.lists",defaultMessage:"Lists"},keyboard_shortcuts:{id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Keyboard shortcuts"}}).lists={id:"navigation_bar.lists",defaultMessage:"Lists"},i.lists_subheading={id:"column_subheading.lists",defaultMessage:"Lists"},i.misc={id:"navigation_bar.misc",defaultMessage:"Misc"},i.menu={id:"getting_started.heading",defaultMessage:"Getting started"},i.profile_directory={id:"getting_started.directory",defaultMessage:"Profile directory"},i)),N=function(e,t){return 0===e?void 0:t&&e>=t?t+"+":e},C=Object(m.connect)((function(){var e=Object(k.a)([function(e){return e.get("lists")}],(function(e){return e?e.toList().filter((function(e){return!!e})).sort((function(e,t){return e.get("title").localeCompare(t.get("title"))})):e}));return function(t){return{lists:e(t),myAccount:t.getIn(["accounts",v.m]),columns:t.getIn(["settings","columns"]),unreadFollowRequests:t.getIn(["user_lists","follow_requests","items"],Object(y.List)()).size,unreadNotifications:t.getIn(["notifications","unread"]),customPanelEnabled:t.getIn(["custom_panel","enabled"]),customPanel:t.getIn(["custom_panel","panel"])}}}),(function(e){return{fetchFollowRequests:function(){return e(Object(M.G)())},fetchLists:function(){return e(Object(w.I)())},openSettings:function(){return e(Object(b.d)("SETTINGS",{}))},fetchPanel:function(){return e(Object(P.c)())},fetchPleromaConfig:function(){return e(Object(P.d)())}}}))(a=Object(g.g)((o=s=function(e){function t(){return e.apply(this,arguments)||this}Object(c.a)(t,e);var n=t.prototype;return n.componentWillMount=function(){this.props.fetchLists()},n.componentDidMount=function(){var e=this.props,t=e.fetchFollowRequests,n=e.multiColumn,i=e.fetchPleromaConfig,a=e.fetchPanel;!n&&window.innerWidth>=1190?this.context.router.history.replace("/timelines/home"):(t(),i(),a())},n.render=function(){var e=this.props,t=e.intl,n=e.myAccount,i=e.columns,a=e.multiColumn,s=e.unreadFollowRequests,o=e.unreadNotifications,c=e.lists,u=e.openSettings,g=e.customPanelEnabled,m=e.customPanel,b=[],p=[];a&&(i.find((function(e){return"HOME"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"home",text:t.formatMessage(T.home_timeline),to:"/timelines/home"},"0")),i.find((function(e){return"NOTIFICATIONS"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"bell",text:t.formatMessage(T.notifications),badge:N(o),to:"/notifications"},"1")),i.find((function(e){return"COMMUNITY"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"users",text:t.formatMessage(T.community_timeline),to:"/timelines/public/local"},"2")),i.find((function(e){return"PUBLIC"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"globe",text:t.formatMessage(T.public_timeline),to:"/timelines/public"},"3"))),a&&i.find((function(e){return"DIRECT"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"envelope",text:t.formatMessage(T.direct),to:"/timelines/direct"},"4")),a&&i.find((function(e){return"BOOKMARKS"===e.get("id")}))||b.push(Object(r.a)(d.a,{icon:"bookmark",text:t.formatMessage(T.bookmarks),to:"/bookmarks"},"5")),(n.get("locked")||s>0)&&b.push(Object(r.a)(d.a,{icon:"user-plus",text:t.formatMessage(T.follow_requests),badge:N(s,40),to:"/follow_requests"},"6")),v.o&&b.push(Object(r.a)(d.a,{icon:"address-book",text:t.formatMessage(T.profile_directory),to:"/directory"},"7")),b.push(Object(r.a)(d.a,{icon:"ellipsis-h",text:t.formatMessage(T.misc),to:"/getting-started-misc"},"8")),p=p.concat([Object(r.a)("div",{},"9",Object(r.a)(d.a,{icon:"bars",text:t.formatMessage(T.lists),to:"/lists"},"10"),c.map((function(e){return Object(r.a)(d.a,{to:"/timelines/list/"+e.get("id"),icon:"list-ul",text:e.get("title")},(11+Number(e.get("id"))).toString())})))]);var h=g?Object(r.a)("div",{className:"getting-started getting-started__panel",dangerouslySetInnerHTML:{__html:m}}):null;return Object(r.a)(l.a,{bindToDocument:!a,name:"getting-started",icon:"asterisk",heading:t.formatMessage(T.heading),label:t.formatMessage(T.menu),hideHeadingOnMobile:!0},void 0,Object(r.a)("div",{className:"scrollable optionally-scrollable"},void 0,Object(r.a)("div",{className:"getting-started__wrapper"},void 0,!a&&Object(r.a)(I.a,{account:n}),a&&Object(r.a)(f.a,{text:t.formatMessage(T.navigation_subheading)}),b,Object(r.a)(f.a,{text:t.formatMessage(T.lists_subheading)}),p,Object(r.a)(f.a,{text:t.formatMessage(T.settings_subheading)}),void 0!==q.c&&Object(r.a)(d.a,{icon:"cog",text:t.formatMessage(T.preferences),href:q.c}),Object(r.a)(d.a,{icon:"cogs",text:t.formatMessage(T.settings),onClick:u})),h,Object(r.a)(x.a,{})),a&&v.r&&Object(r.a)(R.a,{}))},t}(j.a),Object(u.a)(s,"contextTypes",{router:h.a.object.isRequired}),Object(u.a)(s,"propTypes",{intl:h.a.object.isRequired,myAccount:O.a.map.isRequired,columns:O.a.list,multiColumn:h.a.bool,fetchFollowRequests:h.a.func.isRequired,unreadFollowRequests:h.a.number,unreadNotifications:h.a.number,lists:O.a.list,fetchLists:h.a.func.isRequired,openSettings:h.a.func.isRequired,fetchPanel:h.a.func.isRequired,fetchPleromaConfig:h.a.func.isRequired,customPanelEnabled:h.a.bool,customPanel:h.a.string.isRequired}),a=o))||a)||a},838:function(e,t,n){"use strict";var i=n(13),a=n(263),s=n(0),o=n(7),r=n(1),c=(n(3),n(18)),u=n(5),l=n.n(u),d=n(14),f=n.n(d),g=n(743),m=n(6),b=function(e){function t(){return e.apply(this,arguments)||this}Object(o.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this;this.props.fetchTrends(),this.refreshInterval=setInterval((function(){return e.props.fetchTrends()}),9e5)},n.componentWillUnmount=function(){this.refreshInterval&&clearInterval(this.refreshInterval)},n.render=function(){var e=this.props.trends;return!e||e.isEmpty()?null:Object(s.a)("div",{className:"getting-started__trends"},void 0,Object(s.a)("h4",{},void 0,Object(s.a)(m.b,{id:"trends.trending_now",defaultMessage:"Trending now"})),e.take(3).map((function(e){return Object(s.a)(g.a,{hashtag:e},e.get("name"))})))},t}(c.a);Object(r.a)(b,"defaultProps",{loading:!1}),Object(r.a)(b,"propTypes",{trends:f.a.list,fetchTrends:l.a.func.isRequired});t.a=Object(i.connect)((function(e){return{trends:e.getIn(["trends","items"])}}),(function(e){return{fetchTrends:function(){return e(Object(a.d)())}}}))(b)}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{231:function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"c",(function(){return s})),n.d(t,"a",(function(){return o})),n.d(t,"d",(function(){return r}));var i=n(12),a="TRENDS_FETCH_REQUEST",s="TRENDS_FETCH_SUCCESS",o="TRENDS_FETCH_FAIL",r=function(){return function(e,t){e(c()),Object(i.a)(t).get("/api/v1/trends").then((function(t){var n=t.data;return e(u(n))})).catch((function(t){return e(l(t))}))}},c=function(){return{type:a,skipLoading:!0}},u=function(e){return{type:s,trends:e,skipLoading:!0}},l=function(e){return{type:o,error:e,skipLoading:!0,skipAlert:!0}}},785:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var i,a=n(0),s=(n(9),n(6),n(8)),o=n(3),r=n.n(o),c=n(7);var u=Object(c.g)(i=function(e){Object(s.a)(n,e);var t;t=n;function n(){return e.apply(this,arguments)||this}return n.prototype.render=function(){return Object(a.a)("div",{className:"getting-started__footer"},void 0,Object(a.a)("p",{},void 0,Object(a.a)(c.b,{id:"getting_started.mastofe_notice",defaultMessage:"Mastofe is a libre distribution of the frontend from {glitchsoc}, a friendly fork of {mastodon}. You can contribute or report issues at {mastofe}.",values:{mastofe:Object(a.a)("a",{href:"https://git.pleroma.social/pleroma/mastofe",rel:"noopener noreferrer",target:"_blank"},void 0,"Mastofe"),glitchsoc:Object(a.a)("a",{href:"https://github.com/glitch-soc/mastodon",rel:"noopener noreferrer",target:"_blank"},void 0,"glitch-soc"),mastodon:Object(a.a)("a",{href:"https://github.com/tootsuite/mastodon",rel:"noopener noreferrer",target:"_blank"},void 0,"Mastodon"),pleroma:Object(a.a)("a",{href:"https://pleroma.social",rel:"noopener noreferrer",target:"_blank"},void 0,"Pleroma")}})))},n}(r.a.PureComponent))||i},792:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return P}));var i,a,s,o,r=n(0),c=(n(9),n(6),n(8)),u=n(1),l=(n(3),n(756)),d=n(1103),f=n(1104),g=n(7),b=n(15),m=n(45),p=n(5),h=n.n(p),_=n(16),O=n.n(_),v=n(21),j=n(18),M=n(24),y=n(4),k=n(57),w=n(30),T=n(150),q=n(768),I=n(785),R=n(203),x=n(864);var C=Object(g.f)(((i={heading:{id:"getting_started.heading",defaultMessage:"Getting started"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public_timeline:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},navigation_subheading:{id:"column_subheading.navigation",defaultMessage:"Navigation"},settings_subheading:{id:"column_subheading.settings",defaultMessage:"Settings"},community_timeline:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},direct:{id:"navigation_bar.direct",defaultMessage:"Direct messages"},bookmarks:{id:"navigation_bar.bookmarks",defaultMessage:"Bookmarks"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},settings:{id:"navigation_bar.app_settings",defaultMessage:"App settings"},follow_requests:{id:"navigation_bar.follow_requests",defaultMessage:"Follow requests"},lists:{id:"navigation_bar.lists",defaultMessage:"Lists"},keyboard_shortcuts:{id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Keyboard shortcuts"}}).lists={id:"navigation_bar.lists",defaultMessage:"Lists"},i.lists_subheading={id:"column_subheading.lists",defaultMessage:"Lists"},i.misc={id:"navigation_bar.misc",defaultMessage:"Misc"},i.menu={id:"getting_started.heading",defaultMessage:"Getting started"},i.profile_directory={id:"getting_started.directory",defaultMessage:"Profile directory"},i)),N=function(e,t){return 0===e?void 0:t&&e>=t?t+"+":e},P=Object(b.connect)((function(){var e=Object(k.a)([function(e){return e.get("lists")}],(function(e){return e?e.toList().filter((function(e){return!!e})).sort((function(e,t){return e.get("title").localeCompare(t.get("title"))})):e}));return function(t){return{lists:e(t),myAccount:t.getIn(["accounts",j.m]),columns:t.getIn(["settings","columns"]),unreadFollowRequests:t.getIn(["user_lists","follow_requests","items"],Object(y.List)()).size,unreadNotifications:t.getIn(["notifications","unread"]),customPanelEnabled:t.getIn(["custom_panel","enabled"]),customPanel:t.getIn(["custom_panel","panel"])}}}),(function(e){return{fetchFollowRequests:function(){return e(Object(M.G)())},fetchLists:function(){return e(Object(w.I)())},openSettings:function(){return e(Object(m.d)("SETTINGS",{}))},fetchPanel:function(){return e(Object(R.c)())},fetchPleromaConfig:function(){return e(Object(R.d)())}}}))(a=Object(g.g)((o=s=function(e){Object(c.a)(n,e);var t;t=n;function n(){return e.apply(this,arguments)||this}var i=n.prototype;return i.componentWillMount=function(){this.props.fetchLists()},i.componentDidMount=function(){var e=this.props,t=e.fetchFollowRequests,n=e.multiColumn,i=e.fetchPleromaConfig,a=e.fetchPanel;!n&&window.innerWidth>=1190?this.context.router.history.replace("/timelines/home"):(t(),i(),a())},i.render=function(){var e=this.props,t=e.intl,n=e.myAccount,i=e.columns,a=e.multiColumn,s=e.unreadFollowRequests,o=e.unreadNotifications,c=e.lists,u=e.openSettings,g=e.customPanelEnabled,b=e.customPanel,m=[],p=[];a&&(i.find((function(e){return"HOME"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"home",text:t.formatMessage(C.home_timeline),to:"/timelines/home"},"0")),i.find((function(e){return"NOTIFICATIONS"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"bell",text:t.formatMessage(C.notifications),badge:N(o),to:"/notifications"},"1")),i.find((function(e){return"COMMUNITY"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"users",text:t.formatMessage(C.community_timeline),to:"/timelines/public/local"},"2")),i.find((function(e){return"PUBLIC"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"globe",text:t.formatMessage(C.public_timeline),to:"/timelines/public"},"3"))),a&&i.find((function(e){return"DIRECT"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"envelope",text:t.formatMessage(C.direct),to:"/timelines/direct"},"4")),a&&i.find((function(e){return"BOOKMARKS"===e.get("id")}))||m.push(Object(r.a)(d.a,{icon:"bookmark",text:t.formatMessage(C.bookmarks),to:"/bookmarks"},"5")),(n.get("locked")||s>0)&&m.push(Object(r.a)(d.a,{icon:"user-plus",text:t.formatMessage(C.follow_requests),badge:N(s,40),to:"/follow_requests"},"6")),j.o&&m.push(Object(r.a)(d.a,{icon:"address-book",text:t.formatMessage(C.profile_directory),to:"/directory"},"7")),m.push(Object(r.a)(d.a,{icon:"ellipsis-h",text:t.formatMessage(C.misc),to:"/getting-started-misc"},"8")),p=p.concat([Object(r.a)("div",{},"9",Object(r.a)(d.a,{icon:"bars",text:t.formatMessage(C.lists),to:"/lists"},"10"),c.map((function(e){return Object(r.a)(d.a,{to:"/timelines/list/"+e.get("id"),icon:"list-ul",text:e.get("title")},(11+Number(e.get("id"))).toString())})))]);var h=g?Object(r.a)("div",{className:"getting-started getting-started__panel",dangerouslySetInnerHTML:{__html:b}}):null;return(Object(r.a)(l.a,{bindToDocument:!a,name:"getting-started",icon:"asterisk",heading:t.formatMessage(C.heading),label:t.formatMessage(C.menu),hideHeadingOnMobile:!0},void 0,Object(r.a)("div",{className:"scrollable optionally-scrollable"},void 0,Object(r.a)("div",{className:"getting-started__wrapper"},void 0,!a&&Object(r.a)(q.a,{account:n}),a&&Object(r.a)(f.a,{text:t.formatMessage(C.navigation_subheading)}),m,Object(r.a)(f.a,{text:t.formatMessage(C.lists_subheading)}),p,Object(r.a)(f.a,{text:t.formatMessage(C.settings_subheading)}),void 0!==T.c&&Object(r.a)(d.a,{icon:"cog",text:t.formatMessage(C.preferences),href:T.c}),Object(r.a)(d.a,{icon:"cogs",text:t.formatMessage(C.settings),onClick:u})),h,Object(r.a)(I.a,{})),a&&j.r&&Object(r.a)(x.a,{})))},n}(v.a),Object(u.a)(s,"contextTypes",{router:h.a.object.isRequired}),Object(u.a)(s,"propTypes",{intl:h.a.object.isRequired,myAccount:O.a.map.isRequired,columns:O.a.list,multiColumn:h.a.bool,fetchFollowRequests:h.a.func.isRequired,unreadFollowRequests:h.a.number,unreadNotifications:h.a.number,lists:O.a.list,fetchLists:h.a.func.isRequired,openSettings:h.a.func.isRequired,fetchPanel:h.a.func.isRequired,fetchPleromaConfig:h.a.func.isRequired,customPanelEnabled:h.a.bool,customPanel:h.a.string.isRequired}),a=o))||a)||a},864:function(e,t,n){"use strict";var i=n(15),a=n(231),s=n(0),o=(n(9),n(6),n(8)),r=n(1),c=(n(3),n(21)),u=n(5),l=n.n(u),d=n(16),f=n.n(d),g=n(769),b=n(7);var m=function(e){Object(o.a)(n,e);var t;t=n;function n(){return e.apply(this,arguments)||this}var i=n.prototype;return i.componentDidMount=function(){var e=this;this.props.fetchTrends(),this.refreshInterval=setInterval((function(){return e.props.fetchTrends()}),9e5)},i.componentWillUnmount=function(){this.refreshInterval&&clearInterval(this.refreshInterval)},i.render=function(){var e=this.props.trends;return!e||e.isEmpty()?null:Object(s.a)("div",{className:"getting-started__trends"},void 0,Object(s.a)("h4",{},void 0,Object(s.a)(b.b,{id:"trends.trending_now",defaultMessage:"Trending now"})),e.take(3).map((function(e){return Object(s.a)(g.a,{hashtag:e},e.get("name"))})))},n}(c.a);Object(r.a)(m,"defaultProps",{loading:!1}),Object(r.a)(m,"propTypes",{trends:f.a.list,fetchTrends:l.a.func.isRequired});t.a=Object(i.connect)((function(e){return{trends:e.getIn(["trends","items"])}}),(function(e){return{fetchTrends:function(){return e(Object(a.d)())}}}))(m)}}]);
//# sourceMappingURL=getting_started.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/getting_started.js.map b/priv/static/packs/flavours/glitch/async/getting_started.js.map
index e63299ca7..5c9294fff 100644
--- a/priv/static/packs/flavours/glitch/async/getting_started.js.map
+++ b/priv/static/packs/flavours/glitch/async/getting_started.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/link_footer.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/components/trends.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/containers/trends_container.js"],"names":["LinkFooter","injectIntl","render","className","id","defaultMessage","values","mastofe","href","rel","target","glitchsoc","mastodon","pleroma","React","PureComponent","messages","defineMessages","heading","home_timeline","notifications","public_timeline","navigation_subheading","settings_subheading","community_timeline","direct","bookmarks","preferences","settings","follow_requests","lists","keyboard_shortcuts","lists_subheading","misc","menu","profile_directory","badgeDisplay","number","limit","GettingStarted","connect","getOrderedLists","createSelector","state","get","toList","filter","item","sort","a","b","localeCompare","myAccount","getIn","me","columns","unreadFollowRequests","ImmutableList","size","unreadNotifications","customPanelEnabled","customPanel","dispatch","fetchFollowRequests","fetchLists","openSettings","openModal","fetchPanel","fetchPleromaConfig","componentWillMount","this","props","componentDidMount","multiColumn","window","innerWidth","context","router","history","replace","intl","navItems","listItems","find","push","icon","text","formatMessage","to","badge","concat","map","list","Number","toString","instance_panel","dangerouslySetInnerHTML","__html","bindToDocument","name","label","hideHeadingOnMobile","account","undefined","preferencesLink","onClick","showTrends","ImmutablePureComponent","PropTypes","object","isRequired","ImmutablePropTypes","bool","func","string","Trends","fetchTrends","refreshInterval","setInterval","componentWillUnmount","clearInterval","trends","isEmpty","take","hashtag","loading"],"mappings":"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","file":"flavours/glitch/async/getting_started.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nexport default @injectIntl\nclass LinkFooter extends React.PureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n return (\n <div className='getting-started__footer'>\n <p>\n <FormattedMessage\n id='getting_started.mastofe_notice'\n defaultMessage='Mastofe is a libre distribution of the frontend from {glitchsoc}, a friendly fork of {mastodon}. You can contribute or report issues at {mastofe}.'\n values={{\n mastofe: <a href='https://git.pleroma.social/pleroma/mastofe' rel='noopener noreferrer' target='_blank'>Mastofe</a>,\n glitchsoc: <a href='https://github.com/glitch-soc/mastodon' rel='noopener noreferrer' target='_blank'>glitch-soc</a>,\n mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener noreferrer' target='_blank'>Mastodon</a>,\n pleroma: <a href='https://pleroma.social' rel='noopener noreferrer' target='_blank'>Pleroma</a>\n }}\n />\n </p>\n </div>\n );\n }\n};\n","import React from 'react';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, profile_directory, showTrends } from 'flavours/glitch/util/initial_state';\nimport { fetchFollowRequests } from 'flavours/glitch/actions/accounts';\nimport { List as ImmutableList } from 'immutable';\nimport { createSelector } from 'reselect';\nimport { fetchLists } from 'flavours/glitch/actions/lists';\nimport { preferencesLink } from 'flavours/glitch/util/backend_links';\nimport NavigationBar from '../compose/components/navigation_bar';\nimport LinkFooter from 'flavours/glitch/features/ui/components/link_footer';\nimport { fetchPanel, fetchPleromaConfig } from 'mastodon/actions/pleroma';\nimport TrendsContainer from './containers/trends_container';\n\nconst messages = defineMessages({\n heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },\n navigation_subheading: { id: 'column_subheading.navigation', defaultMessage: 'Navigation' },\n settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },\n community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },\n direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },\n bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' },\n follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n lists_subheading: { id: 'column_subheading.lists', defaultMessage: 'Lists' },\n misc: { id: 'navigation_bar.misc', defaultMessage: 'Misc' },\n menu: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n profile_directory: { id: 'getting_started.directory', defaultMessage: 'Profile directory' },\n});\n\nconst makeMapStateToProps = () => {\n const getOrderedLists = createSelector([state => state.get('lists')], lists => {\n if (!lists) {\n return lists;\n }\n\n return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title')));\n });\n\n const mapStateToProps = state => ({\n lists: getOrderedLists(state),\n myAccount: state.getIn(['accounts', me]),\n columns: state.getIn(['settings', 'columns']),\n unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n unreadNotifications: state.getIn(['notifications', 'unread']),\n customPanelEnabled: state.getIn(['custom_panel', 'enabled']),\n customPanel: state.getIn(['custom_panel', 'panel']),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n fetchFollowRequests: () => dispatch(fetchFollowRequests()),\n fetchLists: () => dispatch(fetchLists()),\n openSettings: () => dispatch(openModal('SETTINGS', {})),\n fetchPanel: () => dispatch(fetchPanel()),\n fetchPleromaConfig: () => dispatch(fetchPleromaConfig()),\n});\n\nconst badgeDisplay = (number, limit) => {\n if (number === 0) {\n return undefined;\n } else if (limit && number >= limit) {\n return `${limit}+`;\n } else {\n return number;\n }\n};\n\nconst NAVIGATION_PANEL_BREAKPOINT = 600 + (285 * 2) + (10 * 2);\n\n export default @connect(makeMapStateToProps, mapDispatchToProps)\n @injectIntl\n class GettingStarted extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n columns: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n fetchFollowRequests: PropTypes.func.isRequired,\n unreadFollowRequests: PropTypes.number,\n unreadNotifications: PropTypes.number,\n lists: ImmutablePropTypes.list,\n fetchLists: PropTypes.func.isRequired,\n openSettings: PropTypes.func.isRequired,\n fetchPanel: PropTypes.func.isRequired,\n fetchPleromaConfig: PropTypes.func.isRequired,\n customPanelEnabled: PropTypes.bool,\n customPanel: PropTypes.string.isRequired,\n };\n\n componentWillMount () {\n this.props.fetchLists();\n }\n\n componentDidMount () {\n const { fetchFollowRequests, multiColumn, fetchPleromaConfig, fetchPanel } = this.props;\n\n if (!multiColumn && window.innerWidth >= NAVIGATION_PANEL_BREAKPOINT) {\n this.context.router.history.replace('/timelines/home');\n return;\n }\n\n fetchFollowRequests();\n\n fetchPleromaConfig();\n fetchPanel();\n }\n\n render () {\n const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications, lists, openSettings, customPanelEnabled, customPanel } = this.props;\n\n const navItems = [];\n let listItems = [];\n\n if (multiColumn) {\n if (!columns.find(item => item.get('id') === 'HOME')) {\n navItems.push(<ColumnLink key='0' icon='home' text={intl.formatMessage(messages.home_timeline)} to='/timelines/home' />);\n }\n\n if (!columns.find(item => item.get('id') === 'NOTIFICATIONS')) {\n navItems.push(<ColumnLink key='1' icon='bell' text={intl.formatMessage(messages.notifications)} badge={badgeDisplay(unreadNotifications)} to='/notifications' />);\n }\n\n if (!columns.find(item => item.get('id') === 'COMMUNITY')) {\n navItems.push(<ColumnLink key='2' icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />);\n }\n\n if (!columns.find(item => item.get('id') === 'PUBLIC')) {\n navItems.push(<ColumnLink key='3' icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />);\n }\n }\n\n if (!multiColumn || !columns.find(item => item.get('id') === 'DIRECT')) {\n navItems.push(<ColumnLink key='4' icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />);\n }\n\n if (!multiColumn || !columns.find(item => item.get('id') === 'BOOKMARKS')) {\n navItems.push(<ColumnLink key='5' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />);\n }\n\n if (myAccount.get('locked') || unreadFollowRequests > 0) {\n navItems.push(<ColumnLink key='6' icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);\n }\n\n if (profile_directory) {\n navItems.push(<ColumnLink key='7' icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />);\n }\n\n navItems.push(<ColumnLink key='8' icon='ellipsis-h' text={intl.formatMessage(messages.misc)} to='/getting-started-misc' />);\n\n listItems = listItems.concat([\n <div key='9'>\n <ColumnLink key='10' icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' />\n {lists.map(list =>\n <ColumnLink key={(11 + Number(list.get('id'))).toString()} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} />\n )}\n </div>,\n ]);\n\n const instance_panel = (customPanelEnabled ? <div className='getting-started getting-started__panel' dangerouslySetInnerHTML={{__html: customPanel}} /> : null);\n\n return (\n <Column bindToDocument={!multiColumn} name='getting-started' icon='asterisk' heading={intl.formatMessage(messages.heading)} label={intl.formatMessage(messages.menu)} hideHeadingOnMobile>\n <div className='scrollable optionally-scrollable'>\n <div className='getting-started__wrapper'>\n {!multiColumn && <NavigationBar account={myAccount} />}\n {multiColumn && <ColumnSubheading text={intl.formatMessage(messages.navigation_subheading)} />}\n {navItems}\n <ColumnSubheading text={intl.formatMessage(messages.lists_subheading)} />\n {listItems}\n <ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} />\n { preferencesLink !== undefined && <ColumnLink icon='cog' text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> }\n <ColumnLink icon='cogs' text={intl.formatMessage(messages.settings)} onClick={openSettings} />\n </div>\n\n {instance_panel}\n\n <LinkFooter />\n </div>\n\n {multiColumn && showTrends && <TrendsContainer />}\n </Column>\n );\n }\n\n}\n","import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Hashtag from 'flavours/glitch/components/hashtag';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Trends extends ImmutablePureComponent {\n\n static defaultProps = {\n loading: false,\n };\n\n static propTypes = {\n trends: ImmutablePropTypes.list,\n fetchTrends: PropTypes.func.isRequired,\n };\n\n componentDidMount () {\n this.props.fetchTrends();\n this.refreshInterval = setInterval(() => this.props.fetchTrends(), 900 * 1000);\n }\n\n componentWillUnmount () {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n }\n }\n\n render () {\n const { trends } = this.props;\n\n if (!trends || trends.isEmpty()) {\n return null;\n }\n\n return (\n <div className='getting-started__trends'>\n <h4><FormattedMessage id='trends.trending_now' defaultMessage='Trending now' /></h4>\n\n {trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { fetchTrends } from '../../../actions/trends';\nimport Trends from '../components/trends';\n\nconst mapStateToProps = state => ({\n trends: state.getIn(['trends', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchTrends: () => dispatch(fetchTrends()),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Trends);\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/actions/trends.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/link_footer.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/components/trends.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/containers/trends_container.js"],"names":["TRENDS_FETCH_REQUEST","TRENDS_FETCH_SUCCESS","TRENDS_FETCH_FAIL","fetchTrends","dispatch","getState","fetchTrendsRequest","api","get","then","data","fetchTrendsSuccess","catch","err","fetchTrendsFail","type","skipLoading","trends","error","skipAlert","LinkFooter","injectIntl","render","className","id","defaultMessage","values","mastofe","href","rel","target","glitchsoc","mastodon","pleroma","React","PureComponent","messages","defineMessages","heading","home_timeline","notifications","public_timeline","navigation_subheading","settings_subheading","community_timeline","direct","bookmarks","preferences","settings","follow_requests","lists","keyboard_shortcuts","lists_subheading","misc","menu","profile_directory","badgeDisplay","number","limit","GettingStarted","connect","getOrderedLists","createSelector","state","toList","filter","item","sort","a","b","localeCompare","myAccount","getIn","me","columns","unreadFollowRequests","ImmutableList","size","unreadNotifications","customPanelEnabled","customPanel","fetchFollowRequests","fetchLists","openSettings","openModal","fetchPanel","fetchPleromaConfig","componentWillMount","this","props","componentDidMount","multiColumn","window","innerWidth","context","router","history","replace","intl","navItems","listItems","find","push","icon","text","formatMessage","to","badge","concat","map","list","Number","toString","instance_panel","dangerouslySetInnerHTML","__html","bindToDocument","name","label","hideHeadingOnMobile","account","undefined","preferencesLink","onClick","showTrends","ImmutablePureComponent","PropTypes","object","isRequired","ImmutablePropTypes","bool","func","string","Trends","refreshInterval","setInterval","componentWillUnmount","clearInterval","isEmpty","take","hashtag","loading"],"mappings":"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","file":"flavours/glitch/async/getting_started.js","sourcesContent":["import api from '../api';\n\nexport const TRENDS_FETCH_REQUEST = 'TRENDS_FETCH_REQUEST';\nexport const TRENDS_FETCH_SUCCESS = 'TRENDS_FETCH_SUCCESS';\nexport const TRENDS_FETCH_FAIL = 'TRENDS_FETCH_FAIL';\n\nexport const fetchTrends = () => (dispatch, getState) => {\n dispatch(fetchTrendsRequest());\n\n api(getState)\n .get('/api/v1/trends')\n .then(({ data }) => dispatch(fetchTrendsSuccess(data)))\n .catch(err => dispatch(fetchTrendsFail(err)));\n};\n\nexport const fetchTrendsRequest = () => ({\n type: TRENDS_FETCH_REQUEST,\n skipLoading: true,\n});\n\nexport const fetchTrendsSuccess = trends => ({\n type: TRENDS_FETCH_SUCCESS,\n trends,\n skipLoading: true,\n});\n\nexport const fetchTrendsFail = error => ({\n type: TRENDS_FETCH_FAIL,\n error,\n skipLoading: true,\n skipAlert: true,\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nexport default @injectIntl\nclass LinkFooter extends React.PureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n return (\n <div className='getting-started__footer'>\n <p>\n <FormattedMessage\n id='getting_started.mastofe_notice'\n defaultMessage='Mastofe is a libre distribution of the frontend from {glitchsoc}, a friendly fork of {mastodon}. You can contribute or report issues at {mastofe}.'\n values={{\n mastofe: <a href='https://git.pleroma.social/pleroma/mastofe' rel='noopener noreferrer' target='_blank'>Mastofe</a>,\n glitchsoc: <a href='https://github.com/glitch-soc/mastodon' rel='noopener noreferrer' target='_blank'>glitch-soc</a>,\n mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener noreferrer' target='_blank'>Mastodon</a>,\n pleroma: <a href='https://pleroma.social' rel='noopener noreferrer' target='_blank'>Pleroma</a>\n }}\n />\n </p>\n </div>\n );\n }\n};\n","import React from 'react';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, profile_directory, showTrends } from 'flavours/glitch/util/initial_state';\nimport { fetchFollowRequests } from 'flavours/glitch/actions/accounts';\nimport { List as ImmutableList } from 'immutable';\nimport { createSelector } from 'reselect';\nimport { fetchLists } from 'flavours/glitch/actions/lists';\nimport { preferencesLink } from 'flavours/glitch/util/backend_links';\nimport NavigationBar from '../compose/components/navigation_bar';\nimport LinkFooter from 'flavours/glitch/features/ui/components/link_footer';\nimport { fetchPanel, fetchPleromaConfig } from 'mastodon/actions/pleroma';\nimport TrendsContainer from './containers/trends_container';\n\nconst messages = defineMessages({\n heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },\n navigation_subheading: { id: 'column_subheading.navigation', defaultMessage: 'Navigation' },\n settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },\n community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },\n direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },\n bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' },\n follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n lists_subheading: { id: 'column_subheading.lists', defaultMessage: 'Lists' },\n misc: { id: 'navigation_bar.misc', defaultMessage: 'Misc' },\n menu: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n profile_directory: { id: 'getting_started.directory', defaultMessage: 'Profile directory' },\n});\n\nconst makeMapStateToProps = () => {\n const getOrderedLists = createSelector([state => state.get('lists')], lists => {\n if (!lists) {\n return lists;\n }\n\n return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title')));\n });\n\n const mapStateToProps = state => ({\n lists: getOrderedLists(state),\n myAccount: state.getIn(['accounts', me]),\n columns: state.getIn(['settings', 'columns']),\n unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n unreadNotifications: state.getIn(['notifications', 'unread']),\n customPanelEnabled: state.getIn(['custom_panel', 'enabled']),\n customPanel: state.getIn(['custom_panel', 'panel']),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n fetchFollowRequests: () => dispatch(fetchFollowRequests()),\n fetchLists: () => dispatch(fetchLists()),\n openSettings: () => dispatch(openModal('SETTINGS', {})),\n fetchPanel: () => dispatch(fetchPanel()),\n fetchPleromaConfig: () => dispatch(fetchPleromaConfig()),\n});\n\nconst badgeDisplay = (number, limit) => {\n if (number === 0) {\n return undefined;\n } else if (limit && number >= limit) {\n return `${limit}+`;\n } else {\n return number;\n }\n};\n\nconst NAVIGATION_PANEL_BREAKPOINT = 600 + (285 * 2) + (10 * 2);\n\n export default @connect(makeMapStateToProps, mapDispatchToProps)\n @injectIntl\n class GettingStarted extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n columns: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n fetchFollowRequests: PropTypes.func.isRequired,\n unreadFollowRequests: PropTypes.number,\n unreadNotifications: PropTypes.number,\n lists: ImmutablePropTypes.list,\n fetchLists: PropTypes.func.isRequired,\n openSettings: PropTypes.func.isRequired,\n fetchPanel: PropTypes.func.isRequired,\n fetchPleromaConfig: PropTypes.func.isRequired,\n customPanelEnabled: PropTypes.bool,\n customPanel: PropTypes.string.isRequired,\n };\n\n componentWillMount () {\n this.props.fetchLists();\n }\n\n componentDidMount () {\n const { fetchFollowRequests, multiColumn, fetchPleromaConfig, fetchPanel } = this.props;\n\n if (!multiColumn && window.innerWidth >= NAVIGATION_PANEL_BREAKPOINT) {\n this.context.router.history.replace('/timelines/home');\n return;\n }\n\n fetchFollowRequests();\n\n fetchPleromaConfig();\n fetchPanel();\n }\n\n render () {\n const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications, lists, openSettings, customPanelEnabled, customPanel } = this.props;\n\n const navItems = [];\n let listItems = [];\n\n if (multiColumn) {\n if (!columns.find(item => item.get('id') === 'HOME')) {\n navItems.push(<ColumnLink key='0' icon='home' text={intl.formatMessage(messages.home_timeline)} to='/timelines/home' />);\n }\n\n if (!columns.find(item => item.get('id') === 'NOTIFICATIONS')) {\n navItems.push(<ColumnLink key='1' icon='bell' text={intl.formatMessage(messages.notifications)} badge={badgeDisplay(unreadNotifications)} to='/notifications' />);\n }\n\n if (!columns.find(item => item.get('id') === 'COMMUNITY')) {\n navItems.push(<ColumnLink key='2' icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />);\n }\n\n if (!columns.find(item => item.get('id') === 'PUBLIC')) {\n navItems.push(<ColumnLink key='3' icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />);\n }\n }\n\n if (!multiColumn || !columns.find(item => item.get('id') === 'DIRECT')) {\n navItems.push(<ColumnLink key='4' icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />);\n }\n\n if (!multiColumn || !columns.find(item => item.get('id') === 'BOOKMARKS')) {\n navItems.push(<ColumnLink key='5' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />);\n }\n\n if (myAccount.get('locked') || unreadFollowRequests > 0) {\n navItems.push(<ColumnLink key='6' icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);\n }\n\n if (profile_directory) {\n navItems.push(<ColumnLink key='7' icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />);\n }\n\n navItems.push(<ColumnLink key='8' icon='ellipsis-h' text={intl.formatMessage(messages.misc)} to='/getting-started-misc' />);\n\n listItems = listItems.concat([\n <div key='9'>\n <ColumnLink key='10' icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' />\n {lists.map(list =>\n <ColumnLink key={(11 + Number(list.get('id'))).toString()} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} />\n )}\n </div>,\n ]);\n\n const instance_panel = (customPanelEnabled ? <div className='getting-started getting-started__panel' dangerouslySetInnerHTML={{__html: customPanel}} /> : null);\n\n return (\n <Column bindToDocument={!multiColumn} name='getting-started' icon='asterisk' heading={intl.formatMessage(messages.heading)} label={intl.formatMessage(messages.menu)} hideHeadingOnMobile>\n <div className='scrollable optionally-scrollable'>\n <div className='getting-started__wrapper'>\n {!multiColumn && <NavigationBar account={myAccount} />}\n {multiColumn && <ColumnSubheading text={intl.formatMessage(messages.navigation_subheading)} />}\n {navItems}\n <ColumnSubheading text={intl.formatMessage(messages.lists_subheading)} />\n {listItems}\n <ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} />\n { preferencesLink !== undefined && <ColumnLink icon='cog' text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> }\n <ColumnLink icon='cogs' text={intl.formatMessage(messages.settings)} onClick={openSettings} />\n </div>\n\n {instance_panel}\n\n <LinkFooter />\n </div>\n\n {multiColumn && showTrends && <TrendsContainer />}\n </Column>\n );\n }\n\n}\n","import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Hashtag from 'flavours/glitch/components/hashtag';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Trends extends ImmutablePureComponent {\n\n static defaultProps = {\n loading: false,\n };\n\n static propTypes = {\n trends: ImmutablePropTypes.list,\n fetchTrends: PropTypes.func.isRequired,\n };\n\n componentDidMount () {\n this.props.fetchTrends();\n this.refreshInterval = setInterval(() => this.props.fetchTrends(), 900 * 1000);\n }\n\n componentWillUnmount () {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n }\n }\n\n render () {\n const { trends } = this.props;\n\n if (!trends || trends.isEmpty()) {\n return null;\n }\n\n return (\n <div className='getting-started__trends'>\n <h4><FormattedMessage id='trends.trending_now' defaultMessage='Trending now' /></h4>\n\n {trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { fetchTrends } from 'mastodon/actions/trends';\nimport Trends from '../components/trends';\n\nconst mapStateToProps = state => ({\n trends: state.getIn(['trends', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchTrends: () => dispatch(fetchTrends()),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Trends);\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/getting_started_misc.js b/priv/static/packs/flavours/glitch/async/getting_started_misc.js
index 1efef99bf..2b17ff3bc 100644
--- a/priv/static/packs/flavours/glitch/async/getting_started_misc.js
+++ b/priv/static/packs/flavours/glitch/async/getting_started_misc.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{783:function(e,a,t){"use strict";t.r(a),t.d(a,"default",(function(){return v}));var o,s,i,n,r=t(0),d=t(2),c=t(7),u=t(1),b=(t(3),t(5)),f=t.n(b),g=t(730),l=t(735),m=t(6),p=t(18),h=t(1075),M=t(1076),O=t(42),_=t(13),j=Object(m.f)(((o={heading:{id:"column.heading",defaultMessage:"Misc"},subheading:{id:"column.subheading",defaultMessage:"Miscellaneous options"},favourites:{id:"navigation_bar.favourites",defaultMessage:"Favourites"},blocks:{id:"navigation_bar.blocks",defaultMessage:"Blocked users"},domain_blocks:{id:"navigation_bar.domain_blocks",defaultMessage:"Hidden domains"},mutes:{id:"navigation_bar.mutes",defaultMessage:"Muted users"},info:{id:"navigation_bar.info",defaultMessage:"Extended information"},show_me_around:{id:"getting_started.onboarding",defaultMessage:"Show me around"},pins:{id:"navigation_bar.pins",defaultMessage:"Pinned toots"}}).info={id:"navigation_bar.info",defaultMessage:"Extended information"},o.keyboard_shortcuts={id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Keyboard shortcuts"},o.featured_users={id:"navigation_bar.featured_users",defaultMessage:"Featured users"},o)),v=Object(_.connect)()(s=Object(m.g)((n=i=function(e){function a(){for(var a,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];return a=e.call.apply(e,[this].concat(o))||this,Object(u.a)(Object(d.a)(a),"openOnboardingModal",(function(e){a.props.dispatch(Object(O.d)("ONBOARDING"))})),Object(u.a)(Object(d.a)(a),"openFeaturedAccountsModal",(function(e){a.props.dispatch(Object(O.d)("PINNED_ACCOUNTS_EDITOR"))})),a}return Object(c.a)(a,e),a.prototype.render=function(){var e=this.props.intl;return Object(r.a)(g.a,{icon:"ellipsis-h",heading:e.formatMessage(j.heading)},void 0,Object(r.a)(l.a,{}),Object(r.a)("div",{className:"scrollable"},void 0,Object(r.a)(M.a,{text:e.formatMessage(j.subheading)}),Object(r.a)(h.a,{icon:"star",text:e.formatMessage(j.favourites),to:"/favourites"},"{i++}"),Object(r.a)(h.a,{icon:"thumb-tack",text:e.formatMessage(j.pins),to:"/pinned"},"{i++}"),Object(r.a)(h.a,{icon:"users",text:e.formatMessage(j.featured_users),onClick:this.openFeaturedAccountsModal},"{i++}"),Object(r.a)(h.a,{icon:"volume-off",text:e.formatMessage(j.mutes),to:"/mutes"},"{i++}"),Object(r.a)(h.a,{icon:"ban",text:e.formatMessage(j.blocks),to:"/blocks"},"{i++}"),Object(r.a)(h.a,{icon:"minus-circle",text:e.formatMessage(j.domain_blocks),to:"/domain_blocks"},"{i++}"),Object(r.a)(h.a,{icon:"question",text:e.formatMessage(j.keyboard_shortcuts),to:"/keyboard-shortcuts"},"{i++}"),Object(r.a)(h.a,{icon:"book",text:e.formatMessage(j.info),href:"/about/more"},"{i++}"),Object(r.a)(h.a,{icon:"hand-o-right",text:e.formatMessage(j.show_me_around),onClick:this.openOnboardingModal},"{i++}")))},a}(p.a),Object(u.a)(i,"propTypes",{intl:f.a.object.isRequired,dispatch:f.a.func.isRequired}),s=n))||s)||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{809:function(e,a,t){"use strict";t.r(a),t.d(a,"default",(function(){return v}));var o,s,i,n,r=t(0),d=t(2),c=(t(9),t(6),t(8)),u=t(1),b=(t(3),t(5)),f=t.n(b),g=t(756),l=t(761),m=t(7),p=t(21),h=t(1103),M=t(1104),O=t(45),_=t(15);var j=Object(m.f)(((o={heading:{id:"column.heading",defaultMessage:"Misc"},subheading:{id:"column.subheading",defaultMessage:"Miscellaneous options"},favourites:{id:"navigation_bar.favourites",defaultMessage:"Favourites"},blocks:{id:"navigation_bar.blocks",defaultMessage:"Blocked users"},domain_blocks:{id:"navigation_bar.domain_blocks",defaultMessage:"Hidden domains"},mutes:{id:"navigation_bar.mutes",defaultMessage:"Muted users"},info:{id:"navigation_bar.info",defaultMessage:"Extended information"},show_me_around:{id:"getting_started.onboarding",defaultMessage:"Show me around"},pins:{id:"navigation_bar.pins",defaultMessage:"Pinned toots"}}).info={id:"navigation_bar.info",defaultMessage:"Extended information"},o.keyboard_shortcuts={id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Keyboard shortcuts"},o.featured_users={id:"navigation_bar.featured_users",defaultMessage:"Featured users"},o)),v=Object(_.connect)()(s=Object(m.g)((n=i=function(e){Object(c.a)(t,e);var a;a=t;function t(){for(var a,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];return a=e.call.apply(e,[this].concat(o))||this,Object(u.a)(Object(d.a)(a),"openOnboardingModal",(function(e){a.props.dispatch(Object(O.d)("ONBOARDING"))})),Object(u.a)(Object(d.a)(a),"openFeaturedAccountsModal",(function(e){a.props.dispatch(Object(O.d)("PINNED_ACCOUNTS_EDITOR"))})),a}return t.prototype.render=function(){var e=this.props.intl;return Object(r.a)(g.a,{icon:"ellipsis-h",heading:e.formatMessage(j.heading)},void 0,Object(r.a)(l.a,{}),Object(r.a)("div",{className:"scrollable"},void 0,Object(r.a)(M.a,{text:e.formatMessage(j.subheading)}),Object(r.a)(h.a,{icon:"star",text:e.formatMessage(j.favourites),to:"/favourites"},"{i++}"),Object(r.a)(h.a,{icon:"thumb-tack",text:e.formatMessage(j.pins),to:"/pinned"},"{i++}"),Object(r.a)(h.a,{icon:"users",text:e.formatMessage(j.featured_users),onClick:this.openFeaturedAccountsModal},"{i++}"),Object(r.a)(h.a,{icon:"volume-off",text:e.formatMessage(j.mutes),to:"/mutes"},"{i++}"),Object(r.a)(h.a,{icon:"ban",text:e.formatMessage(j.blocks),to:"/blocks"},"{i++}"),Object(r.a)(h.a,{icon:"minus-circle",text:e.formatMessage(j.domain_blocks),to:"/domain_blocks"},"{i++}"),Object(r.a)(h.a,{icon:"question",text:e.formatMessage(j.keyboard_shortcuts),to:"/keyboard-shortcuts"},"{i++}"),Object(r.a)(h.a,{icon:"book",text:e.formatMessage(j.info),href:"/about/more"},"{i++}"),Object(r.a)(h.a,{icon:"hand-o-right",text:e.formatMessage(j.show_me_around),onClick:this.openOnboardingModal},"{i++}")))},t}(p.a),Object(u.a)(i,"propTypes",{intl:f.a.object.isRequired,dispatch:f.a.func.isRequired}),s=n))||s)||s}}]);
//# sourceMappingURL=getting_started_misc.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/getting_started_misc.js.map b/priv/static/packs/flavours/glitch/async/getting_started_misc.js.map
index 6917180c4..ba253da51 100644
--- a/priv/static/packs/flavours/glitch/async/getting_started_misc.js.map
+++ b/priv/static/packs/flavours/glitch/async/getting_started_misc.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started_misc/index.js"],"names":["messages","defineMessages","heading","subheading","favourites","blocks","domain_blocks","mutes","info","show_me_around","pins","keyboard_shortcuts","featured_users","gettingStartedMisc","connect","injectIntl","e","props","dispatch","openModal","render","intl","this","icon","formatMessage","className","text","to","onClick","openFeaturedAccountsModal","href","openOnboardingModal","ImmutablePureComponent","PropTypes","object","isRequired","func"],"mappings":"8QAWMA,EAAWC,cAAc,GAC7BC,QAAQ,CAAD,2CACPC,WAAW,CAAD,+DACVC,WAAW,CAAD,4DACVC,OAAO,CAAD,2DACNC,cAAc,CAAD,mEACbC,MAAM,CAAD,wDACLC,KAAK,CAAD,gEACJC,eAAe,CAAD,iEACdC,KAAK,CAAD,0DATyB,wEAW7BC,mBAX6B,+EAY7BC,eAZ6B,yEAiBzBC,EAFUC,mB,GACfC,a,yMAQuB,SAACC,GACrB,EAAKC,MAAMC,SAASC,YAAU,kB,wDAGJ,SAACH,GAC3B,EAAKC,MAAMC,SAASC,YAAU,8B,sCAGhCC,OAAA,WAAW,IACDC,EAASC,KAAKL,MAAdI,KAIR,OACE,YAAC,IAAD,CAAQE,KAAK,aAAarB,QAASmB,EAAKG,cAAcxB,EAASE,eAA/D,EACE,YAAC,IAAD,IAEA,mBAAKuB,UAAU,mBAAf,EACE,YAAC,IAAD,CAAkBC,KAAML,EAAKG,cAAcxB,EAASG,cACpD,YAAC,IAAD,CAAwBoB,KAAK,OAAOG,KAAML,EAAKG,cAAcxB,EAASI,YAAauB,GAAG,eAAtE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,aAAaG,KAAML,EAAKG,cAAcxB,EAASU,MAAOiB,GAAG,WAAtE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,QAAQG,KAAML,EAAKG,cAAcxB,EAASY,gBAAiBgB,QAASN,KAAKO,2BAAtF,SAChB,YAAC,IAAD,CAAwBN,KAAK,aAAaG,KAAML,EAAKG,cAAcxB,EAASO,OAAQoB,GAAG,UAAvE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,MAAMG,KAAML,EAAKG,cAAcxB,EAASK,QAASsB,GAAG,WAAjE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,eAAeG,KAAML,EAAKG,cAAcxB,EAASM,eAAgBqB,GAAG,kBAAjF,SAChB,YAAC,IAAD,CAAwBJ,KAAK,WAAWG,KAAML,EAAKG,cAAcxB,EAASW,oBAAqBgB,GAAG,uBAAlF,SAChB,YAAC,IAAD,CAAwBJ,KAAK,OAAOG,KAAML,EAAKG,cAAcxB,EAASQ,MAAOsB,KAAK,eAAlE,SAChB,YAAC,IAAD,CAAwBP,KAAK,eAAeG,KAAML,EAAKG,cAAcxB,EAASS,gBAAiBmB,QAASN,KAAKS,qBAA7F,Y,GAlCOC,K,0BAEZ,CACjBX,KAAMY,IAAUC,OAAOC,WACvBjB,SAAUe,IAAUG,KAAKD,a","file":"flavours/glitch/async/getting_started_misc.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { connect } from 'react-redux';\n\nconst messages = defineMessages({\n heading: { id: 'column.heading', defaultMessage: 'Misc' },\n subheading: { id: 'column.subheading', defaultMessage: 'Miscellaneous options' },\n favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },\n blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },\n domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },\n mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },\n info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' },\n show_me_around: { id: 'getting_started.onboarding', defaultMessage: 'Show me around' },\n pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },\n info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' },\n keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' },\n featured_users: { id: 'navigation_bar.featured_users', defaultMessage: 'Featured users' },\n});\n\nexport default @connect()\n@injectIntl\nclass gettingStartedMisc extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n };\n\n openOnboardingModal = (e) => {\n this.props.dispatch(openModal('ONBOARDING'));\n }\n\n openFeaturedAccountsModal = (e) => {\n this.props.dispatch(openModal('PINNED_ACCOUNTS_EDITOR'));\n }\n\n render () {\n const { intl } = this.props;\n\n let i = 1;\n\n return (\n <Column icon='ellipsis-h' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <div className='scrollable'>\n <ColumnSubheading text={intl.formatMessage(messages.subheading)} />\n <ColumnLink key='{i++}' icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />\n <ColumnLink key='{i++}' icon='thumb-tack' text={intl.formatMessage(messages.pins)} to='/pinned' />\n <ColumnLink key='{i++}' icon='users' text={intl.formatMessage(messages.featured_users)} onClick={this.openFeaturedAccountsModal} />\n <ColumnLink key='{i++}' icon='volume-off' text={intl.formatMessage(messages.mutes)} to='/mutes' />\n <ColumnLink key='{i++}' icon='ban' text={intl.formatMessage(messages.blocks)} to='/blocks' />\n <ColumnLink key='{i++}' icon='minus-circle' text={intl.formatMessage(messages.domain_blocks)} to='/domain_blocks' />\n <ColumnLink key='{i++}' icon='question' text={intl.formatMessage(messages.keyboard_shortcuts)} to='/keyboard-shortcuts' />\n <ColumnLink key='{i++}' icon='book' text={intl.formatMessage(messages.info)} href='/about/more' />\n <ColumnLink key='{i++}' icon='hand-o-right' text={intl.formatMessage(messages.show_me_around)} onClick={this.openOnboardingModal} />\n </div>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started_misc/index.js"],"names":["messages","defineMessages","heading","subheading","favourites","blocks","domain_blocks","mutes","info","show_me_around","pins","keyboard_shortcuts","featured_users","gettingStartedMisc","connect","injectIntl","e","props","dispatch","openModal","render","intl","this","icon","formatMessage","className","text","to","onClick","openFeaturedAccountsModal","href","openOnboardingModal","ImmutablePureComponent","PropTypes","object","isRequired","func"],"mappings":"0RAWA,IAAMA,EAAWC,cAAc,GAC7BC,QAAQ,CAAD,2CACPC,WAAW,CAAD,+DACVC,WAAW,CAAD,4DACVC,OAAO,CAAD,2DACNC,cAAc,CAAD,mEACbC,MAAM,CAAD,wDACLC,KAAK,CAAD,gEACJC,eAAe,CAAD,iEACdC,KAAK,CAAD,0DATyB,wEAW7BC,mBAX6B,+EAY7BC,eAZ6B,yEAiBzBC,EAFUC,mB,GACfC,a,oOAQuB,SAACC,GACrB,EAAKC,MAAMC,SAASC,YAAU,kB,wDAGJ,SAACH,GAC3B,EAAKC,MAAMC,SAASC,YAAU,8B,qBAGhCC,OAAA,WAAW,IACDC,EAASC,KAAKL,MAAdI,KAIR,OACE,YAAC,IAAD,CAAQE,KAAK,aAAarB,QAASmB,EAAKG,cAAcxB,EAASE,eAA/D,EACE,YAAC,IAAD,IAEA,mBAAKuB,UAAU,mBAAf,EACE,YAAC,IAAD,CAAkBC,KAAML,EAAKG,cAAcxB,EAASG,cACpD,YAAC,IAAD,CAAwBoB,KAAK,OAAOG,KAAML,EAAKG,cAAcxB,EAASI,YAAauB,GAAG,eAAtE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,aAAaG,KAAML,EAAKG,cAAcxB,EAASU,MAAOiB,GAAG,WAAtE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,QAAQG,KAAML,EAAKG,cAAcxB,EAASY,gBAAiBgB,QAASN,KAAKO,2BAAtF,SAChB,YAAC,IAAD,CAAwBN,KAAK,aAAaG,KAAML,EAAKG,cAAcxB,EAASO,OAAQoB,GAAG,UAAvE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,MAAMG,KAAML,EAAKG,cAAcxB,EAASK,QAASsB,GAAG,WAAjE,SAChB,YAAC,IAAD,CAAwBJ,KAAK,eAAeG,KAAML,EAAKG,cAAcxB,EAASM,eAAgBqB,GAAG,kBAAjF,SAChB,YAAC,IAAD,CAAwBJ,KAAK,WAAWG,KAAML,EAAKG,cAAcxB,EAASW,oBAAqBgB,GAAG,uBAAlF,SAChB,YAAC,IAAD,CAAwBJ,KAAK,OAAOG,KAAML,EAAKG,cAAcxB,EAASQ,MAAOsB,KAAK,eAAlE,SAChB,YAAC,IAAD,CAAwBP,KAAK,eAAeG,KAAML,EAAKG,cAAcxB,EAASS,gBAAiBmB,QAASN,KAAKS,qBAA7F,Y,GAlCOC,K,0BAEZ,CACjBX,KAAMY,IAAUC,OAAOC,WACvBjB,SAAUe,IAAUG,KAAKD,a","file":"flavours/glitch/async/getting_started_misc.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { connect } from 'react-redux';\n\nconst messages = defineMessages({\n heading: { id: 'column.heading', defaultMessage: 'Misc' },\n subheading: { id: 'column.subheading', defaultMessage: 'Miscellaneous options' },\n favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },\n blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },\n domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },\n mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },\n info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' },\n show_me_around: { id: 'getting_started.onboarding', defaultMessage: 'Show me around' },\n pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },\n info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' },\n keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' },\n featured_users: { id: 'navigation_bar.featured_users', defaultMessage: 'Featured users' },\n});\n\nexport default @connect()\n@injectIntl\nclass gettingStartedMisc extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n };\n\n openOnboardingModal = (e) => {\n this.props.dispatch(openModal('ONBOARDING'));\n }\n\n openFeaturedAccountsModal = (e) => {\n this.props.dispatch(openModal('PINNED_ACCOUNTS_EDITOR'));\n }\n\n render () {\n const { intl } = this.props;\n\n let i = 1;\n\n return (\n <Column icon='ellipsis-h' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <div className='scrollable'>\n <ColumnSubheading text={intl.formatMessage(messages.subheading)} />\n <ColumnLink key='{i++}' icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />\n <ColumnLink key='{i++}' icon='thumb-tack' text={intl.formatMessage(messages.pins)} to='/pinned' />\n <ColumnLink key='{i++}' icon='users' text={intl.formatMessage(messages.featured_users)} onClick={this.openFeaturedAccountsModal} />\n <ColumnLink key='{i++}' icon='volume-off' text={intl.formatMessage(messages.mutes)} to='/mutes' />\n <ColumnLink key='{i++}' icon='ban' text={intl.formatMessage(messages.blocks)} to='/blocks' />\n <ColumnLink key='{i++}' icon='minus-circle' text={intl.formatMessage(messages.domain_blocks)} to='/domain_blocks' />\n <ColumnLink key='{i++}' icon='question' text={intl.formatMessage(messages.keyboard_shortcuts)} to='/keyboard-shortcuts' />\n <ColumnLink key='{i++}' icon='book' text={intl.formatMessage(messages.info)} href='/about/more' />\n <ColumnLink key='{i++}' icon='hand-o-right' text={intl.formatMessage(messages.show_me_around)} onClick={this.openOnboardingModal} />\n </div>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/hashtag_timeline.js b/priv/static/packs/flavours/glitch/async/hashtag_timeline.js
index b997808d8..70c5b1c02 100644
--- a/priv/static/packs/flavours/glitch/async/hashtag_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/hashtag_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{817:function(t,e,a){"use strict";a.r(e);var n,s,o=a(0),i=a(2),c=a(7),r=a(1),l=a(1116),u=a.n(l),d=a(3),h=a.n(d),g=a(13),p=a(1033),m=a(734),b=a(732),f=a(6),O=a(301),j=a.n(O),v=a(1143),_=Object(f.f)({placeholder:{id:"hashtag.column_settings.select.placeholder",defaultMessage:"Enter hashtags…"},noOptions:{id:"hashtag.column_settings.select.no_options_message",defaultMessage:"No suggestions found"}}),M=Object(f.g)(n=function(t){function e(){for(var e,a=arguments.length,n=new Array(a),s=0;s<a;s++)n[s]=arguments[s];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(i.a)(e),"state",{open:e.hasTags()}),Object(r.a)(Object(i.a)(e),"onSelect",(function(t){return function(a){return e.props.onChange(["tags",t],a)}})),Object(r.a)(Object(i.a)(e),"onToggle",(function(){e.state.open&&e.hasTags()&&e.props.onChange("tags",{}),e.setState({open:!e.state.open})})),Object(r.a)(Object(i.a)(e),"noOptionsMessage",(function(){return e.props.intl.formatMessage(_.noOptions)})),e}Object(c.a)(e,t);var a=e.prototype;return a.hasTags=function(){var t=this;return["all","any","none"].map((function(e){return t.tags(e).length>0})).includes(!0)},a.tags=function(t){var e=this.props.settings.getIn(["tags",t])||[];return e.toJSON?e.toJSON():e},a.modeSelect=function(t){return Object(o.a)("div",{className:"column-settings__row"},void 0,Object(o.a)("span",{className:"column-settings__section"},void 0,this.modeLabel(t)),Object(o.a)(v.a,{isMulti:!0,autoFocus:!0,value:this.tags(t),onChange:this.onSelect(t),loadOptions:this.props.onLoad,className:"column-select__container",classNamePrefix:"column-select",name:"tags",placeholder:this.props.intl.formatMessage(_.placeholder),noOptionsMessage:this.noOptionsMessage}))},a.modeLabel=function(t){switch(t){case"any":return Object(o.a)(f.b,{id:"hashtag.column_settings.tag_mode.any",defaultMessage:"Any of these"});case"all":return Object(o.a)(f.b,{id:"hashtag.column_settings.tag_mode.all",defaultMessage:"All of these"});case"none":return Object(o.a)(f.b,{id:"hashtag.column_settings.tag_mode.none",defaultMessage:"None of these"});default:return""}},a.render=function(){return Object(o.a)("div",{},void 0,Object(o.a)("div",{className:"column-settings__row"},void 0,Object(o.a)("div",{className:"setting-toggle"},void 0,Object(o.a)(j.a,{id:"hashtag.column_settings.tag_toggle",onChange:this.onToggle,checked:this.state.open}),Object(o.a)("span",{className:"setting-toggle__label"},void 0,Object(o.a)(f.b,{id:"hashtag.column_settings.tag_toggle",defaultMessage:"Include additional tags in this column"})))),this.state.open&&Object(o.a)("div",{className:"column-settings__hashtags"},void 0,this.modeSelect("any"),this.modeSelect("all"),this.modeSelect("none")))},e}(h.a.PureComponent))||n,y=a(249),w=a(11),I=Object(g.connect)((function(t,e){var a=e.columnId,n=t.getIn(["settings","columns"]),s=n.findIndex((function(t){return t.get("uuid")===a}));return a&&s>=0?{settings:n.get(s).get("params")}:{}}),(function(t,e){var a=e.columnId;return{onChange:function(e,n){t(Object(y.f)(a,e,n))},onLoad:function(t){return Object(w.a)().get("/api/v2/search",{params:{q:t,type:"hashtags"}}).then((function(t){return(t.data.hashtags||[]).map((function(t){return{value:t.name,label:"#"+t.name}}))}))}}}))(M),C=a(32),N=a(739);a.d(e,"default",(function(){return S}));var S=Object(g.connect)((function(t,e){return{hasUnread:t.getIn(["timelines","hashtag:"+e.params.id,"unread"])>0}}))(s=function(t){function e(){for(var e,a=arguments.length,n=new Array(a),s=0;s<a;s++)n[s]=arguments[s];return e=t.call.apply(t,[this].concat(n))||this,Object(r.a)(Object(i.a)(e),"disconnects",[]),Object(r.a)(Object(i.a)(e),"handlePin",(function(){var t=e.props,a=t.columnId,n=t.dispatch;n(a?Object(y.h)(a):Object(y.e)("HASHTAG",{id:e.props.params.id}))})),Object(r.a)(Object(i.a)(e),"title",(function(){var t=[e.props.params.id];return e.additionalFor("any")&&t.push(" ",Object(o.a)(f.b,{id:"hashtag.column_header.tag_mode.any",values:{additional:e.additionalFor("any")},defaultMessage:"or {additional}"},"any")),e.additionalFor("all")&&t.push(" ",Object(o.a)(f.b,{id:"hashtag.column_header.tag_mode.all",values:{additional:e.additionalFor("all")},defaultMessage:"and {additional}"},"all")),e.additionalFor("none")&&t.push(" ",Object(o.a)(f.b,{id:"hashtag.column_header.tag_mode.none",values:{additional:e.additionalFor("none")},defaultMessage:"without {additional}"},"none")),t})),Object(r.a)(Object(i.a)(e),"additionalFor",(function(t){var a=e.props.params.tags;return a&&(a[t]||[]).length>0?a[t].map((function(t){return t.value})).join("/"):""})),Object(r.a)(Object(i.a)(e),"handleMove",(function(t){var a=e.props,n=a.columnId;(0,a.dispatch)(Object(y.g)(n,t))})),Object(r.a)(Object(i.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(i.a)(e),"setRef",(function(t){e.column=t})),Object(r.a)(Object(i.a)(e),"handleLoadMore",(function(t){var a=e.props.params,n=a.id,s=a.tags;e.props.dispatch(Object(C.t)(n,{maxId:t,tags:s}))})),e}Object(c.a)(e,t);var a=e.prototype;return a._subscribe=function(t,e,a){var n=this;void 0===a&&(a={});var s=(a.any||[]).map((function(t){return t.value})),o=(a.all||[]).map((function(t){return t.value})),i=(a.none||[]).map((function(t){return t.value}));[e].concat(s).map((function(a){n.disconnects.push(t(Object(N.c)(e,a,(function(t){var e=t.tags.map((function(t){return t.name}));return o.filter((function(t){return e.includes(t)})).length===o.length&&0===i.filter((function(t){return e.includes(t)})).length}))))}))},a._unsubscribe=function(){this.disconnects.map((function(t){return t()})),this.disconnects=[]},a.componentDidMount=function(){var t=this.props.dispatch,e=this.props.params,a=e.id,n=e.tags;this._subscribe(t,a,n),t(Object(C.t)(a,{tags:n}))},a.componentWillReceiveProps=function(t){var e=this.props,a=e.dispatch,n=e.params,s=t.params,o=s.id,i=s.tags;o===n.id&&u()(i,n.tags)||(this._unsubscribe(),this._subscribe(a,o,i),this.props.dispatch(Object(C.k)("hashtag:"+o)),this.props.dispatch(Object(C.t)(o,{tags:i})))},a.componentWillUnmount=function(){this._unsubscribe()},a.render=function(){var t=this.props,e=t.hasUnread,a=t.columnId,n=t.multiColumn,s=this.props.params.id,i=!!a;return h.a.createElement(m.a,{ref:this.setRef,name:"hashtag",label:"#"+s},Object(o.a)(b.a,{icon:"hashtag",active:e,title:this.title(),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:i,multiColumn:n,showBackButton:!0,bindToDocument:!n},void 0,a&&Object(o.a)(I,{columnId:a})),Object(o.a)(p.a,{trackScroll:!i,scrollKey:"hashtag_timeline-"+a,timelineId:"hashtag:"+s,onLoadMore:this.handleLoadMore,emptyMessage:Object(o.a)(f.b,{id:"empty_column.hashtag",defaultMessage:"There is nothing in this hashtag yet."}),bindToDocument:!n}))},e}(h.a.PureComponent))||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{844:function(t,e,a){"use strict";a.r(e),a.d(e,"default",(function(){return S}));var n,s=a(0),o=a(2),i=(a(9),a(6),a(8)),c=a(1),r=a(1148),l=a.n(r),u=a(3),d=a.n(u),h=a(15),g=a(1059),p=a(760),m=a(758),b=a(7),f=a(307),O=a.n(f),j=a(1176);var v,_=Object(b.f)({placeholder:{id:"hashtag.column_settings.select.placeholder",defaultMessage:"Enter hashtags…"},noOptions:{id:"hashtag.column_settings.select.no_options_message",defaultMessage:"No suggestions found"}}),M=Object(b.g)(n=function(t){Object(i.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,n=new Array(a),s=0;s<a;s++)n[s]=arguments[s];return e=t.call.apply(t,[this].concat(n))||this,Object(c.a)(Object(o.a)(e),"state",{open:e.hasTags()}),Object(c.a)(Object(o.a)(e),"onSelect",(function(t){return function(a){return e.props.onChange(["tags",t],a)}})),Object(c.a)(Object(o.a)(e),"onToggle",(function(){e.state.open&&e.hasTags()&&e.props.onChange("tags",{}),e.setState({open:!e.state.open})})),Object(c.a)(Object(o.a)(e),"noOptionsMessage",(function(){return e.props.intl.formatMessage(_.noOptions)})),e}var n=a.prototype;return n.hasTags=function(){var t=this;return["all","any","none"].map((function(e){return t.tags(e).length>0})).includes(!0)},n.tags=function(t){var e=this.props.settings.getIn(["tags",t])||[];return e.toJSON?e.toJSON():e},n.modeSelect=function(t){return Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)("span",{className:"column-settings__section"},void 0,this.modeLabel(t)),Object(s.a)(j.a,{isMulti:!0,autoFocus:!0,value:this.tags(t),onChange:this.onSelect(t),loadOptions:this.props.onLoad,className:"column-select__container",classNamePrefix:"column-select",name:"tags",placeholder:this.props.intl.formatMessage(_.placeholder),noOptionsMessage:this.noOptionsMessage}))},n.modeLabel=function(t){switch(t){case"any":return Object(s.a)(b.b,{id:"hashtag.column_settings.tag_mode.any",defaultMessage:"Any of these"});case"all":return Object(s.a)(b.b,{id:"hashtag.column_settings.tag_mode.all",defaultMessage:"All of these"});case"none":return Object(s.a)(b.b,{id:"hashtag.column_settings.tag_mode.none",defaultMessage:"None of these"});default:return""}},n.render=function(){return Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)("div",{className:"setting-toggle"},void 0,Object(s.a)(O.a,{id:"hashtag.column_settings.tag_toggle",onChange:this.onToggle,checked:this.state.open}),Object(s.a)("span",{className:"setting-toggle__label"},void 0,Object(s.a)(b.b,{id:"hashtag.column_settings.tag_toggle",defaultMessage:"Include additional tags in this column"})))),this.state.open&&Object(s.a)("div",{className:"column-settings__hashtags"},void 0,this.modeSelect("any"),this.modeSelect("all"),this.modeSelect("none")))},a}(d.a.PureComponent))||n,y=a(252),w=a(13),I=Object(h.connect)((function(t,e){var a=e.columnId,n=t.getIn(["settings","columns"]),s=n.findIndex((function(t){return t.get("uuid")===a}));return a&&s>=0?{settings:n.get(s).get("params")}:{}}),(function(t,e){var a=e.columnId;return{onChange:function(e,n){t(Object(y.f)(a,e,n))},onLoad:function(t){return Object(w.a)().get("/api/v2/search",{params:{q:t,type:"hashtags"}}).then((function(t){return(t.data.hashtags||[]).map((function(t){return{value:t.name,label:"#"+t.name}}))}))}}}))(M),C=a(34),N=a(765);var S=Object(h.connect)((function(t,e){return{hasUnread:t.getIn(["timelines","hashtag:"+e.params.id,"unread"])>0}}))(v=function(t){Object(i.a)(a,t);var e;e=a;function a(){for(var e,a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return e=t.call.apply(t,[this].concat(n))||this,Object(c.a)(Object(o.a)(e),"disconnects",[]),Object(c.a)(Object(o.a)(e),"handlePin",(function(){var t=e.props,a=t.columnId,n=t.dispatch;n(a?Object(y.h)(a):Object(y.e)("HASHTAG",{id:e.props.params.id}))})),Object(c.a)(Object(o.a)(e),"title",(function(){var t=[e.props.params.id];return e.additionalFor("any")&&t.push(" ",Object(s.a)(b.b,{id:"hashtag.column_header.tag_mode.any",values:{additional:e.additionalFor("any")},defaultMessage:"or {additional}"},"any")),e.additionalFor("all")&&t.push(" ",Object(s.a)(b.b,{id:"hashtag.column_header.tag_mode.all",values:{additional:e.additionalFor("all")},defaultMessage:"and {additional}"},"all")),e.additionalFor("none")&&t.push(" ",Object(s.a)(b.b,{id:"hashtag.column_header.tag_mode.none",values:{additional:e.additionalFor("none")},defaultMessage:"without {additional}"},"none")),t})),Object(c.a)(Object(o.a)(e),"additionalFor",(function(t){var a=e.props.params.tags;return a&&(a[t]||[]).length>0?a[t].map((function(t){return t.value})).join("/"):""})),Object(c.a)(Object(o.a)(e),"handleMove",(function(t){var a=e.props,n=a.columnId;(0,a.dispatch)(Object(y.g)(n,t))})),Object(c.a)(Object(o.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(c.a)(Object(o.a)(e),"setRef",(function(t){e.column=t})),Object(c.a)(Object(o.a)(e),"handleLoadMore",(function(t){var a=e.props.params,n=a.id,s=a.tags;e.props.dispatch(Object(C.t)(n,{maxId:t,tags:s}))})),e}var n=a.prototype;return n._subscribe=function(t,e,a){var n=this;void 0===a&&(a={});var s=(a.any||[]).map((function(t){return t.value})),o=(a.all||[]).map((function(t){return t.value})),i=(a.none||[]).map((function(t){return t.value}));[e].concat(s).map((function(a){n.disconnects.push(t(Object(N.c)(e,a,(function(t){var e=t.tags.map((function(t){return t.name}));return o.filter((function(t){return e.includes(t)})).length===o.length&&0===i.filter((function(t){return e.includes(t)})).length}))))}))},n._unsubscribe=function(){this.disconnects.map((function(t){return t()})),this.disconnects=[]},n.componentDidMount=function(){var t=this.props.dispatch,e=this.props.params,a=e.id,n=e.tags;this._subscribe(t,a,n),t(Object(C.t)(a,{tags:n}))},n.componentWillReceiveProps=function(t){var e=this.props,a=e.dispatch,n=e.params,s=t.params,o=s.id,i=s.tags;o===n.id&&l()(i,n.tags)||(this._unsubscribe(),this._subscribe(a,o,i),this.props.dispatch(Object(C.k)("hashtag:"+o)),this.props.dispatch(Object(C.t)(o,{tags:i})))},n.componentWillUnmount=function(){this._unsubscribe()},n.render=function(){var t=this.props,e=t.hasUnread,a=t.columnId,n=t.multiColumn,o=this.props.params.id,i=!!a;return d.a.createElement(p.a,{ref:this.setRef,name:"hashtag",label:"#"+o},Object(s.a)(m.a,{icon:"hashtag",active:e,title:this.title(),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:i,multiColumn:n,showBackButton:!0,bindToDocument:!n},void 0,a&&Object(s.a)(I,{columnId:a})),Object(s.a)(g.a,{trackScroll:!i,scrollKey:"hashtag_timeline-"+a,timelineId:"hashtag:"+o,onLoadMore:this.handleLoadMore,emptyMessage:Object(s.a)(b.b,{id:"empty_column.hashtag",defaultMessage:"There is nothing in this hashtag yet."}),bindToDocument:!n}))},a}(d.a.PureComponent))||v}}]);
//# sourceMappingURL=hashtag_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/hashtag_timeline.js.map b/priv/static/packs/flavours/glitch/async/hashtag_timeline.js.map
index 602538af9..f495dd459 100644
--- a/priv/static/packs/flavours/glitch/async/hashtag_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/hashtag_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/index.js"],"names":["messages","defineMessages","placeholder","noOptions","ColumnSettings","injectIntl","open","hasTags","mode","value","props","onChange","state","setState","intl","formatMessage","map","tags","length","includes","this","settings","getIn","toJSON","modeSelect","className","modeLabel","isMulti","autoFocus","onSelect","loadOptions","onLoad","classNamePrefix","name","noOptionsMessage","id","defaultMessage","render","onToggle","checked","React","PureComponent","connect","columnId","columns","index","findIndex","c","get","dispatch","key","changeColumnParams","api","params","q","type","then","response","data","hashtags","tag","label","HashtagTimeline","hasUnread","removeColumn","addColumn","title","additionalFor","push","values","additional","join","dir","moveColumn","column","scrollTop","maxId","expandHashtagTimeline","_subscribe","any","all","none","disconnects","connectHashtagStream","status","filter","_unsubscribe","disconnect","componentDidMount","componentWillReceiveProps","nextProps","clearTimeline","componentWillUnmount","multiColumn","pinned","ref","setRef","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","bindToDocument","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage"],"mappings":"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","file":"flavours/glitch/async/hashtag_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Toggle from 'react-toggle';\nimport AsyncSelect from 'react-select/async';\n\nconst messages = defineMessages({\n placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' },\n noOptions: { id: 'hashtag.column_settings.select.no_options_message', defaultMessage: 'No suggestions found' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onLoad: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n open: this.hasTags(),\n };\n\n hasTags () {\n return ['all', 'any', 'none'].map(mode => this.tags(mode).length > 0).includes(true);\n }\n\n tags (mode) {\n let tags = this.props.settings.getIn(['tags', mode]) || [];\n\n if (tags.toJSON) {\n return tags.toJSON();\n } else {\n return tags;\n }\n };\n\n onSelect = mode => value => this.props.onChange(['tags', mode], value);\n\n onToggle = () => {\n if (this.state.open && this.hasTags()) {\n this.props.onChange('tags', {});\n }\n\n this.setState({ open: !this.state.open });\n };\n\n noOptionsMessage = () => this.props.intl.formatMessage(messages.noOptions);\n\n modeSelect (mode) {\n return (\n <div className='column-settings__row'>\n <span className='column-settings__section'>\n {this.modeLabel(mode)}\n </span>\n\n <AsyncSelect\n isMulti\n autoFocus\n value={this.tags(mode)}\n onChange={this.onSelect(mode)}\n loadOptions={this.props.onLoad}\n className='column-select__container'\n classNamePrefix='column-select'\n name='tags'\n placeholder={this.props.intl.formatMessage(messages.placeholder)}\n noOptionsMessage={this.noOptionsMessage}\n />\n </div>\n );\n }\n\n modeLabel (mode) {\n switch(mode) {\n case 'any':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.any' defaultMessage='Any of these' />;\n case 'all':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.all' defaultMessage='All of these' />;\n case 'none':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.none' defaultMessage='None of these' />;\n default:\n return '';\n }\n };\n\n render () {\n return (\n <div>\n <div className='column-settings__row'>\n <div className='setting-toggle'>\n <Toggle id='hashtag.column_settings.tag_toggle' onChange={this.onToggle} checked={this.state.open} />\n\n <span className='setting-toggle__label'>\n <FormattedMessage id='hashtag.column_settings.tag_toggle' defaultMessage='Include additional tags in this column' />\n </span>\n </div>\n </div>\n\n {this.state.open && (\n <div className='column-settings__hashtags'>\n {this.modeSelect('any')}\n {this.modeSelect('all')}\n {this.modeSelect('none')}\n </div>\n )}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\nimport api from 'flavours/glitch/util/api';\n\nconst mapStateToProps = (state, { columnId }) => {\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === columnId);\n\n if (!(columnId && index >= 0)) {\n return {};\n }\n\n return { settings: columns.get(index).get('params') };\n};\n\nconst mapDispatchToProps = (dispatch, { columnId }) => ({\n onChange (key, value) {\n dispatch(changeColumnParams(columnId, key, value));\n },\n\n onLoad (value) {\n return api().get('/api/v2/search', { params: { q: value, type: 'hashtags' } }).then(response => {\n return (response.data.hashtags || []).map((tag) => {\n return { value: tag.name, label: `#${tag.name}` };\n });\n });\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { expandHashtagTimeline, clearTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { FormattedMessage } from 'react-intl';\nimport { connectHashtagStream } from 'flavours/glitch/actions/streaming';\nimport { isEqual } from 'lodash';\n\nconst mapStateToProps = (state, props) => ({\n hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0,\n});\n\nexport default @connect(mapStateToProps)\nclass HashtagTimeline extends React.PureComponent {\n\n disconnects = [];\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n dispatch: PropTypes.func.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('HASHTAG', { id: this.props.params.id }));\n }\n }\n\n title = () => {\n let title = [this.props.params.id];\n\n if (this.additionalFor('any')) {\n title.push(' ', <FormattedMessage key='any' id='hashtag.column_header.tag_mode.any' values={{ additional: this.additionalFor('any') }} defaultMessage='or {additional}' />);\n }\n\n if (this.additionalFor('all')) {\n title.push(' ', <FormattedMessage key='all' id='hashtag.column_header.tag_mode.all' values={{ additional: this.additionalFor('all') }} defaultMessage='and {additional}' />);\n }\n\n if (this.additionalFor('none')) {\n title.push(' ', <FormattedMessage key='none' id='hashtag.column_header.tag_mode.none' values={{ additional: this.additionalFor('none') }} defaultMessage='without {additional}' />);\n }\n\n return title;\n }\n\n additionalFor = (mode) => {\n const { tags } = this.props.params;\n\n if (tags && (tags[mode] || []).length > 0) {\n return tags[mode].map(tag => tag.value).join('/');\n } else {\n return '';\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n _subscribe (dispatch, id, tags = {}) {\n let any = (tags.any || []).map(tag => tag.value);\n let all = (tags.all || []).map(tag => tag.value);\n let none = (tags.none || []).map(tag => tag.value);\n\n [id, ...any].map(tag => {\n this.disconnects.push(dispatch(connectHashtagStream(id, tag, status => {\n let tags = status.tags.map(tag => tag.name);\n\n return all.filter(tag => tags.includes(tag)).length === all.length &&\n none.filter(tag => tags.includes(tag)).length === 0;\n })));\n });\n }\n\n _unsubscribe () {\n this.disconnects.map(disconnect => disconnect());\n this.disconnects = [];\n }\n\n componentDidMount () {\n const { dispatch } = this.props;\n const { id, tags } = this.props.params;\n\n this._subscribe(dispatch, id, tags);\n dispatch(expandHashtagTimeline(id, { tags }));\n }\n\n componentWillReceiveProps (nextProps) {\n const { dispatch, params } = this.props;\n const { id, tags } = nextProps.params;\n\n if (id !== params.id || !isEqual(tags, params.tags)) {\n this._unsubscribe();\n this._subscribe(dispatch, id, tags);\n this.props.dispatch(clearTimeline(`hashtag:${id}`));\n this.props.dispatch(expandHashtagTimeline(id, { tags }));\n }\n }\n\n componentWillUnmount () {\n this._unsubscribe();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { id, tags } = this.props.params;\n this.props.dispatch(expandHashtagTimeline(id, { maxId, tags }));\n }\n\n render () {\n const { hasUnread, columnId, multiColumn } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} name='hashtag' label={`#${id}`}>\n <ColumnHeader\n icon='hashtag'\n active={hasUnread}\n title={this.title()}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n bindToDocument={!multiColumn}\n >\n {columnId && <ColumnSettingsContainer columnId={columnId} />}\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`hashtag_timeline-${columnId}`}\n timelineId={`hashtag:${id}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/hashtag_timeline/index.js"],"names":["messages","defineMessages","placeholder","noOptions","ColumnSettings","injectIntl","open","hasTags","mode","value","props","onChange","state","setState","intl","formatMessage","map","tags","length","includes","this","settings","getIn","toJSON","modeSelect","className","modeLabel","isMulti","autoFocus","onSelect","loadOptions","onLoad","classNamePrefix","name","noOptionsMessage","id","defaultMessage","render","onToggle","checked","React","PureComponent","connect","columnId","columns","index","findIndex","c","get","dispatch","key","changeColumnParams","api","params","q","type","then","response","data","hashtags","tag","label","HashtagTimeline","hasUnread","removeColumn","addColumn","title","additionalFor","push","values","additional","join","dir","moveColumn","column","scrollTop","maxId","expandHashtagTimeline","_subscribe","any","all","none","disconnects","connectHashtagStream","status","filter","_unsubscribe","disconnect","componentDidMount","componentWillReceiveProps","nextProps","clearTimeline","componentWillUnmount","multiColumn","pinned","ref","setRef","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","bindToDocument","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage"],"mappings":"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","file":"flavours/glitch/async/hashtag_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Toggle from 'react-toggle';\nimport AsyncSelect from 'react-select/async';\n\nconst messages = defineMessages({\n placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' },\n noOptions: { id: 'hashtag.column_settings.select.no_options_message', defaultMessage: 'No suggestions found' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onLoad: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n open: this.hasTags(),\n };\n\n hasTags () {\n return ['all', 'any', 'none'].map(mode => this.tags(mode).length > 0).includes(true);\n }\n\n tags (mode) {\n let tags = this.props.settings.getIn(['tags', mode]) || [];\n\n if (tags.toJSON) {\n return tags.toJSON();\n } else {\n return tags;\n }\n };\n\n onSelect = mode => value => this.props.onChange(['tags', mode], value);\n\n onToggle = () => {\n if (this.state.open && this.hasTags()) {\n this.props.onChange('tags', {});\n }\n\n this.setState({ open: !this.state.open });\n };\n\n noOptionsMessage = () => this.props.intl.formatMessage(messages.noOptions);\n\n modeSelect (mode) {\n return (\n <div className='column-settings__row'>\n <span className='column-settings__section'>\n {this.modeLabel(mode)}\n </span>\n\n <AsyncSelect\n isMulti\n autoFocus\n value={this.tags(mode)}\n onChange={this.onSelect(mode)}\n loadOptions={this.props.onLoad}\n className='column-select__container'\n classNamePrefix='column-select'\n name='tags'\n placeholder={this.props.intl.formatMessage(messages.placeholder)}\n noOptionsMessage={this.noOptionsMessage}\n />\n </div>\n );\n }\n\n modeLabel (mode) {\n switch(mode) {\n case 'any':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.any' defaultMessage='Any of these' />;\n case 'all':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.all' defaultMessage='All of these' />;\n case 'none':\n return <FormattedMessage id='hashtag.column_settings.tag_mode.none' defaultMessage='None of these' />;\n default:\n return '';\n }\n };\n\n render () {\n return (\n <div>\n <div className='column-settings__row'>\n <div className='setting-toggle'>\n <Toggle id='hashtag.column_settings.tag_toggle' onChange={this.onToggle} checked={this.state.open} />\n\n <span className='setting-toggle__label'>\n <FormattedMessage id='hashtag.column_settings.tag_toggle' defaultMessage='Include additional tags in this column' />\n </span>\n </div>\n </div>\n\n {this.state.open && (\n <div className='column-settings__hashtags'>\n {this.modeSelect('any')}\n {this.modeSelect('all')}\n {this.modeSelect('none')}\n </div>\n )}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\nimport api from 'flavours/glitch/util/api';\n\nconst mapStateToProps = (state, { columnId }) => {\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === columnId);\n\n if (!(columnId && index >= 0)) {\n return {};\n }\n\n return { settings: columns.get(index).get('params') };\n};\n\nconst mapDispatchToProps = (dispatch, { columnId }) => ({\n onChange (key, value) {\n dispatch(changeColumnParams(columnId, key, value));\n },\n\n onLoad (value) {\n return api().get('/api/v2/search', { params: { q: value, type: 'hashtags' } }).then(response => {\n return (response.data.hashtags || []).map((tag) => {\n return { value: tag.name, label: `#${tag.name}` };\n });\n });\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { expandHashtagTimeline, clearTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { FormattedMessage } from 'react-intl';\nimport { connectHashtagStream } from 'flavours/glitch/actions/streaming';\nimport { isEqual } from 'lodash';\n\nconst mapStateToProps = (state, props) => ({\n hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0,\n});\n\nexport default @connect(mapStateToProps)\nclass HashtagTimeline extends React.PureComponent {\n\n disconnects = [];\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n dispatch: PropTypes.func.isRequired,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('HASHTAG', { id: this.props.params.id }));\n }\n }\n\n title = () => {\n let title = [this.props.params.id];\n\n if (this.additionalFor('any')) {\n title.push(' ', <FormattedMessage key='any' id='hashtag.column_header.tag_mode.any' values={{ additional: this.additionalFor('any') }} defaultMessage='or {additional}' />);\n }\n\n if (this.additionalFor('all')) {\n title.push(' ', <FormattedMessage key='all' id='hashtag.column_header.tag_mode.all' values={{ additional: this.additionalFor('all') }} defaultMessage='and {additional}' />);\n }\n\n if (this.additionalFor('none')) {\n title.push(' ', <FormattedMessage key='none' id='hashtag.column_header.tag_mode.none' values={{ additional: this.additionalFor('none') }} defaultMessage='without {additional}' />);\n }\n\n return title;\n }\n\n additionalFor = (mode) => {\n const { tags } = this.props.params;\n\n if (tags && (tags[mode] || []).length > 0) {\n return tags[mode].map(tag => tag.value).join('/');\n } else {\n return '';\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n _subscribe (dispatch, id, tags = {}) {\n let any = (tags.any || []).map(tag => tag.value);\n let all = (tags.all || []).map(tag => tag.value);\n let none = (tags.none || []).map(tag => tag.value);\n\n [id, ...any].map(tag => {\n this.disconnects.push(dispatch(connectHashtagStream(id, tag, status => {\n let tags = status.tags.map(tag => tag.name);\n\n return all.filter(tag => tags.includes(tag)).length === all.length &&\n none.filter(tag => tags.includes(tag)).length === 0;\n })));\n });\n }\n\n _unsubscribe () {\n this.disconnects.map(disconnect => disconnect());\n this.disconnects = [];\n }\n\n componentDidMount () {\n const { dispatch } = this.props;\n const { id, tags } = this.props.params;\n\n this._subscribe(dispatch, id, tags);\n dispatch(expandHashtagTimeline(id, { tags }));\n }\n\n componentWillReceiveProps (nextProps) {\n const { dispatch, params } = this.props;\n const { id, tags } = nextProps.params;\n\n if (id !== params.id || !isEqual(tags, params.tags)) {\n this._unsubscribe();\n this._subscribe(dispatch, id, tags);\n this.props.dispatch(clearTimeline(`hashtag:${id}`));\n this.props.dispatch(expandHashtagTimeline(id, { tags }));\n }\n }\n\n componentWillUnmount () {\n this._unsubscribe();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { id, tags } = this.props.params;\n this.props.dispatch(expandHashtagTimeline(id, { maxId, tags }));\n }\n\n render () {\n const { hasUnread, columnId, multiColumn } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} name='hashtag' label={`#${id}`}>\n <ColumnHeader\n icon='hashtag'\n active={hasUnread}\n title={this.title()}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n showBackButton\n bindToDocument={!multiColumn}\n >\n {columnId && <ColumnSettingsContainer columnId={columnId} />}\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`hashtag_timeline-${columnId}`}\n timelineId={`hashtag:${id}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/home_timeline.js b/priv/static/packs/flavours/glitch/async/home_timeline.js
index 63d338bb1..778f336ed 100644
--- a/priv/static/packs/flavours/glitch/async/home_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/home_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{816:function(e,t,n){"use strict";n.r(t);var i,o,s=n(0),a=n(2),c=n(7),l=n(1),r=n(3),u=n.n(r),d=n(13),h=n(32),m=n(1033),b=n(734),g=n(732),p=n(249),f=n(6),O=n(1073),j=n(1074),_=Object(f.f)({filter_regex:{id:"home.column_settings.filter_regex",defaultMessage:"Filter out by regular expressions"},settings:{id:"home.settings",defaultMessage:"Column settings"}}),v=Object(f.g)(i=function(e){function t(){return e.apply(this,arguments)||this}return Object(c.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange,i=e.intl;return Object(s.a)("div",{},void 0,Object(s.a)("span",{className:"column-settings__section"},void 0,Object(s.a)(f.b,{id:"home.column_settings.basic",defaultMessage:"Basic"})),Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reblog"],onChange:n,label:Object(s.a)(f.b,{id:"home.column_settings.show_reblogs",defaultMessage:"Show boosts"})})),Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reply"],onChange:n,label:Object(s.a)(f.b,{id:"home.column_settings.show_replies",defaultMessage:"Show replies"})})),Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","direct"],onChange:n,label:Object(s.a)(f.b,{id:"home.column_settings.show_direct",defaultMessage:"Show DMs"})})),Object(s.a)("span",{className:"column-settings__section"},void 0,Object(s.a)(f.b,{id:"home.column_settings.advanced",defaultMessage:"Advanced"})),Object(s.a)("div",{className:"column-settings__row"},void 0,Object(s.a)(j.a,{prefix:"home_timeline",settings:t,settingPath:["regex","body"],onChange:n,label:i.formatMessage(_.filter_regex)})))},t}(u.a.PureComponent))||i,M=n(69),w=Object(d.connect)((function(e){return{settings:e.getIn(["settings","home"])}}),(function(e){return{onChange:function(t,n){e(Object(M.c)(["home"].concat(t),n))},onSave:function(){e(Object(M.d)())}}}))(v),P=n(316);n.d(t,"default",(function(){return y}));var C=Object(f.f)({title:{id:"column.home",defaultMessage:"Home"}}),y=Object(d.connect)((function(e){return{hasUnread:e.getIn(["timelines","home","unread"])>0,isPartial:e.getIn(["timelines","home","isPartial"])}}))(o=Object(f.g)(o=function(e){function t(){for(var t,n=arguments.length,i=new Array(n),o=0;o<n;o++)i[o]=arguments[o];return t=e.call.apply(e,[this].concat(i))||this,Object(l.a)(Object(a.a)(t),"handlePin",(function(){var e=t.props,n=e.columnId,i=e.dispatch;i(n?Object(p.h)(n):Object(p.e)("HOME",{}))})),Object(l.a)(Object(a.a)(t),"handleMove",(function(e){var n=t.props,i=n.columnId;(0,n.dispatch)(Object(p.g)(i,e))})),Object(l.a)(Object(a.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(l.a)(Object(a.a)(t),"setRef",(function(e){t.column=e})),Object(l.a)(Object(a.a)(t),"handleLoadMore",(function(e){t.props.dispatch(Object(h.u)({maxId:e}))})),t}Object(c.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){this._checkIfReloadNeeded(!1,this.props.isPartial)},n.componentDidUpdate=function(e){this._checkIfReloadNeeded(e.isPartial,this.props.isPartial)},n.componentWillUnmount=function(){this._stopPolling()},n._checkIfReloadNeeded=function(e,t){var n=this.props.dispatch;e!==t&&(!e&&t?this.polling=setInterval((function(){n(Object(h.u)())}),3e3):e&&!t&&this._stopPolling())},n._stopPolling=function(){this.polling&&(clearInterval(this.polling),this.polling=null)},n.render=function(){var e=this.props,t=e.intl,n=e.hasUnread,i=e.columnId,o=e.multiColumn,a=!!i;return u.a.createElement(b.a,{bindToDocument:!o,ref:this.setRef,name:"home",label:t.formatMessage(C.title)},Object(s.a)(g.a,{icon:"home",active:n,title:t.formatMessage(C.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:a,multiColumn:o},void 0,Object(s.a)(w,{})),Object(s.a)(m.a,{trackScroll:!a,scrollKey:"home_timeline-"+i,onLoadMore:this.handleLoadMore,timelineId:"home",emptyMessage:Object(s.a)(f.b,{id:"empty_column.home",defaultMessage:"Your home timeline is empty! Visit {public} or use search to get started and meet other users.",values:{public:Object(s.a)(P.a,{to:"/timelines/public"},void 0,Object(s.a)(f.b,{id:"empty_column.home.public_timeline",defaultMessage:"the public timeline"}))}}),bindToDocument:!o}))},t}(u.a.PureComponent))||o)||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{1272:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return U}));var a,i,o,s=n(0),c=n(2),r=n(9),u=n(6),l=n(8),d=n(1),m=n(3),p=n.n(m),h=n(21),b=n(216),g=n.n(b),f=n(16),j=n.n(f),v=n(5),O=n.n(v),_=n(41),y=n(25),M=n(7),R=n(18),x=n(99),k=n.n(x),C=n(14),w=n.n(C),A=n(544),N=n(589),I=n(473),E=n.n(I),P=n(35),L=n.n(P);function q(e){return function(){var t,n=Object(u.a)(e);if(S()){var a=Object(u.a)(this).constructor;t=Reflect.construct(n,arguments,a)}else t=n.apply(this,arguments);return Object(r.a)(this,t)}}function S(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}var D=Object(M.f)({close:{id:"lightbox.close",defaultMessage:"Close"},previous:{id:"lightbox.previous",defaultMessage:"Previous"},next:{id:"lightbox.next",defaultMessage:"Next"}}),z=function(e){Object(l.a)(t,e);q(t);function t(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"setRef",(function(e){t.node=e})),Object(d.a)(Object(c.a)(t),"onMentionClick",(function(e,n){!t.context.router||0!==n.button||n.ctrlKey||n.metaKey||(n.preventDefault(),t.context.router.history.push("/accounts/"+e.get("id")))})),Object(d.a)(Object(c.a)(t),"onHashtagClick",(function(e,n){e=e.replace(/^#/,""),!t.context.router||0!==n.button||n.ctrlKey||n.metaKey||(n.preventDefault(),t.context.router.history.push("/timelines/tag/"+e))})),Object(d.a)(Object(c.a)(t),"onStatusClick",(function(e,n){!t.context.router||0!==n.button||n.ctrlKey||n.metaKey||(n.preventDefault(),t.context.router.history.push("/statuses/"+e.get("id")))})),Object(d.a)(Object(c.a)(t),"handleEmojiMouseEnter",(function(e){var t=e.target;t.src=t.getAttribute("data-original")})),Object(d.a)(Object(c.a)(t),"handleEmojiMouseLeave",(function(e){var t=e.target;t.src=t.getAttribute("data-static")})),t}var n=t.prototype;return n.componentDidMount=function(){this._updateLinks(),this._updateEmojis()},n.componentDidUpdate=function(){this._updateLinks(),this._updateEmojis()},n._updateEmojis=function(){var e=this.node;if(e&&!R.a)for(var t=e.querySelectorAll(".custom-emoji"),n=0;n<t.length;n++){var a=t[n];a.classList.contains("status-emoji")||(a.classList.add("status-emoji"),a.addEventListener("mouseenter",this.handleEmojiMouseEnter,!1),a.addEventListener("mouseleave",this.handleEmojiMouseLeave,!1))}},n._updateLinks=function(){var e=this,t=this.node;if(t)for(var n=t.querySelectorAll("a"),a=function(){var t=n[i];if(t.classList.contains("status-link"))return"continue";t.classList.add("status-link");var a=e.props.announcement.get("mentions").find((function(e){return t.href===e.get("url")}));if(a)t.addEventListener("click",e.onMentionClick.bind(e,a),!1),t.setAttribute("title",a.get("acct"));else if("#"===t.textContent[0]||t.previousSibling&&t.previousSibling.textContent&&"#"===t.previousSibling.textContent[t.previousSibling.textContent.length-1])t.addEventListener("click",e.onHashtagClick.bind(e,t.text),!1);else{var o=e.props.announcement.get("statuses").find((function(e){return t.href===e.get("url")}));o&&t.addEventListener("click",e.onStatusClick.bind(e,o),!1),t.setAttribute("title",t.href),t.classList.add("unhandled-link")}t.setAttribute("target","_blank"),t.setAttribute("rel","noopener noreferrer")},i=0;i<n.length;++i)a()},n.render=function(){var e=this.props.announcement;return(p.a.createElement("div",{className:"announcements__item__content",ref:this.setRef,dangerouslySetInnerHTML:{__html:e.get("contentHtml")}}))},t}(h.a);Object(d.a)(z,"contextTypes",{router:O.a.object}),Object(d.a)(z,"propTypes",{announcement:j.a.map.isRequired});var T=e.env.CDN_HOST||"",F=function(e){Object(l.a)(t,e);q(t);function t(){return e.apply(this,arguments)||this}return t.prototype.render=function(){var e=this.props,t=e.emoji,n=e.emojiMap,a=e.hovered;if(k.a[t]){var i=k.a[this.props.emoji],o=i.filename,c=i.shortCode,r=c?":"+c+":":"";return Object(s.a)("img",{draggable:"false",className:"emojione",alt:t,title:r,src:T+"/emoji/"+o+".svg"})}if(n.get(t)){var u=R.a||a?n.getIn([t,"url"]):n.getIn([t,"static_url"]),l=":"+t+":";return Object(s.a)("img",{draggable:"false",className:"emojione custom-emoji",alt:l,title:l,src:u})}return null},t}(p.a.PureComponent),H=function(e){Object(l.a)(t,e);q(t);function t(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"state",{hovered:!1}),Object(d.a)(Object(c.a)(t),"handleClick",(function(){var e=t.props,n=e.reaction,a=e.announcementId,i=e.addReaction,o=e.removeReaction;n.get("me")?o(a,n.get("name")):i(a,n.get("name"))})),Object(d.a)(Object(c.a)(t),"handleMouseEnter",(function(){return t.setState({hovered:!0})})),Object(d.a)(Object(c.a)(t),"handleMouseLeave",(function(){return t.setState({hovered:!1})})),t}return t.prototype.render=function(){var e=this.props.reaction,t=e.get("name");return k.a[t]&&(t=k.a[t].shortCode),Object(s.a)("button",{className:w()("reactions-bar__item",{active:e.get("me")}),onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,title:":"+t+":",style:this.props.style},void 0,Object(s.a)("span",{className:"reactions-bar__item__emoji"},void 0,Object(s.a)(F,{hovered:this.state.hovered,emoji:e.get("name"),emojiMap:this.props.emojiMap})),Object(s.a)("span",{className:"reactions-bar__item__count"},void 0,Object(s.a)(N.a,{value:e.get("count")})))},t}(h.a);Object(d.a)(H,"propTypes",{announcementId:O.a.string.isRequired,reaction:j.a.map.isRequired,addReaction:O.a.func.isRequired,removeReaction:O.a.func.isRequired,emojiMap:j.a.map.isRequired,style:O.a.object});var Y=function(e){Object(l.a)(t,e);q(t);function t(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleEmojiPick",(function(e){var n=t.props;(0,n.addReaction)(n.announcementId,e.native.replace(/:/g,""))})),t}var n=t.prototype;return n.willEnter=function(){return{scale:R.p?1:0}},n.willLeave=function(){return{scale:R.p?0:L()(0,{stiffness:170,damping:26})}},n.render=function(){var e=this,t=this.props.reactions.filter((function(e){return e.get("count")>0})),n=t.map((function(e){return{key:e.get("name"),data:e,style:{scale:R.p?1:L()(1,{stiffness:150,damping:13})}}})).toArray();return Object(s.a)(E.a,{styles:n,willEnter:this.willEnter,willLeave:this.willLeave},void 0,(function(n){return Object(s.a)("div",{className:w()("reactions-bar",{"reactions-bar--empty":t.isEmpty()})},void 0,n.map((function(t){var n=t.key,a=t.data,i=t.style;return(Object(s.a)(H,{reaction:a,style:{transform:"scale("+i.scale+")",position:i.scale<.5?"absolute":"static"},announcementId:e.props.announcementId,addReaction:e.props.addReaction,removeReaction:e.props.removeReaction,emojiMap:e.props.emojiMap},n))})),t.size<8&&Object(s.a)(A.a,{onPickEmoji:e.handleEmojiPick,button:Object(s.a)(y.a,{id:"plus"})}))}))},t}(h.a);Object(d.a)(Y,"propTypes",{announcementId:O.a.string.isRequired,reactions:j.a.list.isRequired,addReaction:O.a.func.isRequired,removeReaction:O.a.func.isRequired,emojiMap:j.a.map.isRequired});var K=function(e){Object(l.a)(t,e);q(t);function t(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"state",{unread:!t.props.announcement.get("read")}),t}var n=t.prototype;return n.componentDidUpdate=function(){var e=this.props,t=e.selected,n=e.announcement;t||this.state.unread===!n.get("read")||this.setState({unread:!n.get("read")})},n.render=function(){var e=this.props.announcement,t=this.state.unread,n=e.get("starts_at")&&new Date(e.get("starts_at")),a=e.get("ends_at")&&new Date(e.get("ends_at")),i=new Date,o=n&&a,c=o&&n.getFullYear()===a.getFullYear()&&a.getFullYear()===i.getFullYear(),r=o&&n.getDate()===a.getDate()&&n.getMonth()===a.getMonth()&&n.getFullYear()===a.getFullYear(),u=e.get("all_day");return Object(s.a)("div",{className:"announcements__item"},void 0,Object(s.a)("strong",{className:"announcements__item__range"},void 0,Object(s.a)(M.b,{id:"announcement.announcement",defaultMessage:"Announcement"}),o&&Object(s.a)("span",{},void 0," · ",Object(s.a)(M.a,{value:n,hour12:!1,year:c||n.getFullYear()===i.getFullYear()?void 0:"numeric",month:"short",day:"2-digit",hour:u?void 0:"2-digit",minute:u?void 0:"2-digit"})," - ",Object(s.a)(M.a,{value:a,hour12:!1,year:c||a.getFullYear()===i.getFullYear()?void 0:"numeric",month:r?void 0:"short",day:r?void 0:"2-digit",hour:u?void 0:"2-digit",minute:u?void 0:"2-digit"}))),Object(s.a)(z,{announcement:e}),Object(s.a)(Y,{reactions:e.get("reactions"),announcementId:e.get("id"),addReaction:this.props.addReaction,removeReaction:this.props.removeReaction,emojiMap:this.props.emojiMap}),t&&Object(s.a)("span",{className:"announcements__item__unread"}))},t}(h.a);Object(d.a)(K,"propTypes",{announcement:j.a.map.isRequired,emojiMap:j.a.map.isRequired,addReaction:O.a.func.isRequired,removeReaction:O.a.func.isRequired,intl:O.a.object.isRequired,selected:O.a.bool});var U=Object(M.g)((o=i=function(e){Object(l.a)(t,e);q(t);function t(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"state",{index:0}),Object(d.a)(Object(c.a)(t),"handleChangeIndex",(function(e){t.setState({index:e%t.props.announcements.size})})),Object(d.a)(Object(c.a)(t),"handleNextClick",(function(){t.setState({index:(t.state.index+1)%t.props.announcements.size})})),Object(d.a)(Object(c.a)(t),"handlePrevClick",(function(){t.setState({index:(t.props.announcements.size+t.state.index-1)%t.props.announcements.size})})),t}t.getDerivedStateFromProps=function(e,t){return e.announcements.size>0&&t.index>=e.announcements.size?{index:e.announcements.size-1}:null};var n=t.prototype;return n.componentDidMount=function(){this._markAnnouncementAsRead()},n.componentDidUpdate=function(){this._markAnnouncementAsRead()},n._markAnnouncementAsRead=function(){var e=this.props,t=e.dismissAnnouncement,n=e.announcements,a=this.state.index,i=n.get(a);i.get("read")||t(i.get("id"))},n.render=function(){var e=this,t=this.props,n=t.announcements,a=t.intl,i=this.state.index;return n.isEmpty()?null:Object(s.a)("div",{className:"announcements"},void 0,"mascot && ( ",Object(s.a)("img",{className:"announcements__mastodon",alt:"",draggable:"false",src:R.k})," )",Object(s.a)("div",{className:"announcements__container"},void 0,Object(s.a)(g.a,{animateHeight:!R.p,adjustHeight:R.p,index:i,onChangeIndex:this.handleChangeIndex},void 0,n.map((function(t,n){return Object(s.a)(K,{announcement:t,emojiMap:e.props.emojiMap,addReaction:e.props.addReaction,removeReaction:e.props.removeReaction,intl:a,selected:i===n},t.get("id"))}))),n.size>1&&Object(s.a)("div",{className:"announcements__pagination"},void 0,Object(s.a)(_.a,{disabled:1===n.size,title:a.formatMessage(D.previous),icon:"chevron-left",onClick:this.handlePrevClick,size:13}),Object(s.a)("span",{},void 0,i+1," / ",n.size),Object(s.a)(_.a,{disabled:1===n.size,title:a.formatMessage(D.next),icon:"chevron-right",onClick:this.handleNextClick,size:13}))))},t}(h.a),Object(d.a)(i,"propTypes",{announcements:j.a.list,emojiMap:j.a.map.isRequired,dismissAnnouncement:O.a.func.isRequired,addReaction:O.a.func.isRequired,removeReaction:O.a.func.isRequired,intl:O.a.object.isRequired}),a=o))||a}).call(this,n(50))},726:function(e,t,n){"use strict";var a=n(0),i=(n(3),n(25));t.a=function(e){var t,n=e.id,o=e.count,s=e.className;return(Object(a.a)("i",{className:"icon-with-badge"},void 0,Object(a.a)(i.a,{id:n,fixedWidth:!0,className:s}),o>0&&Object(a.a)("i",{className:"icon-with-badge__badge"},void 0,(t=o)>40?"40+":t)))}},839:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return q}));var a,i=n(0),o=n(2),s=(n(9),n(6),n(8)),c=n(1),r=n(3),u=n.n(r),l=n(15),d=n(34),m=n(1059),p=n(760),h=n(758),b=n(252),g=n(7),f=n(1101),j=n(1102);var v,O=Object(g.f)({filter_regex:{id:"home.column_settings.filter_regex",defaultMessage:"Filter out by regular expressions"},settings:{id:"home.settings",defaultMessage:"Column settings"}}),_=Object(g.g)(a=function(e){Object(s.a)(n,e);var t;t=n;function n(){return e.apply(this,arguments)||this}return n.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange,a=e.intl;return(Object(i.a)("div",{},void 0,Object(i.a)("span",{className:"column-settings__section"},void 0,Object(i.a)(g.b,{id:"home.column_settings.basic",defaultMessage:"Basic"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(f.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reblog"],onChange:n,label:Object(i.a)(g.b,{id:"home.column_settings.show_reblogs",defaultMessage:"Show boosts"})})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(f.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reply"],onChange:n,label:Object(i.a)(g.b,{id:"home.column_settings.show_replies",defaultMessage:"Show replies"})})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(f.a,{prefix:"home_timeline",settings:t,settingPath:["shows","direct"],onChange:n,label:Object(i.a)(g.b,{id:"home.column_settings.show_direct",defaultMessage:"Show DMs"})})),Object(i.a)("span",{className:"column-settings__section"},void 0,Object(i.a)(g.b,{id:"home.column_settings.advanced",defaultMessage:"Advanced"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(j.a,{prefix:"home_timeline",settings:t,settingPath:["regex","body"],onChange:n,label:a.formatMessage(O.filter_regex)}))))},n}(u.a.PureComponent))||a,y=n(73),M=Object(l.connect)((function(e){return{settings:e.getIn(["settings","home"])}}),(function(e){return{onChange:function(t,n){e(Object(y.c)(["home"].concat(t),n))},onSave:function(){e(Object(y.d)())}}}))(_),R=n(322),x=n(71),k=n(1272),C=n(57),w=n(4),A=Object(C.a)([function(e){return e.get("custom_emojis")}],(function(e){return e.reduce((function(e,t){return e.set(t.get("shortcode"),t)}),Object(w.Map)())})),N=Object(l.connect)((function(e){return{announcements:e.getIn(["announcements","items"]),emojiMap:A(e)}}),(function(e){return{dismissAnnouncement:function(t){return e(Object(x.o)(t))},addReaction:function(t,n){return e(Object(x.m)(t,n))},removeReaction:function(t,n){return e(Object(x.q)(t,n))}}}))(k.a),I=n(14),E=n.n(I),P=n(726);var L=Object(g.f)({title:{id:"column.home",defaultMessage:"Home"},show_announcements:{id:"home.show_announcements",defaultMessage:"Show announcements"},hide_announcements:{id:"home.hide_announcements",defaultMessage:"Hide announcements"}}),q=Object(l.connect)((function(e){return{hasUnread:e.getIn(["timelines","home","unread"])>0,isPartial:e.getIn(["timelines","home","isPartial"]),hasAnnouncements:!e.getIn(["announcements","items"]).isEmpty(),unreadAnnouncements:e.getIn(["announcements","items"]).count((function(e){return!e.get("read")})),showAnnouncements:e.getIn(["announcements","show"])}}))(v=Object(g.g)(v=function(e){Object(s.a)(n,e);var t;t=n;function n(){for(var t,n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];return t=e.call.apply(e,[this].concat(a))||this,Object(c.a)(Object(o.a)(t),"handlePin",(function(){var e=t.props,n=e.columnId,a=e.dispatch;a(n?Object(b.h)(n):Object(b.e)("HOME",{}))})),Object(c.a)(Object(o.a)(t),"handleMove",(function(e){var n=t.props,a=n.columnId;(0,n.dispatch)(Object(b.g)(a,e))})),Object(c.a)(Object(o.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(c.a)(Object(o.a)(t),"setRef",(function(e){t.column=e})),Object(c.a)(Object(o.a)(t),"handleLoadMore",(function(e){t.props.dispatch(Object(d.u)({maxId:e}))})),Object(c.a)(Object(o.a)(t),"handleToggleAnnouncementsClick",(function(e){e.stopPropagation(),t.props.dispatch(Object(x.r)())})),t}var a=n.prototype;return a.componentDidMount=function(){this.props.dispatch(Object(x.p)()),this._checkIfReloadNeeded(!1,this.props.isPartial)},a.componentDidUpdate=function(e){this._checkIfReloadNeeded(e.isPartial,this.props.isPartial)},a.componentWillUnmount=function(){this._stopPolling()},a._checkIfReloadNeeded=function(e,t){var n=this.props.dispatch;e!==t&&(!e&&t?this.polling=setInterval((function(){n(Object(d.u)())}),3e3):e&&!t&&this._stopPolling())},a._stopPolling=function(){this.polling&&(clearInterval(this.polling),this.polling=null)},a.render=function(){var e=this.props,t=e.intl,n=e.hasUnread,a=e.columnId,o=e.multiColumn,s=e.hasAnnouncements,c=e.unreadAnnouncements,r=e.showAnnouncements,l=!!a,d=null;return s&&(d=Object(i.a)("button",{className:E()("column-header__button",{active:r}),title:t.formatMessage(r?L.hide_announcements:L.show_announcements),"aria-label":t.formatMessage(r?L.hide_announcements:L.show_announcements),"aria-pressed":r?"true":"false",onClick:this.handleToggleAnnouncementsClick},void 0,Object(i.a)(P.a,{id:"bullhorn",count:c}))),u.a.createElement(p.a,{bindToDocument:!o,ref:this.setRef,name:"home",label:t.formatMessage(L.title)},Object(i.a)(h.a,{icon:"home",active:n,title:t.formatMessage(L.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:o,extraButton:d,appendContent:s&&r&&Object(i.a)(N,{})},void 0,Object(i.a)(M,{})),Object(i.a)(m.a,{trackScroll:!l,scrollKey:"home_timeline-"+a,onLoadMore:this.handleLoadMore,timelineId:"home",emptyMessage:Object(i.a)(g.b,{id:"empty_column.home",defaultMessage:"Your home timeline is empty! Visit {public} or use search to get started and meet other users.",values:{public:Object(i.a)(R.a,{to:"/timelines/public"},void 0,Object(i.a)(g.b,{id:"empty_column.home.public_timeline",defaultMessage:"the public timeline"}))}}),bindToDocument:!o}))},n}(u.a.PureComponent))||v)||v}}]);
//# sourceMappingURL=home_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/home_timeline.js.map b/priv/static/packs/flavours/glitch/async/home_timeline.js.map
index c063eebe2..37db6a195 100644
--- a/priv/static/packs/flavours/glitch/async/home_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/home_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/index.js"],"names":["messages","defineMessages","filter_regex","settings","ColumnSettings","injectIntl","render","this","props","onChange","intl","className","id","defaultMessage","prefix","settingPath","label","formatMessage","React","PureComponent","connect","state","getIn","dispatch","path","checked","changeSetting","onSave","saveSettings","title","HomeTimeline","hasUnread","isPartial","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","maxId","expandHomeTimeline","componentDidMount","_checkIfReloadNeeded","componentDidUpdate","prevProps","componentWillUnmount","_stopPolling","wasPartial","polling","setInterval","clearInterval","multiColumn","pinned","bindToDocument","ref","setRef","name","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","trackScroll","scrollKey","onLoadMore","handleLoadMore","timelineId","emptyMessage","values","public","Link","to"],"mappings":"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","file":"flavours/glitch/async/home_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from 'flavours/glitch/features/notifications/components/setting_toggle';\nimport SettingText from 'flavours/glitch/components/setting_text';\n\nconst messages = defineMessages({\n filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },\n settings: { id: 'home.settings', defaultMessage: 'Column settings' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { settings, onChange, intl } = this.props;\n\n return (\n <div>\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.basic' defaultMessage='Basic' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_reblogs' defaultMessage='Show boosts' />} />\n </div>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'reply']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_replies' defaultMessage='Show replies' />} />\n </div>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'direct']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_direct' defaultMessage='Show DMs' />} />\n </div>\n\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.advanced' defaultMessage='Advanced' /></span>\n\n <div className='column-settings__row'>\n <SettingText prefix='home_timeline' settings={settings} settingPath={['regex', 'body']} onChange={onChange} label={intl.formatMessage(messages.filter_regex)} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting, saveSettings } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'home']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (path, checked) {\n dispatch(changeSetting(['home', ...path], checked));\n },\n\n onSave () {\n dispatch(saveSettings());\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { expandHomeTimeline } from 'flavours/glitch/actions/timelines';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { Link } from 'react-router-dom';\n\nconst messages = defineMessages({\n title: { id: 'column.home', defaultMessage: 'Home' },\n});\n\nconst mapStateToProps = state => ({\n hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0,\n isPartial: state.getIn(['timelines', 'home', 'isPartial']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass HomeTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n isPartial: PropTypes.bool,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('HOME', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandHomeTimeline({ maxId }));\n }\n\n componentDidMount () {\n this._checkIfReloadNeeded(false, this.props.isPartial);\n }\n\n componentDidUpdate (prevProps) {\n this._checkIfReloadNeeded(prevProps.isPartial, this.props.isPartial);\n }\n\n componentWillUnmount () {\n this._stopPolling();\n }\n\n _checkIfReloadNeeded (wasPartial, isPartial) {\n const { dispatch } = this.props;\n\n if (wasPartial === isPartial) {\n return;\n } else if (!wasPartial && isPartial) {\n this.polling = setInterval(() => {\n dispatch(expandHomeTimeline());\n }, 3000);\n } else if (wasPartial && !isPartial) {\n this._stopPolling();\n }\n }\n\n _stopPolling () {\n if (this.polling) {\n clearInterval(this.polling);\n this.polling = null;\n }\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='home' label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='home'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`home_timeline-${columnId}`}\n onLoadMore={this.handleLoadMore}\n timelineId='home'\n emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/components/announcements.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/components/icon_with_badge.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/getting_started/containers/announcements_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/home_timeline/index.js"],"names":["messages","defineMessages","close","previous","next","Content","c","node","mention","e","context","router","button","ctrlKey","metaKey","preventDefault","history","push","get","hashtag","replace","status","target","src","getAttribute","componentDidMount","this","_updateLinks","_updateEmojis","componentDidUpdate","autoPlayGif","emojis","querySelectorAll","i","length","emoji","classList","contains","add","addEventListener","handleEmojiMouseEnter","handleEmojiMouseLeave","links","link","props","announcement","find","item","href","onMentionClick","bind","setAttribute","textContent","previousSibling","onHashtagClick","text","onStatusClick","render","className","ref","setRef","dangerouslySetInnerHTML","__html","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","assetHost","process","env","CDN_HOST","Emoji","emojiMap","hovered","unicodeMapping","filename","shortCode","title","draggable","alt","getIn","React","PureComponent","Reaction","reaction","announcementId","addReaction","removeReaction","setState","classNames","active","onClick","handleClick","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","style","state","value","string","func","ReactionsBar","data","native","willEnter","scale","reduceMotion","willLeave","spring","stiffness","damping","visibleReactions","reactions","filter","x","styles","key","toArray","items","isEmpty","transform","position","size","onPickEmoji","handleEmojiPick","id","list","Announcement","unread","selected","startsAt","Date","endsAt","now","hasTimeRange","skipYear","getFullYear","skipEndDate","getDate","getMonth","skipTime","defaultMessage","hour12","year","undefined","month","day","hour","minute","intl","bool","Announcements","injectIntl","index","announcements","getDerivedStateFromProps","_markAnnouncementAsRead","dismissAnnouncement","mascot","animateHeight","adjustHeight","onChangeIndex","handleChangeIndex","idx","disabled","formatMessage","icon","handlePrevClick","handleNextClick","IconWithBadge","num","count","fixedWidth","filter_regex","settings","ColumnSettings","onChange","prefix","settingPath","label","connect","dispatch","path","checked","changeSetting","onSave","saveSettings","customEmojiMap","createSelector","reduce","set","ImmutableMap","name","show_announcements","hide_announcements","HomeTimeline","hasUnread","isPartial","hasAnnouncements","unreadAnnouncements","showAnnouncements","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","maxId","expandHomeTimeline","stopPropagation","toggleShowAnnouncements","fetchAnnouncements","_checkIfReloadNeeded","prevProps","componentWillUnmount","_stopPolling","wasPartial","polling","setInterval","clearInterval","multiColumn","pinned","announcementsButton","aria-label","aria-pressed","handleToggleAnnouncementsClick","bindToDocument","onPin","handlePin","onMove","handleMove","handleHeaderClick","extraButton","appendContent","trackScroll","scrollKey","onLoadMore","handleLoadMore","timelineId","emptyMessage","values","public","Link","to"],"mappings":"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","file":"flavours/glitch/async/home_timeline.js","sourcesContent":["import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ReactSwipeableViews from 'react-swipeable-views';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport Icon from 'flavours/glitch/components/icon';\nimport { defineMessages, injectIntl, FormattedMessage, FormattedDate } from 'react-intl';\nimport { autoPlayGif, reduceMotion } from 'flavours/glitch/util/initial_state';\nimport { mascot } from 'flavours/glitch/util/initial_state';\nimport unicodeMapping from 'flavours/glitch/util/emoji/emoji_unicode_mapping_light';\nimport classNames from 'classnames';\nimport EmojiPickerDropdown from 'flavours/glitch/features/emoji_picker';\nimport AnimatedNumber from 'flavours/glitch/components/animated_number';\nimport TransitionMotion from 'react-motion/lib/TransitionMotion';\nimport spring from 'react-motion/lib/spring';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n previous: { id: 'lightbox.previous', defaultMessage: 'Previous' },\n next: { id: 'lightbox.next', defaultMessage: 'Next' },\n});\n\nclass Content extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n announcement: ImmutablePropTypes.map.isRequired,\n };\n\n setRef = c => {\n this.node = c;\n }\n\n componentDidMount () {\n this._updateLinks();\n this._updateEmojis();\n }\n\n componentDidUpdate () {\n this._updateLinks();\n this._updateEmojis();\n }\n\n _updateEmojis () {\n const node = this.node;\n\n if (!node || autoPlayGif) {\n return;\n }\n\n const emojis = node.querySelectorAll('.custom-emoji');\n\n for (var i = 0; i < emojis.length; i++) {\n let emoji = emojis[i];\n\n if (emoji.classList.contains('status-emoji')) {\n continue;\n }\n\n emoji.classList.add('status-emoji');\n\n emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false);\n emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false);\n }\n }\n\n _updateLinks () {\n const node = this.node;\n\n if (!node) {\n return;\n }\n\n const links = node.querySelectorAll('a');\n\n for (var i = 0; i < links.length; ++i) {\n let link = links[i];\n\n if (link.classList.contains('status-link')) {\n continue;\n }\n\n link.classList.add('status-link');\n\n let mention = this.props.announcement.get('mentions').find(item => link.href === item.get('url'));\n\n if (mention) {\n link.addEventListener('click', this.onMentionClick.bind(this, mention), false);\n link.setAttribute('title', mention.get('acct'));\n } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {\n link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false);\n } else {\n let status = this.props.announcement.get('statuses').find(item => link.href === item.get('url'));\n if (status) {\n link.addEventListener('click', this.onStatusClick.bind(this, status), false);\n }\n link.setAttribute('title', link.href);\n link.classList.add('unhandled-link');\n }\n\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'noopener noreferrer');\n }\n }\n\n onMentionClick = (mention, e) => {\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${mention.get('id')}`);\n }\n }\n\n onHashtagClick = (hashtag, e) => {\n hashtag = hashtag.replace(/^#/, '');\n\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/timelines/tag/${hashtag}`);\n }\n }\n\n onStatusClick = (status, e) => {\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/statuses/${status.get('id')}`);\n }\n }\n\n handleEmojiMouseEnter = ({ target }) => {\n target.src = target.getAttribute('data-original');\n }\n\n handleEmojiMouseLeave = ({ target }) => {\n target.src = target.getAttribute('data-static');\n }\n\n render () {\n const { announcement } = this.props;\n\n return (\n <div\n className='announcements__item__content'\n ref={this.setRef}\n dangerouslySetInnerHTML={{ __html: announcement.get('contentHtml') }}\n />\n );\n }\n\n}\n\nconst assetHost = process.env.CDN_HOST || '';\n\nclass Emoji extends React.PureComponent {\n\n static propTypes = {\n emoji: PropTypes.string.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n hovered: PropTypes.bool.isRequired,\n };\n\n render () {\n const { emoji, emojiMap, hovered } = this.props;\n\n if (unicodeMapping[emoji]) {\n const { filename, shortCode } = unicodeMapping[this.props.emoji];\n const title = shortCode ? `:${shortCode}:` : '';\n\n return (\n <img\n draggable='false'\n className='emojione'\n alt={emoji}\n title={title}\n src={`${assetHost}/emoji/${filename}.svg`}\n />\n );\n } else if (emojiMap.get(emoji)) {\n const filename = (autoPlayGif || hovered) ? emojiMap.getIn([emoji, 'url']) : emojiMap.getIn([emoji, 'static_url']);\n const shortCode = `:${emoji}:`;\n\n return (\n <img\n draggable='false'\n className='emojione custom-emoji'\n alt={shortCode}\n title={shortCode}\n src={filename}\n />\n );\n } else {\n return null;\n }\n }\n\n}\n\nclass Reaction extends ImmutablePureComponent {\n\n static propTypes = {\n announcementId: PropTypes.string.isRequired,\n reaction: ImmutablePropTypes.map.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n style: PropTypes.object,\n };\n\n state = {\n hovered: false,\n };\n\n handleClick = () => {\n const { reaction, announcementId, addReaction, removeReaction } = this.props;\n\n if (reaction.get('me')) {\n removeReaction(announcementId, reaction.get('name'));\n } else {\n addReaction(announcementId, reaction.get('name'));\n }\n }\n\n handleMouseEnter = () => this.setState({ hovered: true })\n\n handleMouseLeave = () => this.setState({ hovered: false })\n\n render () {\n const { reaction } = this.props;\n\n let shortCode = reaction.get('name');\n\n if (unicodeMapping[shortCode]) {\n shortCode = unicodeMapping[shortCode].shortCode;\n }\n\n return (\n <button className={classNames('reactions-bar__item', { active: reaction.get('me') })} onClick={this.handleClick} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} title={`:${shortCode}:`} style={this.props.style}>\n <span className='reactions-bar__item__emoji'><Emoji hovered={this.state.hovered} emoji={reaction.get('name')} emojiMap={this.props.emojiMap} /></span>\n <span className='reactions-bar__item__count'><AnimatedNumber value={reaction.get('count')} /></span>\n </button>\n );\n }\n\n}\n\nclass ReactionsBar extends ImmutablePureComponent {\n\n static propTypes = {\n announcementId: PropTypes.string.isRequired,\n reactions: ImmutablePropTypes.list.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n };\n\n handleEmojiPick = data => {\n const { addReaction, announcementId } = this.props;\n addReaction(announcementId, data.native.replace(/:/g, ''));\n }\n\n willEnter () {\n return { scale: reduceMotion ? 1 : 0 };\n }\n\n willLeave () {\n return { scale: reduceMotion ? 0 : spring(0, { stiffness: 170, damping: 26 }) };\n }\n\n render () {\n const { reactions } = this.props;\n const visibleReactions = reactions.filter(x => x.get('count') > 0);\n\n const styles = visibleReactions.map(reaction => ({\n key: reaction.get('name'),\n data: reaction,\n style: { scale: reduceMotion ? 1 : spring(1, { stiffness: 150, damping: 13 }) },\n })).toArray();\n\n return (\n <TransitionMotion styles={styles} willEnter={this.willEnter} willLeave={this.willLeave}>\n {items => (\n <div className={classNames('reactions-bar', { 'reactions-bar--empty': visibleReactions.isEmpty() })}>\n {items.map(({ key, data, style }) => (\n <Reaction\n key={key}\n reaction={data}\n style={{ transform: `scale(${style.scale})`, position: style.scale < 0.5 ? 'absolute' : 'static' }}\n announcementId={this.props.announcementId}\n addReaction={this.props.addReaction}\n removeReaction={this.props.removeReaction}\n emojiMap={this.props.emojiMap}\n />\n ))}\n\n {visibleReactions.size < 8 && <EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} button={<Icon id='plus' />} />}\n </div>\n )}\n </TransitionMotion>\n );\n }\n\n}\n\nclass Announcement extends ImmutablePureComponent {\n\n static propTypes = {\n announcement: ImmutablePropTypes.map.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n selected: PropTypes.bool,\n };\n\n state = {\n unread: !this.props.announcement.get('read'),\n };\n\n componentDidUpdate () {\n const { selected, announcement } = this.props;\n if (!selected && this.state.unread !== !announcement.get('read')) {\n this.setState({ unread: !announcement.get('read') });\n }\n }\n\n render () {\n const { announcement } = this.props;\n const { unread } = this.state;\n const startsAt = announcement.get('starts_at') && new Date(announcement.get('starts_at'));\n const endsAt = announcement.get('ends_at') && new Date(announcement.get('ends_at'));\n const now = new Date();\n const hasTimeRange = startsAt && endsAt;\n const skipYear = hasTimeRange && startsAt.getFullYear() === endsAt.getFullYear() && endsAt.getFullYear() === now.getFullYear();\n const skipEndDate = hasTimeRange && startsAt.getDate() === endsAt.getDate() && startsAt.getMonth() === endsAt.getMonth() && startsAt.getFullYear() === endsAt.getFullYear();\n const skipTime = announcement.get('all_day');\n\n return (\n <div className='announcements__item'>\n <strong className='announcements__item__range'>\n <FormattedMessage id='announcement.announcement' defaultMessage='Announcement' />\n {hasTimeRange && <span> · <FormattedDate value={startsAt} hour12={false} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} hour12={false} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}\n </strong>\n\n <Content announcement={announcement} />\n\n <ReactionsBar\n reactions={announcement.get('reactions')}\n announcementId={announcement.get('id')}\n addReaction={this.props.addReaction}\n removeReaction={this.props.removeReaction}\n emojiMap={this.props.emojiMap}\n />\n\n {unread && <span className='announcements__item__unread' />}\n </div>\n );\n }\n\n}\n\nexport default @injectIntl\nclass Announcements extends ImmutablePureComponent {\n\n static propTypes = {\n announcements: ImmutablePropTypes.list,\n emojiMap: ImmutablePropTypes.map.isRequired,\n dismissAnnouncement: PropTypes.func.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n index: 0,\n };\n\n static getDerivedStateFromProps(props, state) {\n if (props.announcements.size > 0 && state.index >= props.announcements.size) {\n return { index: props.announcements.size - 1 };\n } else {\n return null;\n }\n }\n\n componentDidMount () {\n this._markAnnouncementAsRead();\n }\n\n componentDidUpdate () {\n this._markAnnouncementAsRead();\n }\n\n _markAnnouncementAsRead () {\n const { dismissAnnouncement, announcements } = this.props;\n const { index } = this.state;\n const announcement = announcements.get(index);\n if (!announcement.get('read')) dismissAnnouncement(announcement.get('id'));\n }\n\n handleChangeIndex = index => {\n this.setState({ index: index % this.props.announcements.size });\n }\n\n handleNextClick = () => {\n this.setState({ index: (this.state.index + 1) % this.props.announcements.size });\n }\n\n handlePrevClick = () => {\n this.setState({ index: (this.props.announcements.size + this.state.index - 1) % this.props.announcements.size });\n }\n\n render () {\n const { announcements, intl } = this.props;\n const { index } = this.state;\n\n if (announcements.isEmpty()) {\n return null;\n }\n\n return (\n <div className='announcements'>\n mascot && ( <img className='announcements__mastodon' alt='' draggable='false' src={mascot} /> )\n\n <div className='announcements__container'>\n <ReactSwipeableViews animateHeight={!reduceMotion} adjustHeight={reduceMotion} index={index} onChangeIndex={this.handleChangeIndex}>\n {announcements.map((announcement, idx) => (\n <Announcement\n key={announcement.get('id')}\n announcement={announcement}\n emojiMap={this.props.emojiMap}\n addReaction={this.props.addReaction}\n removeReaction={this.props.removeReaction}\n intl={intl}\n selected={index === idx}\n />\n ))}\n </ReactSwipeableViews>\n\n {announcements.size > 1 && (\n <div className='announcements__pagination'>\n <IconButton disabled={announcements.size === 1} title={intl.formatMessage(messages.previous)} icon='chevron-left' onClick={this.handlePrevClick} size={13} />\n <span>{index + 1} / {announcements.size}</span>\n <IconButton disabled={announcements.size === 1} title={intl.formatMessage(messages.next)} icon='chevron-right' onClick={this.handleNextClick} size={13} />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst formatNumber = num => num > 40 ? '40+' : num;\n\nconst IconWithBadge = ({ id, count, className }) => (\n <i className='icon-with-badge'>\n <Icon id={id} fixedWidth className={className} />\n {count > 0 && <i className='icon-with-badge__badge'>{formatNumber(count)}</i>}\n </i>\n);\n\nIconWithBadge.propTypes = {\n id: PropTypes.string.isRequired,\n count: PropTypes.number.isRequired,\n className: PropTypes.string,\n};\n\nexport default IconWithBadge;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from 'flavours/glitch/features/notifications/components/setting_toggle';\nimport SettingText from 'flavours/glitch/components/setting_text';\n\nconst messages = defineMessages({\n filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },\n settings: { id: 'home.settings', defaultMessage: 'Column settings' },\n});\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { settings, onChange, intl } = this.props;\n\n return (\n <div>\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.basic' defaultMessage='Basic' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_reblogs' defaultMessage='Show boosts' />} />\n </div>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'reply']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_replies' defaultMessage='Show replies' />} />\n </div>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='home_timeline' settings={settings} settingPath={['shows', 'direct']} onChange={onChange} label={<FormattedMessage id='home.column_settings.show_direct' defaultMessage='Show DMs' />} />\n </div>\n\n <span className='column-settings__section'><FormattedMessage id='home.column_settings.advanced' defaultMessage='Advanced' /></span>\n\n <div className='column-settings__row'>\n <SettingText prefix='home_timeline' settings={settings} settingPath={['regex', 'body']} onChange={onChange} label={intl.formatMessage(messages.filter_regex)} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting, saveSettings } from 'flavours/glitch/actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'home']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (path, checked) {\n dispatch(changeSetting(['home', ...path], checked));\n },\n\n onSave () {\n dispatch(saveSettings());\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import { connect } from 'react-redux';\nimport { addReaction, removeReaction, dismissAnnouncement } from 'flavours/glitch/actions/announcements';\nimport Announcements from '../components/announcements';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\n\nconst customEmojiMap = createSelector([state => state.get('custom_emojis')], items => items.reduce((map, emoji) => map.set(emoji.get('shortcode'), emoji), ImmutableMap()));\n\nconst mapStateToProps = state => ({\n announcements: state.getIn(['announcements', 'items']),\n emojiMap: customEmojiMap(state),\n});\n\nconst mapDispatchToProps = dispatch => ({\n dismissAnnouncement: id => dispatch(dismissAnnouncement(id)),\n addReaction: (id, name) => dispatch(addReaction(id, name)),\n removeReaction: (id, name) => dispatch(removeReaction(id, name)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Announcements);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { expandHomeTimeline } from 'flavours/glitch/actions/timelines';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { Link } from 'react-router-dom';\nimport { fetchAnnouncements, toggleShowAnnouncements } from 'flavours/glitch/actions/announcements';\nimport AnnouncementsContainer from 'flavours/glitch/features/getting_started/containers/announcements_container';\nimport classNames from 'classnames';\nimport IconWithBadge from 'flavours/glitch/components/icon_with_badge';\n\nconst messages = defineMessages({\n title: { id: 'column.home', defaultMessage: 'Home' },\n show_announcements: { id: 'home.show_announcements', defaultMessage: 'Show announcements' },\n hide_announcements: { id: 'home.hide_announcements', defaultMessage: 'Hide announcements' },\n});\n\nconst mapStateToProps = state => ({\n hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0,\n isPartial: state.getIn(['timelines', 'home', 'isPartial']),\n hasAnnouncements: !state.getIn(['announcements', 'items']).isEmpty(),\n unreadAnnouncements: state.getIn(['announcements', 'items']).count(item => !item.get('read')),\n showAnnouncements: state.getIn(['announcements', 'show']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass HomeTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n isPartial: PropTypes.bool,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasAnnouncements: PropTypes.bool,\n unreadAnnouncements: PropTypes.number,\n showAnnouncements: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('HOME', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandHomeTimeline({ maxId }));\n }\n\n componentDidMount () {\n this.props.dispatch(fetchAnnouncements());\n this._checkIfReloadNeeded(false, this.props.isPartial);\n }\n\n componentDidUpdate (prevProps) {\n this._checkIfReloadNeeded(prevProps.isPartial, this.props.isPartial);\n }\n\n componentWillUnmount () {\n this._stopPolling();\n }\n\n _checkIfReloadNeeded (wasPartial, isPartial) {\n const { dispatch } = this.props;\n\n if (wasPartial === isPartial) {\n return;\n } else if (!wasPartial && isPartial) {\n this.polling = setInterval(() => {\n dispatch(expandHomeTimeline());\n }, 3000);\n } else if (wasPartial && !isPartial) {\n this._stopPolling();\n }\n }\n\n _stopPolling () {\n if (this.polling) {\n clearInterval(this.polling);\n this.polling = null;\n }\n }\n\n handleToggleAnnouncementsClick = (e) => {\n e.stopPropagation();\n this.props.dispatch(toggleShowAnnouncements());\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props;\n const pinned = !!columnId;\n\n let announcementsButton = null;\n\n if (hasAnnouncements) {\n announcementsButton = (\n <button\n className={classNames('column-header__button', { 'active': showAnnouncements })}\n title={intl.formatMessage(showAnnouncements ? messages.hide_announcements : messages.show_announcements)}\n aria-label={intl.formatMessage(showAnnouncements ? messages.hide_announcements : messages.show_announcements)}\n aria-pressed={showAnnouncements ? 'true' : 'false'}\n onClick={this.handleToggleAnnouncementsClick}\n >\n <IconWithBadge id='bullhorn' count={unreadAnnouncements} />\n </button>\n );\n }\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='home' label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='home'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n extraButton={announcementsButton}\n appendContent={hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`home_timeline-${columnId}`}\n onLoadMore={this.handleLoadMore}\n timelineId='home'\n emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js b/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js
index 0d59ee5ec..b6037c53e 100644
--- a/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js
+++ b/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{767:function(t,e,d){"use strict";d.r(e),d.d(e,"default",(function(){return h}));var o,a,b,c=d(0),i=d(7),s=d(1),j=(d(3),d(730)),O=d(735),r=d(13),v=d(6),u=d(5),l=d.n(u),n=d(18),k=Object(v.f)({heading:{id:"keyboard_shortcuts.heading",defaultMessage:"Keyboard Shortcuts"}}),h=Object(r.connect)((function(t){return{collapseEnabled:t.getIn(["local_settings","collapsed","enabled"])}}))(o=Object(v.g)((b=a=function(t){function e(){return t.apply(this,arguments)||this}return Object(i.a)(e,t),e.prototype.render=function(){var t=this.props,e=t.intl,d=t.collapseEnabled,o=t.multiColumn;return Object(c.a)(j.a,{bindToDocument:!o,icon:"question",heading:e.formatMessage(k.heading)},void 0,Object(c.a)(O.a,{}),Object(c.a)("div",{className:"keyboard-shortcuts scrollable optionally-scrollable"},void 0,Object(c.a)("table",{},void 0,Object(c.a)("thead",{},void 0,Object(c.a)("tr",{},void 0,Object(c.a)("th",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.hotkey",defaultMessage:"Hotkey"})),Object(c.a)("th",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.description",defaultMessage:"Description"})))),Object(c.a)("tbody",{},void 0,Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"r")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.reply",defaultMessage:"to reply"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"m")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.mention",defaultMessage:"to mention author"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"p")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.profile",defaultMessage:"to open author's profile"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"f")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.favourite",defaultMessage:"to favourite"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"b")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.boost",defaultMessage:"to boost"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"d")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.bookmark",defaultMessage:"to bookmark"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"enter"),", ",Object(c.a)("kbd",{},void 0,"o")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.enter",defaultMessage:"to open status"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"e")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.open_media",defaultMessage:"to open media"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"x")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_hidden",defaultMessage:"to show/hide text behind CW"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"h")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_sensitivity",defaultMessage:"to show/hide media"}))),d&&Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"shift"),"+",Object(c.a)("kbd",{},void 0,"x")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_collapse",defaultMessage:"to collapse/uncollapse toots"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"up"),", ",Object(c.a)("kbd",{},void 0,"k")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.up",defaultMessage:"to move up in the list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"down"),", ",Object(c.a)("kbd",{},void 0,"j")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.down",defaultMessage:"to move down in the list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"1"),"-",Object(c.a)("kbd",{},void 0,"9")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.column",defaultMessage:"to focus a status in one of the columns"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.compose",defaultMessage:"to focus the compose textarea"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"alt"),"+",Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toot",defaultMessage:"to start a brand new toot"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"backspace")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.back",defaultMessage:"to navigate back"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"s")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.search",defaultMessage:"to focus search"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"esc")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.unfocus",defaultMessage:"to un-focus compose textarea/search"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"?")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.legend",defaultMessage:"to display this legend"})))))))},e}(n.a),Object(s.a)(a,"propTypes",{intl:l.a.object.isRequired,multiColumn:l.a.bool,collapseEnabled:l.a.bool}),o=b))||o)||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{793:function(t,e,d){"use strict";d.r(e),d.d(e,"default",(function(){return h}));var o,a,b,c=d(0),i=(d(9),d(6),d(8)),s=d(1),j=(d(3),d(756)),O=d(761),r=d(15),v=d(7),u=d(5),n=d.n(u),l=d(21);var k=Object(v.f)({heading:{id:"keyboard_shortcuts.heading",defaultMessage:"Keyboard Shortcuts"}}),h=Object(r.connect)((function(t){return{collapseEnabled:t.getIn(["local_settings","collapsed","enabled"])}}))(o=Object(v.g)((b=a=function(t){Object(i.a)(d,t);var e;e=d;function d(){return t.apply(this,arguments)||this}return d.prototype.render=function(){var t=this.props,e=t.intl,d=t.collapseEnabled,o=t.multiColumn;return(Object(c.a)(j.a,{bindToDocument:!o,icon:"question",heading:e.formatMessage(k.heading)},void 0,Object(c.a)(O.a,{}),Object(c.a)("div",{className:"keyboard-shortcuts scrollable optionally-scrollable"},void 0,Object(c.a)("table",{},void 0,Object(c.a)("thead",{},void 0,Object(c.a)("tr",{},void 0,Object(c.a)("th",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.hotkey",defaultMessage:"Hotkey"})),Object(c.a)("th",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.description",defaultMessage:"Description"})))),Object(c.a)("tbody",{},void 0,Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"r")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.reply",defaultMessage:"to reply"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"m")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.mention",defaultMessage:"to mention author"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"p")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.profile",defaultMessage:"to open author's profile"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"f")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.favourite",defaultMessage:"to favourite"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"b")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.boost",defaultMessage:"to boost"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"d")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.bookmark",defaultMessage:"to bookmark"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"enter"),", ",Object(c.a)("kbd",{},void 0,"o")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.enter",defaultMessage:"to open status"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"e")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.open_media",defaultMessage:"to open media"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"x")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_hidden",defaultMessage:"to show/hide text behind CW"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"h")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_sensitivity",defaultMessage:"to show/hide media"}))),d&&Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"shift"),"+",Object(c.a)("kbd",{},void 0,"x")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toggle_collapse",defaultMessage:"to collapse/uncollapse toots"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"up"),", ",Object(c.a)("kbd",{},void 0,"k")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.up",defaultMessage:"to move up in the list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"down"),", ",Object(c.a)("kbd",{},void 0,"j")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.down",defaultMessage:"to move down in the list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"1"),"-",Object(c.a)("kbd",{},void 0,"9")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.column",defaultMessage:"to focus a status in one of the columns"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.compose",defaultMessage:"to focus the compose textarea"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"alt"),"+",Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.toot",defaultMessage:"to start a brand new toot"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"backspace")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.back",defaultMessage:"to navigate back"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"s")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.search",defaultMessage:"to focus search"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"alt"),"+",Object(c.a)("kbd",{},void 0,"enter")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.secondary_toot",defaultMessage:"to send toot using secondary privacy setting"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"esc")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.unfocus",defaultMessage:"to un-focus compose textarea/search"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"?")),Object(c.a)("td",{},void 0,Object(c.a)(v.b,{id:"keyboard_shortcuts.legend",defaultMessage:"to display this legend"}))))))))},d}(l.a),Object(s.a)(a,"propTypes",{intl:n.a.object.isRequired,multiColumn:n.a.bool,collapseEnabled:n.a.bool}),o=b))||o)||o}}]);
//# sourceMappingURL=keyboard_shortcuts.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js.map b/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js.map
index 18b367cfd..2db9f69d1 100644
--- a/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js.map
+++ b/priv/static/packs/flavours/glitch/async/keyboard_shortcuts.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js"],"names":["messages","defineMessages","heading","KeyboardShortcuts","connect","state","collapseEnabled","getIn","injectIntl","render","this","props","intl","multiColumn","bindToDocument","icon","formatMessage","className","id","defaultMessage","ImmutablePureComponent","PropTypes","object","isRequired","bool"],"mappings":"yOAQMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,uEASHC,EAFUC,mBAJQ,SAAAC,GAAK,MAAK,CAChCC,gBAAiBD,EAAME,MAAM,CAAC,iBAAkB,YAAa,e,GAI9DC,a,sGASCC,OAAA,WAAW,IAAD,EACuCC,KAAKC,MAA5CC,EADA,EACAA,KAAMN,EADN,EACMA,gBAAiBO,EADvB,EACuBA,YAE/B,OACE,YAAC,IAAD,CAAQC,gBAAiBD,EAAaE,KAAK,WAAWb,QAASU,EAAKI,cAAchB,EAASE,eAA3F,EACE,YAAC,IAAD,IACA,mBAAKe,UAAU,4DAAf,EACE,8BACE,8BACE,2BACE,2BAAI,YAAC,IAAD,CAAkBC,GAAG,4BAA4BC,eAAe,YACpE,2BAAI,YAAC,IAAD,CAAkBD,GAAG,iCAAiCC,eAAe,mBAG7E,8BACE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,2BAA2BC,eAAe,eAErE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,6BAA6BC,eAAe,wBAEvE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,6BAA6BC,eAAe,+BAEvE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,+BAA+BC,eAAe,mBAEzE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,2BAA2BC,eAAe,eAErE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,8BAA8BC,eAAe,kBAExE,2BACE,2BAAI,qCAAJ,KAAsB,kCACtB,2BAAI,YAAC,IAAD,CAAkBD,GAAG,2BAA2BC,eAAe,qBAErE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,gCAAgCC,eAAe,oBAE1E,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,mCAAmCC,eAAe,kCAE7E,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,wCAAwCC,eAAe,yBAEjFb,GACC,2BACE,2BAAI,qCAAJ,IAAqB,kCACrB,2BAAI,YAAC,IAAD,CAAkBY,GAAG,qCAAqCC,eAAe,mCAGjF,2BACE,2BAAI,kCAAJ,KAAmB,kCACnB,2BAAI,YAAC,IAAD,CAAkBD,GAAG,wBAAwBC,eAAe,6BAElE,2BACE,2BAAI,oCAAJ,KAAqB,kCACrB,2BAAI,YAAC,IAAD,CAAkBD,GAAG,0BAA0BC,eAAe,+BAEpE,2BACE,2BAAI,iCAAJ,IAAiB,kCACjB,2BAAI,YAAC,IAAD,CAAkBD,GAAG,4BAA4BC,eAAe,8CAEtE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,6BAA6BC,eAAe,oCAEvE,2BACE,2BAAI,mCAAJ,IAAmB,kCACnB,2BAAI,YAAC,IAAD,CAAkBD,GAAG,0BAA0BC,eAAe,gCAEpE,2BACE,2BAAI,0CACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,0BAA0BC,eAAe,uBAEpE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,4BAA4BC,eAAe,sBAEtE,2BACE,2BAAI,oCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,6BAA6BC,eAAe,0CAEvE,2BACE,2BAAI,kCACJ,2BAAI,YAAC,IAAD,CAAkBD,GAAG,4BAA4BC,eAAe,kC,GAvGpDC,K,0BAEX,CACjBR,KAAMS,IAAUC,OAAOC,WACvBV,YAAaQ,IAAUG,KACvBlB,gBAAiBe,IAAUG,O","file":"flavours/glitch/async/keyboard_shortcuts.js","sourcesContent":["import React from 'react';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' },\n});\n\nconst mapStateToProps = state => ({\n collapseEnabled: state.getIn(['local_settings', 'collapsed', 'enabled']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass KeyboardShortcuts extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n collapseEnabled: PropTypes.bool,\n };\n\n render () {\n const { intl, collapseEnabled, multiColumn } = this.props;\n\n return (\n <Column bindToDocument={!multiColumn} icon='question' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <div className='keyboard-shortcuts scrollable optionally-scrollable'>\n <table>\n <thead>\n <tr>\n <th><FormattedMessage id='keyboard_shortcuts.hotkey' defaultMessage='Hotkey' /></th>\n <th><FormattedMessage id='keyboard_shortcuts.description' defaultMessage='Description' /></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><kbd>r</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.reply' defaultMessage='to reply' /></td>\n </tr>\n <tr>\n <td><kbd>m</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.mention' defaultMessage='to mention author' /></td>\n </tr>\n <tr>\n <td><kbd>p</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.profile' defaultMessage=\"to open author's profile\" /></td>\n </tr>\n <tr>\n <td><kbd>f</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.favourite' defaultMessage='to favourite' /></td>\n </tr>\n <tr>\n <td><kbd>b</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.boost' defaultMessage='to boost' /></td>\n </tr>\n <tr>\n <td><kbd>d</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.bookmark' defaultMessage='to bookmark' /></td>\n </tr>\n <tr>\n <td><kbd>enter</kbd>, <kbd>o</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td>\n </tr>\n <tr>\n <td><kbd>e</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.open_media' defaultMessage='to open media' /></td>\n </tr>\n <tr>\n <td><kbd>x</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_hidden' defaultMessage='to show/hide text behind CW' /></td>\n </tr>\n <tr>\n <td><kbd>h</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_sensitivity' defaultMessage='to show/hide media' /></td>\n </tr>\n {collapseEnabled && (\n <tr>\n <td><kbd>shift</kbd>+<kbd>x</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_collapse' defaultMessage='to collapse/uncollapse toots' /></td>\n </tr>\n )}\n <tr>\n <td><kbd>up</kbd>, <kbd>k</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.up' defaultMessage='to move up in the list' /></td>\n </tr>\n <tr>\n <td><kbd>down</kbd>, <kbd>j</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.down' defaultMessage='to move down in the list' /></td>\n </tr>\n <tr>\n <td><kbd>1</kbd>-<kbd>9</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.column' defaultMessage='to focus a status in one of the columns' /></td>\n </tr>\n <tr>\n <td><kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.compose' defaultMessage='to focus the compose textarea' /></td>\n </tr>\n <tr>\n <td><kbd>alt</kbd>+<kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toot' defaultMessage='to start a brand new toot' /></td>\n </tr>\n <tr>\n <td><kbd>backspace</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.back' defaultMessage='to navigate back' /></td>\n </tr>\n <tr>\n <td><kbd>s</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.search' defaultMessage='to focus search' /></td>\n </tr>\n <tr>\n <td><kbd>esc</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.unfocus' defaultMessage='to un-focus compose textarea/search' /></td>\n </tr>\n <tr>\n <td><kbd>?</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.legend' defaultMessage='to display this legend' /></td>\n </tr>\n </tbody>\n </table>\n </div>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js"],"names":["messages","defineMessages","heading","KeyboardShortcuts","connect","state","collapseEnabled","getIn","injectIntl","render","this","props","intl","multiColumn","bindToDocument","icon","formatMessage","className","id","defaultMessage","ImmutablePureComponent","PropTypes","object","isRequired","bool"],"mappings":"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","file":"flavours/glitch/async/keyboard_shortcuts.js","sourcesContent":["import React from 'react';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' },\n});\n\nconst mapStateToProps = state => ({\n collapseEnabled: state.getIn(['local_settings', 'collapsed', 'enabled']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass KeyboardShortcuts extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n collapseEnabled: PropTypes.bool,\n };\n\n render () {\n const { intl, collapseEnabled, multiColumn } = this.props;\n\n return (\n <Column bindToDocument={!multiColumn} icon='question' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <div className='keyboard-shortcuts scrollable optionally-scrollable'>\n <table>\n <thead>\n <tr>\n <th><FormattedMessage id='keyboard_shortcuts.hotkey' defaultMessage='Hotkey' /></th>\n <th><FormattedMessage id='keyboard_shortcuts.description' defaultMessage='Description' /></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><kbd>r</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.reply' defaultMessage='to reply' /></td>\n </tr>\n <tr>\n <td><kbd>m</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.mention' defaultMessage='to mention author' /></td>\n </tr>\n <tr>\n <td><kbd>p</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.profile' defaultMessage=\"to open author's profile\" /></td>\n </tr>\n <tr>\n <td><kbd>f</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.favourite' defaultMessage='to favourite' /></td>\n </tr>\n <tr>\n <td><kbd>b</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.boost' defaultMessage='to boost' /></td>\n </tr>\n <tr>\n <td><kbd>d</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.bookmark' defaultMessage='to bookmark' /></td>\n </tr>\n <tr>\n <td><kbd>enter</kbd>, <kbd>o</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td>\n </tr>\n <tr>\n <td><kbd>e</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.open_media' defaultMessage='to open media' /></td>\n </tr>\n <tr>\n <td><kbd>x</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_hidden' defaultMessage='to show/hide text behind CW' /></td>\n </tr>\n <tr>\n <td><kbd>h</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_sensitivity' defaultMessage='to show/hide media' /></td>\n </tr>\n {collapseEnabled && (\n <tr>\n <td><kbd>shift</kbd>+<kbd>x</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toggle_collapse' defaultMessage='to collapse/uncollapse toots' /></td>\n </tr>\n )}\n <tr>\n <td><kbd>up</kbd>, <kbd>k</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.up' defaultMessage='to move up in the list' /></td>\n </tr>\n <tr>\n <td><kbd>down</kbd>, <kbd>j</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.down' defaultMessage='to move down in the list' /></td>\n </tr>\n <tr>\n <td><kbd>1</kbd>-<kbd>9</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.column' defaultMessage='to focus a status in one of the columns' /></td>\n </tr>\n <tr>\n <td><kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.compose' defaultMessage='to focus the compose textarea' /></td>\n </tr>\n <tr>\n <td><kbd>alt</kbd>+<kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.toot' defaultMessage='to start a brand new toot' /></td>\n </tr>\n <tr>\n <td><kbd>backspace</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.back' defaultMessage='to navigate back' /></td>\n </tr>\n <tr>\n <td><kbd>s</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.search' defaultMessage='to focus search' /></td>\n </tr>\n <tr>\n <td><kbd>alt</kbd>+<kbd>enter</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.secondary_toot' defaultMessage='to send toot using secondary privacy setting' /></td>\n </tr>\n <tr>\n <td><kbd>esc</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.unfocus' defaultMessage='to un-focus compose textarea/search' /></td>\n </tr>\n <tr>\n <td><kbd>?</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.legend' defaultMessage='to display this legend' /></td>\n </tr>\n </tbody>\n </table>\n </div>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/list_editor.js b/priv/static/packs/flavours/glitch/async/list_editor.js
index 59bcc86a6..d80cb005a 100644
--- a/priv/static/packs/flavours/glitch/async/list_editor.js
+++ b/priv/static/packs/flavours/glitch/async/list_editor.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{813:function(t,n,e){"use strict";e.r(n);var i,c,a,o,r=e(0),u=e(7),s=e(1),d=e(3),l=e.n(d),b=e(5),f=e.n(b),j=e(14),O=e.n(j),p=e(13),m=e(18),v=e(6),h=e(28),g=e(103),I=e(1119),C=Object(v.g)(Object(p.connect)((function(){var t=Object(g.d)();return function(n,e){var i=e.accountId,c=e.added;return{account:t(n,i),added:void 0===c?n.getIn(["listEditor","accounts","items"]).includes(i):c}}}),(function(t,n){var e=n.accountId;return{onRemove:function(){return t(Object(h.K)(e))},onAdd:function(){return t(Object(h.B)(e))}}}))(I.a)),R=e(1120),_=Object(v.g)(Object(p.connect)((function(t){return{value:t.getIn(["listEditor","suggestions","value"])}}),(function(t){return{onSubmit:function(n){return t(Object(h.H)(n))},onClear:function(){return t(Object(h.E)())},onChange:function(n){return t(Object(h.D)(n))}}}))(R.a)),w=e(2),y=e(39),k=Object(v.f)({title:{id:"lists.edit.submit",defaultMessage:"Change title"}}),E=Object(p.connect)((function(t){return{value:t.getIn(["listEditor","title"]),disabled:!t.getIn(["listEditor","isChanged"])||!t.getIn(["listEditor","title"])}}),(function(t){return{onChange:function(n){return t(Object(h.C)(n))},onSubmit:function(){return t(Object(h.P)(!1))}}}))(i=Object(v.g)(i=function(t){function n(){for(var n,e=arguments.length,i=new Array(e),c=0;c<e;c++)i[c]=arguments[c];return n=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(w.a)(n),"handleChange",(function(t){n.props.onChange(t.target.value)})),Object(s.a)(Object(w.a)(n),"handleSubmit",(function(t){t.preventDefault(),n.props.onSubmit()})),Object(s.a)(Object(w.a)(n),"handleClick",(function(){n.props.onSubmit()})),n}return Object(u.a)(n,t),n.prototype.render=function(){var t=this.props,n=t.value,e=t.disabled,i=t.intl.formatMessage(k.title);return Object(r.a)("form",{className:"column-inline-form",onSubmit:this.handleSubmit},void 0,Object(r.a)("input",{className:"setting-text",value:n,onChange:this.handleChange}),Object(r.a)(y.a,{disabled:e,icon:"check",title:i,onClick:this.handleClick}))},n}(l.a.PureComponent))||i)||i,q=e(92),S=e(34),N=e.n(S);e.d(n,"default",(function(){return x}));var x=Object(p.connect)((function(t){return{accountIds:t.getIn(["listEditor","accounts","items"]),searchAccountIds:t.getIn(["listEditor","suggestions","items"])}}),(function(t){return{onInitialize:function(n){return t(Object(h.O)(n))},onClear:function(){return t(Object(h.E)())},onReset:function(){return t(Object(h.M)())}}}))(c=Object(v.g)((o=a=function(t){function n(){return t.apply(this,arguments)||this}Object(u.a)(n,t);var e=n.prototype;return e.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.listId)},e.componentWillUnmount=function(){(0,this.props.onReset)()},e.render=function(){var t=this.props,n=t.accountIds,e=t.searchAccountIds,i=t.onClear,c=e.size>0;return Object(r.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(r.a)(E,{}),Object(r.a)(_,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,Object(r.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,n.map((function(t){return Object(r.a)(C,{accountId:t,added:!0},t)}))),c&&Object(r.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:i}),Object(r.a)(q.a,{defaultStyle:{x:-100},style:{x:N()(c?0:-100,{stiffness:210,damping:20})}},void 0,(function(t){var n=t.x;return Object(r.a)("div",{className:"drawer__inner backdrop",style:{transform:0===n?null:"translateX("+n+"%)",visibility:-100===n?"hidden":"visible"}},void 0,e.map((function(t){return Object(r.a)(C,{accountId:t},t)})))}))))},n}(m.a),Object(s.a)(a,"propTypes",{listId:f.a.string.isRequired,onClose:f.a.func.isRequired,intl:f.a.object.isRequired,onInitialize:f.a.func.isRequired,onClear:f.a.func.isRequired,onReset:f.a.func.isRequired,accountIds:O.a.list.isRequired,searchAccountIds:O.a.list.isRequired}),c=o))||c)||c}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{840:function(t,n,e){"use strict";e.r(n),e.d(n,"default",(function(){return x}));var i,c=e(0),a=(e(9),e(6),e(8)),r=e(1),o=e(3),u=e.n(o),s=e(5),d=e.n(s),l=e(16),b=e.n(l),f=e(15),j=e(21),O=e(7),p=e(30),v=e(108),m=e(1151),h=Object(O.g)(Object(f.connect)((function(){var t=Object(v.d)();return function(n,e){var i=e.accountId,c=e.added;return{account:t(n,i),added:void 0===c?n.getIn(["listEditor","accounts","items"]).includes(i):c}}}),(function(t,n){var e=n.accountId;return{onRemove:function(){return t(Object(p.K)(e))},onAdd:function(){return t(Object(p.B)(e))}}}))(m.a)),g=e(1152),I=Object(O.g)(Object(f.connect)((function(t){return{value:t.getIn(["listEditor","suggestions","value"])}}),(function(t){return{onSubmit:function(n){return t(Object(p.H)(n))},onClear:function(){return t(Object(p.E)())},onChange:function(n){return t(Object(p.D)(n))}}}))(g.a)),C=e(2),R=e(41);var _,w,y,k=Object(O.f)({title:{id:"lists.edit.submit",defaultMessage:"Change title"}}),E=Object(f.connect)((function(t){return{value:t.getIn(["listEditor","title"]),disabled:!t.getIn(["listEditor","isChanged"])||!t.getIn(["listEditor","title"])}}),(function(t){return{onChange:function(n){return t(Object(p.C)(n))},onSubmit:function(){return t(Object(p.P)(!1))}}}))(i=Object(O.g)(i=function(t){Object(a.a)(e,t);var n;n=e;function e(){for(var n,e=arguments.length,i=new Array(e),c=0;c<e;c++)i[c]=arguments[c];return n=t.call.apply(t,[this].concat(i))||this,Object(r.a)(Object(C.a)(n),"handleChange",(function(t){n.props.onChange(t.target.value)})),Object(r.a)(Object(C.a)(n),"handleSubmit",(function(t){t.preventDefault(),n.props.onSubmit()})),Object(r.a)(Object(C.a)(n),"handleClick",(function(){n.props.onSubmit()})),n}return e.prototype.render=function(){var t=this.props,n=t.value,e=t.disabled,i=t.intl.formatMessage(k.title);return Object(c.a)("form",{className:"column-inline-form",onSubmit:this.handleSubmit},void 0,Object(c.a)("input",{className:"setting-text",value:n,onChange:this.handleChange}),Object(c.a)(R.a,{disabled:e,icon:"check",title:i,onClick:this.handleClick}))},e}(u.a.PureComponent))||i)||i,q=e(97),S=e(35),N=e.n(S);var x=Object(f.connect)((function(t){return{accountIds:t.getIn(["listEditor","accounts","items"]),searchAccountIds:t.getIn(["listEditor","suggestions","items"])}}),(function(t){return{onInitialize:function(n){return t(Object(p.O)(n))},onClear:function(){return t(Object(p.E)())},onReset:function(){return t(Object(p.M)())}}}))(_=Object(O.g)((y=w=function(t){Object(a.a)(e,t);var n;n=e;function e(){return t.apply(this,arguments)||this}var i=e.prototype;return i.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.listId)},i.componentWillUnmount=function(){(0,this.props.onReset)()},i.render=function(){var t=this.props,n=t.accountIds,e=t.searchAccountIds,i=t.onClear,a=e.size>0;return Object(c.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(c.a)(E,{}),Object(c.a)(I,{}),Object(c.a)("div",{className:"drawer__pager"},void 0,Object(c.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,n.map((function(t){return Object(c.a)(h,{accountId:t,added:!0},t)}))),a&&Object(c.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:i}),Object(c.a)(q.a,{defaultStyle:{x:-100},style:{x:N()(a?0:-100,{stiffness:210,damping:20})}},void 0,(function(t){var n=t.x;return(Object(c.a)("div",{className:"drawer__inner backdrop",style:{transform:0===n?null:"translateX("+n+"%)",visibility:-100===n?"hidden":"visible"}},void 0,e.map((function(t){return Object(c.a)(h,{accountId:t},t)}))))}))))},e}(j.a),Object(r.a)(w,"propTypes",{listId:d.a.string.isRequired,onClose:d.a.func.isRequired,intl:d.a.object.isRequired,onInitialize:d.a.func.isRequired,onClear:d.a.func.isRequired,onReset:d.a.func.isRequired,accountIds:b.a.list.isRequired,searchAccountIds:b.a.list.isRequired}),_=y))||_)||_}}]);
//# sourceMappingURL=list_editor.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/list_editor.js.map b/priv/static/packs/flavours/glitch/async/list_editor.js.map
index c0b2041fd..32db1fab1 100644
--- a/priv/static/packs/flavours/glitch/async/list_editor.js.map
+++ b/priv/static/packs/flavours/glitch/async/list_editor.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/containers/account_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/containers/search_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/index.js"],"names":["injectIntl","connect","getAccount","makeGetAccount","state","accountId","added","account","getIn","includes","dispatch","onRemove","removeFromListEditor","onAdd","addToListEditor","Account","value","onSubmit","fetchListSuggestions","onClear","clearListSuggestions","onChange","changeListSuggestions","Search","messages","defineMessages","title","ListForm","disabled","changeListEditorTitle","submitListEditor","e","props","target","preventDefault","render","this","intl","formatMessage","className","handleSubmit","handleChange","icon","onClick","handleClick","React","PureComponent","ListEditor","accountIds","searchAccountIds","onInitialize","listId","setupListEditor","onReset","resetListEditor","componentDidMount","componentWillUnmount","showSearch","size","map","role","tabIndex","defaultStyle","x","style","spring","stiffness","damping","transform","visibility","ImmutablePureComponent","PropTypes","string","isRequired","onClose","func","object","ImmutablePropTypes","list"],"mappings":"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","file":"flavours/glitch/async/list_editor.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { injectIntl } from 'react-intl';\nimport { removeFromListEditor, addToListEditor } from 'flavours/glitch/actions/lists';\nimport Account from '../components/account';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId, added }) => ({\n account: getAccount(state, accountId),\n added: typeof added === 'undefined' ? state.getIn(['listEditor', 'accounts', 'items']).includes(accountId) : added,\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { accountId }) => ({\n onRemove: () => dispatch(removeFromListEditor(accountId)),\n onAdd: () => dispatch(addToListEditor(accountId)),\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { injectIntl } from 'react-intl';\nimport { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists';\nimport Search from '../components/search';\n\nconst mapStateToProps = state => ({\n value: state.getIn(['listEditor', 'suggestions', 'value']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: value => dispatch(fetchListSuggestions(value)),\n onClear: () => dispatch(clearListSuggestions()),\n onChange: value => dispatch(changeListSuggestions(value)),\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Search));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { changeListEditorTitle, submitListEditor } from 'flavours/glitch/actions/lists';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n title: { id: 'lists.edit.submit', defaultMessage: 'Change title' },\n});\n\nconst mapStateToProps = state => ({\n value: state.getIn(['listEditor', 'title']),\n disabled: !state.getIn(['listEditor', 'isChanged']) || !state.getIn(['listEditor', 'title']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChange: value => dispatch(changeListEditorTitle(value)),\n onSubmit: () => dispatch(submitListEditor(false)),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListForm extends React.PureComponent {\n\n static propTypes = {\n value: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n };\n\n handleChange = e => {\n this.props.onChange(e.target.value);\n }\n\n handleSubmit = e => {\n e.preventDefault();\n this.props.onSubmit();\n }\n\n handleClick = () => {\n this.props.onSubmit();\n }\n\n render () {\n const { value, disabled, intl } = this.props;\n\n const title = intl.formatMessage(messages.title);\n\n return (\n <form className='column-inline-form' onSubmit={this.handleSubmit}>\n <input\n className='setting-text'\n value={value}\n onChange={this.handleChange}\n />\n\n <IconButton\n disabled={disabled}\n icon='check'\n title={title}\n onClick={this.handleClick}\n />\n </form>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { injectIntl } from 'react-intl';\nimport { setupListEditor, clearListSuggestions, resetListEditor } from 'flavours/glitch/actions/lists';\nimport AccountContainer from './containers/account_container';\nimport SearchContainer from './containers/search_container';\nimport EditListForm from './components/edit_list_form';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['listEditor', 'accounts', 'items']),\n searchAccountIds: state.getIn(['listEditor', 'suggestions', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: listId => dispatch(setupListEditor(listId)),\n onClear: () => dispatch(clearListSuggestions()),\n onReset: () => dispatch(resetListEditor()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListEditor extends ImmutablePureComponent {\n\n static propTypes = {\n listId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list.isRequired,\n searchAccountIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, listId } = this.props;\n onInitialize(listId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountIds, searchAccountIds, onClear } = this.props;\n const showSearch = searchAccountIds.size > 0;\n\n return (\n <div className='modal-root__modal list-editor'>\n <EditListForm />\n\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} added />)}\n </div>\n\n {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}\n\n <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) =>\n (<div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n {searchAccountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} />)}\n </div>)\n }\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/containers/account_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/containers/search_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_editor/index.js"],"names":["injectIntl","connect","getAccount","makeGetAccount","state","accountId","added","account","getIn","includes","dispatch","onRemove","removeFromListEditor","onAdd","addToListEditor","Account","value","onSubmit","fetchListSuggestions","onClear","clearListSuggestions","onChange","changeListSuggestions","Search","messages","defineMessages","title","ListForm","disabled","changeListEditorTitle","submitListEditor","e","props","target","preventDefault","render","this","intl","formatMessage","className","handleSubmit","handleChange","icon","onClick","handleClick","React","PureComponent","ListEditor","accountIds","searchAccountIds","onInitialize","listId","setupListEditor","onReset","resetListEditor","componentDidMount","componentWillUnmount","showSearch","size","map","role","tabIndex","defaultStyle","x","style","spring","stiffness","damping","transform","visibility","ImmutablePureComponent","PropTypes","string","isRequired","onClose","func","object","ImmutablePropTypes","list"],"mappings":"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","file":"flavours/glitch/async/list_editor.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { injectIntl } from 'react-intl';\nimport { removeFromListEditor, addToListEditor } from 'flavours/glitch/actions/lists';\nimport Account from '../components/account';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId, added }) => ({\n account: getAccount(state, accountId),\n added: typeof added === 'undefined' ? state.getIn(['listEditor', 'accounts', 'items']).includes(accountId) : added,\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { accountId }) => ({\n onRemove: () => dispatch(removeFromListEditor(accountId)),\n onAdd: () => dispatch(addToListEditor(accountId)),\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { injectIntl } from 'react-intl';\nimport { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists';\nimport Search from '../components/search';\n\nconst mapStateToProps = state => ({\n value: state.getIn(['listEditor', 'suggestions', 'value']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: value => dispatch(fetchListSuggestions(value)),\n onClear: () => dispatch(clearListSuggestions()),\n onChange: value => dispatch(changeListSuggestions(value)),\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Search));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { changeListEditorTitle, submitListEditor } from 'flavours/glitch/actions/lists';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n title: { id: 'lists.edit.submit', defaultMessage: 'Change title' },\n});\n\nconst mapStateToProps = state => ({\n value: state.getIn(['listEditor', 'title']),\n disabled: !state.getIn(['listEditor', 'isChanged']) || !state.getIn(['listEditor', 'title']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChange: value => dispatch(changeListEditorTitle(value)),\n onSubmit: () => dispatch(submitListEditor(false)),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListForm extends React.PureComponent {\n\n static propTypes = {\n value: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n };\n\n handleChange = e => {\n this.props.onChange(e.target.value);\n }\n\n handleSubmit = e => {\n e.preventDefault();\n this.props.onSubmit();\n }\n\n handleClick = () => {\n this.props.onSubmit();\n }\n\n render () {\n const { value, disabled, intl } = this.props;\n\n const title = intl.formatMessage(messages.title);\n\n return (\n <form className='column-inline-form' onSubmit={this.handleSubmit}>\n <input\n className='setting-text'\n value={value}\n onChange={this.handleChange}\n />\n\n <IconButton\n disabled={disabled}\n icon='check'\n title={title}\n onClick={this.handleClick}\n />\n </form>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { injectIntl } from 'react-intl';\nimport { setupListEditor, clearListSuggestions, resetListEditor } from 'flavours/glitch/actions/lists';\nimport AccountContainer from './containers/account_container';\nimport SearchContainer from './containers/search_container';\nimport EditListForm from './components/edit_list_form';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['listEditor', 'accounts', 'items']),\n searchAccountIds: state.getIn(['listEditor', 'suggestions', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: listId => dispatch(setupListEditor(listId)),\n onClear: () => dispatch(clearListSuggestions()),\n onReset: () => dispatch(resetListEditor()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListEditor extends ImmutablePureComponent {\n\n static propTypes = {\n listId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list.isRequired,\n searchAccountIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, listId } = this.props;\n onInitialize(listId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountIds, searchAccountIds, onClear } = this.props;\n const showSearch = searchAccountIds.size > 0;\n\n return (\n <div className='modal-root__modal list-editor'>\n <EditListForm />\n\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} added />)}\n </div>\n\n {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}\n\n <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) =>\n (<div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n {searchAccountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} />)}\n </div>)\n }\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/list_timeline.js b/priv/static/packs/flavours/glitch/async/list_timeline.js
index 8f1d12946..7be347902 100644
--- a/priv/static/packs/flavours/glitch/async/list_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/list_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{764:function(e,t,i){"use strict";i.r(t),i.d(t,"default",(function(){return N}));var s,a,n,l=i(0),o=i(2),c=i(7),d=i(1),r=i(3),p=i.n(r),b=i(13),u=i(5),h=i.n(u),m=i(1033),j=i(734),O=i(732),f=i(249),v=i(6),g=i(739),_=i(32),y=i(28),M=i(42),C=i(1029),I=i(299),k=i(23),w=Object(v.f)({deleteMessage:{id:"confirmations.delete_list.message",defaultMessage:"Are you sure you want to permanently delete this list?"},deleteConfirm:{id:"confirmations.delete_list.confirm",defaultMessage:"Delete"},all_replies:{id:"lists.replies_policy.all_replies",defaultMessage:"any followed user"},no_replies:{id:"lists.replies_policy.no_replies",defaultMessage:"no one"},list_replies:{id:"lists.replies_policy.list_replies",defaultMessage:"members of the list"}}),N=Object(b.connect)((function(e,t){return{list:e.getIn(["lists",t.params.id]),hasUnread:e.getIn(["timelines","list:"+t.params.id,"unread"])>0}}))(s=Object(v.g)((n=a=function(e){function t(){for(var t,i=arguments.length,s=new Array(i),a=0;a<i;a++)s[a]=arguments[a];return t=e.call.apply(e,[this].concat(s))||this,Object(d.a)(Object(o.a)(t),"handlePin",(function(){var e=t.props,i=e.columnId,s=e.dispatch;i?s(Object(f.h)(i)):(s(Object(f.e)("LIST",{id:t.props.params.id})),t.context.router.history.push("/"))})),Object(d.a)(Object(o.a)(t),"handleMove",(function(e){var i=t.props,s=i.columnId;(0,i.dispatch)(Object(f.g)(s,e))})),Object(d.a)(Object(o.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(d.a)(Object(o.a)(t),"setRef",(function(e){t.column=e})),Object(d.a)(Object(o.a)(t),"handleLoadMore",(function(e){var i=t.props.params.id;t.props.dispatch(Object(_.v)(i,{maxId:e}))})),Object(d.a)(Object(o.a)(t),"handleEditClick",(function(){t.props.dispatch(Object(M.d)("LIST_EDITOR",{listId:t.props.params.id}))})),Object(d.a)(Object(o.a)(t),"handleDeleteClick",(function(){var e=t.props,i=e.dispatch,s=e.columnId,a=e.intl,n=t.props.params.id;i(Object(M.d)("CONFIRM",{message:a.formatMessage(w.deleteMessage),confirm:a.formatMessage(w.deleteConfirm),onConfirm:function(){i(Object(y.F)(n)),s?i(Object(f.h)(s)):t.context.router.history.push("/lists")}}))})),Object(d.a)(Object(o.a)(t),"handleRepliesPolicyChange",(function(e){var i=e.target,s=t.props,a=(s.dispatch,s.list,t.props.params.id);t.props.dispatch(Object(y.Q)(a,void 0,!1,i.value))})),t}Object(c.a)(t,e);var i=t.prototype;return i.componentDidMount=function(){var e=this.props.dispatch,t=this.props.params.id;e(Object(y.G)(t)),e(Object(_.v)(t)),this.disconnect=e(Object(g.d)(t))},i.componentWillReceiveProps=function(e){var t=this.props.dispatch,i=e.params.id;i!==this.props.params.id&&(this.disconnect&&(this.disconnect(),this.disconnect=null),t(Object(y.G)(i)),t(Object(_.v)(i)),this.disconnect=t(Object(g.d)(i)))},i.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},i.render=function(){var e=this,t=this.props,i=t.hasUnread,s=t.columnId,a=t.multiColumn,n=t.list,o=(t.intl,this.props.params.id),c=!!s,d=n?n.get("title"):o,r=n?n.get("replies_policy"):void 0;return void 0===n?Object(l.a)(j.a,{},void 0,Object(l.a)("div",{className:"scrollable"},void 0,Object(l.a)(I.a,{}))):!1===n?Object(l.a)(j.a,{},void 0,Object(l.a)("div",{className:"scrollable"},void 0,Object(l.a)(C.a,{}))):p.a.createElement(j.a,{ref:this.setRef,label:d},Object(l.a)(O.a,{icon:"list-ul",active:i,title:d,onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:c,multiColumn:a,bindToDocument:!a},void 0,Object(l.a)("div",{className:"column-header__links"},void 0,Object(l.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleEditClick},void 0,Object(l.a)(k.a,{id:"pencil"})," ",Object(l.a)(v.b,{id:"lists.edit",defaultMessage:"Edit list"})),Object(l.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleDeleteClick},void 0,Object(l.a)(k.a,{id:"trash"})," ",Object(l.a)(v.b,{id:"lists.delete",defaultMessage:"Delete list"}))),void 0!==r&&Object(l.a)("div",{},void 0,Object(l.a)("div",{className:"column-settings__row"},void 0,Object(l.a)("fieldset",{},void 0,Object(l.a)("legend",{},void 0,Object(l.a)(v.b,{id:"lists.replies_policy.title",defaultMessage:"Show replies to:"})),["no_replies","list_replies","all_replies"].map((function(t){return Object(l.a)("div",{className:"setting-radio"},void 0,Object(l.a)("input",{className:"setting-radio__input",id:["setting","radio",o,t].join("-"),type:"radio",value:t,checked:r===t,onChange:e.handleRepliesPolicyChange}),Object(l.a)("label",{className:"setting-radio__label",htmlFor:["setting","radio",o,t].join("-")},void 0,p.a.createElement(v.b,w[t])))}))))),Object(l.a)("hr",{})),Object(l.a)(m.a,{trackScroll:!c,scrollKey:"list_timeline-"+s,timelineId:"list:"+o,onLoadMore:this.handleLoadMore,emptyMessage:Object(l.a)(v.b,{id:"empty_column.list",defaultMessage:"There is nothing in this list yet."}),bindToDocument:!a}))},t}(p.a.PureComponent),Object(d.a)(a,"contextTypes",{router:h.a.object}),s=n))||s)||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{790:function(e,t,i){"use strict";i.r(t),i.d(t,"default",(function(){return N}));var a,s,n,l=i(0),o=i(2),c=(i(9),i(6),i(8)),d=i(1),r=i(3),p=i.n(r),b=i(15),u=i(5),h=i.n(u),m=i(1059),j=i(760),O=i(758),v=i(252),f=i(7),g=i(765),_=i(34),y=i(30),M=i(45),C=i(1056),I=i(305),k=i(25);var w=Object(f.f)({deleteMessage:{id:"confirmations.delete_list.message",defaultMessage:"Are you sure you want to permanently delete this list?"},deleteConfirm:{id:"confirmations.delete_list.confirm",defaultMessage:"Delete"},all_replies:{id:"lists.replies_policy.all_replies",defaultMessage:"any followed user"},no_replies:{id:"lists.replies_policy.no_replies",defaultMessage:"no one"},list_replies:{id:"lists.replies_policy.list_replies",defaultMessage:"members of the list"}}),N=Object(b.connect)((function(e,t){return{list:e.getIn(["lists",t.params.id]),hasUnread:e.getIn(["timelines","list:"+t.params.id,"unread"])>0}}))(a=Object(f.g)((n=s=function(e){Object(c.a)(i,e);var t;t=i;function i(){for(var t,i=arguments.length,a=new Array(i),s=0;s<i;s++)a[s]=arguments[s];return t=e.call.apply(e,[this].concat(a))||this,Object(d.a)(Object(o.a)(t),"handlePin",(function(){var e=t.props,i=e.columnId,a=e.dispatch;i?a(Object(v.h)(i)):(a(Object(v.e)("LIST",{id:t.props.params.id})),t.context.router.history.push("/"))})),Object(d.a)(Object(o.a)(t),"handleMove",(function(e){var i=t.props,a=i.columnId;(0,i.dispatch)(Object(v.g)(a,e))})),Object(d.a)(Object(o.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(d.a)(Object(o.a)(t),"setRef",(function(e){t.column=e})),Object(d.a)(Object(o.a)(t),"handleLoadMore",(function(e){var i=t.props.params.id;t.props.dispatch(Object(_.v)(i,{maxId:e}))})),Object(d.a)(Object(o.a)(t),"handleEditClick",(function(){t.props.dispatch(Object(M.d)("LIST_EDITOR",{listId:t.props.params.id}))})),Object(d.a)(Object(o.a)(t),"handleDeleteClick",(function(){var e=t.props,i=e.dispatch,a=e.columnId,s=e.intl,n=t.props.params.id;i(Object(M.d)("CONFIRM",{message:s.formatMessage(w.deleteMessage),confirm:s.formatMessage(w.deleteConfirm),onConfirm:function(){i(Object(y.F)(n)),a?i(Object(v.h)(a)):t.context.router.history.push("/lists")}}))})),Object(d.a)(Object(o.a)(t),"handleRepliesPolicyChange",(function(e){var i=e.target,a=t.props,s=(a.dispatch,a.list,t.props.params.id);t.props.dispatch(Object(y.Q)(s,void 0,!1,i.value))})),t}var a=i.prototype;return a.componentDidMount=function(){var e=this.props.dispatch,t=this.props.params.id;e(Object(y.G)(t)),e(Object(_.v)(t)),this.disconnect=e(Object(g.d)(t))},a.componentWillReceiveProps=function(e){var t=this.props.dispatch,i=e.params.id;i!==this.props.params.id&&(this.disconnect&&(this.disconnect(),this.disconnect=null),t(Object(y.G)(i)),t(Object(_.v)(i)),this.disconnect=t(Object(g.d)(i)))},a.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},a.render=function(){var e=this,t=this.props,i=t.hasUnread,a=t.columnId,s=t.multiColumn,n=t.list,o=(t.intl,this.props.params.id),c=!!a,d=n?n.get("title"):o,r=n?n.get("replies_policy"):void 0;return void 0===n?Object(l.a)(j.a,{},void 0,Object(l.a)("div",{className:"scrollable"},void 0,Object(l.a)(I.a,{}))):!1===n?Object(l.a)(j.a,{},void 0,Object(l.a)("div",{className:"scrollable"},void 0,Object(l.a)(C.a,{}))):p.a.createElement(j.a,{ref:this.setRef,label:d},Object(l.a)(O.a,{icon:"list-ul",active:i,title:d,onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:c,multiColumn:s,bindToDocument:!s},void 0,Object(l.a)("div",{className:"column-header__links"},void 0,Object(l.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleEditClick},void 0,Object(l.a)(k.a,{id:"pencil"})," ",Object(l.a)(f.b,{id:"lists.edit",defaultMessage:"Edit list"})),Object(l.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleDeleteClick},void 0,Object(l.a)(k.a,{id:"trash"})," ",Object(l.a)(f.b,{id:"lists.delete",defaultMessage:"Delete list"}))),void 0!==r&&Object(l.a)("div",{},void 0,Object(l.a)("div",{className:"column-settings__row"},void 0,Object(l.a)("fieldset",{},void 0,Object(l.a)("legend",{},void 0,Object(l.a)(f.b,{id:"lists.replies_policy.title",defaultMessage:"Show replies to:"})),["no_replies","list_replies","all_replies"].map((function(t){return Object(l.a)("div",{className:"setting-radio"},void 0,Object(l.a)("input",{className:"setting-radio__input",id:["setting","radio",o,t].join("-"),type:"radio",value:t,checked:r===t,onChange:e.handleRepliesPolicyChange}),Object(l.a)("label",{className:"setting-radio__label",htmlFor:["setting","radio",o,t].join("-")},void 0,p.a.createElement(f.b,w[t])))}))))),Object(l.a)("hr",{})),Object(l.a)(m.a,{trackScroll:!c,scrollKey:"list_timeline-"+a,timelineId:"list:"+o,onLoadMore:this.handleLoadMore,emptyMessage:Object(l.a)(f.b,{id:"empty_column.list",defaultMessage:"There is nothing in this list yet."}),bindToDocument:!s}))},i}(p.a.PureComponent),Object(d.a)(s,"contextTypes",{router:h.a.object}),a=n))||a)||a}}]);
//# sourceMappingURL=list_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/list_timeline.js.map b/priv/static/packs/flavours/glitch/async/list_timeline.js.map
index 109de2301..82e887f76 100644
--- a/priv/static/packs/flavours/glitch/async/list_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/list_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_timeline/index.js"],"names":["messages","defineMessages","deleteMessage","deleteConfirm","all_replies","no_replies","list_replies","ListTimeline","connect","state","props","list","getIn","params","id","hasUnread","injectIntl","columnId","dispatch","removeColumn","addColumn","context","router","history","push","dir","moveColumn","column","scrollTop","c","maxId","expandListTimeline","openModal","listId","intl","message","formatMessage","confirm","onConfirm","deleteList","target","updateList","undefined","value","componentDidMount","this","fetchList","disconnect","connectListStream","componentWillReceiveProps","nextProps","componentWillUnmount","render","multiColumn","pinned","title","get","replies_policy","className","ref","setRef","label","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","bindToDocument","tabIndex","handleEditClick","defaultMessage","handleDeleteClick","map","policy","join","type","checked","onChange","handleRepliesPolicyChange","htmlFor","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","React","PureComponent","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/list_timeline.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connectListStream } from 'flavours/glitch/actions/streaming';\nimport { expandListTimeline } from 'flavours/glitch/actions/timelines';\nimport { fetchList, deleteList, updateList } from 'flavours/glitch/actions/lists';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' },\n deleteConfirm: { id: 'confirmations.delete_list.confirm', defaultMessage: 'Delete' },\n all_replies: { id: 'lists.replies_policy.all_replies', defaultMessage: 'any followed user' },\n no_replies: { id: 'lists.replies_policy.no_replies', defaultMessage: 'no one' },\n list_replies: { id: 'lists.replies_policy.list_replies', defaultMessage: 'members of the list' },\n});\n\nconst mapStateToProps = (state, props) => ({\n list: state.getIn(['lists', props.params.id]),\n hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0,\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ListTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n list: PropTypes.oneOfType([ImmutablePropTypes.map, PropTypes.bool]),\n intl: PropTypes.object.isRequired,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('LIST', { id: this.props.params.id }));\n this.context.router.history.push('/');\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch } = this.props;\n const { id } = this.props.params;\n\n dispatch(fetchList(id));\n dispatch(expandListTimeline(id));\n\n this.disconnect = dispatch(connectListStream(id));\n }\n\n componentWillReceiveProps (nextProps) {\n const { dispatch } = this.props;\n const { id } = nextProps.params;\n\n if (id !== this.props.params.id) {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n\n dispatch(fetchList(id));\n dispatch(expandListTimeline(id));\n\n this.disconnect = dispatch(connectListStream(id));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { id } = this.props.params;\n this.props.dispatch(expandListTimeline(id, { maxId }));\n }\n\n handleEditClick = () => {\n this.props.dispatch(openModal('LIST_EDITOR', { listId: this.props.params.id }));\n }\n\n handleDeleteClick = () => {\n const { dispatch, columnId, intl } = this.props;\n const { id } = this.props.params;\n\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: () => {\n dispatch(deleteList(id));\n\n if (!!columnId) {\n dispatch(removeColumn(columnId));\n } else {\n this.context.router.history.push('/lists');\n }\n },\n }));\n }\n\n handleRepliesPolicyChange = ({ target }) => {\n const { dispatch, list } = this.props;\n const { id } = this.props.params;\n this.props.dispatch(updateList(id, undefined, false, target.value));\n }\n\n render () {\n const { hasUnread, columnId, multiColumn, list, intl } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n const title = list ? list.get('title') : id;\n const replies_policy = list ? list.get('replies_policy') : undefined;\n\n if (typeof list === 'undefined') {\n return (\n <Column>\n <div className='scrollable'>\n <LoadingIndicator />\n </div>\n </Column>\n );\n } else if (list === false) {\n return (\n <Column>\n <div className='scrollable'>\n <MissingIndicator />\n </div>\n </Column>\n );\n }\n\n return (\n <Column ref={this.setRef} label={title}>\n <ColumnHeader\n icon='list-ul'\n active={hasUnread}\n title={title}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n bindToDocument={!multiColumn}\n >\n <div className='column-header__links'>\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleEditClick}>\n <Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' />\n </button>\n\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleDeleteClick}>\n <Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' />\n </button>\n </div>\n\n { replies_policy !== undefined && (\n <div>\n <div className='column-settings__row'>\n <fieldset>\n <legend><FormattedMessage id='lists.replies_policy.title' defaultMessage='Show replies to:' /></legend>\n { ['no_replies', 'list_replies', 'all_replies'].map(policy => (\n <div className='setting-radio'>\n <input className='setting-radio__input' id={['setting', 'radio', id, policy].join('-')} type='radio' value={policy} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} />\n <label className='setting-radio__label' htmlFor={['setting', 'radio', id, policy].join('-')}>\n <FormattedMessage {...messages[policy]} />\n </label>\n </div>\n ))}\n </fieldset>\n </div>\n </div>\n )}\n\n <hr />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`list_timeline-${columnId}`}\n timelineId={`list:${id}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.list' defaultMessage='There is nothing in this list yet.' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_timeline/index.js"],"names":["messages","defineMessages","deleteMessage","deleteConfirm","all_replies","no_replies","list_replies","ListTimeline","connect","state","props","list","getIn","params","id","hasUnread","injectIntl","columnId","dispatch","removeColumn","addColumn","context","router","history","push","dir","moveColumn","column","scrollTop","c","maxId","expandListTimeline","openModal","listId","intl","message","formatMessage","confirm","onConfirm","deleteList","target","updateList","undefined","value","componentDidMount","this","fetchList","disconnect","connectListStream","componentWillReceiveProps","nextProps","componentWillUnmount","render","multiColumn","pinned","title","get","replies_policy","className","ref","setRef","label","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","bindToDocument","tabIndex","handleEditClick","defaultMessage","handleDeleteClick","map","policy","join","type","checked","onChange","handleRepliesPolicyChange","htmlFor","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","React","PureComponent","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/list_timeline.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connectListStream } from 'flavours/glitch/actions/streaming';\nimport { expandListTimeline } from 'flavours/glitch/actions/timelines';\nimport { fetchList, deleteList, updateList } from 'flavours/glitch/actions/lists';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' },\n deleteConfirm: { id: 'confirmations.delete_list.confirm', defaultMessage: 'Delete' },\n all_replies: { id: 'lists.replies_policy.all_replies', defaultMessage: 'any followed user' },\n no_replies: { id: 'lists.replies_policy.no_replies', defaultMessage: 'no one' },\n list_replies: { id: 'lists.replies_policy.list_replies', defaultMessage: 'members of the list' },\n});\n\nconst mapStateToProps = (state, props) => ({\n list: state.getIn(['lists', props.params.id]),\n hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0,\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ListTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n hasUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n list: PropTypes.oneOfType([ImmutablePropTypes.map, PropTypes.bool]),\n intl: PropTypes.object.isRequired,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('LIST', { id: this.props.params.id }));\n this.context.router.history.push('/');\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch } = this.props;\n const { id } = this.props.params;\n\n dispatch(fetchList(id));\n dispatch(expandListTimeline(id));\n\n this.disconnect = dispatch(connectListStream(id));\n }\n\n componentWillReceiveProps (nextProps) {\n const { dispatch } = this.props;\n const { id } = nextProps.params;\n\n if (id !== this.props.params.id) {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n\n dispatch(fetchList(id));\n dispatch(expandListTimeline(id));\n\n this.disconnect = dispatch(connectListStream(id));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { id } = this.props.params;\n this.props.dispatch(expandListTimeline(id, { maxId }));\n }\n\n handleEditClick = () => {\n this.props.dispatch(openModal('LIST_EDITOR', { listId: this.props.params.id }));\n }\n\n handleDeleteClick = () => {\n const { dispatch, columnId, intl } = this.props;\n const { id } = this.props.params;\n\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: () => {\n dispatch(deleteList(id));\n\n if (!!columnId) {\n dispatch(removeColumn(columnId));\n } else {\n this.context.router.history.push('/lists');\n }\n },\n }));\n }\n\n handleRepliesPolicyChange = ({ target }) => {\n const { dispatch, list } = this.props;\n const { id } = this.props.params;\n this.props.dispatch(updateList(id, undefined, false, target.value));\n }\n\n render () {\n const { hasUnread, columnId, multiColumn, list, intl } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n const title = list ? list.get('title') : id;\n const replies_policy = list ? list.get('replies_policy') : undefined;\n\n if (typeof list === 'undefined') {\n return (\n <Column>\n <div className='scrollable'>\n <LoadingIndicator />\n </div>\n </Column>\n );\n } else if (list === false) {\n return (\n <Column>\n <div className='scrollable'>\n <MissingIndicator />\n </div>\n </Column>\n );\n }\n\n return (\n <Column ref={this.setRef} label={title}>\n <ColumnHeader\n icon='list-ul'\n active={hasUnread}\n title={title}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n bindToDocument={!multiColumn}\n >\n <div className='column-header__links'>\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleEditClick}>\n <Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' />\n </button>\n\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleDeleteClick}>\n <Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' />\n </button>\n </div>\n\n { replies_policy !== undefined && (\n <div>\n <div className='column-settings__row'>\n <fieldset>\n <legend><FormattedMessage id='lists.replies_policy.title' defaultMessage='Show replies to:' /></legend>\n { ['no_replies', 'list_replies', 'all_replies'].map(policy => (\n <div className='setting-radio'>\n <input className='setting-radio__input' id={['setting', 'radio', id, policy].join('-')} type='radio' value={policy} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} />\n <label className='setting-radio__label' htmlFor={['setting', 'radio', id, policy].join('-')}>\n <FormattedMessage {...messages[policy]} />\n </label>\n </div>\n ))}\n </fieldset>\n </div>\n </div>\n )}\n\n <hr />\n </ColumnHeader>\n\n <StatusListContainer\n trackScroll={!pinned}\n scrollKey={`list_timeline-${columnId}`}\n timelineId={`list:${id}`}\n onLoadMore={this.handleLoadMore}\n emptyMessage={<FormattedMessage id='empty_column.list' defaultMessage='There is nothing in this list yet.' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/lists.js b/priv/static/packs/flavours/glitch/async/lists.js
index 09e9c2090..01359b617 100644
--- a/priv/static/packs/flavours/glitch/async/lists.js
+++ b/priv/static/packs/flavours/glitch/async/lists.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{765:function(t,e,i){"use strict";i.r(e),i.d(e,"default",(function(){return T}));var n,s,a,o=i(0),u=i(7),c=i(1),r=(i(3),i(13)),l=i(5),d=i.n(l),b=i(14),p=i.n(b),f=i(299),g=i(730),j=i(735),h=i(28),m=i(6),O=i(18),y=i(1075),v=i(1076),w=i(1118),M=i(54),q=i(1022),C=Object(m.f)({heading:{id:"column.lists",defaultMessage:"Lists"},subheading:{id:"lists.subheading",defaultMessage:"Your lists"}}),R=Object(M.a)([function(t){return t.get("lists")}],(function(t){return t?t.toList().filter((function(t){return!!t})).sort((function(t,e){return t.get("title").localeCompare(e.get("title"))})):t})),T=Object(r.connect)((function(t){return{lists:R(t)}}))(n=Object(m.g)((a=s=function(t){function e(){return t.apply(this,arguments)||this}Object(u.a)(e,t);var i=e.prototype;return i.componentWillMount=function(){this.props.dispatch(Object(h.I)())},i.render=function(){var t=this.props,e=t.intl,i=t.lists,n=t.multiColumn;if(!i)return Object(o.a)(g.a,{},void 0,Object(o.a)(f.a,{}));var s=Object(o.a)(m.b,{id:"empty_column.lists",defaultMessage:"You don't have any lists yet. When you create one, it will show up here."});return Object(o.a)(g.a,{bindToDocument:!n,icon:"bars",heading:e.formatMessage(C.heading)},void 0,Object(o.a)(j.a,{}),Object(o.a)(w.a,{}),Object(o.a)(v.a,{text:e.formatMessage(C.subheading)}),Object(o.a)(q.a,{scrollKey:"lists",emptyMessage:s,bindToDocument:!n},void 0,i.map((function(t){return Object(o.a)(y.a,{to:"/timelines/list/"+t.get("id"),icon:"list-ul",text:t.get("title")},t.get("id"))}))))},e}(O.a),Object(c.a)(s,"propTypes",{params:d.a.object.isRequired,dispatch:d.a.func.isRequired,lists:p.a.list,intl:d.a.object.isRequired,multiColumn:d.a.bool}),n=a))||n)||n}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{791:function(t,e,i){"use strict";i.r(e),i.d(e,"default",(function(){return T}));var n,a,s,o=i(0),r=(i(9),i(6),i(8)),u=i(1),c=(i(3),i(15)),l=i(5),d=i.n(l),b=i(16),p=i.n(b),f=i(305),g=i(756),j=i(761),h=i(30),m=i(7),O=i(21),v=i(1103),y=i(1104),w=i(1150),M=i(57),q=i(1048);var C=Object(m.f)({heading:{id:"column.lists",defaultMessage:"Lists"},subheading:{id:"lists.subheading",defaultMessage:"Your lists"}}),R=Object(M.a)([function(t){return t.get("lists")}],(function(t){return t?t.toList().filter((function(t){return!!t})).sort((function(t,e){return t.get("title").localeCompare(e.get("title"))})):t})),T=Object(c.connect)((function(t){return{lists:R(t)}}))(n=Object(m.g)((s=a=function(t){Object(r.a)(i,t);var e;e=i;function i(){return t.apply(this,arguments)||this}var n=i.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(h.I)())},n.render=function(){var t=this.props,e=t.intl,i=t.lists,n=t.multiColumn;if(!i)return Object(o.a)(g.a,{},void 0,Object(o.a)(f.a,{}));var a=Object(o.a)(m.b,{id:"empty_column.lists",defaultMessage:"You don't have any lists yet. When you create one, it will show up here."});return(Object(o.a)(g.a,{bindToDocument:!n,icon:"bars",heading:e.formatMessage(C.heading)},void 0,Object(o.a)(j.a,{}),Object(o.a)(w.a,{}),Object(o.a)(y.a,{text:e.formatMessage(C.subheading)}),Object(o.a)(q.a,{scrollKey:"lists",emptyMessage:a,bindToDocument:!n},void 0,i.map((function(t){return Object(o.a)(v.a,{to:"/timelines/list/"+t.get("id"),icon:"list-ul",text:t.get("title")},t.get("id"))})))))},i}(O.a),Object(u.a)(a,"propTypes",{params:d.a.object.isRequired,dispatch:d.a.func.isRequired,lists:p.a.list,intl:d.a.object.isRequired,multiColumn:d.a.bool}),n=s))||n)||n}}]);
//# sourceMappingURL=lists.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/lists.js.map b/priv/static/packs/flavours/glitch/async/lists.js.map
index 6d0e57545..94a638597 100644
--- a/priv/static/packs/flavours/glitch/async/lists.js.map
+++ b/priv/static/packs/flavours/glitch/async/lists.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/lists/index.js"],"names":["messages","defineMessages","heading","subheading","getOrderedLists","createSelector","state","get","lists","toList","filter","item","sort","a","b","localeCompare","Lists","connect","injectIntl","componentWillMount","this","props","dispatch","fetchLists","render","intl","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","icon","formatMessage","text","scrollKey","map","list","to","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","bool"],"mappings":"2TAgBMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,0CACPC,WAAW,CAAD,qDAGNC,EAAkBC,YAAe,CAAC,SAAAC,GAAK,OAAIA,EAAMC,IAAI,YAAW,SAAAC,GACpE,OAAKA,EAIEA,EAAMC,SAASC,QAAO,SAAAC,GAAI,QAAMA,KAAMC,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEN,IAAI,SAASQ,cAAcD,EAAEP,IAAI,aAHtFC,KAYLQ,EAFUC,mBAJQ,SAAAX,GAAK,MAAK,CAChCE,MAAOJ,EAAgBE,M,GAIxBY,a,8GAWCC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAGtBC,OAAA,WAAW,IAAD,EAC6BJ,KAAKC,MAAlCI,EADA,EACAA,KAAMjB,EADN,EACMA,MAAOkB,EADb,EACaA,YAErB,IAAKlB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMmB,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,6EAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,OAAO7B,QAASuB,EAAKO,cAAchC,EAASE,eAAvF,EACE,YAAC,IAAD,IAEA,YAAC,IAAD,IAEA,YAAC,IAAD,CAAkB+B,KAAMR,EAAKO,cAAchC,EAASG,cACpD,YAAC,IAAD,CACE+B,UAAU,QACVP,aAAcA,EACdG,gBAAiBJ,QAHnB,EAKGlB,EAAM2B,KAAI,SAAAC,GAAI,OACb,YAAC,IAAD,CAAiCC,GAAE,mBAAqBD,EAAK7B,IAAI,MAASwB,KAAK,UAAUE,KAAMG,EAAK7B,IAAI,UAAvF6B,EAAK7B,IAAI,a,GAxClB+B,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBpB,SAAUkB,IAAUG,KAAKD,WACzBlC,MAAOoC,IAAmBR,KAC1BX,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUK,O","file":"flavours/glitch/async/lists.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { fetchLists } from 'flavours/glitch/actions/lists';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport NewListForm from './components/new_list_form';\nimport { createSelector } from 'reselect';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.lists', defaultMessage: 'Lists' },\n subheading: { id: 'lists.subheading', defaultMessage: 'Your lists' },\n});\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n if (!lists) {\n return lists;\n }\n\n return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title')));\n});\n\nconst mapStateToProps = state => ({\n lists: getOrderedLists(state),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Lists extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n lists: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchLists());\n }\n\n render () {\n const { intl, lists, multiColumn } = this.props;\n\n if (!lists) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.lists' defaultMessage=\"You don't have any lists yet. When you create one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} icon='bars' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <NewListForm />\n\n <ColumnSubheading text={intl.formatMessage(messages.subheading)} />\n <ScrollableList\n scrollKey='lists'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {lists.map(list =>\n <ColumnLink key={list.get('id')} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/lists/index.js"],"names":["messages","defineMessages","heading","subheading","getOrderedLists","createSelector","state","get","lists","toList","filter","item","sort","a","b","localeCompare","Lists","connect","injectIntl","componentWillMount","this","props","dispatch","fetchLists","render","intl","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","icon","formatMessage","text","scrollKey","map","list","to","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","bool"],"mappings":"uUAgBA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,0CACPC,WAAW,CAAD,qDAGNC,EAAkBC,YAAe,CAAC,SAAAC,GAAK,OAAIA,EAAMC,IAAI,YAAW,SAAAC,GACpE,OAAKA,EAIEA,EAAMC,SAASC,QAAO,SAAAC,GAAI,QAAMA,KAAMC,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEN,IAAI,SAASQ,cAAcD,EAAEP,IAAI,aAHtFC,KAYLQ,EAFUC,mBAJQ,SAAAX,GAAK,MAAK,CAChCE,MAAOJ,EAAgBE,M,GAIxBY,a,wHAWCC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAGtBC,OAAA,WAAW,IAAD,EAC6BJ,KAAKC,MAAlCI,EADA,EACAA,KAAMjB,EADN,EACMA,MAAOkB,EADb,EACaA,YAErB,IAAKlB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMmB,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,6EAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,OAAO7B,QAASuB,EAAKO,cAAchC,EAASE,eAAvF,EACE,YAAC,IAAD,IAEA,YAAC,IAAD,IAEA,YAAC,IAAD,CAAkB+B,KAAMR,EAAKO,cAAchC,EAASG,cACpD,YAAC,IAAD,CACE+B,UAAU,QACVP,aAAcA,EACdG,gBAAiBJ,QAHnB,EAKGlB,EAAM2B,KAAI,SAAAC,GAAI,OACb,YAAC,IAAD,CAAiCC,GAAE,mBAAqBD,EAAK7B,IAAI,MAASwB,KAAK,UAAUE,KAAMG,EAAK7B,IAAI,UAAvF6B,EAAK7B,IAAI,c,GAxClB+B,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBpB,SAAUkB,IAAUG,KAAKD,WACzBlC,MAAOoC,IAAmBR,KAC1BX,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUK,O","file":"flavours/glitch/async/lists.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport { fetchLists } from 'flavours/glitch/actions/lists';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from 'flavours/glitch/features/ui/components/column_link';\nimport ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';\nimport NewListForm from './components/new_list_form';\nimport { createSelector } from 'reselect';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.lists', defaultMessage: 'Lists' },\n subheading: { id: 'lists.subheading', defaultMessage: 'Your lists' },\n});\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n if (!lists) {\n return lists;\n }\n\n return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title')));\n});\n\nconst mapStateToProps = state => ({\n lists: getOrderedLists(state),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Lists extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n lists: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchLists());\n }\n\n render () {\n const { intl, lists, multiColumn } = this.props;\n\n if (!lists) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.lists' defaultMessage=\"You don't have any lists yet. When you create one, it will show up here.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} icon='bars' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <NewListForm />\n\n <ColumnSubheading text={intl.formatMessage(messages.subheading)} />\n <ScrollableList\n scrollKey='lists'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {lists.map(list =>\n <ColumnLink key={list.get('id')} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/mute_modal.js b/priv/static/packs/flavours/glitch/async/mute_modal.js
index 8799086c4..4563b7c03 100644
--- a/priv/static/packs/flavours/glitch/async/mute_modal.js
+++ b/priv/static/packs/flavours/glitch/async/mute_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{780:function(t,e,o){"use strict";o.r(e),o.d(e,"default",(function(){return j}));var n,a=o(0),i=o(2),c=o(7),s=o(1),l=o(3),u=o.n(l),d=o(13),m=o(6),r=o(301),f=o.n(r),b=o(66),p=o(42),g=o(22),h=o(119),j=Object(d.connect)((function(t){return{account:t.getIn(["mutes","new","account"]),notifications:t.getIn(["mutes","new","notifications"])}}),(function(t){return{onConfirm:function(e,o){t(Object(g.N)(e.get("id"),o))},onClose:function(){t(Object(p.c)())},onToggleNotifications:function(){t(Object(h.h)())}}}))(n=Object(m.g)(n=function(t){function e(){for(var e,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return e=t.call.apply(t,[this].concat(n))||this,Object(s.a)(Object(i.a)(e),"handleClick",(function(){e.props.onClose(),e.props.onConfirm(e.props.account,e.props.notifications)})),Object(s.a)(Object(i.a)(e),"handleCancel",(function(){e.props.onClose()})),Object(s.a)(Object(i.a)(e),"setRef",(function(t){e.button=t})),Object(s.a)(Object(i.a)(e),"toggleNotifications",(function(){e.props.onToggleNotifications()})),e}Object(c.a)(e,t);var o=e.prototype;return o.componentDidMount=function(){this.button.focus()},o.render=function(){var t=this.props,e=t.account,o=t.notifications;return Object(a.a)("div",{className:"modal-root__modal mute-modal"},void 0,Object(a.a)("div",{className:"mute-modal__container"},void 0,Object(a.a)("p",{},void 0,Object(a.a)(m.b,{id:"confirmations.mute.message",defaultMessage:"Are you sure you want to mute {name}?",values:{name:Object(a.a)("strong",{},void 0,"@",e.get("acct"))}})),Object(a.a)("p",{className:"mute-modal__explanation"},void 0,Object(a.a)(m.b,{id:"confirmations.mute.explanation",defaultMessage:"This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you."})),Object(a.a)("div",{className:"setting-toggle"},void 0,Object(a.a)(f.a,{id:"mute-modal__hide-notifications-checkbox",checked:o,onChange:this.toggleNotifications}),Object(a.a)("label",{className:"setting-toggle__label",htmlFor:"mute-modal__hide-notifications-checkbox"},void 0,Object(a.a)(m.b,{id:"mute_modal.hide_notifications",defaultMessage:"Hide notifications from this user?"})))),Object(a.a)("div",{className:"mute-modal__action-bar"},void 0,Object(a.a)(b.a,{onClick:this.handleCancel,className:"mute-modal__cancel-button"},void 0,Object(a.a)(m.b,{id:"confirmation_modal.cancel",defaultMessage:"Cancel"})),u.a.createElement(b.a,{onClick:this.handleClick,ref:this.setRef},Object(a.a)(m.b,{id:"confirmations.mute.confirm",defaultMessage:"Mute"}))))},e}(u.a.PureComponent))||n)||n}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{806:function(t,e,o){"use strict";o.r(e),o.d(e,"default",(function(){return j}));var n,a=o(0),i=o(2),c=(o(9),o(6),o(8)),s=o(1),l=o(3),u=o.n(l),d=o(15),r=o(7),m=o(307),f=o.n(m),b=o(68),p=o(45),g=o(24),h=o(123);var j=Object(d.connect)((function(t){return{account:t.getIn(["mutes","new","account"]),notifications:t.getIn(["mutes","new","notifications"])}}),(function(t){return{onConfirm:function(e,o){t(Object(g.N)(e.get("id"),o))},onClose:function(){t(Object(p.c)())},onToggleNotifications:function(){t(Object(h.h)())}}}))(n=Object(r.g)(n=function(t){Object(c.a)(o,t);var e;e=o;function o(){for(var e,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return e=t.call.apply(t,[this].concat(n))||this,Object(s.a)(Object(i.a)(e),"handleClick",(function(){e.props.onClose(),e.props.onConfirm(e.props.account,e.props.notifications)})),Object(s.a)(Object(i.a)(e),"handleCancel",(function(){e.props.onClose()})),Object(s.a)(Object(i.a)(e),"setRef",(function(t){e.button=t})),Object(s.a)(Object(i.a)(e),"toggleNotifications",(function(){e.props.onToggleNotifications()})),e}var n=o.prototype;return n.componentDidMount=function(){this.button.focus()},n.render=function(){var t=this.props,e=t.account,o=t.notifications;return(Object(a.a)("div",{className:"modal-root__modal mute-modal"},void 0,Object(a.a)("div",{className:"mute-modal__container"},void 0,Object(a.a)("p",{},void 0,Object(a.a)(r.b,{id:"confirmations.mute.message",defaultMessage:"Are you sure you want to mute {name}?",values:{name:Object(a.a)("strong",{},void 0,"@",e.get("acct"))}})),Object(a.a)("p",{className:"mute-modal__explanation"},void 0,Object(a.a)(r.b,{id:"confirmations.mute.explanation",defaultMessage:"This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you."})),Object(a.a)("div",{className:"setting-toggle"},void 0,Object(a.a)(f.a,{id:"mute-modal__hide-notifications-checkbox",checked:o,onChange:this.toggleNotifications}),Object(a.a)("label",{className:"setting-toggle__label",htmlFor:"mute-modal__hide-notifications-checkbox"},void 0,Object(a.a)(r.b,{id:"mute_modal.hide_notifications",defaultMessage:"Hide notifications from this user?"})))),Object(a.a)("div",{className:"mute-modal__action-bar"},void 0,Object(a.a)(b.a,{onClick:this.handleCancel,className:"mute-modal__cancel-button"},void 0,Object(a.a)(r.b,{id:"confirmation_modal.cancel",defaultMessage:"Cancel"})),u.a.createElement(b.a,{onClick:this.handleClick,ref:this.setRef},Object(a.a)(r.b,{id:"confirmations.mute.confirm",defaultMessage:"Mute"})))))},o}(u.a.PureComponent))||n)||n}}]);
//# sourceMappingURL=mute_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/mute_modal.js.map b/priv/static/packs/flavours/glitch/async/mute_modal.js.map
index 2cef662e9..b8a427cc5 100644
--- a/priv/static/packs/flavours/glitch/async/mute_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/mute_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/mute_modal.js"],"names":["MuteModal","connect","state","account","getIn","notifications","dispatch","onConfirm","muteAccount","get","onClose","closeModal","onToggleNotifications","toggleHideNotifications","injectIntl","props","c","button","componentDidMount","this","focus","render","className","id","defaultMessage","values","name","checked","onChange","toggleNotifications","htmlFor","onClick","handleCancel","handleClick","ref","setRef","React","PureComponent"],"mappings":"8PAoCMA,EAFUC,mBAvBQ,SAAAC,GACtB,MAAO,CACLC,QAASD,EAAME,MAAM,CAAC,QAAS,MAAO,YACtCC,cAAeH,EAAME,MAAM,CAAC,QAAS,MAAO,sBAIrB,SAAAE,GACzB,MAAO,CACLC,UADK,SACKJ,EAASE,GACjBC,EAASE,YAAYL,EAAQM,IAAI,MAAOJ,KAG1CK,QALK,WAMHJ,EAASK,gBAGXC,sBATK,WAUHN,EAASO,mB,GAMdC,Y,+LAgBe,WACZ,EAAKC,MAAML,UACX,EAAKK,MAAMR,UAAU,EAAKQ,MAAMZ,QAAS,EAAKY,MAAMV,kB,2CAGvC,WACb,EAAKU,MAAML,a,qCAGJ,SAACM,GACR,EAAKC,OAASD,K,kDAGM,WACpB,EAAKD,MAAMH,2B,8CAlBbM,kBAAA,WACEC,KAAKF,OAAOG,S,EAoBdC,OAAA,WAAW,IAAD,EAC2BF,KAAKJ,MAAhCZ,EADA,EACAA,QAASE,EADT,EACSA,cAEjB,OACE,mBAAKiB,UAAU,qCAAf,EACE,mBAAKA,UAAU,8BAAf,EACE,0BACE,YAAC,IAAD,CACEC,GAAG,6BACHC,eAAe,wCACfC,OAAQ,CAAEC,KAAM,mCAAUvB,EAAQM,IAAI,aAG1C,iBAAGa,UAAU,gCAAb,EACE,YAAC,IAAD,CACEC,GAAG,iCACHC,eAAe,8HAGnB,mBAAKF,UAAU,uBAAf,EACE,YAAC,IAAD,CAAQC,GAAG,0CAA0CI,QAAStB,EAAeuB,SAAUT,KAAKU,sBAC5F,qBAAOP,UAAU,wBAAwBQ,QAAQ,gDAAjD,EACE,YAAC,IAAD,CAAkBP,GAAG,gCAAgCC,eAAe,0CAK1E,mBAAKF,UAAU,+BAAf,EACE,YAAC,IAAD,CAAQS,QAASZ,KAAKa,aAAcV,UAAU,kCAA9C,EACE,YAAC,IAAD,CAAkBC,GAAG,4BAA4BC,eAAe,YAElE,kBAAC,IAAD,CAAQO,QAASZ,KAAKc,YAAaC,IAAKf,KAAKgB,QAC3C,YAAC,IAAD,CAAkBZ,GAAG,6BAA6BC,eAAe,a,GAhErDY,IAAMC,iB","file":"flavours/glitch/async/mute_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Toggle from 'react-toggle';\nimport Button from 'flavours/glitch/components/button';\nimport { closeModal } from 'flavours/glitch/actions/modal';\nimport { muteAccount } from 'flavours/glitch/actions/accounts';\nimport { toggleHideNotifications } from 'flavours/glitch/actions/mutes';\n\n\nconst mapStateToProps = state => {\n return {\n account: state.getIn(['mutes', 'new', 'account']),\n notifications: state.getIn(['mutes', 'new', 'notifications']),\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onConfirm(account, notifications) {\n dispatch(muteAccount(account.get('id'), notifications));\n },\n\n onClose() {\n dispatch(closeModal());\n },\n\n onToggleNotifications() {\n dispatch(toggleHideNotifications());\n },\n };\n};\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass MuteModal extends React.PureComponent {\n\n static propTypes = {\n account: PropTypes.object.isRequired,\n notifications: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleNotifications: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount() {\n this.button.focus();\n }\n\n handleClick = () => {\n this.props.onClose();\n this.props.onConfirm(this.props.account, this.props.notifications);\n }\n\n handleCancel = () => {\n this.props.onClose();\n }\n\n setRef = (c) => {\n this.button = c;\n }\n\n toggleNotifications = () => {\n this.props.onToggleNotifications();\n }\n\n render () {\n const { account, notifications } = this.props;\n\n return (\n <div className='modal-root__modal mute-modal'>\n <div className='mute-modal__container'>\n <p>\n <FormattedMessage\n id='confirmations.mute.message'\n defaultMessage='Are you sure you want to mute {name}?'\n values={{ name: <strong>@{account.get('acct')}</strong> }}\n />\n </p>\n <p className='mute-modal__explanation'>\n <FormattedMessage\n id='confirmations.mute.explanation'\n defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.'\n />\n </p>\n <div className='setting-toggle'>\n <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} />\n <label className='setting-toggle__label' htmlFor='mute-modal__hide-notifications-checkbox'>\n <FormattedMessage id='mute_modal.hide_notifications' defaultMessage='Hide notifications from this user?' />\n </label>\n </div>\n </div>\n\n <div className='mute-modal__action-bar'>\n <Button onClick={this.handleCancel} className='mute-modal__cancel-button'>\n <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />\n </Button>\n <Button onClick={this.handleClick} ref={this.setRef}>\n <FormattedMessage id='confirmations.mute.confirm' defaultMessage='Mute' />\n </Button>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/mute_modal.js"],"names":["MuteModal","connect","state","account","getIn","notifications","dispatch","onConfirm","muteAccount","get","onClose","closeModal","onToggleNotifications","toggleHideNotifications","injectIntl","props","c","button","componentDidMount","this","focus","render","className","id","defaultMessage","values","name","checked","onChange","toggleNotifications","htmlFor","onClick","handleCancel","handleClick","ref","setRef","React","PureComponent"],"mappings":"0QAWA,IAyBMA,EAFUC,mBAvBQ,SAAAC,GACtB,MAAO,CACLC,QAASD,EAAME,MAAM,CAAC,QAAS,MAAO,YACtCC,cAAeH,EAAME,MAAM,CAAC,QAAS,MAAO,sBAIrB,SAAAE,GACzB,MAAO,CACLC,UADK,SACKJ,EAASE,GACjBC,EAASE,YAAYL,EAAQM,IAAI,MAAOJ,KAG1CK,QALK,WAMHJ,EAASK,gBAGXC,sBATK,WAUHN,EAASO,mB,GAMdC,Y,0NAgBe,WACZ,EAAKC,MAAML,UACX,EAAKK,MAAMR,UAAU,EAAKQ,MAAMZ,QAAS,EAAKY,MAAMV,kB,2CAGvC,WACb,EAAKU,MAAML,a,qCAGJ,SAACM,GACR,EAAKC,OAASD,K,kDAGM,WACpB,EAAKD,MAAMH,2B,6BAlBbM,kBAAA,WACEC,KAAKF,OAAOG,S,EAoBdC,OAAA,WAAW,IAAD,EAC2BF,KAAKJ,MAAhCZ,EADA,EACAA,QAASE,EADT,EACSA,cAEjB,OACE,mBAAKiB,UAAU,qCAAf,EACE,mBAAKA,UAAU,8BAAf,EACE,0BACE,YAAC,IAAD,CACEC,GAAG,6BACHC,eAAe,wCACfC,OAAQ,CAAEC,KAAM,mCAAUvB,EAAQM,IAAI,aAG1C,iBAAGa,UAAU,gCAAb,EACE,YAAC,IAAD,CACEC,GAAG,iCACHC,eAAe,8HAGnB,mBAAKF,UAAU,uBAAf,EACE,YAAC,IAAD,CAAQC,GAAG,0CAA0CI,QAAStB,EAAeuB,SAAUT,KAAKU,sBAC5F,qBAAOP,UAAU,wBAAwBQ,QAAQ,gDAAjD,EACE,YAAC,IAAD,CAAkBP,GAAG,gCAAgCC,eAAe,0CAK1E,mBAAKF,UAAU,+BAAf,EACE,YAAC,IAAD,CAAQS,QAASZ,KAAKa,aAAcV,UAAU,kCAA9C,EACE,YAAC,IAAD,CAAkBC,GAAG,4BAA4BC,eAAe,YAElE,kBAAC,IAAD,CAAQO,QAASZ,KAAKc,YAAaC,IAAKf,KAAKgB,QAC3C,YAAC,IAAD,CAAkBZ,GAAG,6BAA6BC,eAAe,c,GAhErDY,IAAMC,iB","file":"flavours/glitch/async/mute_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Toggle from 'react-toggle';\nimport Button from 'flavours/glitch/components/button';\nimport { closeModal } from 'flavours/glitch/actions/modal';\nimport { muteAccount } from 'flavours/glitch/actions/accounts';\nimport { toggleHideNotifications } from 'flavours/glitch/actions/mutes';\n\n\nconst mapStateToProps = state => {\n return {\n account: state.getIn(['mutes', 'new', 'account']),\n notifications: state.getIn(['mutes', 'new', 'notifications']),\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onConfirm(account, notifications) {\n dispatch(muteAccount(account.get('id'), notifications));\n },\n\n onClose() {\n dispatch(closeModal());\n },\n\n onToggleNotifications() {\n dispatch(toggleHideNotifications());\n },\n };\n};\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass MuteModal extends React.PureComponent {\n\n static propTypes = {\n account: PropTypes.object.isRequired,\n notifications: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleNotifications: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount() {\n this.button.focus();\n }\n\n handleClick = () => {\n this.props.onClose();\n this.props.onConfirm(this.props.account, this.props.notifications);\n }\n\n handleCancel = () => {\n this.props.onClose();\n }\n\n setRef = (c) => {\n this.button = c;\n }\n\n toggleNotifications = () => {\n this.props.onToggleNotifications();\n }\n\n render () {\n const { account, notifications } = this.props;\n\n return (\n <div className='modal-root__modal mute-modal'>\n <div className='mute-modal__container'>\n <p>\n <FormattedMessage\n id='confirmations.mute.message'\n defaultMessage='Are you sure you want to mute {name}?'\n values={{ name: <strong>@{account.get('acct')}</strong> }}\n />\n </p>\n <p className='mute-modal__explanation'>\n <FormattedMessage\n id='confirmations.mute.explanation'\n defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.'\n />\n </p>\n <div className='setting-toggle'>\n <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} />\n <label className='setting-toggle__label' htmlFor='mute-modal__hide-notifications-checkbox'>\n <FormattedMessage id='mute_modal.hide_notifications' defaultMessage='Hide notifications from this user?' />\n </label>\n </div>\n </div>\n\n <div className='mute-modal__action-bar'>\n <Button onClick={this.handleCancel} className='mute-modal__cancel-button'>\n <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />\n </Button>\n <Button onClick={this.handleClick} ref={this.setRef}>\n <FormattedMessage id='confirmations.mute.confirm' defaultMessage='Mute' />\n </Button>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/mutes.js b/priv/static/packs/flavours/glitch/async/mutes.js
index bff20ce26..561bff711 100644
--- a/priv/static/packs/flavours/glitch/async/mutes.js
+++ b/priv/static/packs/flavours/glitch/async/mutes.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{778:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return L}));var a,o,s,c=n(0),u=n(2),i=n(7),r=n(1),d=n(62),l=n.n(d),p=(n(3),n(13)),b=n(6),m=n(5),f=n.n(m),h=n(14),j=n.n(h),O=n(299),M=n(730),g=n(735),v=n(466),y=n(119),w=n(18),I=n(1022),q=Object(b.f)({heading:{id:"column.mutes",defaultMessage:"Muted users"}}),L=Object(p.connect)((function(e){return{accountIds:e.getIn(["user_lists","mutes","items"]),hasMore:!!e.getIn(["user_lists","mutes","next"])}}))(a=Object(b.g)((s=o=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return t=e.call.apply(e,[this].concat(a))||this,Object(r.a)(Object(u.a)(t),"handleLoadMore",l()((function(){t.props.dispatch(Object(y.e)())}),300,{leading:!0})),t}Object(i.a)(t,e);var n=t.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(y.f)())},n.render=function(){var e=this.props,t=e.intl,n=e.accountIds,a=e.hasMore,o=e.multiColumn;if(!n)return Object(c.a)(M.a,{},void 0,Object(c.a)(O.a,{}));var s=Object(c.a)(b.b,{id:"empty_column.mutes",defaultMessage:"You haven't muted any users yet."});return Object(c.a)(M.a,{bindToDocument:!o,name:"mutes",icon:"volume-off",heading:t.formatMessage(q.heading)},void 0,Object(c.a)(g.a,{}),Object(c.a)(I.a,{scrollKey:"mutes",onLoadMore:this.handleLoadMore,hasMore:a,emptyMessage:s,bindToDocument:!o},void 0,n.map((function(e){return Object(c.a)(v.a,{id:e},e)}))))},t}(w.a),Object(r.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,hasMore:f.a.bool,accountIds:j.a.list,intl:f.a.object.isRequired,multiColumn:f.a.bool}),a=s))||a)||a}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{804:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return L}));var n,o,s,c=a(0),u=a(2),r=(a(9),a(6),a(8)),i=a(1),d=a(65),l=a.n(d),p=(a(3),a(15)),b=a(7),m=a(5),f=a.n(m),h=a(16),j=a.n(h),O=a(305),M=a(756),g=a(761),v=a(471),y=a(123),w=a(21),I=a(1048);var q=Object(b.f)({heading:{id:"column.mutes",defaultMessage:"Muted users"}}),L=Object(p.connect)((function(e){return{accountIds:e.getIn(["user_lists","mutes","items"]),hasMore:!!e.getIn(["user_lists","mutes","next"])}}))(n=Object(b.g)((s=o=function(e){Object(r.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];return t=e.call.apply(e,[this].concat(n))||this,Object(i.a)(Object(u.a)(t),"handleLoadMore",l()((function(){t.props.dispatch(Object(y.e)())}),300,{leading:!0})),t}var n=a.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(y.f)())},n.render=function(){var e=this.props,t=e.intl,a=e.accountIds,n=e.hasMore,o=e.multiColumn;if(!a)return Object(c.a)(M.a,{},void 0,Object(c.a)(O.a,{}));var s=Object(c.a)(b.b,{id:"empty_column.mutes",defaultMessage:"You haven't muted any users yet."});return(Object(c.a)(M.a,{bindToDocument:!o,name:"mutes",icon:"volume-off",heading:t.formatMessage(q.heading)},void 0,Object(c.a)(g.a,{}),Object(c.a)(I.a,{scrollKey:"mutes",onLoadMore:this.handleLoadMore,hasMore:n,emptyMessage:s,bindToDocument:!o},void 0,a.map((function(e){return Object(c.a)(v.a,{id:e},e)})))))},a}(w.a),Object(i.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,hasMore:f.a.bool,accountIds:j.a.list,intl:f.a.object.isRequired,multiColumn:f.a.bool}),n=s))||n)||n}}]);
//# sourceMappingURL=mutes.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/mutes.js.map b/priv/static/packs/flavours/glitch/async/mutes.js.map
index 63d70481c..288221494 100644
--- a/priv/static/packs/flavours/glitch/async/mutes.js.map
+++ b/priv/static/packs/flavours/glitch/async/mutes.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/mutes/index.js"],"names":["messages","defineMessages","heading","Mutes","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandMutes","leading","componentWillMount","this","fetchMutes","render","intl","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","name","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","bool","ImmutablePropTypes","list"],"mappings":"uTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,kDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,QAAS,UAChDC,UAAWH,EAAME,MAAM,CAAC,aAAc,QAAS,Y,GAIhDE,a,mMAgBkB,KAAS,WACxB,EAAKC,MAAMC,SAASC,iBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC2CF,KAAKL,MAAhDQ,EADA,EACAA,KAAMZ,EADN,EACMA,WAAYE,EADlB,EACkBA,QAASW,EAD3B,EAC2BA,YAEnC,IAAKb,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMc,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,qCAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,QAAQC,KAAK,aAAavB,QAASgB,EAAKQ,cAAc1B,EAASE,eAA1G,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,QACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTY,aAAcA,EACdG,gBAAiBJ,QALnB,EAOGb,EAAWwB,KAAI,SAAAT,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,S,GA3CfU,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzB3B,QAASyB,IAAUI,KACnB/B,WAAYgC,IAAmBC,KAC/BrB,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUI,O","file":"flavours/glitch/async/mutes.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport { fetchMutes, expandMutes } from 'flavours/glitch/actions/mutes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.mutes', defaultMessage: 'Muted users' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'mutes', 'items']),\n hasMore: !!state.getIn(['user_lists', 'mutes', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Mutes extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchMutes());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandMutes());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.mutes' defaultMessage=\"You haven't muted any users yet.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} name='mutes' icon='volume-off' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='mutes'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/mutes/index.js"],"names":["messages","defineMessages","heading","Mutes","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandMutes","leading","componentWillMount","this","fetchMutes","render","intl","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","name","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","bool","ImmutablePropTypes","list"],"mappings":"mUAcA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,kDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,QAAS,UAChDC,UAAWH,EAAME,MAAM,CAAC,aAAc,QAAS,Y,GAIhDE,a,8NAgBkB,KAAS,WACxB,EAAKC,MAAMC,SAASC,iBACnB,IAAK,CAAEC,SAAS,K,6BANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC2CF,KAAKL,MAAhDQ,EADA,EACAA,KAAMZ,EADN,EACMA,WAAYE,EADlB,EACkBA,QAASW,EAD3B,EAC2BA,YAEnC,IAAKb,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMc,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,qCAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,QAAQC,KAAK,aAAavB,QAASgB,EAAKQ,cAAc1B,EAASE,eAA1G,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,QACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTY,aAAcA,EACdG,gBAAiBJ,QALnB,EAOGb,EAAWwB,KAAI,SAAAT,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,U,GA3CfU,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzB3B,QAASyB,IAAUI,KACnB/B,WAAYgC,IAAmBC,KAC/BrB,KAAMe,IAAUC,OAAOC,WACvBhB,YAAac,IAAUI,O","file":"flavours/glitch/async/mutes.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport { fetchMutes, expandMutes } from 'flavours/glitch/actions/mutes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.mutes', defaultMessage: 'Muted users' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'mutes', 'items']),\n hasMore: !!state.getIn(['user_lists', 'mutes', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Mutes extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchMutes());\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandMutes());\n }, 300, { leading: true });\n\n render () {\n const { intl, accountIds, hasMore, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='empty_column.mutes' defaultMessage=\"You haven't muted any users yet.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} name='mutes' icon='volume-off' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='mutes'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/notifications.js b/priv/static/packs/flavours/glitch/async/notifications.js
index d894ca4d3..775819241 100644
--- a/priv/static/packs/flavours/glitch/async/notifications.js
+++ b/priv/static/packs/flavours/glitch/async/notifications.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{807:function(t,e,n){"use strict";n.r(e);var i=n(0),o=n(2),a=n(7),s=n(1),c=n(62),l=n.n(c),r=n(3),d=n.n(r),u=n(13),f=n(734),h=n(732),b=n(40),g=n(249),p=n(103),O=n(5),j=n.n(O),v=n(14),m=n.n(v),M=n(18),_=n(1058),w=n(6),C=n(295),y=n(210),P=n(466),k=n(745),x=n(23),I=function(t){function e(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(){var t=e.props,n=t.notification;(0,t.onMoveUp)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(){var t=e.props,n=t.notification;(0,t.onMoveDown)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleOpen",(function(){e.handleOpenProfile()})),Object(s.a)(Object(o.a)(e),"handleOpenProfile",(function(){var t=e.props.notification;e.context.router.history.push("/accounts/"+t.getIn(["account","id"]))})),Object(s.a)(Object(o.a)(e),"handleMention",(function(t){t.preventDefault();var n=e.props,i=n.notification;(0,n.onMention)(i.get("account"),e.context.router.history)})),e}Object(a.a)(e,t);var n=e.prototype;return n.getHandlers=function(){return{moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,open:this.handleOpen,openProfile:this.handleOpenProfile,mention:this.handleMention,reply:this.handleMention}},n.render=function(){var t=this.props,e=t.account,n=t.notification,o=t.hidden,a=e.get("display_name_html")||e.get("username"),s=Object(i.a)("bdi",{},void 0,Object(i.a)(y.a,{className:"notification__display-name",href:e.get("url"),title:e.get("acct"),to:"/accounts/"+e.get("id"),dangerouslySetInnerHTML:{__html:a}}));return Object(i.a)(C.HotKeys,{handlers:this.getHandlers()},void 0,Object(i.a)("div",{className:"notification notification-follow focusable",tabIndex:"0"},void 0,Object(i.a)("div",{className:"notification__message"},void 0,Object(i.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(i.a)(x.a,{fixedWidth:!0,id:"user-plus"})),Object(i.a)(w.b,{id:"notification.follow",defaultMessage:"{name} followed you",values:{name:s}})),Object(i.a)(P.a,{hidden:o,id:e.get("id"),withNote:!1}),Object(i.a)(k.a,{notification:n})))},e}(M.a);Object(s.a)(I,"propTypes",{hidden:j.a.bool,id:j.a.string.isRequired,account:m.a.map.isRequired,notification:m.a.map.isRequired});var N,q,S,U=n(91),D=n(93),W=n(39),T=Object(w.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),F=Object(w.g)((S=q=function(t){function e(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(){var t=e.props,n=t.notification;(0,t.onMoveUp)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(){var t=e.props,n=t.notification;(0,t.onMoveDown)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleOpen",(function(){e.handleOpenProfile()})),Object(s.a)(Object(o.a)(e),"handleOpenProfile",(function(){var t=e.props.notification;e.context.router.history.push("/accounts/"+t.getIn(["account","id"]))})),Object(s.a)(Object(o.a)(e),"handleMention",(function(t){t.preventDefault();var n=e.props,i=n.notification;(0,n.onMention)(i.get("account"),e.context.router.history)})),e}Object(a.a)(e,t);var n=e.prototype;return n.getHandlers=function(){return{moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,open:this.handleOpen,openProfile:this.handleOpenProfile,mention:this.handleMention,reply:this.handleMention}},n.render=function(){var t=this.props,e=t.intl,n=t.hidden,o=t.account,a=t.onAuthorize,s=t.onReject,c=t.notification;if(!o)return Object(i.a)("div",{});if(n)return Object(i.a)(r.Fragment,{},void 0,o.get("display_name"),o.get("username"));var l=o.get("display_name_html")||o.get("username"),d=Object(i.a)("bdi",{},void 0,Object(i.a)(y.a,{className:"notification__display-name",href:o.get("url"),title:o.get("acct"),to:"/accounts/"+o.get("id"),dangerouslySetInnerHTML:{__html:l}}));return Object(i.a)(C.HotKeys,{handlers:this.getHandlers()},void 0,Object(i.a)("div",{className:"notification notification-follow-request focusable",tabIndex:"0"},void 0,Object(i.a)("div",{className:"notification__message"},void 0,Object(i.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(i.a)(x.a,{id:"user",fixedWidth:!0})),Object(i.a)(w.b,{id:"notification.follow_request",defaultMessage:"{name} has requested to follow you",values:{name:d}})),Object(i.a)("div",{className:"account"},void 0,Object(i.a)("div",{className:"account__wrapper"},void 0,Object(i.a)(y.a,{className:"account__display-name",title:o.get("acct"),href:o.get("url"),to:"/accounts/"+o.get("id")},o.get("id"),Object(i.a)("div",{className:"account__avatar-wrapper"},void 0,Object(i.a)(U.a,{account:o,size:36})),Object(i.a)(D.a,{account:o})),Object(i.a)("div",{className:"account__relationship"},void 0,Object(i.a)(W.a,{title:e.formatMessage(T.authorize),icon:"check",onClick:a}),Object(i.a)(W.a,{title:e.formatMessage(T.reject),icon:"times",onClick:s})))),Object(i.a)(k.a,{notification:c})))},e}(M.a),Object(s.a)(q,"propTypes",{account:m.a.map.isRequired,onAuthorize:j.a.func.isRequired,onReject:j.a.func.isRequired,intl:j.a.object.isRequired,notification:m.a.map.isRequired}),N=S))||N,R=n(22),A=Object(u.connect)(null,(function(t,e){var n=e.account;return{onAuthorize:function(){t(Object(R.y)(n.get("id")))},onReject:function(){t(Object(R.P)(n.get("id")))}}}))(F),L=function(t){function e(){return t.apply(this,arguments)||this}return Object(a.a)(e,t),e.prototype.render=function(){var t=this.props,e=t.hidden,n=t.notification,o=t.onMoveDown,a=t.onMoveUp,s=t.onMention,c=t.getScrollPosition,l=t.updateScrollBottom;switch(n.get("type")){case"follow":return Object(i.a)(I,{hidden:e,id:n.get("id"),account:n.get("account"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s});case"follow_request":return Object(i.a)(A,{hidden:e,id:n.get("id"),account:n.get("account"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s});case"mention":return Object(i.a)(_.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s,contextType:"notifications",getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"favourite":return Object(i.a)(_.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"favourite",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"reblog":return Object(i.a)(_.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"reblog",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"poll":return Object(i.a)(_.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"poll",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});default:return null}},e}(M.a);Object(s.a)(L,"propTypes",{notification:m.a.map.isRequired,hidden:j.a.bool,onMoveUp:j.a.func.isRequired,onMoveDown:j.a.func.isRequired,onMention:j.a.func.isRequired,getScrollPosition:j.a.func,updateScrollBottom:j.a.func,cacheMediaWidth:j.a.func,cachedMediaWidth:j.a.number,onUnmount:j.a.func});var z,B,H,E,K=n(19),G=Object(u.connect)((function(){var t=Object(p.e)();return function(e,n){return{notification:t(e,n.notification,n.accountId),notifCleaning:e.getIn(["notifications","cleaningMode"])}}}),(function(t){return{onMention:function(e,n){t(Object(K.hb)(e,n))}}}))(L),J=function(t){function e(){return t.apply(this,arguments)||this}return Object(a.a)(e,t),e.prototype.render=function(){return Object(i.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.props.onClick},void 0,Object(i.a)(x.a,{id:"eraser"})," ",Object(i.a)(w.b,{id:"notifications.clear",defaultMessage:"Clear notifications"}))},e}(d.a.Component),V=n(1073),Q=function(t){function e(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"onPushChange",(function(t,n){e.props.onChange(["push"].concat(t),n)})),e}return Object(a.a)(e,t),e.prototype.render=function(){var t=this.props,e=t.settings,n=t.pushSettings,o=t.onChange,a=t.onClear,s=Object(i.a)(w.b,{id:"notifications.column_settings.filter_bar.show",defaultMessage:"Show"}),c=Object(i.a)(w.b,{id:"notifications.column_settings.filter_bar.advanced",defaultMessage:"Display all categories"}),l=Object(i.a)(w.b,{id:"notifications.column_settings.alert",defaultMessage:"Desktop notifications"}),r=Object(i.a)(w.b,{id:"notifications.column_settings.show",defaultMessage:"Show in column"}),d=Object(i.a)(w.b,{id:"notifications.column_settings.sound",defaultMessage:"Play sound"}),u=n.get("browserSupport")&&n.get("isSubscribed"),f=u&&Object(i.a)(w.b,{id:"notifications.column_settings.push",defaultMessage:"Push notifications"}),h=u&&Object(i.a)(w.b,{id:"notifications.column_settings.push_meta",defaultMessage:"This device"});return Object(i.a)("div",{},void 0,Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(J,{onClick:a})),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-filter-bar"},void 0,Object(i.a)("span",{id:"notifications-filter-bar",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.filter_bar.category",defaultMessage:"Quick filter bar"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","show"],onChange:o,label:s}),Object(i.a)(V.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","advanced"],onChange:o,label:c}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-follow"},void 0,Object(i.a)("span",{id:"notifications-follow",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.follow",defaultMessage:"New followers:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","follow"],meta:h,onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","follow"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-follow-request"},void 0,Object(i.a)("span",{id:"notifications-follow-request",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.follow_request",defaultMessage:"New follow requests:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow_request"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","follow_request"],onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","follow_request"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow_request"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-favourite"},void 0,Object(i.a)("span",{id:"notifications-favourite",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.favourite",defaultMessage:"Favourites:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","favourite"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","favourite"],meta:h,onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","favourite"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","favourite"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-mention"},void 0,Object(i.a)("span",{id:"notifications-mention",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.mention",defaultMessage:"Mentions:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","mention"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","mention"],meta:h,onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","mention"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","mention"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-reblog"},void 0,Object(i.a)("span",{id:"notifications-reblog",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.reblog",defaultMessage:"Boosts:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","reblog"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","reblog"],meta:h,onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","reblog"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","reblog"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-poll"},void 0,Object(i.a)("span",{id:"notifications-poll",className:"column-settings__section"},void 0,Object(i.a)(w.b,{id:"notifications.column_settings.poll",defaultMessage:"Poll results:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(V.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","poll"],onChange:o,label:l}),u&&Object(i.a)(V.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","poll"],meta:h,onChange:this.onPushChange,label:f}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["shows","poll"],onChange:o,label:r}),Object(i.a)(V.a,{prefix:"notifications",settings:e,settingPath:["sounds","poll"],onChange:o,label:d}))))},e}(d.a.PureComponent),Y=n(69),X=n(227),Z=n(42),$=Object(w.f)({clearMessage:{id:"notifications.clear_confirmation",defaultMessage:"Are you sure you want to permanently clear all your notifications?"},clearConfirm:{id:"notifications.clear",defaultMessage:"Clear notifications"}}),tt=Object(w.g)(Object(u.connect)((function(t){return{settings:t.getIn(["settings","notifications"]),pushSettings:t.get("push_notifications")}}),(function(t,e){var n=e.intl;return{onChange:function(e,n){"push"===e[0]?t(Object(X.e)(e.slice(1),n)):"quickFilter"===e[0]?(t(Object(Y.c)(["notifications"].concat(e),n)),t(Object(b.B)("all"))):t(Object(Y.c)(["notifications"].concat(e),n))},onClear:function(){t(Object(Z.d)("CONFIRM",{message:n.formatMessage($.clearMessage),confirm:n.formatMessage($.clearConfirm),onConfirm:function(){return t(Object(b.r)())}}))}}}))(Q)),et=Object(w.f)({mentions:{id:"notifications.filter.mentions",defaultMessage:"Mentions"},favourites:{id:"notifications.filter.favourites",defaultMessage:"Favourites"},boosts:{id:"notifications.filter.boosts",defaultMessage:"Boosts"},polls:{id:"notifications.filter.polls",defaultMessage:"Poll results"},follows:{id:"notifications.filter.follows",defaultMessage:"Follows"}}),nt=Object(w.g)(z=function(t){function e(){return t.apply(this,arguments)||this}Object(a.a)(e,t);var n=e.prototype;return n.onClick=function(t){var e=this;return function(){return e.props.selectFilter(t)}},n.render=function(){var t=this.props,e=t.selectedFilter,n=t.advancedMode,o=t.intl;return n?Object(i.a)("div",{className:"notification__filter-bar"},void 0,Object(i.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(i.a)(w.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(i.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention"),title:o.formatMessage(et.mentions)},void 0,Object(i.a)(x.a,{id:"reply-all",fixedWidth:!0})),Object(i.a)("button",{className:"favourite"===e?"active":"",onClick:this.onClick("favourite"),title:o.formatMessage(et.favourites)},void 0,Object(i.a)(x.a,{id:"star",fixedWidth:!0})),Object(i.a)("button",{className:"reblog"===e?"active":"",onClick:this.onClick("reblog"),title:o.formatMessage(et.boosts)},void 0,Object(i.a)(x.a,{id:"retweet",fixedWidth:!0})),Object(i.a)("button",{className:"poll"===e?"active":"",onClick:this.onClick("poll"),title:o.formatMessage(et.polls)},void 0,Object(i.a)(x.a,{id:"tasks",fixedWidth:!0})),Object(i.a)("button",{className:"follow"===e?"active":"",onClick:this.onClick("follow"),title:o.formatMessage(et.follows)},void 0,Object(i.a)(x.a,{id:"user-plus",fixedWidth:!0}))):Object(i.a)("div",{className:"notification__filter-bar"},void 0,Object(i.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(i.a)(w.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(i.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention")},void 0,Object(i.a)(w.b,{id:"notifications.filter.mentions",defaultMessage:"Mentions"})))},e}(d.a.PureComponent))||z,it=Object(u.connect)((function(t){return{selectedFilter:t.getIn(["settings","notifications","quickFilter","active"]),advancedMode:t.getIn(["settings","notifications","quickFilter","advanced"])}}),(function(t){return{selectFilter:function(e){t(Object(b.B)(e))}}}))(nt),ot=n(54),at=n(4),st=n(1022),ct=n(1114);n.d(e,"default",(function(){return dt}));var lt=Object(w.f)({title:{id:"column.notifications",defaultMessage:"Notifications"}}),rt=Object(ot.a)([function(t){return t.getIn(["settings","notifications","quickFilter","show"])},function(t){return t.getIn(["settings","notifications","quickFilter","active"])},function(t){return Object(at.List)(t.getIn(["settings","notifications","shows"]).filter((function(t){return!t})).keys())},function(t){return t.getIn(["notifications","items"])}],(function(t,e,n,i){return t&&"all"!==e?i.filter((function(t){return null!==t&&e===t.get("type")})):i.filterNot((function(t){return null!==t&&n.includes(t.get("type"))}))})),dt=Object(u.connect)((function(t){return{showFilterBar:t.getIn(["settings","notifications","quickFilter","show"]),notifications:rt(t),localSettings:t.get("local_settings"),isLoading:t.getIn(["notifications","isLoading"],!0),isUnread:t.getIn(["notifications","unread"])>0||t.getIn(["notifications","pendingItems"]).size>0,hasMore:t.getIn(["notifications","hasMore"]),numPending:t.getIn(["notifications","pendingItems"],Object(at.List)()).size,notifCleaningActive:t.getIn(["notifications","cleaningMode"])}}),(function(t){return{onEnterCleaningMode:function(e){t(Object(b.t)(e))},onMount:function(){t(Object(b.y)())},onUnmount:function(){t(Object(b.C)())},dispatch:t}}))(B=Object(w.g)((E=H=function(t){function e(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"handleLoadGap",(function(t){e.props.dispatch(Object(b.u)({maxId:t}))})),Object(s.a)(Object(o.a)(e),"handleLoadOlder",l()((function(){var t=e.props.notifications.last();e.props.dispatch(Object(b.u)({maxId:t&&t.get("id")}))}),300,{leading:!0})),Object(s.a)(Object(o.a)(e),"handleLoadPending",(function(){e.props.dispatch(Object(b.v)())})),Object(s.a)(Object(o.a)(e),"handleScrollToTop",l()((function(){e.props.dispatch(Object(b.A)(!0))}),100)),Object(s.a)(Object(o.a)(e),"handleScroll",l()((function(){e.props.dispatch(Object(b.A)(!1))}),100)),Object(s.a)(Object(o.a)(e),"handlePin",(function(){var t=e.props,n=t.columnId,i=t.dispatch;i(n?Object(g.h)(n):Object(g.e)("NOTIFICATIONS",{}))})),Object(s.a)(Object(o.a)(e),"handleMove",(function(t){var n=e.props,i=n.columnId;(0,n.dispatch)(Object(g.g)(i,t))})),Object(s.a)(Object(o.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(s.a)(Object(o.a)(e),"setColumnRef",(function(t){e.column=t})),Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(t){var n=e.props.notifications.findIndex((function(e){return null!==e&&e.get("id")===t}))-1;e._selectChild(n,!0)})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(t){var n=e.props.notifications.findIndex((function(e){return null!==e&&e.get("id")===t}))+1;e._selectChild(n,!1)})),e}Object(a.a)(e,t);var n=e.prototype;return n._selectChild=function(t,e){var n=this.column.node,i=n.querySelector("article:nth-of-type("+(t+1)+") .focusable");i&&(e&&n.scrollTop>i.offsetTop?i.scrollIntoView(!0):!e&&n.scrollTop+n.clientHeight<i.offsetTop+i.offsetHeight&&i.scrollIntoView(!1),i.focus())},n.componentDidMount=function(){var t=this.props.onMount;t&&t()},n.componentWillUnmount=function(){var t=this.props.onUnmount;t&&t()},n.render=function(){var t=this,e=this.props,n=e.intl,o=e.notifications,a=e.shouldUpdateScroll,s=e.isLoading,c=e.isUnread,l=e.columnId,r=e.multiColumn,u=e.hasMore,b=e.numPending,g=e.showFilterBar,p=!!l,O=Object(i.a)(w.b,{id:"empty_column.notifications",defaultMessage:"You don't have any notifications yet. Interact with others to start the conversation."}),j=null,v=g?Object(i.a)(it,{}):null;j=s&&this.scrollableContent?this.scrollableContent:o.size>0||u?o.map((function(e,n){return null===e?Object(i.a)(ct.a,{disabled:s,maxId:n>0?o.getIn([n-1,"id"]):null,onClick:t.handleLoadGap},"gap:"+o.getIn([n+1,"id"])):Object(i.a)(G,{notification:e,accountId:e.get("account"),onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown},e.get("id"))})):null,this.scrollableContent=j;var m=Object(i.a)(st.a,{scrollKey:"notifications-"+l,trackScroll:!p,isLoading:s,showLoading:s&&0===o.size,hasMore:u,numPending:b,emptyMessage:O,onLoadMore:this.handleLoadOlder,onLoadPending:this.handleLoadPending,onScrollToTop:this.handleScrollToTop,onScroll:this.handleScroll,shouldUpdateScroll:a,bindToDocument:!r},void 0,j);return d.a.createElement(f.a,{bindToDocument:!r,ref:this.setColumnRef,name:"notifications",extraClasses:this.props.notifCleaningActive?"notif-cleaning":null,label:n.formatMessage(lt.title)},Object(i.a)(h.a,{icon:"bell",active:c,title:n.formatMessage(lt.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:p,multiColumn:r,localSettings:this.props.localSettings,notifCleaning:!0,notifCleaningActive:this.props.notifCleaningActive,onEnterCleaningMode:this.props.onEnterCleaningMode},void 0,Object(i.a)(tt,{})),v,m)},e}(d.a.PureComponent),Object(s.a)(H,"defaultProps",{trackScroll:!0}),B=E))||B)||B}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{833:function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return vt}));var i=n(0),o=n(2),a=(n(9),n(6),n(8)),s=n(1),c=n(65),l=n.n(c),r=n(3),d=n.n(r),u=n(15),f=n(14),b=n.n(f),h=n(760),g=n(758),p=n(43),O=n(252),j=n(108),v=n(5),m=n.n(v),M=n(16),_=n.n(M),C=n(21),w=n(1085),y=n(7),N=n(301),k=n(214),P=n(471),I=n(771),x=n(25);var D=function(t){Object(a.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(){var t=e.props,n=t.notification;(0,t.onMoveUp)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(){var t=e.props,n=t.notification;(0,t.onMoveDown)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleOpen",(function(){e.handleOpenProfile()})),Object(s.a)(Object(o.a)(e),"handleOpenProfile",(function(){var t=e.props.notification;e.context.router.history.push("/accounts/"+t.getIn(["account","id"]))})),Object(s.a)(Object(o.a)(e),"handleMention",(function(t){t.preventDefault();var n=e.props,i=n.notification;(0,n.onMention)(i.get("account"),e.context.router.history)})),e}var c=n.prototype;return c.getHandlers=function(){return{moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,open:this.handleOpen,openProfile:this.handleOpenProfile,mention:this.handleMention,reply:this.handleMention}},c.render=function(){var t=this.props,e=t.account,n=t.notification,o=t.hidden,a=e.get("display_name_html")||e.get("username"),s=Object(i.a)("bdi",{},void 0,Object(i.a)(k.a,{className:"notification__display-name",href:e.get("url"),title:e.get("acct"),to:"/accounts/"+e.get("id"),dangerouslySetInnerHTML:{__html:a}}));return Object(i.a)(N.HotKeys,{handlers:this.getHandlers()},void 0,Object(i.a)("div",{className:"notification notification-follow focusable",tabIndex:"0"},void 0,Object(i.a)("div",{className:"notification__message"},void 0,Object(i.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(i.a)(x.a,{fixedWidth:!0,id:"user-plus"})),Object(i.a)(y.b,{id:"notification.follow",defaultMessage:"{name} followed you",values:{name:s}})),Object(i.a)(P.a,{hidden:o,id:e.get("id"),withNote:!1}),Object(i.a)(I.a,{notification:n})))},n}(C.a);Object(s.a)(D,"propTypes",{hidden:m.a.bool,id:m.a.string.isRequired,account:_.a.map.isRequired,notification:_.a.map.isRequired});var q,S,U,A=n(96),T=n(98),W=n(41);var F=Object(y.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),R=Object(y.g)((U=S=function(t){Object(a.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(){var t=e.props,n=t.notification;(0,t.onMoveUp)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(){var t=e.props,n=t.notification;(0,t.onMoveDown)(n.get("id"))})),Object(s.a)(Object(o.a)(e),"handleOpen",(function(){e.handleOpenProfile()})),Object(s.a)(Object(o.a)(e),"handleOpenProfile",(function(){var t=e.props.notification;e.context.router.history.push("/accounts/"+t.getIn(["account","id"]))})),Object(s.a)(Object(o.a)(e),"handleMention",(function(t){t.preventDefault();var n=e.props,i=n.notification;(0,n.onMention)(i.get("account"),e.context.router.history)})),e}var c=n.prototype;return c.getHandlers=function(){return{moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,open:this.handleOpen,openProfile:this.handleOpenProfile,mention:this.handleMention,reply:this.handleMention}},c.render=function(){var t=this.props,e=t.intl,n=t.hidden,o=t.account,a=t.onAuthorize,s=t.onReject,c=t.notification;if(!o)return Object(i.a)("div",{});if(n)return Object(i.a)(r.Fragment,{},void 0,o.get("display_name"),o.get("username"));var l=o.get("display_name_html")||o.get("username"),d=Object(i.a)("bdi",{},void 0,Object(i.a)(k.a,{className:"notification__display-name",href:o.get("url"),title:o.get("acct"),to:"/accounts/"+o.get("id"),dangerouslySetInnerHTML:{__html:l}}));return Object(i.a)(N.HotKeys,{handlers:this.getHandlers()},void 0,Object(i.a)("div",{className:"notification notification-follow-request focusable",tabIndex:"0"},void 0,Object(i.a)("div",{className:"notification__message"},void 0,Object(i.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(i.a)(x.a,{id:"user",fixedWidth:!0})),Object(i.a)(y.b,{id:"notification.follow_request",defaultMessage:"{name} has requested to follow you",values:{name:d}})),Object(i.a)("div",{className:"account"},void 0,Object(i.a)("div",{className:"account__wrapper"},void 0,Object(i.a)(k.a,{className:"account__display-name",title:o.get("acct"),href:o.get("url"),to:"/accounts/"+o.get("id")},o.get("id"),Object(i.a)("div",{className:"account__avatar-wrapper"},void 0,Object(i.a)(A.a,{account:o,size:36})),Object(i.a)(T.a,{account:o})),Object(i.a)("div",{className:"account__relationship"},void 0,Object(i.a)(W.a,{title:e.formatMessage(F.authorize),icon:"check",onClick:a}),Object(i.a)(W.a,{title:e.formatMessage(F.reject),icon:"times",onClick:s})))),Object(i.a)(I.a,{notification:c})))},n}(C.a),Object(s.a)(S,"propTypes",{account:_.a.map.isRequired,onAuthorize:m.a.func.isRequired,onReject:m.a.func.isRequired,intl:m.a.object.isRequired,notification:_.a.map.isRequired}),q=U))||q,L=n(24),B=Object(u.connect)(null,(function(t,e){var n=e.account;return{onAuthorize:function(){t(Object(L.y)(n.get("id")))},onReject:function(){t(Object(L.P)(n.get("id")))}}}))(R);var z=function(t){Object(a.a)(n,t);var e;e=n;function n(){return t.apply(this,arguments)||this}return n.prototype.render=function(){var t=this.props,e=t.hidden,n=t.notification,o=t.onMoveDown,a=t.onMoveUp,s=t.onMention,c=t.getScrollPosition,l=t.updateScrollBottom;switch(n.get("type")){case"follow":return Object(i.a)(D,{hidden:e,id:n.get("id"),account:n.get("account"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s});case"follow_request":return Object(i.a)(B,{hidden:e,id:n.get("id"),account:n.get("account"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s});case"mention":return Object(i.a)(w.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),notification:n,onMoveDown:o,onMoveUp:a,onMention:s,contextType:"notifications",getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"favourite":return Object(i.a)(w.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"favourite",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"reblog":return Object(i.a)(w.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"reblog",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});case"poll":return Object(i.a)(w.a,{containerId:n.get("id"),hidden:e,id:n.get("status"),account:n.get("account"),prepend:"poll",muted:!0,notification:n,onMoveDown:o,onMoveUp:a,onMention:s,getScrollPosition:c,updateScrollBottom:l,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth,onUnmount:this.props.onUnmount,withDismiss:!0});default:return null}},n}(C.a);Object(s.a)(z,"propTypes",{notification:_.a.map.isRequired,hidden:m.a.bool,onMoveUp:m.a.func.isRequired,onMoveDown:m.a.func.isRequired,onMention:m.a.func.isRequired,getScrollPosition:m.a.func,updateScrollBottom:m.a.func,cacheMediaWidth:m.a.func,cachedMediaWidth:m.a.number,onUnmount:m.a.func});var H=n(20),E=Object(u.connect)((function(){var t=Object(j.e)();return function(e,n){return{notification:t(e,n.notification,n.accountId),notifCleaning:e.getIn(["notifications","cleaningMode"])}}}),(function(t){return{onMention:function(e,n){t(Object(H.hb)(e,n))}}}))(z);var K=function(t){Object(a.a)(n,t);var e;e=n;function n(){return t.apply(this,arguments)||this}return n.prototype.render=function(){return Object(i.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.props.onClick},void 0,Object(i.a)(x.a,{id:"eraser"})," ",Object(i.a)(y.b,{id:"notifications.clear",defaultMessage:"Clear notifications"}))},n}(d.a.Component),G=n(1101);var J,V=function(t){Object(a.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"onPushChange",(function(t,n){e.props.onChange(["push"].concat(t),n)})),e}return n.prototype.render=function(){var t=this.props,e=t.settings,n=t.pushSettings,o=t.onChange,a=t.onClear,s=Object(i.a)(y.b,{id:"notifications.column_settings.filter_bar.show",defaultMessage:"Show"}),c=Object(i.a)(y.b,{id:"notifications.column_settings.filter_bar.advanced",defaultMessage:"Display all categories"}),l=Object(i.a)(y.b,{id:"notifications.column_settings.alert",defaultMessage:"Desktop notifications"}),r=Object(i.a)(y.b,{id:"notifications.column_settings.show",defaultMessage:"Show in column"}),d=Object(i.a)(y.b,{id:"notifications.column_settings.sound",defaultMessage:"Play sound"}),u=n.get("browserSupport")&&n.get("isSubscribed"),f=u&&Object(i.a)(y.b,{id:"notifications.column_settings.push",defaultMessage:"Push notifications"}),b=u&&Object(i.a)(y.b,{id:"notifications.column_settings.push_meta",defaultMessage:"This device"});return Object(i.a)("div",{},void 0,Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(K,{onClick:a})),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-filter-bar"},void 0,Object(i.a)("span",{id:"notifications-filter-bar",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.filter_bar.category",defaultMessage:"Quick filter bar"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","show"],onChange:o,label:s}),Object(i.a)(G.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","advanced"],onChange:o,label:c}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-follow"},void 0,Object(i.a)("span",{id:"notifications-follow",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.follow",defaultMessage:"New followers:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","follow"],meta:b,onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","follow"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-follow-request"},void 0,Object(i.a)("span",{id:"notifications-follow-request",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.follow_request",defaultMessage:"New follow requests:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow_request"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","follow_request"],onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","follow_request"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow_request"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-favourite"},void 0,Object(i.a)("span",{id:"notifications-favourite",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.favourite",defaultMessage:"Favourites:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","favourite"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","favourite"],meta:b,onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","favourite"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","favourite"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-mention"},void 0,Object(i.a)("span",{id:"notifications-mention",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.mention",defaultMessage:"Mentions:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","mention"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","mention"],meta:b,onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","mention"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","mention"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-reblog"},void 0,Object(i.a)("span",{id:"notifications-reblog",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.reblog",defaultMessage:"Boosts:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","reblog"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","reblog"],meta:b,onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","reblog"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","reblog"],onChange:o,label:d}))),Object(i.a)("div",{role:"group","aria-labelledby":"notifications-poll"},void 0,Object(i.a)("span",{id:"notifications-poll",className:"column-settings__section"},void 0,Object(i.a)(y.b,{id:"notifications.column_settings.poll",defaultMessage:"Poll results:"})),Object(i.a)("div",{className:"column-settings__row"},void 0,Object(i.a)(G.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","poll"],onChange:o,label:l}),u&&Object(i.a)(G.a,{prefix:"notifications_push",settings:n,settingPath:["alerts","poll"],meta:b,onChange:this.onPushChange,label:f}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["shows","poll"],onChange:o,label:r}),Object(i.a)(G.a,{prefix:"notifications",settings:e,settingPath:["sounds","poll"],onChange:o,label:d}))))},n}(d.a.PureComponent),Q=n(73),Y=n(232),X=n(45),Z=Object(y.f)({clearMessage:{id:"notifications.clear_confirmation",defaultMessage:"Are you sure you want to permanently clear all your notifications?"},clearConfirm:{id:"notifications.clear",defaultMessage:"Clear notifications"}}),$=Object(y.g)(Object(u.connect)((function(t){return{settings:t.getIn(["settings","notifications"]),pushSettings:t.get("push_notifications")}}),(function(t,e){var n=e.intl;return{onChange:function(e,n){"push"===e[0]?t(Object(Y.e)(e.slice(1),n)):"quickFilter"===e[0]?(t(Object(Q.c)(["notifications"].concat(e),n)),t(Object(p.B)("all"))):t(Object(Q.c)(["notifications"].concat(e),n))},onClear:function(){t(Object(X.d)("CONFIRM",{message:n.formatMessage(Z.clearMessage),confirm:n.formatMessage(Z.clearConfirm),onConfirm:function(){return t(Object(p.r)())}}))}}}))(V));var tt,et,nt,it=Object(y.f)({mentions:{id:"notifications.filter.mentions",defaultMessage:"Mentions"},favourites:{id:"notifications.filter.favourites",defaultMessage:"Favourites"},boosts:{id:"notifications.filter.boosts",defaultMessage:"Boosts"},polls:{id:"notifications.filter.polls",defaultMessage:"Poll results"},follows:{id:"notifications.filter.follows",defaultMessage:"Follows"}}),ot=Object(y.g)(J=function(t){Object(a.a)(n,t);var e;e=n;function n(){return t.apply(this,arguments)||this}var o=n.prototype;return o.onClick=function(t){var e=this;return function(){return e.props.selectFilter(t)}},o.render=function(){var t=this.props,e=t.selectedFilter,n=t.advancedMode,o=t.intl;return n?Object(i.a)("div",{className:"notification__filter-bar"},void 0,Object(i.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(i.a)(y.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(i.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention"),title:o.formatMessage(it.mentions)},void 0,Object(i.a)(x.a,{id:"reply-all",fixedWidth:!0})),Object(i.a)("button",{className:"favourite"===e?"active":"",onClick:this.onClick("favourite"),title:o.formatMessage(it.favourites)},void 0,Object(i.a)(x.a,{id:"star",fixedWidth:!0})),Object(i.a)("button",{className:"reblog"===e?"active":"",onClick:this.onClick("reblog"),title:o.formatMessage(it.boosts)},void 0,Object(i.a)(x.a,{id:"retweet",fixedWidth:!0})),Object(i.a)("button",{className:"poll"===e?"active":"",onClick:this.onClick("poll"),title:o.formatMessage(it.polls)},void 0,Object(i.a)(x.a,{id:"tasks",fixedWidth:!0})),Object(i.a)("button",{className:"follow"===e?"active":"",onClick:this.onClick("follow"),title:o.formatMessage(it.follows)},void 0,Object(i.a)(x.a,{id:"user-plus",fixedWidth:!0}))):Object(i.a)("div",{className:"notification__filter-bar"},void 0,Object(i.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(i.a)(y.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(i.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention")},void 0,Object(i.a)(y.b,{id:"notifications.filter.mentions",defaultMessage:"Mentions"})))},n}(d.a.PureComponent))||J,at=Object(u.connect)((function(t){return{selectedFilter:t.getIn(["settings","notifications","quickFilter","active"]),advancedMode:t.getIn(["settings","notifications","quickFilter","advanced"])}}),(function(t){return{selectFilter:function(e){t(Object(p.B)(e))}}}))(ot),st=n(57),ct=n(4),lt=n(1048),rt=n(1146);var dt,ut,ft,bt=Object(y.f)({btnAll:{id:"notification_purge.btn_all",defaultMessage:"Select\nall"},btnNone:{id:"notification_purge.btn_none",defaultMessage:"Select\nnone"},btnInvert:{id:"notification_purge.btn_invert",defaultMessage:"Invert\nselection"},btnApply:{id:"notification_purge.btn_apply",defaultMessage:"Clear\nselected"}}),ht=Object(y.g)((nt=et=function(t){Object(a.a)(n,t);var e;e=n;function n(){return t.apply(this,arguments)||this}return n.prototype.render=function(){var t=this.props,e=t.intl,n=t.markNewForDelete;return(Object(i.a)("div",{className:"column-header__notif-cleaning-buttons"},void 0,Object(i.a)("button",{onClick:this.props.onMarkAll,className:n?"active":""},void 0,Object(i.a)("b",{},void 0,"∀"),Object(i.a)("br",{}),e.formatMessage(bt.btnAll)),Object(i.a)("button",{onClick:this.props.onMarkNone,className:n?"":"active"},void 0,Object(i.a)("b",{},void 0,"∅"),Object(i.a)("br",{}),e.formatMessage(bt.btnNone)),Object(i.a)("button",{onClick:this.props.onInvert},void 0,Object(i.a)("b",{},void 0,"¬"),Object(i.a)("br",{}),e.formatMessage(bt.btnInvert)),Object(i.a)("button",{onClick:this.props.onDeleteMarked},void 0,Object(i.a)(x.a,{id:"trash"}),Object(i.a)("br",{}),e.formatMessage(bt.btnApply))))},n}(C.a),Object(s.a)(et,"propTypes",{onDeleteMarked:m.a.func.isRequired,onMarkAll:m.a.func.isRequired,onMarkNone:m.a.func.isRequired,onInvert:m.a.func.isRequired,intl:m.a.object.isRequired,markNewForDelete:m.a.bool}),tt=nt))||tt,gt=Object(y.f)({clearMessage:{id:"notifications.marked_clear_confirmation",defaultMessage:"Are you sure you want to permanently clear all selected notifications?"},clearConfirm:{id:"notifications.marked_clear",defaultMessage:"Clear selected notifications"}}),pt=Object(y.g)(Object(u.connect)((function(t){return{markNewForDelete:t.getIn(["notifications","markNewForDelete"])}}),(function(t,e){var n=e.intl;return{onEnterCleaningMode:function(e){t(Object(p.t)(e))},onDeleteMarked:function(){t(Object(X.d)("CONFIRM",{message:n.formatMessage(gt.clearMessage),confirm:n.formatMessage(gt.clearConfirm),onConfirm:function(){return t(Object(p.s)())}}))},onMarkAll:function(){t(Object(p.w)(!0))},onMarkNone:function(){t(Object(p.w)(!1))},onInvert:function(){t(Object(p.w)(null))}}}))(ht));var Ot=Object(y.f)({title:{id:"column.notifications",defaultMessage:"Notifications"},enterNotifCleaning:{id:"notification_purge.start",defaultMessage:"Enter notification cleaning mode"}}),jt=Object(st.a)([function(t){return t.getIn(["settings","notifications","quickFilter","show"])},function(t){return t.getIn(["settings","notifications","quickFilter","active"])},function(t){return Object(ct.List)(t.getIn(["settings","notifications","shows"]).filter((function(t){return!t})).keys())},function(t){return t.getIn(["notifications","items"])}],(function(t,e,n,i){return t&&"all"!==e?i.filter((function(t){return null!==t&&e===t.get("type")})):i.filterNot((function(t){return null!==t&&n.includes(t.get("type"))}))})),vt=Object(u.connect)((function(t){return{showFilterBar:t.getIn(["settings","notifications","quickFilter","show"]),notifications:jt(t),localSettings:t.get("local_settings"),isLoading:t.getIn(["notifications","isLoading"],!0),isUnread:t.getIn(["notifications","unread"])>0||t.getIn(["notifications","pendingItems"]).size>0,hasMore:t.getIn(["notifications","hasMore"]),numPending:t.getIn(["notifications","pendingItems"],Object(ct.List)()).size,notifCleaningActive:t.getIn(["notifications","cleaningMode"])}}),(function(t){return{onEnterCleaningMode:function(e){t(Object(p.t)(e))},onMount:function(){t(Object(p.y)())},onUnmount:function(){t(Object(p.C)())},dispatch:t}}))(dt=Object(y.g)((ft=ut=function(t){Object(a.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i))||this,Object(s.a)(Object(o.a)(e),"state",{animatingNCD:!1}),Object(s.a)(Object(o.a)(e),"handleLoadGap",(function(t){e.props.dispatch(Object(p.u)({maxId:t}))})),Object(s.a)(Object(o.a)(e),"handleLoadOlder",l()((function(){var t=e.props.notifications.last();e.props.dispatch(Object(p.u)({maxId:t&&t.get("id")}))}),300,{leading:!0})),Object(s.a)(Object(o.a)(e),"handleLoadPending",(function(){e.props.dispatch(Object(p.v)())})),Object(s.a)(Object(o.a)(e),"handleScrollToTop",l()((function(){e.props.dispatch(Object(p.A)(!0))}),100)),Object(s.a)(Object(o.a)(e),"handleScroll",l()((function(){e.props.dispatch(Object(p.A)(!1))}),100)),Object(s.a)(Object(o.a)(e),"handlePin",(function(){var t=e.props,n=t.columnId,i=t.dispatch;i(n?Object(O.h)(n):Object(O.e)("NOTIFICATIONS",{}))})),Object(s.a)(Object(o.a)(e),"handleMove",(function(t){var n=e.props,i=n.columnId;(0,n.dispatch)(Object(O.g)(i,t))})),Object(s.a)(Object(o.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(s.a)(Object(o.a)(e),"setColumnRef",(function(t){e.column=t})),Object(s.a)(Object(o.a)(e),"handleMoveUp",(function(t){var n=e.props.notifications.findIndex((function(e){return null!==e&&e.get("id")===t}))-1;e._selectChild(n,!0)})),Object(s.a)(Object(o.a)(e),"handleMoveDown",(function(t){var n=e.props.notifications.findIndex((function(e){return null!==e&&e.get("id")===t}))+1;e._selectChild(n,!1)})),Object(s.a)(Object(o.a)(e),"handleTransitionEndNCD",(function(){e.setState({animatingNCD:!1})})),Object(s.a)(Object(o.a)(e),"onEnterCleaningMode",(function(){e.setState({animatingNCD:!0}),e.props.onEnterCleaningMode(!e.props.notifCleaningActive)})),e}var c=n.prototype;return c._selectChild=function(t,e){var n=this.column.node,i=n.querySelector("article:nth-of-type("+(t+1)+") .focusable");i&&(e&&n.scrollTop>i.offsetTop?i.scrollIntoView(!0):!e&&n.scrollTop+n.clientHeight<i.offsetTop+i.offsetHeight&&i.scrollIntoView(!1),i.focus())},c.componentDidMount=function(){var t=this.props.onMount;t&&t()},c.componentWillUnmount=function(){var t=this.props.onUnmount;t&&t()},c.render=function(){var t=this,e=this.props,n=e.intl,o=e.notifications,a=e.shouldUpdateScroll,s=e.isLoading,c=e.isUnread,l=e.columnId,r=e.multiColumn,u=e.hasMore,f=e.numPending,p=e.showFilterBar,O=this.props,j=(O.notifCleaning,O.notifCleaningActive),v=this.state.animatingNCD,m=!!l,M=Object(i.a)(y.b,{id:"empty_column.notifications",defaultMessage:"You don't have any notifications yet. Interact with others to start the conversation."}),_=null,C=p?Object(i.a)(at,{}):null;_=s&&this.scrollableContent?this.scrollableContent:o.size>0||u?o.map((function(e,n){return null===e?Object(i.a)(rt.a,{disabled:s,maxId:n>0?o.getIn([n-1,"id"]):null,onClick:t.handleLoadGap},"gap:"+o.getIn([n+1,"id"])):Object(i.a)(E,{notification:e,accountId:e.get("account"),onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown},e.get("id"))})):null,this.scrollableContent=_;var w=Object(i.a)(lt.a,{scrollKey:"notifications-"+l,trackScroll:!m,isLoading:s,showLoading:s&&0===o.size,hasMore:u,numPending:f,emptyMessage:M,onLoadMore:this.handleLoadOlder,onLoadPending:this.handleLoadPending,onScrollToTop:this.handleScrollToTop,onScroll:this.handleScroll,shouldUpdateScroll:a,bindToDocument:!r},void 0,_),N=b()("column-header__button",{active:j}),k=b()("ncd column-header__collapsible",{collapsed:!j,animating:v}),P=n.formatMessage(Ot.enterNotifCleaning),I=Object(i.a)("button",{"aria-label":P,title:P,onClick:this.onEnterCleaningMode,className:N},void 0,Object(i.a)(x.a,{id:"eraser"})),D=Object(i.a)("div",{className:k,onTransitionEnd:this.handleTransitionEndNCD},void 0,Object(i.a)("div",{className:"column-header__collapsible-inner nopad-drawer"},void 0,j||v?Object(i.a)(pt,{}):null));return d.a.createElement(h.a,{bindToDocument:!r,ref:this.setColumnRef,name:"notifications",extraClasses:this.props.notifCleaningActive?"notif-cleaning":null,label:n.formatMessage(Ot.title)},Object(i.a)(g.a,{icon:"bell",active:c,title:n.formatMessage(Ot.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:m,multiColumn:r,localSettings:this.props.localSettings,extraButton:I,appendContent:D},void 0,Object(i.a)($,{})),C,w)},n}(d.a.PureComponent),Object(s.a)(ut,"defaultProps",{trackScroll:!0}),dt=ft))||dt)||dt}}]);
//# sourceMappingURL=notifications.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/notifications.js.map b/priv/static/packs/flavours/glitch/async/notifications.js.map
index 340227645..7a3ae0be5 100644
--- a/priv/static/packs/flavours/glitch/async/notifications.js.map
+++ b/priv/static/packs/flavours/glitch/async/notifications.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/follow.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/follow_request.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/follow_request_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/notification.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/notification_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/index.js"],"names":["NotificationFollow","props","notification","onMoveUp","get","onMoveDown","handleOpenProfile","context","router","history","push","getIn","e","preventDefault","onMention","getHandlers","moveUp","this","handleMoveUp","moveDown","handleMoveDown","open","handleOpen","openProfile","mention","handleMention","reply","render","account","hidden","displayName","link","className","href","title","to","dangerouslySetInnerHTML","__html","handlers","tabIndex","fixedWidth","id","defaultMessage","values","name","withNote","ImmutablePureComponent","PropTypes","bool","string","isRequired","ImmutablePropTypes","map","messages","defineMessages","authorize","reject","FollowRequest","injectIntl","intl","onAuthorize","onReject","size","formatMessage","icon","onClick","func","object","connect","dispatch","authorizeFollowRequest","rejectFollowRequest","Notification","getScrollPosition","updateScrollBottom","containerId","contextType","cachedMediaWidth","cacheMediaWidth","onUnmount","withDismiss","prepend","muted","number","getNotification","makeGetNotification","state","accountId","notifCleaning","mentionCompose","ClearColumnButton","React","Component","ColumnSettings","path","checked","onChange","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","pushMeta","role","aria-labelledby","prefix","settingPath","label","meta","onPushChange","PureComponent","clearMessage","clearConfirm","changePushNotifications","slice","changeSetting","setFilter","openModal","message","confirm","onConfirm","clearNotifications","tooltips","mentions","favourites","boosts","polls","follows","FilterBar","notificationType","selectFilter","selectedFilter","advancedMode","newActiveFilter","getNotifications","createSelector","ImmutableList","filter","item","keys","showFilterBar","allowedType","excludedTypes","notifications","filterNot","includes","Notifications","localSettings","isLoading","isUnread","hasMore","numPending","notifCleaningActive","onEnterCleaningMode","yes","enterNotificationClearingMode","onMount","mountNotifications","unmountNotifications","maxId","expandNotifications","last","leading","loadPending","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","index","align_top","container","node","element","querySelector","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","componentDidMount","componentWillUnmount","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","disabled","handleLoadGap","scrollContainer","scrollKey","trackScroll","showLoading","onLoadMore","handleLoadOlder","onLoadPending","handleLoadPending","onScrollToTop","handleScrollToTop","onScroll","handleScroll","bindToDocument","ref","setColumnRef","extraClasses","active","onPin","handlePin","onMove","handleMove","handleHeaderClick"],"mappings":"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","file":"flavours/glitch/async/notifications.js","sourcesContent":["// Package imports.\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\n\n// Our imports.\nimport Permalink from 'flavours/glitch/components/permalink';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport NotificationOverlayContainer from '../containers/overlay_container';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class NotificationFollow extends ImmutablePureComponent {\n\n static propTypes = {\n hidden: PropTypes.bool,\n id: PropTypes.string.isRequired,\n account: ImmutablePropTypes.map.isRequired,\n notification: ImmutablePropTypes.map.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n this.handleOpenProfile();\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n render () {\n const { account, notification, hidden } = this.props;\n\n // Links to the display name.\n const displayName = account.get('display_name_html') || account.get('username');\n const link = (\n <bdi><Permalink\n className='notification__display-name'\n href={account.get('url')}\n title={account.get('acct')}\n to={`/accounts/${account.get('id')}`}\n dangerouslySetInnerHTML={{ __html: displayName }}\n /></bdi>\n );\n\n // Renders.\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0'>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon fixedWidth id='user-plus' />\n </div>\n\n <FormattedMessage\n id='notification.follow'\n defaultMessage='{name} followed you'\n values={{ name: link }}\n />\n </div>\n\n <AccountContainer hidden={hidden} id={account.get('id')} withNote={false} />\n <NotificationOverlayContainer notification={notification} />\n </div>\n </HotKeys>\n );\n }\n\n}\n","import React, { Fragment } from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport NotificationOverlayContainer from '../containers/overlay_container';\nimport { HotKeys } from 'react-hotkeys';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },\n reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },\n});\n\nexport default @injectIntl\nclass FollowRequest extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n onAuthorize: PropTypes.func.isRequired,\n onReject: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n notification: ImmutablePropTypes.map.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n this.handleOpenProfile();\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n render () {\n const { intl, hidden, account, onAuthorize, onReject, notification } = this.props;\n\n if (!account) {\n return <div />;\n }\n\n if (hidden) {\n return (\n <Fragment>\n {account.get('display_name')}\n {account.get('username')}\n </Fragment>\n );\n }\n\n // Links to the display name.\n const displayName = account.get('display_name_html') || account.get('username');\n const link = (\n <bdi><Permalink\n className='notification__display-name'\n href={account.get('url')}\n title={account.get('acct')}\n to={`/accounts/${account.get('id')}`}\n dangerouslySetInnerHTML={{ __html: displayName }}\n /></bdi>\n );\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow-request focusable' tabIndex='0'>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='user' fixedWidth />\n </div>\n\n <FormattedMessage\n id='notification.follow_request'\n defaultMessage='{name} has requested to follow you'\n values={{ name: link }}\n />\n </div>\n\n <div className='account'>\n <div className='account__wrapper'>\n <Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </Permalink>\n\n <div className='account__relationship'>\n <IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} />\n <IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} />\n </div>\n </div>\n </div>\n\n <NotificationOverlayContainer notification={notification} />\n </div>\n </HotKeys>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport FollowRequest from '../components/follow_request';\nimport { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';\n\nconst mapDispatchToProps = (dispatch, { account }) => ({\n onAuthorize () {\n dispatch(authorizeFollowRequest(account.get('id')));\n },\n\n onReject () {\n dispatch(rejectFollowRequest(account.get('id')));\n },\n});\n\nexport default connect(null, mapDispatchToProps)(FollowRequest);\n","// Package imports.\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\n// Our imports,\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport NotificationFollow from './follow';\nimport NotificationFollowRequestContainer from '../containers/follow_request_container';\n\nexport default class Notification extends ImmutablePureComponent {\n\n static propTypes = {\n notification: ImmutablePropTypes.map.isRequired,\n hidden: PropTypes.bool,\n onMoveUp: PropTypes.func.isRequired,\n onMoveDown: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n getScrollPosition: PropTypes.func,\n updateScrollBottom: PropTypes.func,\n cacheMediaWidth: PropTypes.func,\n cachedMediaWidth: PropTypes.number,\n onUnmount: PropTypes.func,\n };\n\n render () {\n const {\n hidden,\n notification,\n onMoveDown,\n onMoveUp,\n onMention,\n getScrollPosition,\n updateScrollBottom,\n } = this.props;\n\n switch(notification.get('type')) {\n case 'follow':\n return (\n <NotificationFollow\n hidden={hidden}\n id={notification.get('id')}\n account={notification.get('account')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n />\n );\n case 'follow_request':\n return (\n <NotificationFollowRequestContainer\n hidden={hidden}\n id={notification.get('id')}\n account={notification.get('account')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n />\n );\n case 'mention':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n contextType='notifications'\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'favourite':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='favourite'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'reblog':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='reblog'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'poll':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='poll'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n default:\n return null;\n }\n }\n\n}\n","// Package imports.\nimport { connect } from 'react-redux';\n\n// Our imports.\nimport { makeGetNotification } from 'flavours/glitch/selectors';\nimport Notification from '../components/notification';\nimport { mentionCompose } from 'flavours/glitch/actions/compose';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n\n const mapStateToProps = (state, props) => ({\n notification: getNotification(state, props.notification, props.accountId),\n notifCleaning: state.getIn(['notifications', 'cleaningMode']),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class ClearColumnButton extends React.Component {\n\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n };\n\n render () {\n return (\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { FormattedMessage } from 'react-intl';\nimport ClearColumnButton from './clear_column_button';\nimport SettingToggle from './setting_toggle';\n\nexport default class ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n pushSettings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n onPushChange = (path, checked) => {\n this.props.onChange(['push', ...path], checked);\n }\n\n render () {\n const { settings, pushSettings, onChange, onClear } = this.props;\n\n const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;\n const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;\n const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;\n const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;\n const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;\n\n const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');\n const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;\n const pushMeta = showPushSettings && <FormattedMessage id='notifications.column_settings.push_meta' defaultMessage='This device' />;\n\n return (\n <div>\n <div className='column-settings__row'>\n <ClearColumnButton onClick={onClear} />\n </div>\n\n <div role='group' aria-labelledby='notifications-filter-bar'>\n <span id='notifications-filter-bar' className='column-settings__section'>\n <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />\n </span>\n <div className='column-settings__row'>\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-follow'>\n <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-follow-request'>\n <span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-favourite'>\n <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-mention'>\n <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-reblog'>\n <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-poll'>\n <span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport { setFilter } from 'flavours/glitch/actions/notifications';\nimport { clearNotifications } from 'flavours/glitch/actions/notifications';\nimport { changeAlerts as changePushNotifications } from 'flavours/glitch/actions/push_notifications';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst messages = defineMessages({\n clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' },\n clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' },\n});\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'notifications']),\n pushSettings: state.get('push_notifications'),\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange (path, checked) {\n if (path[0] === 'push') {\n dispatch(changePushNotifications(path.slice(1), checked));\n } else if (path[0] === 'quickFilter') {\n dispatch(changeSetting(['notifications', ...path], checked));\n dispatch(setFilter('all'));\n } else {\n dispatch(changeSetting(['notifications', ...path], checked));\n }\n },\n\n onClear () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.clearMessage),\n confirm: intl.formatMessage(messages.clearConfirm),\n onConfirm: () => dispatch(clearNotifications()),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst tooltips = defineMessages({\n mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },\n favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favourites' },\n boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },\n polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' },\n follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },\n});\n\nexport default @injectIntl\nclass FilterBar extends React.PureComponent {\n\n static propTypes = {\n selectFilter: PropTypes.func.isRequired,\n selectedFilter: PropTypes.string.isRequired,\n advancedMode: PropTypes.bool.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n onClick (notificationType) {\n return () => this.props.selectFilter(notificationType);\n }\n\n render () {\n const { selectedFilter, advancedMode, intl } = this.props;\n const renderedElement = !advancedMode ? (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n >\n <FormattedMessage\n id='notifications.filter.mentions'\n defaultMessage='Mentions'\n />\n </button>\n </div>\n ) : (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n title={intl.formatMessage(tooltips.mentions)}\n >\n <Icon id='reply-all' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'favourite' ? 'active' : ''}\n onClick={this.onClick('favourite')}\n title={intl.formatMessage(tooltips.favourites)}\n >\n <Icon id='star' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'reblog' ? 'active' : ''}\n onClick={this.onClick('reblog')}\n title={intl.formatMessage(tooltips.boosts)}\n >\n <Icon id='retweet' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'poll' ? 'active' : ''}\n onClick={this.onClick('poll')}\n title={intl.formatMessage(tooltips.polls)}\n >\n <Icon id='tasks' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'follow' ? 'active' : ''}\n onClick={this.onClick('follow')}\n title={intl.formatMessage(tooltips.follows)}\n >\n <Icon id='user-plus' fixedWidth />\n </button>\n </div>\n );\n return renderedElement;\n }\n\n}\n","import { connect } from 'react-redux';\nimport FilterBar from '../components/filter_bar';\nimport { setFilter } from '../../../actions/notifications';\n\nconst makeMapStateToProps = state => ({\n selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n selectFilter (newActiveFilter) {\n dispatch(setFilter(newActiveFilter));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport {\n enterNotificationClearingMode,\n expandNotifications,\n scrollTopNotifications,\n mountNotifications,\n unmountNotifications,\n loadPending,\n} from 'flavours/glitch/actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport NotificationContainer from './containers/notification_container';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport FilterBarContainer from './containers/filter_bar_container';\nimport { createSelector } from 'reselect';\nimport { List as ImmutableList } from 'immutable';\nimport { debounce } from 'lodash';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport LoadGap from 'flavours/glitch/components/load_gap';\n\nconst messages = defineMessages({\n title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n});\n\nconst getNotifications = createSelector([\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n state => state.getIn(['notifications', 'items']),\n], (showFilterBar, allowedType, excludedTypes, notifications) => {\n if (!showFilterBar || allowedType === 'all') {\n // used if user changed the notification settings after loading the notifications from the server\n // otherwise a list of notifications will come pre-filtered from the backend\n // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category\n return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));\n }\n return notifications.filter(item => item !== null && allowedType === item.get('type'));\n});\n\nconst mapStateToProps = state => ({\n showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n notifications: getNotifications(state),\n localSettings: state.get('local_settings'),\n isLoading: state.getIn(['notifications', 'isLoading'], true),\n isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0,\n hasMore: state.getIn(['notifications', 'hasMore']),\n numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,\n notifCleaningActive: state.getIn(['notifications', 'cleaningMode']),\n});\n\n/* glitch */\nconst mapDispatchToProps = dispatch => ({\n onEnterCleaningMode(yes) {\n dispatch(enterNotificationClearingMode(yes));\n },\n onMount() {\n dispatch(mountNotifications());\n },\n onUnmount() {\n dispatch(unmountNotifications());\n },\n dispatch,\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Notifications extends React.PureComponent {\n\n static propTypes = {\n columnId: PropTypes.string,\n notifications: ImmutablePropTypes.list.isRequired,\n showFilterBar: PropTypes.bool.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n intl: PropTypes.object.isRequired,\n isLoading: PropTypes.bool,\n isUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n numPending: PropTypes.number,\n localSettings: ImmutablePropTypes.map,\n notifCleaningActive: PropTypes.bool,\n onEnterCleaningMode: PropTypes.func,\n onMount: PropTypes.func,\n onUnmount: PropTypes.func,\n };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n handleLoadGap = (maxId) => {\n this.props.dispatch(expandNotifications({ maxId }));\n };\n\n handleLoadOlder = debounce(() => {\n const last = this.props.notifications.last();\n this.props.dispatch(expandNotifications({ maxId: last && last.get('id') }));\n }, 300, { leading: true });\n\n handleLoadPending = () => {\n this.props.dispatch(loadPending());\n };\n\n handleScrollToTop = debounce(() => {\n this.props.dispatch(scrollTopNotifications(true));\n }, 100);\n\n handleScroll = debounce(() => {\n this.props.dispatch(scrollTopNotifications(false));\n }, 100);\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('NOTIFICATIONS', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n handleMoveUp = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) - 1;\n this._selectChild(elementIndex, true);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n this._selectChild(elementIndex, false);\n }\n\n _selectChild (index, align_top) {\n const container = this.column.node;\n const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n componentDidMount () {\n const { onMount } = this.props;\n if (onMount) {\n onMount();\n }\n }\n\n componentWillUnmount () {\n const { onUnmount } = this.props;\n if (onUnmount) {\n onUnmount();\n }\n }\n\n render () {\n const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props;\n const pinned = !!columnId;\n const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage=\"You don't have any notifications yet. Interact with others to start the conversation.\" />;\n\n let scrollableContent = null;\n\n const filterBarContainer = showFilterBar\n ? (<FilterBarContainer />)\n : null;\n\n if (isLoading && this.scrollableContent) {\n scrollableContent = this.scrollableContent;\n } else if (notifications.size > 0 || hasMore) {\n scrollableContent = notifications.map((item, index) => item === null ? (\n <LoadGap\n key={'gap:' + notifications.getIn([index + 1, 'id'])}\n disabled={isLoading}\n maxId={index > 0 ? notifications.getIn([index - 1, 'id']) : null}\n onClick={this.handleLoadGap}\n />\n ) : (\n <NotificationContainer\n key={item.get('id')}\n notification={item}\n accountId={item.get('account')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ));\n } else {\n scrollableContent = null;\n }\n\n this.scrollableContent = scrollableContent;\n\n const scrollContainer = (\n <ScrollableList\n scrollKey={`notifications-${columnId}`}\n trackScroll={!pinned}\n isLoading={isLoading}\n showLoading={isLoading && notifications.size === 0}\n hasMore={hasMore}\n numPending={numPending}\n emptyMessage={emptyMessage}\n onLoadMore={this.handleLoadOlder}\n onLoadPending={this.handleLoadPending}\n onScrollToTop={this.handleScrollToTop}\n onScroll={this.handleScroll}\n shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n >\n {scrollableContent}\n </ScrollableList>\n );\n\n return (\n <Column\n bindToDocument={!multiColumn}\n ref={this.setColumnRef}\n name='notifications'\n extraClasses={this.props.notifCleaningActive ? 'notif-cleaning' : null}\n label={intl.formatMessage(messages.title)}\n >\n <ColumnHeader\n icon='bell'\n active={isUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n localSettings={this.props.localSettings}\n notifCleaning\n notifCleaningActive={this.props.notifCleaningActive} // this is used to toggle the header text\n onEnterCleaningMode={this.props.onEnterCleaningMode}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n {filterBarContainer}\n {scrollContainer}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/follow.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/follow_request.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/follow_request_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/notification.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/notification_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/components/notification_purge_buttons.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/containers/notification_purge_buttons_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/index.js"],"names":["NotificationFollow","props","notification","onMoveUp","get","onMoveDown","handleOpenProfile","context","router","history","push","getIn","e","preventDefault","onMention","getHandlers","moveUp","this","handleMoveUp","moveDown","handleMoveDown","open","handleOpen","openProfile","mention","handleMention","reply","render","account","hidden","displayName","link","className","href","title","to","dangerouslySetInnerHTML","__html","handlers","tabIndex","fixedWidth","id","defaultMessage","values","name","withNote","ImmutablePureComponent","PropTypes","bool","string","isRequired","ImmutablePropTypes","map","messages","defineMessages","authorize","reject","FollowRequest","injectIntl","intl","onAuthorize","onReject","size","formatMessage","icon","onClick","func","object","connect","dispatch","authorizeFollowRequest","rejectFollowRequest","Notification","getScrollPosition","updateScrollBottom","containerId","contextType","cachedMediaWidth","cacheMediaWidth","onUnmount","withDismiss","prepend","muted","number","getNotification","makeGetNotification","state","accountId","notifCleaning","mentionCompose","ClearColumnButton","React","Component","ColumnSettings","path","checked","onChange","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","pushMeta","role","aria-labelledby","prefix","settingPath","label","meta","onPushChange","PureComponent","clearMessage","clearConfirm","changePushNotifications","slice","changeSetting","setFilter","openModal","message","confirm","onConfirm","clearNotifications","tooltips","mentions","favourites","boosts","polls","follows","FilterBar","notificationType","selectFilter","selectedFilter","advancedMode","newActiveFilter","btnAll","btnNone","btnInvert","btnApply","NotificationPurgeButtons","markNewForDelete","onMarkAll","onMarkNone","onInvert","onDeleteMarked","onEnterCleaningMode","yes","enterNotificationClearingMode","deleteMarkedNotifications","markAllNotifications","enterNotifCleaning","getNotifications","createSelector","ImmutableList","filter","item","keys","showFilterBar","allowedType","excludedTypes","notifications","filterNot","includes","Notifications","localSettings","isLoading","isUnread","hasMore","numPending","notifCleaningActive","onMount","mountNotifications","unmountNotifications","animatingNCD","maxId","expandNotifications","last","leading","loadPending","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","setState","index","align_top","container","node","element","querySelector","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","componentDidMount","componentWillUnmount","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","disabled","handleLoadGap","scrollContainer","scrollKey","trackScroll","showLoading","onLoadMore","handleLoadOlder","onLoadPending","handleLoadPending","onScrollToTop","handleScrollToTop","onScroll","handleScroll","bindToDocument","notifCleaningButtonClassName","classNames","notifCleaningDrawerClassName","msgEnterNotifCleaning","notifCleaningButton","aria-label","notifCleaningDrawer","onTransitionEnd","handleTransitionEndNCD","ref","setColumnRef","extraClasses","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","extraButton","appendContent"],"mappings":"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","file":"flavours/glitch/async/notifications.js","sourcesContent":["// Package imports.\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\n\n// Our imports.\nimport Permalink from 'flavours/glitch/components/permalink';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport NotificationOverlayContainer from '../containers/overlay_container';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class NotificationFollow extends ImmutablePureComponent {\n\n static propTypes = {\n hidden: PropTypes.bool,\n id: PropTypes.string.isRequired,\n account: ImmutablePropTypes.map.isRequired,\n notification: ImmutablePropTypes.map.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n this.handleOpenProfile();\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n render () {\n const { account, notification, hidden } = this.props;\n\n // Links to the display name.\n const displayName = account.get('display_name_html') || account.get('username');\n const link = (\n <bdi><Permalink\n className='notification__display-name'\n href={account.get('url')}\n title={account.get('acct')}\n to={`/accounts/${account.get('id')}`}\n dangerouslySetInnerHTML={{ __html: displayName }}\n /></bdi>\n );\n\n // Renders.\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0'>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon fixedWidth id='user-plus' />\n </div>\n\n <FormattedMessage\n id='notification.follow'\n defaultMessage='{name} followed you'\n values={{ name: link }}\n />\n </div>\n\n <AccountContainer hidden={hidden} id={account.get('id')} withNote={false} />\n <NotificationOverlayContainer notification={notification} />\n </div>\n </HotKeys>\n );\n }\n\n}\n","import React, { Fragment } from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport NotificationOverlayContainer from '../containers/overlay_container';\nimport { HotKeys } from 'react-hotkeys';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },\n reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },\n});\n\nexport default @injectIntl\nclass FollowRequest extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n onAuthorize: PropTypes.func.isRequired,\n onReject: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n notification: ImmutablePropTypes.map.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n this.handleOpenProfile();\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n render () {\n const { intl, hidden, account, onAuthorize, onReject, notification } = this.props;\n\n if (!account) {\n return <div />;\n }\n\n if (hidden) {\n return (\n <Fragment>\n {account.get('display_name')}\n {account.get('username')}\n </Fragment>\n );\n }\n\n // Links to the display name.\n const displayName = account.get('display_name_html') || account.get('username');\n const link = (\n <bdi><Permalink\n className='notification__display-name'\n href={account.get('url')}\n title={account.get('acct')}\n to={`/accounts/${account.get('id')}`}\n dangerouslySetInnerHTML={{ __html: displayName }}\n /></bdi>\n );\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow-request focusable' tabIndex='0'>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='user' fixedWidth />\n </div>\n\n <FormattedMessage\n id='notification.follow_request'\n defaultMessage='{name} has requested to follow you'\n values={{ name: link }}\n />\n </div>\n\n <div className='account'>\n <div className='account__wrapper'>\n <Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </Permalink>\n\n <div className='account__relationship'>\n <IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} />\n <IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} />\n </div>\n </div>\n </div>\n\n <NotificationOverlayContainer notification={notification} />\n </div>\n </HotKeys>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport FollowRequest from '../components/follow_request';\nimport { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';\n\nconst mapDispatchToProps = (dispatch, { account }) => ({\n onAuthorize () {\n dispatch(authorizeFollowRequest(account.get('id')));\n },\n\n onReject () {\n dispatch(rejectFollowRequest(account.get('id')));\n },\n});\n\nexport default connect(null, mapDispatchToProps)(FollowRequest);\n","// Package imports.\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\n// Our imports,\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport NotificationFollow from './follow';\nimport NotificationFollowRequestContainer from '../containers/follow_request_container';\n\nexport default class Notification extends ImmutablePureComponent {\n\n static propTypes = {\n notification: ImmutablePropTypes.map.isRequired,\n hidden: PropTypes.bool,\n onMoveUp: PropTypes.func.isRequired,\n onMoveDown: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n getScrollPosition: PropTypes.func,\n updateScrollBottom: PropTypes.func,\n cacheMediaWidth: PropTypes.func,\n cachedMediaWidth: PropTypes.number,\n onUnmount: PropTypes.func,\n };\n\n render () {\n const {\n hidden,\n notification,\n onMoveDown,\n onMoveUp,\n onMention,\n getScrollPosition,\n updateScrollBottom,\n } = this.props;\n\n switch(notification.get('type')) {\n case 'follow':\n return (\n <NotificationFollow\n hidden={hidden}\n id={notification.get('id')}\n account={notification.get('account')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n />\n );\n case 'follow_request':\n return (\n <NotificationFollowRequestContainer\n hidden={hidden}\n id={notification.get('id')}\n account={notification.get('account')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n />\n );\n case 'mention':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n contextType='notifications'\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'favourite':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='favourite'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'reblog':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='reblog'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'poll':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='poll'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n default:\n return null;\n }\n }\n\n}\n","// Package imports.\nimport { connect } from 'react-redux';\n\n// Our imports.\nimport { makeGetNotification } from 'flavours/glitch/selectors';\nimport Notification from '../components/notification';\nimport { mentionCompose } from 'flavours/glitch/actions/compose';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n\n const mapStateToProps = (state, props) => ({\n notification: getNotification(state, props.notification, props.accountId),\n notifCleaning: state.getIn(['notifications', 'cleaningMode']),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class ClearColumnButton extends React.Component {\n\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n };\n\n render () {\n return (\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { FormattedMessage } from 'react-intl';\nimport ClearColumnButton from './clear_column_button';\nimport SettingToggle from './setting_toggle';\n\nexport default class ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n pushSettings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n onPushChange = (path, checked) => {\n this.props.onChange(['push', ...path], checked);\n }\n\n render () {\n const { settings, pushSettings, onChange, onClear } = this.props;\n\n const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;\n const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;\n const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;\n const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;\n const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;\n\n const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');\n const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;\n const pushMeta = showPushSettings && <FormattedMessage id='notifications.column_settings.push_meta' defaultMessage='This device' />;\n\n return (\n <div>\n <div className='column-settings__row'>\n <ClearColumnButton onClick={onClear} />\n </div>\n\n <div role='group' aria-labelledby='notifications-filter-bar'>\n <span id='notifications-filter-bar' className='column-settings__section'>\n <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />\n </span>\n <div className='column-settings__row'>\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-follow'>\n <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-follow-request'>\n <span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-favourite'>\n <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-mention'>\n <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-reblog'>\n <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-poll'>\n <span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport { setFilter } from 'flavours/glitch/actions/notifications';\nimport { clearNotifications } from 'flavours/glitch/actions/notifications';\nimport { changeAlerts as changePushNotifications } from 'flavours/glitch/actions/push_notifications';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst messages = defineMessages({\n clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' },\n clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' },\n});\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'notifications']),\n pushSettings: state.get('push_notifications'),\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange (path, checked) {\n if (path[0] === 'push') {\n dispatch(changePushNotifications(path.slice(1), checked));\n } else if (path[0] === 'quickFilter') {\n dispatch(changeSetting(['notifications', ...path], checked));\n dispatch(setFilter('all'));\n } else {\n dispatch(changeSetting(['notifications', ...path], checked));\n }\n },\n\n onClear () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.clearMessage),\n confirm: intl.formatMessage(messages.clearConfirm),\n onConfirm: () => dispatch(clearNotifications()),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst tooltips = defineMessages({\n mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },\n favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favourites' },\n boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },\n polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' },\n follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },\n});\n\nexport default @injectIntl\nclass FilterBar extends React.PureComponent {\n\n static propTypes = {\n selectFilter: PropTypes.func.isRequired,\n selectedFilter: PropTypes.string.isRequired,\n advancedMode: PropTypes.bool.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n onClick (notificationType) {\n return () => this.props.selectFilter(notificationType);\n }\n\n render () {\n const { selectedFilter, advancedMode, intl } = this.props;\n const renderedElement = !advancedMode ? (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n >\n <FormattedMessage\n id='notifications.filter.mentions'\n defaultMessage='Mentions'\n />\n </button>\n </div>\n ) : (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n title={intl.formatMessage(tooltips.mentions)}\n >\n <Icon id='reply-all' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'favourite' ? 'active' : ''}\n onClick={this.onClick('favourite')}\n title={intl.formatMessage(tooltips.favourites)}\n >\n <Icon id='star' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'reblog' ? 'active' : ''}\n onClick={this.onClick('reblog')}\n title={intl.formatMessage(tooltips.boosts)}\n >\n <Icon id='retweet' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'poll' ? 'active' : ''}\n onClick={this.onClick('poll')}\n title={intl.formatMessage(tooltips.polls)}\n >\n <Icon id='tasks' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'follow' ? 'active' : ''}\n onClick={this.onClick('follow')}\n title={intl.formatMessage(tooltips.follows)}\n >\n <Icon id='user-plus' fixedWidth />\n </button>\n </div>\n );\n return renderedElement;\n }\n\n}\n","import { connect } from 'react-redux';\nimport FilterBar from '../components/filter_bar';\nimport { setFilter } from '../../../actions/notifications';\n\nconst makeMapStateToProps = state => ({\n selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n selectFilter (newActiveFilter) {\n dispatch(setFilter(newActiveFilter));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);\n","/**\n * Buttons widget for controlling the notification clearing mode.\n * In idle state, the cleaning mode button is shown. When the mode is active,\n * a Confirm and Abort buttons are shown in its place.\n */\n\n\n// Package imports //\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n btnAll : { id: 'notification_purge.btn_all', defaultMessage: 'Select\\nall' },\n btnNone : { id: 'notification_purge.btn_none', defaultMessage: 'Select\\nnone' },\n btnInvert : { id: 'notification_purge.btn_invert', defaultMessage: 'Invert\\nselection' },\n btnApply : { id: 'notification_purge.btn_apply', defaultMessage: 'Clear\\nselected' },\n});\n\nexport default @injectIntl\nclass NotificationPurgeButtons extends ImmutablePureComponent {\n\n static propTypes = {\n onDeleteMarked : PropTypes.func.isRequired,\n onMarkAll : PropTypes.func.isRequired,\n onMarkNone : PropTypes.func.isRequired,\n onInvert : PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n markNewForDelete: PropTypes.bool,\n };\n\n render () {\n const { intl, markNewForDelete } = this.props;\n\n //className='active'\n return (\n <div className='column-header__notif-cleaning-buttons'>\n <button onClick={this.props.onMarkAll} className={markNewForDelete ? 'active' : ''}>\n <b>∀</b><br />{intl.formatMessage(messages.btnAll)}\n </button>\n\n <button onClick={this.props.onMarkNone} className={!markNewForDelete ? 'active' : ''}>\n <b>∅</b><br />{intl.formatMessage(messages.btnNone)}\n </button>\n\n <button onClick={this.props.onInvert}>\n <b>¬</b><br />{intl.formatMessage(messages.btnInvert)}\n </button>\n\n <button onClick={this.props.onDeleteMarked}>\n <Icon id='trash' /><br />{intl.formatMessage(messages.btnApply)}\n </button>\n </div>\n );\n }\n\n}\n","// Package imports.\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\n\n// Our imports.\nimport NotificationPurgeButtons from 'flavours/glitch/components/notification_purge_buttons';\nimport {\n deleteMarkedNotifications,\n enterNotificationClearingMode,\n markAllNotifications,\n} from 'flavours/glitch/actions/notifications';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst messages = defineMessages({\n clearMessage: { id: 'notifications.marked_clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all selected notifications?' },\n clearConfirm: { id: 'notifications.marked_clear', defaultMessage: 'Clear selected notifications' },\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onEnterCleaningMode(yes) {\n dispatch(enterNotificationClearingMode(yes));\n },\n\n onDeleteMarked() {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.clearMessage),\n confirm: intl.formatMessage(messages.clearConfirm),\n onConfirm: () => dispatch(deleteMarkedNotifications()),\n }));\n },\n\n onMarkAll() {\n dispatch(markAllNotifications(true));\n },\n\n onMarkNone() {\n dispatch(markAllNotifications(false));\n },\n\n onInvert() {\n dispatch(markAllNotifications(null));\n },\n});\n\nconst mapStateToProps = state => ({\n markNewForDelete: state.getIn(['notifications', 'markNewForDelete']),\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NotificationPurgeButtons));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport {\n enterNotificationClearingMode,\n expandNotifications,\n scrollTopNotifications,\n mountNotifications,\n unmountNotifications,\n loadPending,\n} from 'flavours/glitch/actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport NotificationContainer from './containers/notification_container';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport FilterBarContainer from './containers/filter_bar_container';\nimport { createSelector } from 'reselect';\nimport { List as ImmutableList } from 'immutable';\nimport { debounce } from 'lodash';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport LoadGap from 'flavours/glitch/components/load_gap';\nimport Icon from 'flavours/glitch/components/icon';\n\nimport NotificationPurgeButtonsContainer from 'flavours/glitch/containers/notification_purge_buttons_container';\n\nconst messages = defineMessages({\n title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n enterNotifCleaning : { id: 'notification_purge.start', defaultMessage: 'Enter notification cleaning mode' },\n});\n\nconst getNotifications = createSelector([\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n state => state.getIn(['notifications', 'items']),\n], (showFilterBar, allowedType, excludedTypes, notifications) => {\n if (!showFilterBar || allowedType === 'all') {\n // used if user changed the notification settings after loading the notifications from the server\n // otherwise a list of notifications will come pre-filtered from the backend\n // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category\n return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));\n }\n return notifications.filter(item => item !== null && allowedType === item.get('type'));\n});\n\nconst mapStateToProps = state => ({\n showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n notifications: getNotifications(state),\n localSettings: state.get('local_settings'),\n isLoading: state.getIn(['notifications', 'isLoading'], true),\n isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0,\n hasMore: state.getIn(['notifications', 'hasMore']),\n numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,\n notifCleaningActive: state.getIn(['notifications', 'cleaningMode']),\n});\n\n/* glitch */\nconst mapDispatchToProps = dispatch => ({\n onEnterCleaningMode(yes) {\n dispatch(enterNotificationClearingMode(yes));\n },\n onMount() {\n dispatch(mountNotifications());\n },\n onUnmount() {\n dispatch(unmountNotifications());\n },\n dispatch,\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Notifications extends React.PureComponent {\n\n static propTypes = {\n columnId: PropTypes.string,\n notifications: ImmutablePropTypes.list.isRequired,\n showFilterBar: PropTypes.bool.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n intl: PropTypes.object.isRequired,\n isLoading: PropTypes.bool,\n isUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n numPending: PropTypes.number,\n localSettings: ImmutablePropTypes.map,\n notifCleaningActive: PropTypes.bool,\n onEnterCleaningMode: PropTypes.func,\n onMount: PropTypes.func,\n onUnmount: PropTypes.func,\n };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n state = {\n animatingNCD: false,\n };\n\n handleLoadGap = (maxId) => {\n this.props.dispatch(expandNotifications({ maxId }));\n };\n\n handleLoadOlder = debounce(() => {\n const last = this.props.notifications.last();\n this.props.dispatch(expandNotifications({ maxId: last && last.get('id') }));\n }, 300, { leading: true });\n\n handleLoadPending = () => {\n this.props.dispatch(loadPending());\n };\n\n handleScrollToTop = debounce(() => {\n this.props.dispatch(scrollTopNotifications(true));\n }, 100);\n\n handleScroll = debounce(() => {\n this.props.dispatch(scrollTopNotifications(false));\n }, 100);\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('NOTIFICATIONS', {}));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n handleMoveUp = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) - 1;\n this._selectChild(elementIndex, true);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n this._selectChild(elementIndex, false);\n }\n\n _selectChild (index, align_top) {\n const container = this.column.node;\n const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n componentDidMount () {\n const { onMount } = this.props;\n if (onMount) {\n onMount();\n }\n }\n\n componentWillUnmount () {\n const { onUnmount } = this.props;\n if (onUnmount) {\n onUnmount();\n }\n }\n\n handleTransitionEndNCD = () => {\n this.setState({ animatingNCD: false });\n }\n\n onEnterCleaningMode = () => {\n this.setState({ animatingNCD: true });\n this.props.onEnterCleaningMode(!this.props.notifCleaningActive);\n }\n\n render () {\n const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props;\n const { notifCleaning, notifCleaningActive } = this.props;\n const { animatingNCD } = this.state;\n const pinned = !!columnId;\n const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage=\"You don't have any notifications yet. Interact with others to start the conversation.\" />;\n\n let scrollableContent = null;\n\n const filterBarContainer = showFilterBar\n ? (<FilterBarContainer />)\n : null;\n\n if (isLoading && this.scrollableContent) {\n scrollableContent = this.scrollableContent;\n } else if (notifications.size > 0 || hasMore) {\n scrollableContent = notifications.map((item, index) => item === null ? (\n <LoadGap\n key={'gap:' + notifications.getIn([index + 1, 'id'])}\n disabled={isLoading}\n maxId={index > 0 ? notifications.getIn([index - 1, 'id']) : null}\n onClick={this.handleLoadGap}\n />\n ) : (\n <NotificationContainer\n key={item.get('id')}\n notification={item}\n accountId={item.get('account')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ));\n } else {\n scrollableContent = null;\n }\n\n this.scrollableContent = scrollableContent;\n\n const scrollContainer = (\n <ScrollableList\n scrollKey={`notifications-${columnId}`}\n trackScroll={!pinned}\n isLoading={isLoading}\n showLoading={isLoading && notifications.size === 0}\n hasMore={hasMore}\n numPending={numPending}\n emptyMessage={emptyMessage}\n onLoadMore={this.handleLoadOlder}\n onLoadPending={this.handleLoadPending}\n onScrollToTop={this.handleScrollToTop}\n onScroll={this.handleScroll}\n shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n >\n {scrollableContent}\n </ScrollableList>\n );\n\n const notifCleaningButtonClassName = classNames('column-header__button', {\n 'active': notifCleaningActive,\n });\n\n const notifCleaningDrawerClassName = classNames('ncd column-header__collapsible', {\n 'collapsed': !notifCleaningActive,\n 'animating': animatingNCD,\n });\n\n const msgEnterNotifCleaning = intl.formatMessage(messages.enterNotifCleaning);\n\n const notifCleaningButton = (\n <button\n aria-label={msgEnterNotifCleaning}\n title={msgEnterNotifCleaning}\n onClick={this.onEnterCleaningMode}\n className={notifCleaningButtonClassName}\n >\n <Icon id='eraser' />\n </button>\n );\n\n const notifCleaningDrawer = (\n <div className={notifCleaningDrawerClassName} onTransitionEnd={this.handleTransitionEndNCD}>\n <div className='column-header__collapsible-inner nopad-drawer'>\n {(notifCleaningActive || animatingNCD) ? (<NotificationPurgeButtonsContainer />) : null }\n </div>\n </div>\n );\n\n return (\n <Column\n bindToDocument={!multiColumn}\n ref={this.setColumnRef}\n name='notifications'\n extraClasses={this.props.notifCleaningActive ? 'notif-cleaning' : null}\n label={intl.formatMessage(messages.title)}\n >\n <ColumnHeader\n icon='bell'\n active={isUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n localSettings={this.props.localSettings}\n extraButton={notifCleaningButton}\n appendContent={notifCleaningDrawer}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n {filterBarContainer}\n {scrollContainer}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/onboarding_modal.js b/priv/static/packs/flavours/glitch/async/onboarding_modal.js
index fbe875eed..4e5acb0c0 100644
--- a/priv/static/packs/flavours/glitch/async/onboarding_modal.js
+++ b/priv/static/packs/flavours/glitch/async/onboarding_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{779:function(e,a,o){"use strict";o.r(a),o.d(a,"default",(function(){return I}));var t,n=o(2),i=o(7),d=o(1),s=o(0),c=o(3),r=o.n(c),l=o(13),b=o(6),u=o(212),g=o.n(u),m=o(12),p=o.n(m),v=o(210),f=o(540),j=o(742),O=o(748),h=o(712),_=o(16),w=function(){},y=Object(b.f)({home_title:{id:"column.home",defaultMessage:"Home"},notifications_title:{id:"column.notifications",defaultMessage:"Notifications"},local_title:{id:"column.community",defaultMessage:"Local timeline"},federated_title:{id:"column.public",defaultMessage:"Federated timeline"}}),M=function(e){var a=e.acct,o=e.domain;return Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-one"},void 0,Object(s.a)("div",{style:{flex:"0 0 auto"}},void 0,Object(s.a)("div",{className:"onboarding-modal__page-one__elephant-friend"})),Object(s.a)("div",{},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.welcome",defaultMessage:"Welcome to {domain}!",values:{domain:o}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.federation",defaultMessage:'{domain} is an "instance" of Mastodon. Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.',values:{domain:o}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.handle",defaultMessage:"You are on {domain}, so your full handle is {handle}",values:{domain:o,handle:Object(s.a)("strong",{},void 0,"@",a,"@",o)}}))))},x=function(e){e.intl;var a=e.myAccount;return Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-two"},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)("div",{className:"pseudo-drawer"},void 0,Object(s.a)(j.a,{account:a}),Object(s.a)(f.a,{privacy:"public",text:"Awoo! #introductions",spoilerText:"",suggestions:[]}))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_two.compose",defaultMessage:"Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below."})))},N=function(e){e.intl;var a=e.myAccount;return Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-three"},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(O.a,{value:"",onChange:w,onSubmit:w,onClear:w,onShow:w}),Object(s.a)("div",{className:"pseudo-drawer"},void 0,Object(s.a)(j.a,{account:a}))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_three.search",defaultMessage:"Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",values:{illustration:Object(s.a)(v.a,{to:"/timelines/tag/illustration",href:"/tags/illustration"},void 0,"#illustration"),introductions:Object(s.a)(v.a,{to:"/timelines/tag/introductions",href:"/tags/introductions"},void 0,"#introductions")}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_three.profile",defaultMessage:"Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences."})))},k=function(e){var a=e.domain,o=e.intl;return Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-four"},void 0,Object(s.a)("div",{className:"onboarding-modal__page-four__columns"},void 0,Object(s.a)("div",{className:"row"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(h.a,{icon:"home",type:o.formatMessage(y.home_title)})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_four.home",defaultMessage:"The home timeline shows posts from people you follow."}))),Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(h.a,{icon:"bell",type:o.formatMessage(y.notifications_title)})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_four.notifications",defaultMessage:"The notifications column shows when someone interacts with you."})))),Object(s.a)("div",{className:"row"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive",style:{marginBottom:0}},void 0,Object(s.a)(h.a,{icon:"users",type:o.formatMessage(y.local_title)}))),Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive",style:{marginBottom:0}},void 0,Object(s.a)(h.a,{icon:"globe",type:o.formatMessage(y.federated_title)})))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_five.public_timelines",defaultMessage:"The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",values:{domain:a}}))))},A=function(e){var a=e.admin,o=e.domain,t="";return a&&(t=Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.admin",defaultMessage:"Your instance's admin is {admin}.",values:{admin:Object(s.a)(v.a,{href:a.get("url"),to:"/accounts/"+a.get("id")},void 0,"@",a.get("acct"))}}),Object(s.a)("br",{}),Object(s.a)(b.b,{id:"onboarding.page_six.read_guidelines",defaultMessage:"Please read {domain}'s {guidelines}!",values:{domain:o,guidelines:Object(s.a)("a",{href:"/about/more",target:"_blank"},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.guidelines",defaultMessage:"community guidelines"}))}}))),Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-six"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.almost_done",defaultMessage:"Almost done..."})),t,Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.github",defaultMessage:"{domain} runs on Glitchsoc. Glitchsoc is a friendly {fork} of {Mastodon}. Glitchsoc is fully compatible with all Mastodon apps and instances. Glitchsoc is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",values:{domain:o,fork:Object(s.a)("a",{href:"https://en.wikipedia.org/wiki/Fork_(software_development)",target:"_blank",rel:"noopener"},void 0,"fork"),Mastodon:Object(s.a)("a",{href:"https://github.com/tootsuite/mastodon",target:"_blank",rel:"noopener"},void 0,"Mastodon"),github:Object(s.a)("a",{href:"https://github.com/glitch-soc/mastodon",target:"_blank",rel:"noopener"},void 0,"GitHub")}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.apps_available",defaultMessage:"There are {apps} available for iOS, Android and other platforms.",values:{domain:o,apps:Object(s.a)("a",{href:"https://joinmastodon.org/apps",target:"_blank",rel:"noopener"},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.various_app",defaultMessage:"mobile apps"}))}})),Object(s.a)("p",{},void 0,Object(s.a)("em",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.appetoot",defaultMessage:"Bon Appetoot!"}))))},I=Object(l.connect)((function(e){return{myAccount:e.getIn(["accounts",_.m]),admin:e.getIn(["accounts",e.getIn(["meta","admin"])]),domain:e.getIn(["meta","domain"])}}))(t=Object(b.g)(t=function(e){function a(){for(var a,o=arguments.length,t=new Array(o),i=0;i<o;i++)t[i]=arguments[i];return a=e.call.apply(e,[this].concat(t))||this,Object(d.a)(Object(n.a)(a),"state",{currentIndex:0}),Object(d.a)(Object(n.a)(a),"handleSkip",(function(e){e.preventDefault(),a.props.onClose()})),Object(d.a)(Object(n.a)(a),"handleDot",(function(e){var o=Number(e.currentTarget.getAttribute("data-index"));e.preventDefault(),a.setState({currentIndex:o})})),Object(d.a)(Object(n.a)(a),"handlePrev",(function(){a.setState((function(e){var a=e.currentIndex;return{currentIndex:Math.max(0,a-1)}}))})),Object(d.a)(Object(n.a)(a),"handleNext",(function(){var e=Object(n.a)(a).pages;a.setState((function(a){var o=a.currentIndex;return{currentIndex:Math.min(o+1,e.length-1)}}))})),Object(d.a)(Object(n.a)(a),"handleSwipe",(function(e){a.setState({currentIndex:e})})),Object(d.a)(Object(n.a)(a),"handleKeyUp",(function(e){switch(e.key){case"ArrowLeft":a.handlePrev();break;case"ArrowRight":a.handleNext()}})),Object(d.a)(Object(n.a)(a),"handleClose",(function(){a.props.onClose()})),a}Object(i.a)(a,e);var o=a.prototype;return o.componentWillMount=function(){var e=this.props,a=e.myAccount,o=e.admin,t=e.domain,n=e.intl;this.pages=[Object(s.a)(M,{acct:a.get("acct"),domain:t}),Object(s.a)(x,{myAccount:a,intl:n}),Object(s.a)(N,{myAccount:a,intl:n}),Object(s.a)(k,{domain:t,intl:n}),Object(s.a)(A,{admin:o,domain:t})]},o.componentDidMount=function(){window.addEventListener("keyup",this.handleKeyUp)},o.componentWillUnmount=function(){window.addEventListener("keyup",this.handleKeyUp)},o.render=function(){var e=this,a=this.pages,o=this.state.currentIndex,t=o<a.length-1?Object(s.a)("button",{onClick:this.handleNext,className:"onboarding-modal__nav onboarding-modal__next"},void 0,Object(s.a)(b.b,{id:"onboarding.next",defaultMessage:"Next"})):Object(s.a)("button",{onClick:this.handleClose,className:"onboarding-modal__nav onboarding-modal__done"},void 0,Object(s.a)(b.b,{id:"onboarding.done",defaultMessage:"Done"}));return Object(s.a)("div",{className:"modal-root__modal onboarding-modal"},void 0,Object(s.a)(g.a,{index:o,onChangeIndex:this.handleSwipe,className:"onboarding-modal__pager"},void 0,a.map((function(e,a){var t=p()("onboarding-modal__page__wrapper",{"onboarding-modal__page__wrapper--active":a===o});return Object(s.a)("div",{className:t},a,e)}))),Object(s.a)("div",{className:"onboarding-modal__paginator"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("button",{onClick:this.handleSkip,className:"onboarding-modal__nav onboarding-modal__skip"},void 0,Object(s.a)(b.b,{id:"onboarding.skip",defaultMessage:"Skip"}))),Object(s.a)("div",{className:"onboarding-modal__dots"},void 0,a.map((function(a,t){var n=p()("onboarding-modal__dot",{active:t===o});return Object(s.a)("div",{role:"button",tabIndex:"0","data-index":t,onClick:e.handleDot,className:n},"dot-"+t)}))),Object(s.a)("div",{},void 0,t)))},a}(r.a.PureComponent))||t)||t}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{805:function(e,a,o){"use strict";o.r(a),o.d(a,"default",(function(){return I}));var t,n=o(2),i=(o(9),o(6),o(8)),d=o(1),s=o(0),c=o(3),r=o.n(c),l=o(15),b=o(7),u=o(216),g=o.n(u),m=o(14),p=o.n(m),v=o(214),f=o(548),j=o(768),O=o(774),h=o(725),_=o(18);var w=function(){},y=Object(b.f)({home_title:{id:"column.home",defaultMessage:"Home"},notifications_title:{id:"column.notifications",defaultMessage:"Notifications"},local_title:{id:"column.community",defaultMessage:"Local timeline"},federated_title:{id:"column.public",defaultMessage:"Federated timeline"}}),M=function(e){var a=e.acct,o=e.domain;return(Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-one"},void 0,Object(s.a)("div",{style:{flex:"0 0 auto"}},void 0,Object(s.a)("div",{className:"onboarding-modal__page-one__elephant-friend"})),Object(s.a)("div",{},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.welcome",defaultMessage:"Welcome to {domain}!",values:{domain:o}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.federation",defaultMessage:'{domain} is an "instance" of Mastodon. Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.',values:{domain:o}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_one.handle",defaultMessage:"You are on {domain}, so your full handle is {handle}",values:{domain:o,handle:Object(s.a)("strong",{},void 0,"@",a,"@",o)}})))))},x=function(e){e.intl;var a=e.myAccount;return(Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-two"},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)("div",{className:"pseudo-drawer"},void 0,Object(s.a)(j.a,{account:a}),Object(s.a)(f.a,{privacy:"public",text:"Awoo! #introductions",spoilerText:"",suggestions:[]}))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_two.compose",defaultMessage:"Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below."}))))},N=function(e){e.intl;var a=e.myAccount;return(Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-three"},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(O.a,{value:"",onChange:w,onSubmit:w,onClear:w,onShow:w}),Object(s.a)("div",{className:"pseudo-drawer"},void 0,Object(s.a)(j.a,{account:a}))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_three.search",defaultMessage:"Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",values:{illustration:Object(s.a)(v.a,{to:"/timelines/tag/illustration",href:"/tags/illustration"},void 0,"#illustration"),introductions:Object(s.a)(v.a,{to:"/timelines/tag/introductions",href:"/tags/introductions"},void 0,"#introductions")}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_three.profile",defaultMessage:"Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences."}))))},k=function(e){var a=e.domain,o=e.intl;return(Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-four"},void 0,Object(s.a)("div",{className:"onboarding-modal__page-four__columns"},void 0,Object(s.a)("div",{className:"row"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(h.a,{icon:"home",type:o.formatMessage(y.home_title)})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_four.home",defaultMessage:"The home timeline shows posts from people you follow."}))),Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive"},void 0,Object(s.a)(h.a,{icon:"bell",type:o.formatMessage(y.notifications_title)})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_four.notifications",defaultMessage:"The notifications column shows when someone interacts with you."})))),Object(s.a)("div",{className:"row"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive",style:{marginBottom:0}},void 0,Object(s.a)(h.a,{icon:"users",type:o.formatMessage(y.local_title)}))),Object(s.a)("div",{},void 0,Object(s.a)("div",{className:"figure non-interactive",style:{marginBottom:0}},void 0,Object(s.a)(h.a,{icon:"globe",type:o.formatMessage(y.federated_title)})))),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_five.public_timelines",defaultMessage:"The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",values:{domain:a}})))))},A=function(e){var a=e.admin,o=e.domain,t="";return a&&(t=Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.admin",defaultMessage:"Your instance's admin is {admin}.",values:{admin:Object(s.a)(v.a,{href:a.get("url"),to:"/accounts/"+a.get("id")},void 0,"@",a.get("acct"))}}),Object(s.a)("br",{}),Object(s.a)(b.b,{id:"onboarding.page_six.read_guidelines",defaultMessage:"Please read {domain}'s {guidelines}!",values:{domain:o,guidelines:Object(s.a)("a",{href:"/about/more",target:"_blank"},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.guidelines",defaultMessage:"community guidelines"}))}}))),Object(s.a)("div",{className:"onboarding-modal__page onboarding-modal__page-six"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.almost_done",defaultMessage:"Almost done..."})),t,Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.github",defaultMessage:"{domain} runs on Glitchsoc. Glitchsoc is a friendly {fork} of {Mastodon}. Glitchsoc is fully compatible with all Mastodon apps and instances. Glitchsoc is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",values:{domain:o,fork:Object(s.a)("a",{href:"https://en.wikipedia.org/wiki/Fork_(software_development)",target:"_blank",rel:"noopener"},void 0,"fork"),Mastodon:Object(s.a)("a",{href:"https://github.com/tootsuite/mastodon",target:"_blank",rel:"noopener"},void 0,"Mastodon"),github:Object(s.a)("a",{href:"https://github.com/glitch-soc/mastodon",target:"_blank",rel:"noopener"},void 0,"GitHub")}})),Object(s.a)("p",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.apps_available",defaultMessage:"There are {apps} available for iOS, Android and other platforms.",values:{domain:o,apps:Object(s.a)("a",{href:"https://joinmastodon.org/apps",target:"_blank",rel:"noopener"},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.various_app",defaultMessage:"mobile apps"}))}})),Object(s.a)("p",{},void 0,Object(s.a)("em",{},void 0,Object(s.a)(b.b,{id:"onboarding.page_six.appetoot",defaultMessage:"Bon Appetoot!"}))))},I=Object(l.connect)((function(e){return{myAccount:e.getIn(["accounts",_.m]),admin:e.getIn(["accounts",e.getIn(["meta","admin"])]),domain:e.getIn(["meta","domain"])}}))(t=Object(b.g)(t=function(e){Object(i.a)(o,e);var a;a=o;function o(){for(var a,o=arguments.length,t=new Array(o),i=0;i<o;i++)t[i]=arguments[i];return a=e.call.apply(e,[this].concat(t))||this,Object(d.a)(Object(n.a)(a),"state",{currentIndex:0}),Object(d.a)(Object(n.a)(a),"handleSkip",(function(e){e.preventDefault(),a.props.onClose()})),Object(d.a)(Object(n.a)(a),"handleDot",(function(e){var o=Number(e.currentTarget.getAttribute("data-index"));e.preventDefault(),a.setState({currentIndex:o})})),Object(d.a)(Object(n.a)(a),"handlePrev",(function(){a.setState((function(e){var a=e.currentIndex;return{currentIndex:Math.max(0,a-1)}}))})),Object(d.a)(Object(n.a)(a),"handleNext",(function(){var e=Object(n.a)(a).pages;a.setState((function(a){var o=a.currentIndex;return{currentIndex:Math.min(o+1,e.length-1)}}))})),Object(d.a)(Object(n.a)(a),"handleSwipe",(function(e){a.setState({currentIndex:e})})),Object(d.a)(Object(n.a)(a),"handleKeyUp",(function(e){switch(e.key){case"ArrowLeft":a.handlePrev();break;case"ArrowRight":a.handleNext()}})),Object(d.a)(Object(n.a)(a),"handleClose",(function(){a.props.onClose()})),a}var t=o.prototype;return t.componentWillMount=function(){var e=this.props,a=e.myAccount,o=e.admin,t=e.domain,n=e.intl;this.pages=[Object(s.a)(M,{acct:a.get("acct"),domain:t}),Object(s.a)(x,{myAccount:a,intl:n}),Object(s.a)(N,{myAccount:a,intl:n}),Object(s.a)(k,{domain:t,intl:n}),Object(s.a)(A,{admin:o,domain:t})]},t.componentDidMount=function(){window.addEventListener("keyup",this.handleKeyUp)},t.componentWillUnmount=function(){window.addEventListener("keyup",this.handleKeyUp)},t.render=function(){var e=this,a=this.pages,o=this.state.currentIndex,t=o<a.length-1?Object(s.a)("button",{onClick:this.handleNext,className:"onboarding-modal__nav onboarding-modal__next"},void 0,Object(s.a)(b.b,{id:"onboarding.next",defaultMessage:"Next"})):Object(s.a)("button",{onClick:this.handleClose,className:"onboarding-modal__nav onboarding-modal__done"},void 0,Object(s.a)(b.b,{id:"onboarding.done",defaultMessage:"Done"}));return Object(s.a)("div",{className:"modal-root__modal onboarding-modal"},void 0,Object(s.a)(g.a,{index:o,onChangeIndex:this.handleSwipe,className:"onboarding-modal__pager"},void 0,a.map((function(e,a){var t=p()("onboarding-modal__page__wrapper",{"onboarding-modal__page__wrapper--active":a===o});return(Object(s.a)("div",{className:t},a,e))}))),Object(s.a)("div",{className:"onboarding-modal__paginator"},void 0,Object(s.a)("div",{},void 0,Object(s.a)("button",{onClick:this.handleSkip,className:"onboarding-modal__nav onboarding-modal__skip"},void 0,Object(s.a)(b.b,{id:"onboarding.skip",defaultMessage:"Skip"}))),Object(s.a)("div",{className:"onboarding-modal__dots"},void 0,a.map((function(a,t){var n=p()("onboarding-modal__dot",{active:t===o});return(Object(s.a)("div",{role:"button",tabIndex:"0","data-index":t,onClick:e.handleDot,className:n},"dot-"+t))}))),Object(s.a)("div",{},void 0,t)))},o}(r.a.PureComponent))||t)||t}}]);
//# sourceMappingURL=onboarding_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/onboarding_modal.js.map b/priv/static/packs/flavours/glitch/async/onboarding_modal.js.map
index 9e11b9f3a..4b7124f38 100644
--- a/priv/static/packs/flavours/glitch/async/onboarding_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/onboarding_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js"],"names":["noop","messages","defineMessages","home_title","notifications_title","local_title","federated_title","PageOne","acct","domain","className","style","flex","id","defaultMessage","values","handle","PageTwo","intl","myAccount","account","privacy","text","spoilerText","suggestions","PageThree","value","onChange","onSubmit","onClear","onShow","illustration","to","href","introductions","PageFour","icon","type","formatMessage","marginBottom","PageSix","admin","adminSection","get","guidelines","target","fork","rel","Mastodon","github","apps","OnboardingModal","connect","state","getIn","me","injectIntl","currentIndex","e","preventDefault","props","onClose","i","Number","currentTarget","getAttribute","setState","Math","max","pages","min","length","index","key","handlePrev","handleNext","componentWillMount","this","componentDidMount","window","addEventListener","handleKeyUp","componentWillUnmount","render","nextOrDoneBtn","onClick","handleClose","onChangeIndex","handleSwipe","map","page","classNames","handleSkip","_","active","role","tabIndex","data-index","handleDot","React","PureComponent"],"mappings":"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","file":"flavours/glitch/async/onboarding_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ReactSwipeableViews from 'react-swipeable-views';\nimport classNames from 'classnames';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport ComposeForm from 'flavours/glitch/features/compose/components/compose_form';\nimport DrawerAccount from 'flavours/glitch/features/compose/components/navigation_bar';\nimport Search from 'flavours/glitch/features/compose/components/search';\nimport ColumnHeader from './column_header';\nimport { me } from 'flavours/glitch/util/initial_state';\n\nconst noop = () => { };\n\nconst messages = defineMessages({\n home_title: { id: 'column.home', defaultMessage: 'Home' },\n notifications_title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n local_title: { id: 'column.community', defaultMessage: 'Local timeline' },\n federated_title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst PageOne = ({ acct, domain }) => (\n <div className='onboarding-modal__page onboarding-modal__page-one'>\n <div style={{ flex: '0 0 auto' }}>\n <div className='onboarding-modal__page-one__elephant-friend' />\n </div>\n\n <div>\n <h1><FormattedMessage id='onboarding.page_one.welcome' defaultMessage='Welcome to {domain}!' values={{ domain }} /></h1>\n <p><FormattedMessage id='onboarding.page_one.federation' defaultMessage='{domain} is an \"instance\" of Mastodon. Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.' values={{ domain }} /></p>\n <p><FormattedMessage id='onboarding.page_one.handle' defaultMessage='You are on {domain}, so your full handle is {handle}' values={{ domain, handle: <strong>@{acct}@{domain}</strong> }} /></p>\n </div>\n </div>\n);\n\nPageOne.propTypes = {\n acct: PropTypes.string.isRequired,\n domain: PropTypes.string.isRequired,\n};\n\nconst PageTwo = ({ intl, myAccount }) => (\n <div className='onboarding-modal__page onboarding-modal__page-two'>\n <div className='figure non-interactive'>\n <div className='pseudo-drawer'>\n <DrawerAccount account={myAccount} />\n <ComposeForm\n privacy='public'\n text='Awoo! #introductions'\n spoilerText=''\n suggestions={ [] }\n />\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_two.compose' defaultMessage='Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.' /></p>\n </div>\n);\n\nPageTwo.propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n};\n\nconst PageThree = ({ intl, myAccount }) => (\n <div className='onboarding-modal__page onboarding-modal__page-three'>\n <div className='figure non-interactive'>\n <Search\n value=''\n onChange={noop}\n onSubmit={noop}\n onClear={noop}\n onShow={noop}\n />\n\n <div className='pseudo-drawer'>\n <DrawerAccount account={myAccount} />\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_three.search' defaultMessage='Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.' values={{ illustration: <Permalink to='/timelines/tag/illustration' href='/tags/illustration'>#illustration</Permalink>, introductions: <Permalink to='/timelines/tag/introductions' href='/tags/introductions'>#introductions</Permalink> }} /></p>\n <p><FormattedMessage id='onboarding.page_three.profile' defaultMessage='Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.' /></p>\n </div>\n);\n\nPageThree.propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n};\n\nconst PageFour = ({ domain, intl }) => (\n <div className='onboarding-modal__page onboarding-modal__page-four'>\n <div className='onboarding-modal__page-four__columns'>\n <div className='row'>\n <div>\n <div className='figure non-interactive'><ColumnHeader icon='home' type={intl.formatMessage(messages.home_title)} /></div>\n <p><FormattedMessage id='onboarding.page_four.home' defaultMessage='The home timeline shows posts from people you follow.' /></p>\n </div>\n\n <div>\n <div className='figure non-interactive'><ColumnHeader icon='bell' type={intl.formatMessage(messages.notifications_title)} /></div>\n <p><FormattedMessage id='onboarding.page_four.notifications' defaultMessage='The notifications column shows when someone interacts with you.' /></p>\n </div>\n </div>\n\n <div className='row'>\n <div>\n <div className='figure non-interactive' style={{ marginBottom: 0 }}><ColumnHeader icon='users' type={intl.formatMessage(messages.local_title)} /></div>\n </div>\n\n <div>\n <div className='figure non-interactive' style={{ marginBottom: 0 }}><ColumnHeader icon='globe' type={intl.formatMessage(messages.federated_title)} /></div>\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_five.public_timelines' defaultMessage='The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.' values={{ domain }} /></p>\n </div>\n </div>\n);\n\nPageFour.propTypes = {\n domain: PropTypes.string.isRequired,\n intl: PropTypes.object.isRequired,\n};\n\nconst PageSix = ({ admin, domain }) => {\n let adminSection = '';\n\n if (admin) {\n adminSection = (\n <p>\n <FormattedMessage id='onboarding.page_six.admin' defaultMessage=\"Your instance's admin is {admin}.\" values={{ admin: <Permalink href={admin.get('url')} to={`/accounts/${admin.get('id')}`}>@{admin.get('acct')}</Permalink> }} />\n <br />\n <FormattedMessage id='onboarding.page_six.read_guidelines' defaultMessage=\"Please read {domain}'s {guidelines}!\" values={{ domain, guidelines: <a href='/about/more' target='_blank'><FormattedMessage id='onboarding.page_six.guidelines' defaultMessage='community guidelines' /></a> }} />\n </p>\n );\n }\n\n return (\n <div className='onboarding-modal__page onboarding-modal__page-six'>\n <h1><FormattedMessage id='onboarding.page_six.almost_done' defaultMessage='Almost done...' /></h1>\n {adminSection}\n <p><FormattedMessage id='onboarding.page_six.github' defaultMessage='{domain} runs on Glitchsoc. Glitchsoc is a friendly {fork} of {Mastodon}. Glitchsoc is fully compatible with all Mastodon apps and instances. Glitchsoc is free open-source software. You can report bugs, request features, or contribute to the code on {github}.' values={{ domain, fork: <a href='https://en.wikipedia.org/wiki/Fork_(software_development)' target='_blank' rel='noopener'>fork</a>, Mastodon: <a href='https://github.com/tootsuite/mastodon' target='_blank' rel='noopener'>Mastodon</a>, github: <a href='https://github.com/glitch-soc/mastodon' target='_blank' rel='noopener'>GitHub</a> }} /></p>\n <p><FormattedMessage id='onboarding.page_six.apps_available' defaultMessage='There are {apps} available for iOS, Android and other platforms.' values={{ domain, apps: <a href='https://joinmastodon.org/apps' target='_blank' rel='noopener'><FormattedMessage id='onboarding.page_six.various_app' defaultMessage='mobile apps' /></a> }} /></p>\n <p><em><FormattedMessage id='onboarding.page_six.appetoot' defaultMessage='Bon Appetoot!' /></em></p>\n </div>\n );\n};\n\nPageSix.propTypes = {\n admin: ImmutablePropTypes.map,\n domain: PropTypes.string.isRequired,\n};\n\nconst mapStateToProps = state => ({\n myAccount: state.getIn(['accounts', me]),\n admin: state.getIn(['accounts', state.getIn(['meta', 'admin'])]),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass OnboardingModal extends React.PureComponent {\n\n static propTypes = {\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n domain: PropTypes.string.isRequired,\n admin: ImmutablePropTypes.map,\n };\n\n state = {\n currentIndex: 0,\n };\n\n componentWillMount() {\n const { myAccount, admin, domain, intl } = this.props;\n this.pages = [\n <PageOne acct={myAccount.get('acct')} domain={domain} />,\n <PageTwo myAccount={myAccount} intl={intl} />,\n <PageThree myAccount={myAccount} intl={intl} />,\n <PageFour domain={domain} intl={intl} />,\n <PageSix admin={admin} domain={domain} />,\n ];\n };\n\n componentDidMount() {\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n componentWillUnmount() {\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n handleSkip = (e) => {\n e.preventDefault();\n this.props.onClose();\n }\n\n handleDot = (e) => {\n const i = Number(e.currentTarget.getAttribute('data-index'));\n e.preventDefault();\n this.setState({ currentIndex: i });\n }\n\n handlePrev = () => {\n this.setState(({ currentIndex }) => ({\n currentIndex: Math.max(0, currentIndex - 1),\n }));\n }\n\n handleNext = () => {\n const { pages } = this;\n this.setState(({ currentIndex }) => ({\n currentIndex: Math.min(currentIndex + 1, pages.length - 1),\n }));\n }\n\n handleSwipe = (index) => {\n this.setState({ currentIndex: index });\n }\n\n handleKeyUp = ({ key }) => {\n switch (key) {\n case 'ArrowLeft':\n this.handlePrev();\n break;\n case 'ArrowRight':\n this.handleNext();\n break;\n }\n }\n\n handleClose = () => {\n this.props.onClose();\n }\n\n render () {\n const { pages } = this;\n const { currentIndex } = this.state;\n const hasMore = currentIndex < pages.length - 1;\n\n const nextOrDoneBtn = hasMore ? (\n <button\n onClick={this.handleNext}\n className='onboarding-modal__nav onboarding-modal__next'\n >\n <FormattedMessage id='onboarding.next' defaultMessage='Next' />\n </button>\n ) : (\n <button\n onClick={this.handleClose}\n className='onboarding-modal__nav onboarding-modal__done'\n >\n <FormattedMessage id='onboarding.done' defaultMessage='Done' />\n </button>\n );\n\n return (\n <div className='modal-root__modal onboarding-modal'>\n <ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} className='onboarding-modal__pager'>\n {pages.map((page, i) => {\n const className = classNames('onboarding-modal__page__wrapper', {\n 'onboarding-modal__page__wrapper--active': i === currentIndex,\n });\n return (\n <div key={i} className={className}>{page}</div>\n );\n })}\n </ReactSwipeableViews>\n\n <div className='onboarding-modal__paginator'>\n <div>\n <button\n onClick={this.handleSkip}\n className='onboarding-modal__nav onboarding-modal__skip'\n >\n <FormattedMessage id='onboarding.skip' defaultMessage='Skip' />\n </button>\n </div>\n\n <div className='onboarding-modal__dots'>\n {pages.map((_, i) => {\n const className = classNames('onboarding-modal__dot', {\n active: i === currentIndex,\n });\n return (\n <div\n key={`dot-${i}`}\n role='button'\n tabIndex='0'\n data-index={i}\n onClick={this.handleDot}\n className={className}\n />\n );\n })}\n </div>\n\n <div>\n {nextOrDoneBtn}\n </div>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js"],"names":["noop","messages","defineMessages","home_title","notifications_title","local_title","federated_title","PageOne","acct","domain","className","style","flex","id","defaultMessage","values","handle","PageTwo","intl","myAccount","account","privacy","text","spoilerText","suggestions","PageThree","value","onChange","onSubmit","onClear","onShow","illustration","to","href","introductions","PageFour","icon","type","formatMessage","marginBottom","PageSix","admin","adminSection","get","guidelines","target","fork","rel","Mastodon","github","apps","OnboardingModal","connect","state","getIn","me","injectIntl","currentIndex","e","preventDefault","props","onClose","i","Number","currentTarget","getAttribute","setState","Math","max","pages","min","length","index","key","handlePrev","handleNext","componentWillMount","this","componentDidMount","window","addEventListener","handleKeyUp","componentWillUnmount","render","nextOrDoneBtn","onClick","handleClose","onChangeIndex","handleSwipe","map","page","classNames","handleSkip","_","active","role","tabIndex","data-index","handleDot","React","PureComponent"],"mappings":"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","file":"flavours/glitch/async/onboarding_modal.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ReactSwipeableViews from 'react-swipeable-views';\nimport classNames from 'classnames';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport ComposeForm from 'flavours/glitch/features/compose/components/compose_form';\nimport DrawerAccount from 'flavours/glitch/features/compose/components/navigation_bar';\nimport Search from 'flavours/glitch/features/compose/components/search';\nimport ColumnHeader from './column_header';\nimport { me } from 'flavours/glitch/util/initial_state';\n\nconst noop = () => { };\n\nconst messages = defineMessages({\n home_title: { id: 'column.home', defaultMessage: 'Home' },\n notifications_title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n local_title: { id: 'column.community', defaultMessage: 'Local timeline' },\n federated_title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst PageOne = ({ acct, domain }) => (\n <div className='onboarding-modal__page onboarding-modal__page-one'>\n <div style={{ flex: '0 0 auto' }}>\n <div className='onboarding-modal__page-one__elephant-friend' />\n </div>\n\n <div>\n <h1><FormattedMessage id='onboarding.page_one.welcome' defaultMessage='Welcome to {domain}!' values={{ domain }} /></h1>\n <p><FormattedMessage id='onboarding.page_one.federation' defaultMessage='{domain} is an \"instance\" of Mastodon. Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.' values={{ domain }} /></p>\n <p><FormattedMessage id='onboarding.page_one.handle' defaultMessage='You are on {domain}, so your full handle is {handle}' values={{ domain, handle: <strong>@{acct}@{domain}</strong> }} /></p>\n </div>\n </div>\n);\n\nPageOne.propTypes = {\n acct: PropTypes.string.isRequired,\n domain: PropTypes.string.isRequired,\n};\n\nconst PageTwo = ({ intl, myAccount }) => (\n <div className='onboarding-modal__page onboarding-modal__page-two'>\n <div className='figure non-interactive'>\n <div className='pseudo-drawer'>\n <DrawerAccount account={myAccount} />\n <ComposeForm\n privacy='public'\n text='Awoo! #introductions'\n spoilerText=''\n suggestions={ [] }\n />\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_two.compose' defaultMessage='Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.' /></p>\n </div>\n);\n\nPageTwo.propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n};\n\nconst PageThree = ({ intl, myAccount }) => (\n <div className='onboarding-modal__page onboarding-modal__page-three'>\n <div className='figure non-interactive'>\n <Search\n value=''\n onChange={noop}\n onSubmit={noop}\n onClear={noop}\n onShow={noop}\n />\n\n <div className='pseudo-drawer'>\n <DrawerAccount account={myAccount} />\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_three.search' defaultMessage='Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.' values={{ illustration: <Permalink to='/timelines/tag/illustration' href='/tags/illustration'>#illustration</Permalink>, introductions: <Permalink to='/timelines/tag/introductions' href='/tags/introductions'>#introductions</Permalink> }} /></p>\n <p><FormattedMessage id='onboarding.page_three.profile' defaultMessage='Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.' /></p>\n </div>\n);\n\nPageThree.propTypes = {\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n};\n\nconst PageFour = ({ domain, intl }) => (\n <div className='onboarding-modal__page onboarding-modal__page-four'>\n <div className='onboarding-modal__page-four__columns'>\n <div className='row'>\n <div>\n <div className='figure non-interactive'><ColumnHeader icon='home' type={intl.formatMessage(messages.home_title)} /></div>\n <p><FormattedMessage id='onboarding.page_four.home' defaultMessage='The home timeline shows posts from people you follow.' /></p>\n </div>\n\n <div>\n <div className='figure non-interactive'><ColumnHeader icon='bell' type={intl.formatMessage(messages.notifications_title)} /></div>\n <p><FormattedMessage id='onboarding.page_four.notifications' defaultMessage='The notifications column shows when someone interacts with you.' /></p>\n </div>\n </div>\n\n <div className='row'>\n <div>\n <div className='figure non-interactive' style={{ marginBottom: 0 }}><ColumnHeader icon='users' type={intl.formatMessage(messages.local_title)} /></div>\n </div>\n\n <div>\n <div className='figure non-interactive' style={{ marginBottom: 0 }}><ColumnHeader icon='globe' type={intl.formatMessage(messages.federated_title)} /></div>\n </div>\n </div>\n\n <p><FormattedMessage id='onboarding.page_five.public_timelines' defaultMessage='The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.' values={{ domain }} /></p>\n </div>\n </div>\n);\n\nPageFour.propTypes = {\n domain: PropTypes.string.isRequired,\n intl: PropTypes.object.isRequired,\n};\n\nconst PageSix = ({ admin, domain }) => {\n let adminSection = '';\n\n if (admin) {\n adminSection = (\n <p>\n <FormattedMessage id='onboarding.page_six.admin' defaultMessage=\"Your instance's admin is {admin}.\" values={{ admin: <Permalink href={admin.get('url')} to={`/accounts/${admin.get('id')}`}>@{admin.get('acct')}</Permalink> }} />\n <br />\n <FormattedMessage id='onboarding.page_six.read_guidelines' defaultMessage=\"Please read {domain}'s {guidelines}!\" values={{ domain, guidelines: <a href='/about/more' target='_blank'><FormattedMessage id='onboarding.page_six.guidelines' defaultMessage='community guidelines' /></a> }} />\n </p>\n );\n }\n\n return (\n <div className='onboarding-modal__page onboarding-modal__page-six'>\n <h1><FormattedMessage id='onboarding.page_six.almost_done' defaultMessage='Almost done...' /></h1>\n {adminSection}\n <p><FormattedMessage id='onboarding.page_six.github' defaultMessage='{domain} runs on Glitchsoc. Glitchsoc is a friendly {fork} of {Mastodon}. Glitchsoc is fully compatible with all Mastodon apps and instances. Glitchsoc is free open-source software. You can report bugs, request features, or contribute to the code on {github}.' values={{ domain, fork: <a href='https://en.wikipedia.org/wiki/Fork_(software_development)' target='_blank' rel='noopener'>fork</a>, Mastodon: <a href='https://github.com/tootsuite/mastodon' target='_blank' rel='noopener'>Mastodon</a>, github: <a href='https://github.com/glitch-soc/mastodon' target='_blank' rel='noopener'>GitHub</a> }} /></p>\n <p><FormattedMessage id='onboarding.page_six.apps_available' defaultMessage='There are {apps} available for iOS, Android and other platforms.' values={{ domain, apps: <a href='https://joinmastodon.org/apps' target='_blank' rel='noopener'><FormattedMessage id='onboarding.page_six.various_app' defaultMessage='mobile apps' /></a> }} /></p>\n <p><em><FormattedMessage id='onboarding.page_six.appetoot' defaultMessage='Bon Appetoot!' /></em></p>\n </div>\n );\n};\n\nPageSix.propTypes = {\n admin: ImmutablePropTypes.map,\n domain: PropTypes.string.isRequired,\n};\n\nconst mapStateToProps = state => ({\n myAccount: state.getIn(['accounts', me]),\n admin: state.getIn(['accounts', state.getIn(['meta', 'admin'])]),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass OnboardingModal extends React.PureComponent {\n\n static propTypes = {\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n myAccount: ImmutablePropTypes.map.isRequired,\n domain: PropTypes.string.isRequired,\n admin: ImmutablePropTypes.map,\n };\n\n state = {\n currentIndex: 0,\n };\n\n componentWillMount() {\n const { myAccount, admin, domain, intl } = this.props;\n this.pages = [\n <PageOne acct={myAccount.get('acct')} domain={domain} />,\n <PageTwo myAccount={myAccount} intl={intl} />,\n <PageThree myAccount={myAccount} intl={intl} />,\n <PageFour domain={domain} intl={intl} />,\n <PageSix admin={admin} domain={domain} />,\n ];\n };\n\n componentDidMount() {\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n componentWillUnmount() {\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n handleSkip = (e) => {\n e.preventDefault();\n this.props.onClose();\n }\n\n handleDot = (e) => {\n const i = Number(e.currentTarget.getAttribute('data-index'));\n e.preventDefault();\n this.setState({ currentIndex: i });\n }\n\n handlePrev = () => {\n this.setState(({ currentIndex }) => ({\n currentIndex: Math.max(0, currentIndex - 1),\n }));\n }\n\n handleNext = () => {\n const { pages } = this;\n this.setState(({ currentIndex }) => ({\n currentIndex: Math.min(currentIndex + 1, pages.length - 1),\n }));\n }\n\n handleSwipe = (index) => {\n this.setState({ currentIndex: index });\n }\n\n handleKeyUp = ({ key }) => {\n switch (key) {\n case 'ArrowLeft':\n this.handlePrev();\n break;\n case 'ArrowRight':\n this.handleNext();\n break;\n }\n }\n\n handleClose = () => {\n this.props.onClose();\n }\n\n render () {\n const { pages } = this;\n const { currentIndex } = this.state;\n const hasMore = currentIndex < pages.length - 1;\n\n const nextOrDoneBtn = hasMore ? (\n <button\n onClick={this.handleNext}\n className='onboarding-modal__nav onboarding-modal__next'\n >\n <FormattedMessage id='onboarding.next' defaultMessage='Next' />\n </button>\n ) : (\n <button\n onClick={this.handleClose}\n className='onboarding-modal__nav onboarding-modal__done'\n >\n <FormattedMessage id='onboarding.done' defaultMessage='Done' />\n </button>\n );\n\n return (\n <div className='modal-root__modal onboarding-modal'>\n <ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} className='onboarding-modal__pager'>\n {pages.map((page, i) => {\n const className = classNames('onboarding-modal__page__wrapper', {\n 'onboarding-modal__page__wrapper--active': i === currentIndex,\n });\n return (\n <div key={i} className={className}>{page}</div>\n );\n })}\n </ReactSwipeableViews>\n\n <div className='onboarding-modal__paginator'>\n <div>\n <button\n onClick={this.handleSkip}\n className='onboarding-modal__nav onboarding-modal__skip'\n >\n <FormattedMessage id='onboarding.skip' defaultMessage='Skip' />\n </button>\n </div>\n\n <div className='onboarding-modal__dots'>\n {pages.map((_, i) => {\n const className = classNames('onboarding-modal__dot', {\n active: i === currentIndex,\n });\n return (\n <div\n key={`dot-${i}`}\n role='button'\n tabIndex='0'\n data-index={i}\n onClick={this.handleDot}\n className={className}\n />\n );\n })}\n </div>\n\n <div>\n {nextOrDoneBtn}\n </div>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js b/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js
index a8dbe836b..799270f5b 100644
--- a/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js
+++ b/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{818:function(n,t,e){"use strict";e.r(t);var c,i,o,r=e(0),a=e(7),u=e(1),s=(e(3),e(5)),d=e.n(s),l=e(14),b=e.n(l),f=e(13),p=e(18),j=e(6),O=e(22),v=e(103),m=e(1119),I=Object(j.g)(Object(f.connect)((function(){var n=Object(v.d)();return function(t,e){var c=e.accountId,i=e.added;return{account:n(t,c),added:void 0===i?t.getIn(["pinnedAccountsEditor","accounts","items"]).includes(c):i}}}),(function(n,t){var e=t.accountId;return{onRemove:function(){return n(Object(O.U)(e))},onAdd:function(){return n(Object(O.O)(e))}}}))(m.a)),g=e(1120),_=Object(j.g)(Object(f.connect)((function(n){return{value:n.getIn(["pinnedAccountsEditor","suggestions","value"])}}),(function(n){return{onSubmit:function(t){return n(Object(O.K)(t))},onClear:function(){return n(Object(O.B)())},onChange:function(t){return n(Object(O.A)(t))}}}))(g.a)),h=e(92),R=e(34),w=e.n(R);e.d(t,"default",(function(){return A}));var A=Object(f.connect)((function(n){return{accountIds:n.getIn(["pinnedAccountsEditor","accounts","items"]),searchAccountIds:n.getIn(["pinnedAccountsEditor","suggestions","items"])}}),(function(n){return{onInitialize:function(){return n(Object(O.J)())},onClear:function(){return n(Object(O.B)())},onReset:function(){return n(Object(O.Q)())}}}))(c=Object(j.g)((o=i=function(n){function t(){return n.apply(this,arguments)||this}Object(a.a)(t,n);var e=t.prototype;return e.componentDidMount=function(){(0,this.props.onInitialize)()},e.componentWillUnmount=function(){(0,this.props.onReset)()},e.render=function(){var n=this.props,t=n.accountIds,e=n.searchAccountIds,c=n.onClear,i=e.size>0;return Object(r.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(r.a)("h4",{},void 0,Object(r.a)(j.b,{id:"endorsed_accounts_editor.endorsed_accounts",defaultMessage:"Featured accounts"})),Object(r.a)(_,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,Object(r.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,t.map((function(n){return Object(r.a)(I,{accountId:n,added:!0},n)}))),i&&Object(r.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:c}),Object(r.a)(h.a,{defaultStyle:{x:-100},style:{x:w()(i?0:-100,{stiffness:210,damping:20})}},void 0,(function(n){var t=n.x;return Object(r.a)("div",{className:"drawer__inner backdrop",style:{transform:0===t?null:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,e.map((function(n){return Object(r.a)(I,{accountId:n},n)})))}))))},t}(p.a),Object(u.a)(i,"propTypes",{onClose:d.a.func.isRequired,intl:d.a.object.isRequired,onInitialize:d.a.func.isRequired,onClear:d.a.func.isRequired,onReset:d.a.func.isRequired,title:d.a.string.isRequired,accountIds:b.a.list.isRequired,searchAccountIds:b.a.list.isRequired}),c=o))||c)||c}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{845:function(n,t,e){"use strict";e.r(t),e.d(t,"default",(function(){return A}));var c,i,o,r=e(0),a=(e(9),e(6),e(8)),u=e(1),s=(e(3),e(5)),d=e.n(s),l=e(16),b=e.n(l),f=e(15),p=e(21),j=e(7),O=e(24),v=e(108),m=e(1151),I=Object(j.g)(Object(f.connect)((function(){var n=Object(v.d)();return function(t,e){var c=e.accountId,i=e.added;return{account:n(t,c),added:void 0===i?t.getIn(["pinnedAccountsEditor","accounts","items"]).includes(c):i}}}),(function(n,t){var e=t.accountId;return{onRemove:function(){return n(Object(O.U)(e))},onAdd:function(){return n(Object(O.O)(e))}}}))(m.a)),g=e(1152),_=Object(j.g)(Object(f.connect)((function(n){return{value:n.getIn(["pinnedAccountsEditor","suggestions","value"])}}),(function(n){return{onSubmit:function(t){return n(Object(O.K)(t))},onClear:function(){return n(Object(O.B)())},onChange:function(t){return n(Object(O.A)(t))}}}))(g.a)),h=e(97),R=e(35),w=e.n(R);var A=Object(f.connect)((function(n){return{accountIds:n.getIn(["pinnedAccountsEditor","accounts","items"]),searchAccountIds:n.getIn(["pinnedAccountsEditor","suggestions","items"])}}),(function(n){return{onInitialize:function(){return n(Object(O.J)())},onClear:function(){return n(Object(O.B)())},onReset:function(){return n(Object(O.Q)())}}}))(c=Object(j.g)((o=i=function(n){Object(a.a)(e,n);var t;t=e;function e(){return n.apply(this,arguments)||this}var c=e.prototype;return c.componentDidMount=function(){(0,this.props.onInitialize)()},c.componentWillUnmount=function(){(0,this.props.onReset)()},c.render=function(){var n=this.props,t=n.accountIds,e=n.searchAccountIds,c=n.onClear,i=e.size>0;return Object(r.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(r.a)("h4",{},void 0,Object(r.a)(j.b,{id:"endorsed_accounts_editor.endorsed_accounts",defaultMessage:"Featured accounts"})),Object(r.a)(_,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,Object(r.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,t.map((function(n){return Object(r.a)(I,{accountId:n,added:!0},n)}))),i&&Object(r.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:c}),Object(r.a)(h.a,{defaultStyle:{x:-100},style:{x:w()(i?0:-100,{stiffness:210,damping:20})}},void 0,(function(n){var t=n.x;return(Object(r.a)("div",{className:"drawer__inner backdrop",style:{transform:0===t?null:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,e.map((function(n){return Object(r.a)(I,{accountId:n},n)}))))}))))},e}(p.a),Object(u.a)(i,"propTypes",{onClose:d.a.func.isRequired,intl:d.a.object.isRequired,onInitialize:d.a.func.isRequired,onClear:d.a.func.isRequired,onReset:d.a.func.isRequired,title:d.a.string.isRequired,accountIds:b.a.list.isRequired,searchAccountIds:b.a.list.isRequired}),c=o))||c)||c}}]);
//# sourceMappingURL=pinned_accounts_editor.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js.map b/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js.map
index a620906cd..c0677599f 100644
--- a/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js.map
+++ b/priv/static/packs/flavours/glitch/async/pinned_accounts_editor.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/containers/account_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/containers/search_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js"],"names":["injectIntl","connect","getAccount","makeGetAccount","state","accountId","added","account","getIn","includes","dispatch","onRemove","unpinAccount","onAdd","pinAccount","Account","value","onSubmit","fetchPinnedAccountsSuggestions","onClear","clearPinnedAccountsSuggestions","onChange","changePinnedAccountsSuggestions","Search","PinnedAccountsEditor","accountIds","searchAccountIds","onInitialize","fetchPinnedAccounts","onReset","resetPinnedAccountsEditor","componentDidMount","this","props","componentWillUnmount","render","showSearch","size","className","id","defaultMessage","map","role","tabIndex","onClick","defaultStyle","x","style","spring","stiffness","damping","transform","visibility","ImmutablePureComponent","onClose","PropTypes","func","isRequired","intl","object","title","string","ImmutablePropTypes","list"],"mappings":"2NAuBeA,cAAWC,mBAhBE,WAC1B,IAAMC,EAAaC,cAOnB,OALwB,SAACC,EAAD,OAAUC,EAAV,EAAUA,UAAWC,EAArB,EAAqBA,MAArB,MAAkC,CACxDC,QAASL,EAAWE,EAAOC,GAC3BC,WAAwB,IAAVA,EAAwBF,EAAMI,MAAM,CAAC,uBAAwB,WAAY,UAAUC,SAASJ,GAAaC,OAMhG,SAACI,EAAD,OAAaL,EAAb,EAAaA,UAAb,MAA8B,CACvDM,SAAU,kBAAMD,EAASE,YAAaP,KACtCQ,MAAO,kBAAMH,EAASI,YAAWT,QAGTJ,CAAiDc,M,UCH5Df,cAAWC,mBAVF,SAAAG,GAAK,MAAK,CAChCY,MAAOZ,EAAMI,MAAM,CAAC,uBAAwB,cAAe,cAGlC,SAAAE,GAAQ,MAAK,CACtCO,SAAU,SAAAD,GAAK,OAAIN,EAASQ,YAA+BF,KAC3DG,QAAS,kBAAMT,EAASU,gBACxBC,SAAU,SAAAL,GAAK,OAAIN,EAASY,YAAgCN,QAGpCf,CAA6CsB,M,iECRvE,IAaMC,EAFUvB,mBAXQ,SAAAG,GAAK,MAAK,CAChCqB,WAAYrB,EAAMI,MAAM,CAAC,uBAAwB,WAAY,UAC7DkB,iBAAkBtB,EAAMI,MAAM,CAAC,uBAAwB,cAAe,cAG7C,SAAAE,GAAQ,MAAK,CACtCiB,aAAc,kBAAMjB,EAASkB,gBAC7BT,QAAS,kBAAMT,EAASU,gBACxBS,QAAS,kBAAMnB,EAASoB,mB,GAIzB9B,a,8GAcC+B,kBAAA,YAEEJ,EADyBK,KAAKC,MAAtBN,iB,EAIVO,qBAAA,YAEEL,EADoBG,KAAKC,MAAjBJ,Y,EAIVM,OAAA,WAAW,IAAD,EAC0CH,KAAKC,MAA/CR,EADA,EACAA,WAAYC,EADZ,EACYA,iBAAkBP,EAD9B,EAC8BA,QAChCiB,EAAaV,EAAiBW,KAAO,EAE3C,OACE,mBAAKC,UAAU,sCAAf,EACE,2BAAI,YAAC,IAAD,CAAkBC,GAAG,6CAA6CC,eAAe,uBAErF,YAAC,EAAD,IAEA,mBAAKF,UAAU,sBAAf,EACE,mBAAKA,UAAU,4CAAf,EACGb,EAAWgB,KAAI,SAAApC,GAAS,OAAI,YAAC,EAAD,CAAkCA,UAAWA,EAAWC,OAAK,GAAtCD,OAGrD+B,GAAc,mBAAKM,KAAK,SAASC,SAAS,KAAKL,UAAU,mBAAmBM,QAASzB,IAEtF,YAAC,IAAD,CAAQ0B,aAAc,CAAEC,GAAI,KAAOC,MAAO,CAAED,EAAGE,IAAOZ,EAAa,GAAK,IAAK,CAAEa,UAAW,IAAKC,QAAS,YAAxG,GACG,gBAAGJ,EAAH,EAAGA,EAAH,OACE,mBAAKR,UAAU,yBAAyBS,MAAO,CAAEI,UAAiB,IAANL,EAAU,KAAV,cAA+BA,EAA/B,KAAsCM,YAAmB,MAAPN,EAAa,SAAW,iBAAtI,EACEpB,EAAiBe,KAAI,SAAApC,GAAS,OAAI,YAAC,EAAD,CAAkCA,UAAWA,GAAtBA,a,GA3CvCgD,K,0BAEd,CACjBC,QAASC,IAAUC,KAAKC,WACxBC,KAAMH,IAAUI,OAAOF,WACvB9B,aAAc4B,IAAUC,KAAKC,WAC7BtC,QAASoC,IAAUC,KAAKC,WACxB5B,QAAS0B,IAAUC,KAAKC,WACxBG,MAAOL,IAAUM,OAAOJ,WACxBhC,WAAYqC,IAAmBC,KAAKN,WACpC/B,iBAAkBoC,IAAmBC,KAAKN,a","file":"flavours/glitch/async/pinned_accounts_editor.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { injectIntl } from 'react-intl';\nimport { pinAccount, unpinAccount } from 'flavours/glitch/actions/accounts';\nimport Account from 'flavours/glitch/features/list_editor/components/account';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId, added }) => ({\n account: getAccount(state, accountId),\n added: typeof added === 'undefined' ? state.getIn(['pinnedAccountsEditor', 'accounts', 'items']).includes(accountId) : added,\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { accountId }) => ({\n onRemove: () => dispatch(unpinAccount(accountId)),\n onAdd: () => dispatch(pinAccount(accountId)),\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { injectIntl } from 'react-intl';\nimport {\n fetchPinnedAccountsSuggestions,\n clearPinnedAccountsSuggestions,\n changePinnedAccountsSuggestions\n} from '../../../actions/accounts';\nimport Search from 'flavours/glitch/features/list_editor/components/search';\n\nconst mapStateToProps = state => ({\n value: state.getIn(['pinnedAccountsEditor', 'suggestions', 'value']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: value => dispatch(fetchPinnedAccountsSuggestions(value)),\n onClear: () => dispatch(clearPinnedAccountsSuggestions()),\n onChange: value => dispatch(changePinnedAccountsSuggestions(value)),\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Search));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport { fetchPinnedAccounts, clearPinnedAccountsSuggestions, resetPinnedAccountsEditor } from 'flavours/glitch/actions/accounts';\nimport AccountContainer from './containers/account_container';\nimport SearchContainer from './containers/search_container';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['pinnedAccountsEditor', 'accounts', 'items']),\n searchAccountIds: state.getIn(['pinnedAccountsEditor', 'suggestions', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: () => dispatch(fetchPinnedAccounts()),\n onClear: () => dispatch(clearPinnedAccountsSuggestions()),\n onReset: () => dispatch(resetPinnedAccountsEditor()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass PinnedAccountsEditor extends ImmutablePureComponent {\n\n static propTypes = {\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n accountIds: ImmutablePropTypes.list.isRequired,\n searchAccountIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize } = this.props;\n onInitialize();\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountIds, searchAccountIds, onClear } = this.props;\n const showSearch = searchAccountIds.size > 0;\n\n return (\n <div className='modal-root__modal list-editor'>\n <h4><FormattedMessage id='endorsed_accounts_editor.endorsed_accounts' defaultMessage='Featured accounts' /></h4>\n\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} added />)}\n </div>\n\n {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}\n\n <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) =>\n (<div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n {searchAccountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} />)}\n </div>)\n }\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/containers/account_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/containers/search_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js"],"names":["injectIntl","connect","getAccount","makeGetAccount","state","accountId","added","account","getIn","includes","dispatch","onRemove","unpinAccount","onAdd","pinAccount","Account","value","onSubmit","fetchPinnedAccountsSuggestions","onClear","clearPinnedAccountsSuggestions","onChange","changePinnedAccountsSuggestions","Search","PinnedAccountsEditor","accountIds","searchAccountIds","onInitialize","fetchPinnedAccounts","onReset","resetPinnedAccountsEditor","componentDidMount","this","props","componentWillUnmount","render","showSearch","size","className","id","defaultMessage","map","role","tabIndex","onClick","defaultStyle","x","style","spring","stiffness","damping","transform","visibility","ImmutablePureComponent","onClose","PropTypes","func","isRequired","intl","object","title","string","ImmutablePropTypes","list"],"mappings":"+QAuBeA,cAAWC,mBAhBE,WAC1B,IAAMC,EAAaC,cAOnB,OALwB,SAACC,EAAD,OAAUC,EAAV,EAAUA,UAAWC,EAArB,EAAqBA,MAArB,MAAkC,CACxDC,QAASL,EAAWE,EAAOC,GAC3BC,WAAwB,IAAVA,EAAwBF,EAAMI,MAAM,CAAC,uBAAwB,WAAY,UAAUC,SAASJ,GAAaC,OAMhG,SAACI,EAAD,OAAaL,EAAb,EAAaA,UAAb,MAA8B,CACvDM,SAAU,kBAAMD,EAASE,YAAaP,KACtCQ,MAAO,kBAAMH,EAASI,YAAWT,QAGTJ,CAAiDc,M,UCH5Df,cAAWC,mBAVF,SAAAG,GAAK,MAAK,CAChCY,MAAOZ,EAAMI,MAAM,CAAC,uBAAwB,cAAe,cAGlC,SAAAE,GAAQ,MAAK,CACtCO,SAAU,SAAAD,GAAK,OAAIN,EAASQ,YAA+BF,KAC3DG,QAAS,kBAAMT,EAASU,gBACxBC,SAAU,SAAAL,GAAK,OAAIN,EAASY,YAAgCN,QAGpCf,CAA6CsB,M,yBCRvE,IAaMC,EAFUvB,mBAXQ,SAAAG,GAAK,MAAK,CAChCqB,WAAYrB,EAAMI,MAAM,CAAC,uBAAwB,WAAY,UAC7DkB,iBAAkBtB,EAAMI,MAAM,CAAC,uBAAwB,cAAe,cAG7C,SAAAE,GAAQ,MAAK,CACtCiB,aAAc,kBAAMjB,EAASkB,gBAC7BT,QAAS,kBAAMT,EAASU,gBACxBS,QAAS,kBAAMnB,EAASoB,mB,GAIzB9B,a,wHAcC+B,kBAAA,YAEEJ,EADyBK,KAAKC,MAAtBN,iB,EAIVO,qBAAA,YAEEL,EADoBG,KAAKC,MAAjBJ,Y,EAIVM,OAAA,WAAW,IAAD,EAC0CH,KAAKC,MAA/CR,EADA,EACAA,WAAYC,EADZ,EACYA,iBAAkBP,EAD9B,EAC8BA,QAChCiB,EAAaV,EAAiBW,KAAO,EAE3C,OACE,mBAAKC,UAAU,sCAAf,EACE,2BAAI,YAAC,IAAD,CAAkBC,GAAG,6CAA6CC,eAAe,uBAErF,YAAC,EAAD,IAEA,mBAAKF,UAAU,sBAAf,EACE,mBAAKA,UAAU,4CAAf,EACGb,EAAWgB,KAAI,SAAApC,GAAS,OAAI,YAAC,EAAD,CAAkCA,UAAWA,EAAWC,OAAK,GAAtCD,OAGrD+B,GAAc,mBAAKM,KAAK,SAASC,SAAS,KAAKL,UAAU,mBAAmBM,QAASzB,IAEtF,YAAC,IAAD,CAAQ0B,aAAc,CAAEC,GAAI,KAAOC,MAAO,CAAED,EAAGE,IAAOZ,EAAa,GAAK,IAAK,CAAEa,UAAW,IAAKC,QAAS,YAAxG,GACG,gBAAGJ,EAAH,EAAGA,EAAH,OACE,mBAAKR,UAAU,yBAAyBS,MAAO,CAAEI,UAAiB,IAANL,EAAU,KAAV,cAA+BA,EAA/B,KAAsCM,YAAmB,MAAPN,EAAa,SAAW,iBAAtI,EACEpB,EAAiBe,KAAI,SAAApC,GAAS,OAAI,YAAC,EAAD,CAAkCA,UAAWA,GAAtBA,c,GA3CvCgD,K,0BAEd,CACjBC,QAASC,IAAUC,KAAKC,WACxBC,KAAMH,IAAUI,OAAOF,WACvB9B,aAAc4B,IAAUC,KAAKC,WAC7BtC,QAASoC,IAAUC,KAAKC,WACxB5B,QAAS0B,IAAUC,KAAKC,WACxBG,MAAOL,IAAUM,OAAOJ,WACxBhC,WAAYqC,IAAmBC,KAAKN,WACpC/B,iBAAkBoC,IAAmBC,KAAKN,a","file":"flavours/glitch/async/pinned_accounts_editor.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { injectIntl } from 'react-intl';\nimport { pinAccount, unpinAccount } from 'flavours/glitch/actions/accounts';\nimport Account from 'flavours/glitch/features/list_editor/components/account';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId, added }) => ({\n account: getAccount(state, accountId),\n added: typeof added === 'undefined' ? state.getIn(['pinnedAccountsEditor', 'accounts', 'items']).includes(accountId) : added,\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { accountId }) => ({\n onRemove: () => dispatch(unpinAccount(accountId)),\n onAdd: () => dispatch(pinAccount(accountId)),\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { injectIntl } from 'react-intl';\nimport {\n fetchPinnedAccountsSuggestions,\n clearPinnedAccountsSuggestions,\n changePinnedAccountsSuggestions\n} from '../../../actions/accounts';\nimport Search from 'flavours/glitch/features/list_editor/components/search';\n\nconst mapStateToProps = state => ({\n value: state.getIn(['pinnedAccountsEditor', 'suggestions', 'value']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: value => dispatch(fetchPinnedAccountsSuggestions(value)),\n onClear: () => dispatch(clearPinnedAccountsSuggestions()),\n onChange: value => dispatch(changePinnedAccountsSuggestions(value)),\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Search));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport { fetchPinnedAccounts, clearPinnedAccountsSuggestions, resetPinnedAccountsEditor } from 'flavours/glitch/actions/accounts';\nimport AccountContainer from './containers/account_container';\nimport SearchContainer from './containers/search_container';\nimport Motion from 'flavours/glitch/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['pinnedAccountsEditor', 'accounts', 'items']),\n searchAccountIds: state.getIn(['pinnedAccountsEditor', 'suggestions', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: () => dispatch(fetchPinnedAccounts()),\n onClear: () => dispatch(clearPinnedAccountsSuggestions()),\n onReset: () => dispatch(resetPinnedAccountsEditor()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass PinnedAccountsEditor extends ImmutablePureComponent {\n\n static propTypes = {\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n accountIds: ImmutablePropTypes.list.isRequired,\n searchAccountIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize } = this.props;\n onInitialize();\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountIds, searchAccountIds, onClear } = this.props;\n const showSearch = searchAccountIds.size > 0;\n\n return (\n <div className='modal-root__modal list-editor'>\n <h4><FormattedMessage id='endorsed_accounts_editor.endorsed_accounts' defaultMessage='Featured accounts' /></h4>\n\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} added />)}\n </div>\n\n {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}\n\n <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>\n {({ x }) =>\n (<div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>\n {searchAccountIds.map(accountId => <AccountContainer key={accountId} accountId={accountId} />)}\n </div>)\n }\n </Motion>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/pinned_statuses.js b/priv/static/packs/flavours/glitch/async/pinned_statuses.js
index 58de4fa48..f2f32ada7 100644
--- a/priv/static/packs/flavours/glitch/async/pinned_statuses.js
+++ b/priv/static/packs/flavours/glitch/async/pinned_statuses.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{768:function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return y}));var s,a,i,o=n(0),c=n(2),u=n(7),r=n(1),l=n(3),d=n.n(l),p=n(13),b=n(5),f=n.n(b),h=n(14),m=n.n(h),j=n(430),O=n(730),g=n(735),w=n(1037),M=n(6),I=n(18),R=Object(M.f)({heading:{id:"column.pins",defaultMessage:"Pinned toot"}}),y=Object(p.connect)((function(t){return{statusIds:t.getIn(["status_lists","pins","items"]),hasMore:!!t.getIn(["status_lists","pins","next"])}}))(s=Object(M.g)((i=a=function(t){function e(){for(var e,n=arguments.length,s=new Array(n),a=0;a<n;a++)s[a]=arguments[a];return e=t.call.apply(t,[this].concat(s))||this,Object(r.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(r.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),e}Object(u.a)(e,t);var n=e.prototype;return n.componentWillMount=function(){this.props.dispatch(Object(j.b)())},n.render=function(){var t=this.props,e=t.intl,n=t.statusIds,s=t.hasMore,a=t.multiColumn;return d.a.createElement(O.a,{bindToDocument:!a,icon:"thumb-tack",heading:e.formatMessage(R.heading),ref:this.setRef},Object(o.a)(g.a,{}),Object(o.a)(w.a,{statusIds:n,scrollKey:"pinned_statuses",hasMore:s,bindToDocument:!a}))},e}(I.a),Object(r.a)(a,"propTypes",{dispatch:f.a.func.isRequired,statusIds:m.a.list.isRequired,intl:f.a.object.isRequired,hasMore:f.a.bool.isRequired,multiColumn:f.a.bool}),s=i))||s)||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{794:function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return R}));var s,a,i,o=n(0),c=n(2),r=(n(9),n(6),n(8)),u=n(1),l=n(3),d=n.n(l),p=n(15),b=n(5),f=n.n(b),h=n(16),m=n.n(h),j=n(433),O=n(756),g=n(761),w=n(1064),M=n(7),v=n(21);var I=Object(M.f)({heading:{id:"column.pins",defaultMessage:"Pinned toot"}}),R=Object(p.connect)((function(t){return{statusIds:t.getIn(["status_lists","pins","items"]),hasMore:!!t.getIn(["status_lists","pins","next"])}}))(s=Object(M.g)((i=a=function(t){Object(r.a)(n,t);var e;e=n;function n(){for(var e,n=arguments.length,s=new Array(n),a=0;a<n;a++)s[a]=arguments[a];return e=t.call.apply(t,[this].concat(s))||this,Object(u.a)(Object(c.a)(e),"handleHeaderClick",(function(){e.column.scrollTop()})),Object(u.a)(Object(c.a)(e),"setRef",(function(t){e.column=t})),e}var s=n.prototype;return s.componentWillMount=function(){this.props.dispatch(Object(j.b)())},s.render=function(){var t=this.props,e=t.intl,n=t.statusIds,s=t.hasMore,a=t.multiColumn;return(d.a.createElement(O.a,{bindToDocument:!a,icon:"thumb-tack",heading:e.formatMessage(I.heading),ref:this.setRef},Object(o.a)(g.a,{}),Object(o.a)(w.a,{statusIds:n,scrollKey:"pinned_statuses",hasMore:s,bindToDocument:!a})))},n}(v.a),Object(u.a)(a,"propTypes",{dispatch:f.a.func.isRequired,statusIds:m.a.list.isRequired,intl:f.a.object.isRequired,hasMore:f.a.bool.isRequired,multiColumn:f.a.bool}),s=i))||s)||s}}]);
//# sourceMappingURL=pinned_statuses.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/pinned_statuses.js.map b/priv/static/packs/flavours/glitch/async/pinned_statuses.js.map
index 01838825d..20582528c 100644
--- a/priv/static/packs/flavours/glitch/async/pinned_statuses.js.map
+++ b/priv/static/packs/flavours/glitch/async/pinned_statuses.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_statuses/index.js"],"names":["messages","defineMessages","heading","PinnedStatuses","connect","state","statusIds","getIn","hasMore","injectIntl","column","scrollTop","c","componentWillMount","this","props","dispatch","fetchPinnedStatuses","render","intl","multiColumn","bindToDocument","icon","formatMessage","ref","setRef","scrollKey","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","bool"],"mappings":"6RAWMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,iDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,OAAQ,UAChDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,OAAQ,Y,GAIjDE,a,uMAeqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,8CAThBC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAWtBC,OAAA,WAAW,IAAD,EAC0CJ,KAAKC,MAA/CI,EADA,EACAA,KAAMb,EADN,EACMA,UAAWE,EADjB,EACiBA,QAASY,EAD1B,EAC0BA,YAElC,OACE,kBAAC,IAAD,CAAQC,gBAAiBD,EAAaE,KAAK,aAAapB,QAASiB,EAAKI,cAAcvB,EAASE,SAAUsB,IAAKV,KAAKW,QAC/G,YAAC,IAAD,IACA,YAAC,IAAD,CACEnB,UAAWA,EACXoB,UAAU,kBACVlB,QAASA,EACTa,gBAAiBD,M,GAhCEO,K,0BAER,CACjBX,SAAUY,IAAUC,KAAKC,WACzBxB,UAAWyB,IAAmBC,KAAKF,WACnCX,KAAMS,IAAUK,OAAOH,WACvBtB,QAASoB,IAAUM,KAAKJ,WACxBV,YAAaQ,IAAUM,O","file":"flavours/glitch/async/pinned_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { fetchPinnedStatuses } from 'flavours/glitch/actions/pin_statuses';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.pins', defaultMessage: 'Pinned toot' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'pins', 'items']),\n hasMore: !!state.getIn(['status_lists', 'pins', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PinnedStatuses extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n hasMore: PropTypes.bool.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchPinnedStatuses());\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { intl, statusIds, hasMore, multiColumn } = this.props;\n\n return (\n <Column bindToDocument={!multiColumn} icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}>\n <ColumnBackButtonSlim />\n <StatusList\n statusIds={statusIds}\n scrollKey='pinned_statuses'\n hasMore={hasMore}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/pinned_statuses/index.js"],"names":["messages","defineMessages","heading","PinnedStatuses","connect","state","statusIds","getIn","hasMore","injectIntl","column","scrollTop","c","componentWillMount","this","props","dispatch","fetchPinnedStatuses","render","intl","multiColumn","bindToDocument","icon","formatMessage","ref","setRef","scrollKey","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","bool"],"mappings":"ySAWA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,iDAUHC,EAFUC,mBALQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,OAAQ,UAChDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,OAAQ,Y,GAIjDE,a,kOAeqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,6BAThBC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAWtBC,OAAA,WAAW,IAAD,EAC0CJ,KAAKC,MAA/CI,EADA,EACAA,KAAMb,EADN,EACMA,UAAWE,EADjB,EACiBA,QAASY,EAD1B,EAC0BA,YAElC,OACE,kBAAC,IAAD,CAAQC,gBAAiBD,EAAaE,KAAK,aAAapB,QAASiB,EAAKI,cAAcvB,EAASE,SAAUsB,IAAKV,KAAKW,QAC/G,YAAC,IAAD,IACA,YAAC,IAAD,CACEnB,UAAWA,EACXoB,UAAU,kBACVlB,QAASA,EACTa,gBAAiBD,O,GAhCEO,K,0BAER,CACjBX,SAAUY,IAAUC,KAAKC,WACzBxB,UAAWyB,IAAmBC,KAAKF,WACnCX,KAAMS,IAAUK,OAAOH,WACvBtB,QAASoB,IAAUM,KAAKJ,WACxBV,YAAaQ,IAAUM,O","file":"flavours/glitch/async/pinned_statuses.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { fetchPinnedStatuses } from 'flavours/glitch/actions/pin_statuses';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';\nimport StatusList from 'flavours/glitch/components/status_list';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nconst messages = defineMessages({\n heading: { id: 'column.pins', defaultMessage: 'Pinned toot' },\n});\n\nconst mapStateToProps = state => ({\n statusIds: state.getIn(['status_lists', 'pins', 'items']),\n hasMore: !!state.getIn(['status_lists', 'pins', 'next']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PinnedStatuses extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n hasMore: PropTypes.bool.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchPinnedStatuses());\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n render () {\n const { intl, statusIds, hasMore, multiColumn } = this.props;\n\n return (\n <Column bindToDocument={!multiColumn} icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}>\n <ColumnBackButtonSlim />\n <StatusList\n statusIds={statusIds}\n scrollKey='pinned_statuses'\n hasMore={hasMore}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/public_timeline.js b/priv/static/packs/flavours/glitch/async/public_timeline.js
index 8a9678a53..d48e77f7e 100644
--- a/priv/static/packs/flavours/glitch/async/public_timeline.js
+++ b/priv/static/packs/flavours/glitch/async/public_timeline.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{830:function(e,n,t){"use strict";t.r(n);var o,i,c,a=t(0),l=t(2),d=t(7),r=t(1),s=t(3),u=t.n(s),p=t(13),b=t(6),h=t(5),m=t.n(h),f=t(1033),j=t(734),O=t(732),g=t(32),M=t(249),y=t(1115),v=t(69),I=Object(p.connect)((function(e,n){var t=n.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex((function(e){return e.get("uuid")===t}));return{settings:t&&i>=0?o.get(i).get("params"):e.getIn(["settings","public"])}}),(function(e,n){var t=n.columnId;return{onChange:function(n,o){e(t?Object(M.f)(t,n,o):Object(v.c)(["public"].concat(n),o))}}}))(y.a),w=t(739);t.d(n,"default",(function(){return k}));var C=Object(b.f)({title:{id:"column.public",defaultMessage:"Federated timeline"}}),k=Object(p.connect)((function(e,n){var t=n.columnId,o=t,i=e.getIn(["settings","columns"]),c=i.findIndex((function(e){return e.get("uuid")===o})),a=t&&c>=0?i.get(c).getIn(["params","other","onlyMedia"]):e.getIn(["settings","public","other","onlyMedia"]),l=e.getIn(["timelines","public"+(a?":media":"")]);return{hasUnread:!!l&&l.get("unread")>0,onlyMedia:a}}))(o=Object(b.g)((c=i=function(e){function n(){for(var n,t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n=e.call.apply(e,[this].concat(o))||this,Object(r.a)(Object(l.a)(n),"handlePin",(function(){var e=n.props,t=e.columnId,o=e.dispatch,i=e.onlyMedia;o(t?Object(M.h)(t):Object(M.e)("PUBLIC",{other:{onlyMedia:i}}))})),Object(r.a)(Object(l.a)(n),"handleMove",(function(e){var t=n.props,o=t.columnId;(0,t.dispatch)(Object(M.g)(o,e))})),Object(r.a)(Object(l.a)(n),"handleHeaderClick",(function(){n.column.scrollTop()})),Object(r.a)(Object(l.a)(n),"setRef",(function(e){n.column=e})),Object(r.a)(Object(l.a)(n),"handleLoadMore",(function(e){var t=n.props,o=t.dispatch,i=t.onlyMedia;o(Object(g.w)({maxId:e,onlyMedia:i}))})),n}Object(d.a)(n,e);var t=n.prototype;return t.componentDidMount=function(){var e=this.props,n=e.dispatch,t=e.onlyMedia;n(Object(g.w)({onlyMedia:t})),this.disconnect=n(Object(w.e)({onlyMedia:t}))},t.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var n=this.props,t=n.dispatch,o=n.onlyMedia;this.disconnect(),t(Object(g.w)({onlyMedia:o})),this.disconnect=t(Object(w.e)({onlyMedia:o}))}},t.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,n=e.intl,t=e.columnId,o=e.hasUnread,i=e.multiColumn,c=e.onlyMedia,l=!!t;return u.a.createElement(j.a,{bindToDocument:!i,ref:this.setRef,name:"federated",label:n.formatMessage(C.title)},Object(a.a)(O.a,{icon:"globe",active:o,title:n.formatMessage(C.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:i},void 0,Object(a.a)(I,{columnId:t})),Object(a.a)(f.a,{timelineId:"public"+(c?":media":""),onLoadMore:this.handleLoadMore,trackScroll:!l,scrollKey:"public_timeline-"+t,emptyMessage:Object(a.a)(b.b,{id:"empty_column.public",defaultMessage:"There is nothing here! Write something publicly, or manually follow users from other servers to fill it up"}),bindToDocument:!i}))},n}(u.a.PureComponent),Object(r.a)(i,"defaultProps",{onlyMedia:!1}),Object(r.a)(i,"contextTypes",{router:m.a.object}),o=c))||o)||o}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{856:function(e,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return k}));var o,i,c,a=t(0),l=t(2),r=(t(9),t(6),t(8)),d=t(1),s=t(3),u=t.n(s),p=t(15),b=t(7),h=t(5),m=t.n(h),f=t(1059),j=t(760),O=t(758),g=t(34),M=t(252),y=t(1147),v=t(73),I=Object(p.connect)((function(e,n){var t=n.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex((function(e){return e.get("uuid")===t}));return{settings:t&&i>=0?o.get(i).get("params"):e.getIn(["settings","public"])}}),(function(e,n){var t=n.columnId;return{onChange:function(n,o){e(t?Object(M.f)(t,n,o):Object(v.c)(["public"].concat(n),o))}}}))(y.a),w=t(765);var C=Object(b.f)({title:{id:"column.public",defaultMessage:"Federated timeline"}}),k=Object(p.connect)((function(e,n){var t=n.columnId,o=t,i=e.getIn(["settings","columns"]),c=i.findIndex((function(e){return e.get("uuid")===o})),a=t&&c>=0?i.get(c).getIn(["params","other","onlyMedia"]):e.getIn(["settings","public","other","onlyMedia"]),l=e.getIn(["timelines","public"+(a?":media":"")]);return{hasUnread:!!l&&l.get("unread")>0,onlyMedia:a}}))(o=Object(b.g)((c=i=function(e){Object(r.a)(t,e);var n;n=t;function t(){for(var n,t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n=e.call.apply(e,[this].concat(o))||this,Object(d.a)(Object(l.a)(n),"handlePin",(function(){var e=n.props,t=e.columnId,o=e.dispatch,i=e.onlyMedia;o(t?Object(M.h)(t):Object(M.e)("PUBLIC",{other:{onlyMedia:i}}))})),Object(d.a)(Object(l.a)(n),"handleMove",(function(e){var t=n.props,o=t.columnId;(0,t.dispatch)(Object(M.g)(o,e))})),Object(d.a)(Object(l.a)(n),"handleHeaderClick",(function(){n.column.scrollTop()})),Object(d.a)(Object(l.a)(n),"setRef",(function(e){n.column=e})),Object(d.a)(Object(l.a)(n),"handleLoadMore",(function(e){var t=n.props,o=t.dispatch,i=t.onlyMedia;o(Object(g.w)({maxId:e,onlyMedia:i}))})),n}var o=t.prototype;return o.componentDidMount=function(){var e=this.props,n=e.dispatch,t=e.onlyMedia;n(Object(g.w)({onlyMedia:t})),this.disconnect=n(Object(w.e)({onlyMedia:t}))},o.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var n=this.props,t=n.dispatch,o=n.onlyMedia;this.disconnect(),t(Object(g.w)({onlyMedia:o})),this.disconnect=t(Object(w.e)({onlyMedia:o}))}},o.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},o.render=function(){var e=this.props,n=e.intl,t=e.columnId,o=e.hasUnread,i=e.multiColumn,c=e.onlyMedia,l=!!t;return u.a.createElement(j.a,{bindToDocument:!i,ref:this.setRef,name:"federated",label:n.formatMessage(C.title)},Object(a.a)(O.a,{icon:"globe",active:o,title:n.formatMessage(C.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:i},void 0,Object(a.a)(I,{columnId:t})),Object(a.a)(f.a,{timelineId:"public"+(c?":media":""),onLoadMore:this.handleLoadMore,trackScroll:!l,scrollKey:"public_timeline-"+t,emptyMessage:Object(a.a)(b.b,{id:"empty_column.public",defaultMessage:"There is nothing here! Write something publicly, or manually follow users from other servers to fill it up"}),bindToDocument:!i}))},t}(u.a.PureComponent),Object(d.a)(i,"defaultProps",{onlyMedia:!1}),Object(d.a)(i,"contextTypes",{router:m.a.object}),o=c))||o)||o}}]);
//# sourceMappingURL=public_timeline.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/public_timeline.js.map b/priv/static/packs/flavours/glitch/async/public_timeline.js.map
index c8fa69daa..77fa4cf1f 100644
--- a/priv/static/packs/flavours/glitch/async/public_timeline.js.map
+++ b/priv/static/packs/flavours/glitch/async/public_timeline.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/public_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/public_timeline/index.js"],"names":["connect","state","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","onChange","key","checked","changeColumnParams","changeSetting","ColumnSettings","messages","defineMessages","title","PublicTimeline","onlyMedia","timelineState","hasUnread","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandPublicTimeline","componentDidMount","this","disconnect","connectPublicStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","multiColumn","pinned","bindToDocument","ref","setRef","name","label","formatMessage","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","timelineId","onLoadMore","handleLoadMore","trackScroll","scrollKey","emptyMessage","id","defaultMessage","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/public_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from 'flavours/glitch/features/community_timeline/components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\n \nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n\n return {\n settings: (uuid && index >= 0) ? columns.get(index).get('params') : state.getIn(['settings', 'public']),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { columnId }) => {\n return {\n onChange (key, checked) {\n if (columnId) {\n dispatch(changeColumnParams(columnId, key, checked));\n } else {\n dispatch(changeSetting(['public', ...key], checked));\n }\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandPublicTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectPublicStream } from 'flavours/glitch/actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']);\n const timelineState = state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`]);\n\n return {\n hasUnread: !!timelineState && timelineState.get('unread') > 0,\n onlyMedia,\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PublicTimeline extends React.PureComponent {\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasUnread: PropTypes.bool,\n onlyMedia: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch, onlyMedia } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('PUBLIC', { other: { onlyMedia } }));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandPublicTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectPublicStream({ onlyMedia }));\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.onlyMedia !== this.props.onlyMedia) {\n const { dispatch, onlyMedia } = this.props;\n\n this.disconnect();\n dispatch(expandPublicTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectPublicStream({ onlyMedia }));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandPublicTimeline({ maxId, onlyMedia }));\n }\n\n render () {\n const { intl, columnId, hasUnread, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='federated' label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='globe'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer columnId={columnId} />\n </ColumnHeader>\n\n <StatusListContainer\n timelineId={`public${onlyMedia ? ':media' : ''}`}\n onLoadMore={this.handleLoadMore}\n trackScroll={!pinned}\n scrollKey={`public_timeline-${columnId}`}\n emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/public_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/public_timeline/index.js"],"names":["connect","state","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","onChange","key","checked","changeColumnParams","changeSetting","ColumnSettings","messages","defineMessages","title","PublicTimeline","onlyMedia","timelineState","hasUnread","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandPublicTimeline","componentDidMount","this","disconnect","connectPublicStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","multiColumn","pinned","bindToDocument","ref","setRef","name","label","formatMessage","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","timelineId","onLoadMore","handleLoadMore","trackScroll","scrollKey","emptyMessage","id","defaultMessage","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"flavours/glitch/async/public_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from 'flavours/glitch/features/community_timeline/components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport { changeColumnParams } from 'flavours/glitch/actions/columns';\n \nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n\n return {\n settings: (uuid && index >= 0) ? columns.get(index).get('params') : state.getIn(['settings', 'public']),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { columnId }) => {\n return {\n onChange (key, checked) {\n if (columnId) {\n dispatch(changeColumnParams(columnId, key, checked));\n } else {\n dispatch(changeSetting(['public', ...key], checked));\n }\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { expandPublicTimeline } from 'flavours/glitch/actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectPublicStream } from 'flavours/glitch/actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst mapStateToProps = (state, { columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']);\n const timelineState = state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`]);\n\n return {\n hasUnread: !!timelineState && timelineState.get('unread') > 0,\n onlyMedia,\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PublicTimeline extends React.PureComponent {\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasUnread: PropTypes.bool,\n onlyMedia: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch, onlyMedia } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('PUBLIC', { other: { onlyMedia } }));\n }\n }\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandPublicTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectPublicStream({ onlyMedia }));\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.onlyMedia !== this.props.onlyMedia) {\n const { dispatch, onlyMedia } = this.props;\n\n this.disconnect();\n dispatch(expandPublicTimeline({ onlyMedia }));\n this.disconnect = dispatch(connectPublicStream({ onlyMedia }));\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleLoadMore = maxId => {\n const { dispatch, onlyMedia } = this.props;\n\n dispatch(expandPublicTimeline({ maxId, onlyMedia }));\n }\n\n render () {\n const { intl, columnId, hasUnread, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} name='federated' label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='globe'\n active={hasUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer columnId={columnId} />\n </ColumnHeader>\n\n <StatusListContainer\n timelineId={`public${onlyMedia ? ':media' : ''}`}\n onLoadMore={this.handleLoadMore}\n trackScroll={!pinned}\n scrollKey={`public_timeline-${columnId}`}\n emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up' />}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/reblogs.js b/priv/static/packs/flavours/glitch/async/reblogs.js
index 3e6c806f4..59ca6d0af 100644
--- a/priv/static/packs/flavours/glitch/async/reblogs.js
+++ b/priv/static/packs/flavours/glitch/async/reblogs.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{772:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return C}));var s,o,n,r=a(0),c=a(2),i=a(7),u=a(1),l=a(3),d=a.n(l),p=a(13),b=a(5),h=a.n(b),f=a(14),m=a.n(f),j=a(299),O=a(46),g=a(466),w=a(730),y=a(23),I=a(732),v=a(6),R=a(18),M=a(1022),k=Object(v.f)({heading:{id:"column.reblogged_by",defaultMessage:"Boosted by"},refresh:{id:"refresh",defaultMessage:"Refresh"}}),C=Object(p.connect)((function(e,t){return{accountIds:e.getIn(["user_lists","reblogged_by",t.params.statusId])}}))(s=Object(v.g)((n=o=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return t=e.call.apply(e,[this].concat(s))||this,Object(u.a)(Object(c.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(u.a)(Object(c.a)(t),"setRef",(function(e){t.column=e})),Object(u.a)(Object(c.a)(t),"handleRefresh",(function(){t.props.dispatch(Object(O.r)(t.props.params.statusId))})),t}Object(i.a)(t,e);var a=t.prototype;return a.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(O.r)(this.props.params.statusId))},a.componentWillReceiveProps=function(e){e.params.statusId!==this.props.params.statusId&&e.params.statusId&&this.props.dispatch(Object(O.r)(e.params.statusId))},a.render=function(){var e=this.props,t=e.intl,a=e.accountIds,s=e.multiColumn;if(!a)return Object(r.a)(w.a,{},void 0,Object(r.a)(j.a,{}));var o=Object(r.a)(v.b,{id:"status.reblogs.empty",defaultMessage:"No one has boosted this toot yet. When someone does, they will show up here."});return d.a.createElement(w.a,{ref:this.setRef},Object(r.a)(I.a,{icon:"retweet",title:t.formatMessage(k.heading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:s,extraButton:Object(r.a)("button",{className:"column-header__button",title:t.formatMessage(k.refresh),"aria-label":t.formatMessage(k.refresh),onClick:this.handleRefresh},void 0,Object(r.a)(y.a,{id:"refresh"}))}),Object(r.a)(M.a,{scrollKey:"reblogs",emptyMessage:o,bindToDocument:!s},void 0,a.map((function(e){return Object(r.a)(g.a,{id:e,withNote:!1},e)}))))},t}(R.a),Object(u.a)(o,"propTypes",{params:h.a.object.isRequired,dispatch:h.a.func.isRequired,accountIds:m.a.list,multiColumn:h.a.bool,intl:h.a.object.isRequired}),s=n))||s)||s}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{798:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return C}));var s,o,r,n=a(0),c=a(2),i=(a(9),a(6),a(8)),u=a(1),l=a(3),d=a.n(l),p=a(15),b=a(5),h=a.n(b),f=a(16),m=a.n(f),j=a(305),O=a(47),g=a(471),w=a(756),y=a(25),I=a(758),v=a(7),R=a(21),M=a(1048);var k=Object(v.f)({heading:{id:"column.reblogged_by",defaultMessage:"Boosted by"},refresh:{id:"refresh",defaultMessage:"Refresh"}}),C=Object(p.connect)((function(e,t){return{accountIds:e.getIn(["user_lists","reblogged_by",t.params.statusId])}}))(s=Object(v.g)((r=o=function(e){Object(i.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return t=e.call.apply(e,[this].concat(s))||this,Object(u.a)(Object(c.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(u.a)(Object(c.a)(t),"setRef",(function(e){t.column=e})),Object(u.a)(Object(c.a)(t),"handleRefresh",(function(){t.props.dispatch(Object(O.r)(t.props.params.statusId))})),t}var s=a.prototype;return s.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(O.r)(this.props.params.statusId))},s.componentWillReceiveProps=function(e){e.params.statusId!==this.props.params.statusId&&e.params.statusId&&this.props.dispatch(Object(O.r)(e.params.statusId))},s.render=function(){var e=this.props,t=e.intl,a=e.accountIds,s=e.multiColumn;if(!a)return Object(n.a)(w.a,{},void 0,Object(n.a)(j.a,{}));var o=Object(n.a)(v.b,{id:"status.reblogs.empty",defaultMessage:"No one has boosted this toot yet. When someone does, they will show up here."});return(d.a.createElement(w.a,{ref:this.setRef},Object(n.a)(I.a,{icon:"retweet",title:t.formatMessage(k.heading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:s,extraButton:Object(n.a)("button",{className:"column-header__button",title:t.formatMessage(k.refresh),"aria-label":t.formatMessage(k.refresh),onClick:this.handleRefresh},void 0,Object(n.a)(y.a,{id:"refresh"}))}),Object(n.a)(M.a,{scrollKey:"reblogs",emptyMessage:o,bindToDocument:!s},void 0,a.map((function(e){return Object(n.a)(g.a,{id:e,withNote:!1},e)})))))},a}(R.a),Object(u.a)(o,"propTypes",{params:h.a.object.isRequired,dispatch:h.a.func.isRequired,accountIds:m.a.list,multiColumn:h.a.bool,intl:h.a.object.isRequired}),s=r))||s)||s}}]);
//# sourceMappingURL=reblogs.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/reblogs.js.map b/priv/static/packs/flavours/glitch/async/reblogs.js.map
index 696da7f09..150c0e1ab 100644
--- a/priv/static/packs/flavours/glitch/async/reblogs.js.map
+++ b/priv/static/packs/flavours/glitch/async/reblogs.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/reblogs/index.js"],"names":["messages","defineMessages","heading","refresh","Reblogs","connect","state","props","accountIds","getIn","params","statusId","injectIntl","column","scrollTop","c","dispatch","fetchReblogs","componentWillMount","this","componentWillReceiveProps","nextProps","render","intl","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","icon","title","formatMessage","onClick","handleHeaderClick","showBackButton","extraButton","className","aria-label","handleRefresh","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"sTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,sDACPC,QAAQ,CAAD,yCASHC,EAFUC,mBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,eAAgBF,EAAMG,OAAOC,c,GAIrEC,a,uMAuBqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGA,WACd,EAAKR,MAAMS,SAASC,YAAa,EAAKV,MAAMG,OAAOC,c,8CArBrDO,mBAAA,WACOC,KAAKZ,MAAMC,YACdW,KAAKZ,MAAMS,SAASC,YAAaE,KAAKZ,MAAMG,OAAOC,Y,EAIvDS,0BAAA,SAA0BC,GACpBA,EAAUX,OAAOC,WAAaQ,KAAKZ,MAAMG,OAAOC,UAAYU,EAAUX,OAAOC,UAC/EQ,KAAKZ,MAAMS,SAASC,YAAaI,EAAUX,OAAOC,Y,EAgBtDW,OAAA,WAAW,IAAD,EACkCH,KAAKZ,MAAvCgB,EADA,EACAA,KAAMf,EADN,EACMA,WAAYgB,EADlB,EACkBA,YAE1B,IAAKhB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMiB,EAAe,YAAC,IAAD,CAAkBC,GAAG,uBAAuBC,eAAe,iFAEhF,OACE,kBAAC,IAAD,CAAQC,IAAKT,KAAKU,QAChB,YAAC,IAAD,CACEC,KAAK,UACLC,MAAOR,EAAKS,cAAchC,EAASE,SACnC+B,QAASd,KAAKe,kBACdC,gBAAc,EACdX,YAAaA,EACbY,YACE,sBAAQC,UAAU,wBAAwBN,MAAOR,EAAKS,cAAchC,EAASG,SAAUmC,aAAYf,EAAKS,cAAchC,EAASG,SAAU8B,QAASd,KAAKoB,oBAAvJ,EAAsK,YAAC,IAAD,CAAMb,GAAG,eAInL,YAAC,IAAD,CACEc,UAAU,UACVf,aAAcA,EACdgB,gBAAiBjB,QAHnB,EAKGhB,EAAWkC,KAAI,SAAAhB,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIiB,UAAU,GAAtBjB,S,GAlEbkB,K,0BAED,CACjBlC,OAAQmC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/B1B,YAAaqB,IAAUM,KACvB5B,KAAMsB,IAAUC,OAAOC,a","file":"flavours/glitch/async/reblogs.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport { fetchReblogs } from 'flavours/glitch/actions/interactions';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport Icon from 'flavours/glitch/components/icon';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.reblogged_by', defaultMessage: 'Boosted by' },\n refresh: { id: 'refresh', defaultMessage: 'Refresh' },\n});\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Reblogs extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchReblogs(this.props.params.statusId));\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this.props.dispatch(fetchReblogs(nextProps.params.statusId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleRefresh = () => {\n this.props.dispatch(fetchReblogs(this.props.params.statusId));\n }\n\n render () {\n const { intl, accountIds, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='status.reblogs.empty' defaultMessage='No one has boosted this toot yet. When someone does, they will show up here.' />;\n\n return (\n <Column ref={this.setRef}>\n <ColumnHeader\n icon='retweet'\n title={intl.formatMessage(messages.heading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>\n )}\n />\n\n <ScrollableList\n scrollKey='reblogs'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/reblogs/index.js"],"names":["messages","defineMessages","heading","refresh","Reblogs","connect","state","props","accountIds","getIn","params","statusId","injectIntl","column","scrollTop","c","dispatch","fetchReblogs","componentWillMount","this","componentWillReceiveProps","nextProps","render","intl","multiColumn","emptyMessage","id","defaultMessage","ref","setRef","icon","title","formatMessage","onClick","handleHeaderClick","showBackButton","extraButton","className","aria-label","handleRefresh","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"kUAcA,IAAMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,sDACPC,QAAQ,CAAD,yCASHC,EAFUC,mBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,eAAgBF,EAAMG,OAAOC,c,GAIrEC,a,kOAuBqB,WAClB,EAAKC,OAAOC,e,qCAGL,SAAAC,GACP,EAAKF,OAASE,K,4CAGA,WACd,EAAKR,MAAMS,SAASC,YAAa,EAAKV,MAAMG,OAAOC,c,6BArBrDO,mBAAA,WACOC,KAAKZ,MAAMC,YACdW,KAAKZ,MAAMS,SAASC,YAAaE,KAAKZ,MAAMG,OAAOC,Y,EAIvDS,0BAAA,SAA0BC,GACpBA,EAAUX,OAAOC,WAAaQ,KAAKZ,MAAMG,OAAOC,UAAYU,EAAUX,OAAOC,UAC/EQ,KAAKZ,MAAMS,SAASC,YAAaI,EAAUX,OAAOC,Y,EAgBtDW,OAAA,WAAW,IAAD,EACkCH,KAAKZ,MAAvCgB,EADA,EACAA,KAAMf,EADN,EACMA,WAAYgB,EADlB,EACkBA,YAE1B,IAAKhB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMiB,EAAe,YAAC,IAAD,CAAkBC,GAAG,uBAAuBC,eAAe,iFAEhF,OACE,kBAAC,IAAD,CAAQC,IAAKT,KAAKU,QAChB,YAAC,IAAD,CACEC,KAAK,UACLC,MAAOR,EAAKS,cAAchC,EAASE,SACnC+B,QAASd,KAAKe,kBACdC,gBAAc,EACdX,YAAaA,EACbY,YACE,sBAAQC,UAAU,wBAAwBN,MAAOR,EAAKS,cAAchC,EAASG,SAAUmC,aAAYf,EAAKS,cAAchC,EAASG,SAAU8B,QAASd,KAAKoB,oBAAvJ,EAAsK,YAAC,IAAD,CAAMb,GAAG,eAInL,YAAC,IAAD,CACEc,UAAU,UACVf,aAAcA,EACdgB,gBAAiBjB,QAHnB,EAKGhB,EAAWkC,KAAI,SAAAhB,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIiB,UAAU,GAAtBjB,U,GAlEbkB,K,0BAED,CACjBlC,OAAQmC,IAAUC,OAAOC,WACzB/B,SAAU6B,IAAUG,KAAKD,WACzBvC,WAAYyC,IAAmBC,KAC/B1B,YAAaqB,IAAUM,KACvB5B,KAAMsB,IAAUC,OAAOC,a","file":"flavours/glitch/async/reblogs.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport { fetchReblogs } from 'flavours/glitch/actions/interactions';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport Icon from 'flavours/glitch/components/icon';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\n\nconst messages = defineMessages({\n heading: { id: 'column.reblogged_by', defaultMessage: 'Boosted by' },\n refresh: { id: 'refresh', defaultMessage: 'Refresh' },\n});\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Reblogs extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentWillMount () {\n if (!this.props.accountIds) {\n this.props.dispatch(fetchReblogs(this.props.params.statusId));\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this.props.dispatch(fetchReblogs(nextProps.params.statusId));\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleRefresh = () => {\n this.props.dispatch(fetchReblogs(this.props.params.statusId));\n }\n\n render () {\n const { intl, accountIds, multiColumn } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = <FormattedMessage id='status.reblogs.empty' defaultMessage='No one has boosted this toot yet. When someone does, they will show up here.' />;\n\n return (\n <Column ref={this.setRef}>\n <ColumnHeader\n icon='retweet'\n title={intl.formatMessage(messages.heading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button>\n )}\n />\n\n <ScrollableList\n scrollKey='reblogs'\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {accountIds.map(id =>\n <AccountContainer key={id} id={id} withNote={false} />,\n )}\n </ScrollableList>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/report_modal.js b/priv/static/packs/flavours/glitch/async/report_modal.js
index 92601ff8c..d4d94eda1 100644
--- a/priv/static/packs/flavours/glitch/async/report_modal.js
+++ b/priv/static/packs/flavours/glitch/async/report_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{820:function(e,t,a){"use strict";a.r(t);var n,o,i,r=a(0),s=a(2),c=a(7),d=a(1),l=a(3),u=a.n(l),b=a(13),p=a(99),h=a(32),g=a(5),m=a.n(g),v=a(14),O=a.n(v),j=a(103),f=a(6),w=a(301),_=a.n(w),y=a(1122),C=a.n(y),k=a(150),I=a(36),M=a(308),N=function(e){function t(){return e.apply(this,arguments)||this}return Object(c.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.status,a=e.checked,n=e.onToggle,o=e.disabled,i=null;if(t.get("reblog"))return null;if(t.get("media_attachments").size>0)if(t.get("media_attachments").some((function(e){return"unknown"===e.get("type")})));else if("video"===t.getIn(["media_attachments",0,"type"])){var s=t.getIn(["media_attachments",0]);i=Object(r.a)(M.a,{fetchComponent:I.Q,loading:this.renderLoadingVideoPlayer},void 0,(function(e){return Object(r.a)(e,{preview:s.get("preview_url"),blurhash:s.get("blurhash"),src:s.get("url"),alt:s.get("description"),width:239,height:110,inline:!0,sensitive:t.get("sensitive"),revealed:!1,onOpenVideo:C.a})}))}else i=Object(r.a)(M.a,{fetchComponent:I.C,loading:this.renderLoadingMediaGallery},void 0,(function(e){return Object(r.a)(e,{media:t.get("media_attachments"),sensitive:t.get("sensitive"),revealed:!1,height:110,onOpenMedia:C.a})}));return Object(r.a)("div",{className:"status-check-box"},void 0,Object(r.a)("div",{className:"status-check-box__status"},void 0,Object(r.a)(k.a,{status:t,media:i})),Object(r.a)("div",{className:"status-check-box-toggle"},void 0,Object(r.a)(_.a,{checked:a,onChange:n,disabled:o})))},t}(u.a.PureComponent),S=a(4),x=Object(b.connect)((function(e,t){var a=t.id;return{status:e.getIn(["statuses",a]),checked:e.getIn(["reports","new","status_ids"],Object(S.Set)()).includes(a)}}),(function(e,t){var a=t.id;return{onToggle:function(t){e(Object(p.m)(a,t.target.checked))}}}))(N),R=a(18),q=a(66),F=a(39);a.d(t,"default",(function(){return T}));var K=Object(f.f)({close:{id:"lightbox.close",defaultMessage:"Close"},placeholder:{id:"report.placeholder",defaultMessage:"Additional comments"},submit:{id:"report.submit",defaultMessage:"Submit"}}),T=Object(b.connect)((function(){var e=Object(j.d)();return function(t){var a=t.getIn(["reports","new","account_id"]);return{isSubmitting:t.getIn(["reports","new","isSubmitting"]),account:e(t,a),comment:t.getIn(["reports","new","comment"]),forward:t.getIn(["reports","new","forward"]),statusIds:Object(S.OrderedSet)(t.getIn(["timelines","account:"+a+":with_replies","items"])).union(t.getIn(["reports","new","status_ids"]))}}}))(n=Object(f.g)((i=o=function(e){function t(){for(var t,a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];return t=e.call.apply(e,[this].concat(n))||this,Object(d.a)(Object(s.a)(t),"handleCommentChange",(function(e){t.props.dispatch(Object(p.i)(e.target.value))})),Object(d.a)(Object(s.a)(t),"handleForwardChange",(function(e){t.props.dispatch(Object(p.j)(e.target.checked))})),Object(d.a)(Object(s.a)(t),"handleSubmit",(function(){t.props.dispatch(Object(p.l)())})),Object(d.a)(Object(s.a)(t),"handleKeyDown",(function(e){13===e.keyCode&&(e.ctrlKey||e.metaKey)&&t.handleSubmit()})),t}Object(c.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){this.props.dispatch(Object(h.q)(this.props.account.get("id"),{withReplies:!0}))},a.componentWillReceiveProps=function(e){this.props.account!==e.account&&e.account&&this.props.dispatch(Object(h.q)(e.account.get("id"),{withReplies:!0}))},a.render=function(){var e=this.props,t=e.account,a=e.comment,n=e.intl,o=e.statusIds,i=e.isSubmitting,s=e.forward,c=e.onClose;if(!t)return null;var d=t.get("acct").split("@")[1];return Object(r.a)("div",{className:"modal-root__modal report-modal"},void 0,Object(r.a)("div",{className:"report-modal__target"},void 0,Object(r.a)(F.a,{className:"media-modal__close",title:n.formatMessage(K.close),icon:"times",onClick:c,size:16}),Object(r.a)(f.b,{id:"report.target",defaultMessage:"Report {target}",values:{target:Object(r.a)("strong",{},void 0,t.get("acct"))}})),Object(r.a)("div",{className:"report-modal__container"},void 0,Object(r.a)("div",{className:"report-modal__comment"},void 0,Object(r.a)("p",{},void 0,Object(r.a)(f.b,{id:"report.hint",defaultMessage:"The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:"})),Object(r.a)("textarea",{className:"setting-text light",placeholder:n.formatMessage(K.placeholder),value:a,onChange:this.handleCommentChange,onKeyDown:this.handleKeyDown,disabled:i,autoFocus:!0}),d&&Object(r.a)("div",{},void 0,Object(r.a)("p",{},void 0,Object(r.a)(f.b,{id:"report.forward_hint",defaultMessage:"The account is from another server. Send an anonymized copy of the report there as well?"})),Object(r.a)("div",{className:"setting-toggle"},void 0,Object(r.a)(_.a,{id:"report-forward",checked:s,disabled:i,onChange:this.handleForwardChange}),Object(r.a)("label",{htmlFor:"report-forward",className:"setting-toggle__label"},void 0,Object(r.a)(f.b,{id:"report.forward",defaultMessage:"Forward to {target}",values:{target:d}})))),Object(r.a)(q.a,{disabled:i,text:n.formatMessage(K.submit),onClick:this.handleSubmit})),Object(r.a)("div",{className:"report-modal__statuses"},void 0,Object(r.a)("div",{},void 0,o.map((function(e){return Object(r.a)(x,{id:e,disabled:i},e)}))))))},t}(R.a),Object(d.a)(o,"propTypes",{isSubmitting:m.a.bool,account:O.a.map,statusIds:O.a.orderedSet.isRequired,comment:m.a.string.isRequired,forward:m.a.bool,dispatch:m.a.func.isRequired,intl:m.a.object.isRequired}),n=i))||n)||n}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{847:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return T}));var n=a(0),o=a(2),i=(a(9),a(6),a(8)),r=a(1),s=a(3),c=a.n(s),d=a(15),l=a(104),u=a(34),b=a(5),p=a.n(b),h=a(16),g=a.n(h),m=a(108),v=a(7),O=a(307),j=a.n(O),f=a(1154),w=a.n(f),_=a(155),y=a(38),C=a(314);var k,I,M,N=function(e){Object(i.a)(a,e);var t;t=a;function a(){return e.apply(this,arguments)||this}return a.prototype.render=function(){var e=this.props,t=e.status,a=e.checked,o=e.onToggle,i=e.disabled,r=null;if(t.get("reblog"))return null;if(t.get("media_attachments").size>0)if(t.get("media_attachments").some((function(e){return"unknown"===e.get("type")})));else if("video"===t.getIn(["media_attachments",0,"type"])){var s=t.getIn(["media_attachments",0]);r=Object(n.a)(C.a,{fetchComponent:y.Q,loading:this.renderLoadingVideoPlayer},void 0,(function(e){return Object(n.a)(e,{preview:s.get("preview_url"),blurhash:s.get("blurhash"),src:s.get("url"),alt:s.get("description"),width:239,height:110,inline:!0,sensitive:t.get("sensitive"),revealed:!1,onOpenVideo:w.a})}))}else r=Object(n.a)(C.a,{fetchComponent:y.C,loading:this.renderLoadingMediaGallery},void 0,(function(e){return Object(n.a)(e,{media:t.get("media_attachments"),sensitive:t.get("sensitive"),revealed:!1,height:110,onOpenMedia:w.a})}));return(Object(n.a)("div",{className:"status-check-box"},void 0,Object(n.a)("div",{className:"status-check-box__status"},void 0,Object(n.a)(_.a,{status:t,media:r})),Object(n.a)("div",{className:"status-check-box-toggle"},void 0,Object(n.a)(j.a,{checked:a,onChange:o,disabled:i}))))},a}(c.a.PureComponent),S=a(4),x=Object(d.connect)((function(e,t){var a=t.id;return{status:e.getIn(["statuses",a]),checked:e.getIn(["reports","new","status_ids"],Object(S.Set)()).includes(a)}}),(function(e,t){var a=t.id;return{onToggle:function(t){e(Object(l.m)(a,t.target.checked))}}}))(N),R=a(21),q=a(68),F=a(41);var K=Object(v.f)({close:{id:"lightbox.close",defaultMessage:"Close"},placeholder:{id:"report.placeholder",defaultMessage:"Additional comments"},submit:{id:"report.submit",defaultMessage:"Submit"}}),T=Object(d.connect)((function(){var e=Object(m.d)();return function(t){var a=t.getIn(["reports","new","account_id"]);return{isSubmitting:t.getIn(["reports","new","isSubmitting"]),account:e(t,a),comment:t.getIn(["reports","new","comment"]),forward:t.getIn(["reports","new","forward"]),statusIds:Object(S.OrderedSet)(t.getIn(["timelines","account:"+a+":with_replies","items"])).union(t.getIn(["reports","new","status_ids"]))}}}))(k=Object(v.g)((M=I=function(e){Object(i.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return t=e.call.apply(e,[this].concat(n))||this,Object(r.a)(Object(o.a)(t),"handleCommentChange",(function(e){t.props.dispatch(Object(l.i)(e.target.value))})),Object(r.a)(Object(o.a)(t),"handleForwardChange",(function(e){t.props.dispatch(Object(l.j)(e.target.checked))})),Object(r.a)(Object(o.a)(t),"handleSubmit",(function(){t.props.dispatch(Object(l.l)())})),Object(r.a)(Object(o.a)(t),"handleKeyDown",(function(e){13===e.keyCode&&(e.ctrlKey||e.metaKey)&&t.handleSubmit()})),t}var s=a.prototype;return s.componentDidMount=function(){this.props.dispatch(Object(u.q)(this.props.account.get("id"),{withReplies:!0}))},s.componentWillReceiveProps=function(e){this.props.account!==e.account&&e.account&&this.props.dispatch(Object(u.q)(e.account.get("id"),{withReplies:!0}))},s.render=function(){var e=this.props,t=e.account,a=e.comment,o=e.intl,i=e.statusIds,r=e.isSubmitting,s=e.forward,c=e.onClose;if(!t)return null;var d=t.get("acct").split("@")[1];return(Object(n.a)("div",{className:"modal-root__modal report-modal"},void 0,Object(n.a)("div",{className:"report-modal__target"},void 0,Object(n.a)(F.a,{className:"media-modal__close",title:o.formatMessage(K.close),icon:"times",onClick:c,size:16}),Object(n.a)(v.b,{id:"report.target",defaultMessage:"Report {target}",values:{target:Object(n.a)("strong",{},void 0,t.get("acct"))}})),Object(n.a)("div",{className:"report-modal__container"},void 0,Object(n.a)("div",{className:"report-modal__comment"},void 0,Object(n.a)("p",{},void 0,Object(n.a)(v.b,{id:"report.hint",defaultMessage:"The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:"})),Object(n.a)("textarea",{className:"setting-text light",placeholder:o.formatMessage(K.placeholder),value:a,onChange:this.handleCommentChange,onKeyDown:this.handleKeyDown,disabled:r,autoFocus:!0}),d&&Object(n.a)("div",{},void 0,Object(n.a)("p",{},void 0,Object(n.a)(v.b,{id:"report.forward_hint",defaultMessage:"The account is from another server. Send an anonymized copy of the report there as well?"})),Object(n.a)("div",{className:"setting-toggle"},void 0,Object(n.a)(j.a,{id:"report-forward",checked:s,disabled:r,onChange:this.handleForwardChange}),Object(n.a)("label",{htmlFor:"report-forward",className:"setting-toggle__label"},void 0,Object(n.a)(v.b,{id:"report.forward",defaultMessage:"Forward to {target}",values:{target:d}})))),Object(n.a)(q.a,{disabled:r,text:o.formatMessage(K.submit),onClick:this.handleSubmit})),Object(n.a)("div",{className:"report-modal__statuses"},void 0,Object(n.a)("div",{},void 0,i.map((function(e){return Object(n.a)(x,{id:e,disabled:r},e)})))))))},a}(R.a),Object(r.a)(I,"propTypes",{isSubmitting:p.a.bool,account:g.a.map,statusIds:g.a.orderedSet.isRequired,comment:p.a.string.isRequired,forward:p.a.bool,dispatch:p.a.func.isRequired,intl:p.a.object.isRequired}),k=M))||k)||k}}]);
//# sourceMappingURL=report_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/report_modal.js.map b/priv/static/packs/flavours/glitch/async/report_modal.js.map
index 40cd55a9c..50065b0ba 100644
--- a/priv/static/packs/flavours/glitch/async/report_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/report_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/report/components/status_check_box.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/report/containers/status_check_box_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/report_modal.js"],"names":["StatusCheckBox","render","this","props","status","checked","onToggle","disabled","media","get","size","some","item","getIn","video","fetchComponent","Video","loading","renderLoadingVideoPlayer","Component","preview","blurhash","src","alt","width","height","inline","sensitive","revealed","onOpenVideo","noop","MediaGallery","renderLoadingMediaGallery","onOpenMedia","className","onChange","React","PureComponent","connect","state","id","ImmutableSet","includes","dispatch","e","toggleStatusReport","target","messages","defineMessages","close","placeholder","submit","ReportModal","getAccount","makeGetAccount","accountId","isSubmitting","account","comment","forward","statusIds","OrderedSet","union","injectIntl","changeReportComment","value","changeReportForward","submitReport","keyCode","ctrlKey","metaKey","handleSubmit","componentDidMount","expandAccountTimeline","withReplies","componentWillReceiveProps","nextProps","intl","onClose","domain","split","title","formatMessage","icon","onClick","defaultMessage","values","handleCommentChange","onKeyDown","handleKeyDown","autoFocus","handleForwardChange","htmlFor","text","map","statusId","ImmutablePureComponent","PropTypes","bool","ImmutablePropTypes","orderedSet","isRequired","string","func","object"],"mappings":"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","file":"flavours/glitch/async/report_modal.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Toggle from 'react-toggle';\nimport noop from 'lodash/noop';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport { MediaGallery, Video } from 'flavours/glitch/util/async-components';\nimport Bundle from 'flavours/glitch/features/ui/components/bundle';\n\nexport default class StatusCheckBox extends React.PureComponent {\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n checked: PropTypes.bool,\n onToggle: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n };\n\n render () {\n const { status, checked, onToggle, disabled } = this.props;\n let media = null;\n\n if (status.get('reblog')) {\n return null;\n }\n\n if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const video = status.getIn(['media_attachments', 0]);\n\n media = (\n <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >\n {Component => (\n <Component\n preview={video.get('preview_url')}\n blurhash={video.get('blurhash')}\n src={video.get('url')}\n alt={video.get('description')}\n width={239}\n height={110}\n inline\n sensitive={status.get('sensitive')}\n revealed={false}\n onOpenVideo={noop}\n />\n )}\n </Bundle>\n );\n } else {\n media = (\n <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery} >\n {Component => <Component media={status.get('media_attachments')} sensitive={status.get('sensitive')} revealed={false} height={110} onOpenMedia={noop} />}\n </Bundle>\n );\n }\n }\n\n return (\n <div className='status-check-box'>\n <div className='status-check-box__status'>\n <StatusContent\n status={status}\n media={media}\n />\n </div>\n\n <div className='status-check-box-toggle'>\n <Toggle checked={checked} onChange={onToggle} disabled={disabled} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport StatusCheckBox from '../components/status_check_box';\nimport { toggleStatusReport } from 'flavours/glitch/actions/reports';\nimport { Set as ImmutableSet } from 'immutable';\n\nconst mapStateToProps = (state, { id }) => ({\n status: state.getIn(['statuses', id]),\n checked: state.getIn(['reports', 'new', 'status_ids'], ImmutableSet()).includes(id),\n});\n\nconst mapDispatchToProps = (dispatch, { id }) => ({\n\n onToggle (e) {\n dispatch(toggleStatusReport(id, e.target.checked));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StatusCheckBox);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { changeReportComment, changeReportForward, submitReport } from 'flavours/glitch/actions/reports';\nimport { expandAccountTimeline } from 'flavours/glitch/actions/timelines';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport StatusCheckBox from 'flavours/glitch/features/report/containers/status_check_box_container';\nimport { OrderedSet } from 'immutable';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Button from 'flavours/glitch/components/button';\nimport Toggle from 'react-toggle';\nimport IconButton from '../../../components/icon_button';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n placeholder: { id: 'report.placeholder', defaultMessage: 'Additional comments' },\n submit: { id: 'report.submit', defaultMessage: 'Submit' },\n});\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = state => {\n const accountId = state.getIn(['reports', 'new', 'account_id']);\n\n return {\n isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']),\n account: getAccount(state, accountId),\n comment: state.getIn(['reports', 'new', 'comment']),\n forward: state.getIn(['reports', 'new', 'forward']),\n statusIds: OrderedSet(state.getIn(['timelines', `account:${accountId}:with_replies`, 'items'])).union(state.getIn(['reports', 'new', 'status_ids'])),\n };\n };\n\n return mapStateToProps;\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass ReportModal extends ImmutablePureComponent {\n\n static propTypes = {\n isSubmitting: PropTypes.bool,\n account: ImmutablePropTypes.map,\n statusIds: ImmutablePropTypes.orderedSet.isRequired,\n comment: PropTypes.string.isRequired,\n forward: PropTypes.bool,\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleCommentChange = e => {\n this.props.dispatch(changeReportComment(e.target.value));\n }\n\n handleForwardChange = e => {\n this.props.dispatch(changeReportForward(e.target.checked));\n }\n\n handleSubmit = () => {\n this.props.dispatch(submitReport());\n }\n\n handleKeyDown = e => {\n if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n this.handleSubmit();\n }\n }\n\n componentDidMount () {\n this.props.dispatch(expandAccountTimeline(this.props.account.get('id'), { withReplies: true }));\n }\n\n componentWillReceiveProps (nextProps) {\n if (this.props.account !== nextProps.account && nextProps.account) {\n this.props.dispatch(expandAccountTimeline(nextProps.account.get('id'), { withReplies: true }));\n }\n }\n\n render () {\n const { account, comment, intl, statusIds, isSubmitting, forward, onClose } = this.props;\n\n if (!account) {\n return null;\n }\n\n const domain = account.get('acct').split('@')[1];\n\n return (\n <div className='modal-root__modal report-modal'>\n <div className='report-modal__target'>\n <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />\n <FormattedMessage id='report.target' defaultMessage='Report {target}' values={{ target: <strong>{account.get('acct')}</strong> }} />\n </div>\n\n <div className='report-modal__container'>\n <div className='report-modal__comment'>\n <p><FormattedMessage id='report.hint' defaultMessage='The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:' /></p>\n\n <textarea\n className='setting-text light'\n placeholder={intl.formatMessage(messages.placeholder)}\n value={comment}\n onChange={this.handleCommentChange}\n onKeyDown={this.handleKeyDown}\n disabled={isSubmitting}\n autoFocus\n />\n\n {domain && (\n <div>\n <p><FormattedMessage id='report.forward_hint' defaultMessage='The account is from another server. Send an anonymized copy of the report there as well?' /></p>\n\n <div className='setting-toggle'>\n <Toggle id='report-forward' checked={forward} disabled={isSubmitting} onChange={this.handleForwardChange} />\n <label htmlFor='report-forward' className='setting-toggle__label'><FormattedMessage id='report.forward' defaultMessage='Forward to {target}' values={{ target: domain }} /></label>\n </div>\n </div>\n )}\n\n <Button disabled={isSubmitting} text={intl.formatMessage(messages.submit)} onClick={this.handleSubmit} />\n </div>\n\n <div className='report-modal__statuses'>\n <div>\n {statusIds.map(statusId => <StatusCheckBox id={statusId} key={statusId} disabled={isSubmitting} />)}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/report/components/status_check_box.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/report/containers/status_check_box_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/ui/components/report_modal.js"],"names":["StatusCheckBox","render","this","props","status","checked","onToggle","disabled","media","get","size","some","item","getIn","video","fetchComponent","Video","loading","renderLoadingVideoPlayer","Component","preview","blurhash","src","alt","width","height","inline","sensitive","revealed","onOpenVideo","noop","MediaGallery","renderLoadingMediaGallery","onOpenMedia","className","onChange","React","PureComponent","connect","state","id","ImmutableSet","includes","dispatch","e","toggleStatusReport","target","messages","defineMessages","close","placeholder","submit","ReportModal","getAccount","makeGetAccount","accountId","isSubmitting","account","comment","forward","statusIds","OrderedSet","union","injectIntl","changeReportComment","value","changeReportForward","submitReport","keyCode","ctrlKey","metaKey","handleSubmit","componentDidMount","expandAccountTimeline","withReplies","componentWillReceiveProps","nextProps","intl","onClose","domain","split","title","formatMessage","icon","onClick","defaultMessage","values","handleCommentChange","onKeyDown","handleKeyDown","autoFocus","handleForwardChange","htmlFor","text","map","statusId","ImmutablePureComponent","PropTypes","bool","ImmutablePropTypes","orderedSet","isRequired","string","func","object"],"mappings":"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","file":"flavours/glitch/async/report_modal.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Toggle from 'react-toggle';\nimport noop from 'lodash/noop';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport { MediaGallery, Video } from 'flavours/glitch/util/async-components';\nimport Bundle from 'flavours/glitch/features/ui/components/bundle';\n\nexport default class StatusCheckBox extends React.PureComponent {\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n checked: PropTypes.bool,\n onToggle: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n };\n\n render () {\n const { status, checked, onToggle, disabled } = this.props;\n let media = null;\n\n if (status.get('reblog')) {\n return null;\n }\n\n if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const video = status.getIn(['media_attachments', 0]);\n\n media = (\n <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >\n {Component => (\n <Component\n preview={video.get('preview_url')}\n blurhash={video.get('blurhash')}\n src={video.get('url')}\n alt={video.get('description')}\n width={239}\n height={110}\n inline\n sensitive={status.get('sensitive')}\n revealed={false}\n onOpenVideo={noop}\n />\n )}\n </Bundle>\n );\n } else {\n media = (\n <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery} >\n {Component => <Component media={status.get('media_attachments')} sensitive={status.get('sensitive')} revealed={false} height={110} onOpenMedia={noop} />}\n </Bundle>\n );\n }\n }\n\n return (\n <div className='status-check-box'>\n <div className='status-check-box__status'>\n <StatusContent\n status={status}\n media={media}\n />\n </div>\n\n <div className='status-check-box-toggle'>\n <Toggle checked={checked} onChange={onToggle} disabled={disabled} />\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport StatusCheckBox from '../components/status_check_box';\nimport { toggleStatusReport } from 'flavours/glitch/actions/reports';\nimport { Set as ImmutableSet } from 'immutable';\n\nconst mapStateToProps = (state, { id }) => ({\n status: state.getIn(['statuses', id]),\n checked: state.getIn(['reports', 'new', 'status_ids'], ImmutableSet()).includes(id),\n});\n\nconst mapDispatchToProps = (dispatch, { id }) => ({\n\n onToggle (e) {\n dispatch(toggleStatusReport(id, e.target.checked));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StatusCheckBox);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { changeReportComment, changeReportForward, submitReport } from 'flavours/glitch/actions/reports';\nimport { expandAccountTimeline } from 'flavours/glitch/actions/timelines';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport StatusCheckBox from 'flavours/glitch/features/report/containers/status_check_box_container';\nimport { OrderedSet } from 'immutable';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Button from 'flavours/glitch/components/button';\nimport Toggle from 'react-toggle';\nimport IconButton from '../../../components/icon_button';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n placeholder: { id: 'report.placeholder', defaultMessage: 'Additional comments' },\n submit: { id: 'report.submit', defaultMessage: 'Submit' },\n});\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = state => {\n const accountId = state.getIn(['reports', 'new', 'account_id']);\n\n return {\n isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']),\n account: getAccount(state, accountId),\n comment: state.getIn(['reports', 'new', 'comment']),\n forward: state.getIn(['reports', 'new', 'forward']),\n statusIds: OrderedSet(state.getIn(['timelines', `account:${accountId}:with_replies`, 'items'])).union(state.getIn(['reports', 'new', 'status_ids'])),\n };\n };\n\n return mapStateToProps;\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass ReportModal extends ImmutablePureComponent {\n\n static propTypes = {\n isSubmitting: PropTypes.bool,\n account: ImmutablePropTypes.map,\n statusIds: ImmutablePropTypes.orderedSet.isRequired,\n comment: PropTypes.string.isRequired,\n forward: PropTypes.bool,\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleCommentChange = e => {\n this.props.dispatch(changeReportComment(e.target.value));\n }\n\n handleForwardChange = e => {\n this.props.dispatch(changeReportForward(e.target.checked));\n }\n\n handleSubmit = () => {\n this.props.dispatch(submitReport());\n }\n\n handleKeyDown = e => {\n if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n this.handleSubmit();\n }\n }\n\n componentDidMount () {\n this.props.dispatch(expandAccountTimeline(this.props.account.get('id'), { withReplies: true }));\n }\n\n componentWillReceiveProps (nextProps) {\n if (this.props.account !== nextProps.account && nextProps.account) {\n this.props.dispatch(expandAccountTimeline(nextProps.account.get('id'), { withReplies: true }));\n }\n }\n\n render () {\n const { account, comment, intl, statusIds, isSubmitting, forward, onClose } = this.props;\n\n if (!account) {\n return null;\n }\n\n const domain = account.get('acct').split('@')[1];\n\n return (\n <div className='modal-root__modal report-modal'>\n <div className='report-modal__target'>\n <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} />\n <FormattedMessage id='report.target' defaultMessage='Report {target}' values={{ target: <strong>{account.get('acct')}</strong> }} />\n </div>\n\n <div className='report-modal__container'>\n <div className='report-modal__comment'>\n <p><FormattedMessage id='report.hint' defaultMessage='The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:' /></p>\n\n <textarea\n className='setting-text light'\n placeholder={intl.formatMessage(messages.placeholder)}\n value={comment}\n onChange={this.handleCommentChange}\n onKeyDown={this.handleKeyDown}\n disabled={isSubmitting}\n autoFocus\n />\n\n {domain && (\n <div>\n <p><FormattedMessage id='report.forward_hint' defaultMessage='The account is from another server. Send an anonymized copy of the report there as well?' /></p>\n\n <div className='setting-toggle'>\n <Toggle id='report-forward' checked={forward} disabled={isSubmitting} onChange={this.handleForwardChange} />\n <label htmlFor='report-forward' className='setting-toggle__label'><FormattedMessage id='report.forward' defaultMessage='Forward to {target}' values={{ target: domain }} /></label>\n </div>\n </div>\n )}\n\n <Button disabled={isSubmitting} text={intl.formatMessage(messages.submit)} onClick={this.handleSubmit} />\n </div>\n\n <div className='report-modal__statuses'>\n <div>\n {statusIds.map(statusId => <StatusCheckBox id={statusId} key={statusId} disabled={isSubmitting} />)}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/settings_modal.js b/priv/static/packs/flavours/glitch/async/settings_modal.js
index de55ebceb..7aa1fb5a8 100644
--- a/priv/static/packs/flavours/glitch/async/settings_modal.js
+++ b/priv/static/packs/flavours/glitch/async/settings_modal.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{810:function(e,t,a){"use strict";a.r(t);var s,i,n=a(0),o=a(2),d=a(7),l=a(1),c=a(3),g=a.n(c),r=a(13),b=a(6),u=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(l.a)(Object(o.a)(t),"handleChange",(function(e){var a=e.target,s=t.props,i=s.item,n=s.onChange,o=s.options,d=s.placeholder;o&&o.length>0?n(i,a.value):n(i,d?a.value:a.checked)})),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.handleChange,t=this.props,a=t.settings,s=t.item,i=t.id,o=t.options,d=t.children,l=t.dependsOn,c=t.dependsOnNot,g=t.placeholder,r=!0;if(l)for(var b=0;b<l.length;b++)r=r&&a.getIn(l[b]);if(c)for(var u=0;u<c.length;u++)r=r&&!a.getIn(c[u]);if(o&&o.length>0){var m=a.getIn(s),p=o&&o.length>0&&o.map((function(t){var a=i+"--"+t.value;return Object(n.a)("label",{htmlFor:a},void 0,Object(n.a)("input",{type:"radio",name:i,id:a,value:t.value,onBlur:e,onChange:e,checked:m===t.value,disabled:!r}),t.message,t.hint&&Object(n.a)("span",{className:"hint"},void 0,t.hint))}));return Object(n.a)("div",{className:"glitch local-settings__page__item radio_buttons"},void 0,Object(n.a)("fieldset",{},void 0,Object(n.a)("legend",{},void 0,d),p))}return g?Object(n.a)("div",{className:"glitch local-settings__page__item string"},void 0,Object(n.a)("label",{htmlFor:i},void 0,Object(n.a)("p",{},void 0,d),Object(n.a)("p",{},void 0,Object(n.a)("input",{id:i,type:"text",value:a.getIn(s),placeholder:g,onChange:e,disabled:!r})))):Object(n.a)("div",{className:"glitch local-settings__page__item boolean"},void 0,Object(n.a)("label",{htmlFor:i},void 0,Object(n.a)("input",{id:i,type:"checkbox",checked:a.getIn(s),onChange:e,disabled:!r}),d))},t}(g.a.PureComponent),m=Object(b.f)({layout_auto:{id:"layout.auto",defaultMessage:"Auto"},layout_auto_hint:{id:"layout.hint.auto",defaultMessage:"Automatically chose layout based on “Enable advanced web interface” setting and screen size."},layout_desktop:{id:"layout.desktop",defaultMessage:"Desktop"},layout_desktop_hint:{id:"layout.hint.desktop",defaultMessage:"Use multiple-column layout regardless of the “Enable advanced web interface” setting or screen size."},layout_mobile:{id:"layout.single",defaultMessage:"Mobile"},layout_mobile_hint:{id:"layout.hint.single",defaultMessage:"Use single-column layout regardless of the “Enable advanced web interface” setting or screen size."},side_arm_none:{id:"settings.side_arm.none",defaultMessage:"None"},side_arm_keep:{id:"settings.side_arm_reply_mode.keep",defaultMessage:"Keep secondary toot button to set privacy"},side_arm_copy:{id:"settings.side_arm_reply_mode.copy",defaultMessage:"Copy privacy setting of the toot being replied to"},side_arm_restrict:{id:"settings.side_arm_reply_mode.restrict",defaultMessage:"Restrict privacy setting to that of the toot being replied to"},regexp:{id:"settings.content_warnings.regexp",defaultMessage:"Regular expression"},filters_drop:{id:"settings.filtering_behavior.drop",defaultMessage:"Hide filtered toots completely"},filters_upstream:{id:"settings.filtering_behavior.upstream",defaultMessage:'Show "filtered" like vanilla Mastodon'},filters_hide:{id:"settings.filtering_behavior.hide",defaultMessage:'Show "filtered" and add a button to display why'},filters_cw:{id:"settings.filtering_behavior.cw",defaultMessage:"Still display the post, and add filtered words to content warning"},rewrite_mentions_no:{id:"settings.rewrite_mentions_no",defaultMessage:"Do not rewrite mentions"},rewrite_mentions_acct:{id:"settings.rewrite_mentions_acct",defaultMessage:"Rewrite with username and domain (when the account is remote)"},rewrite_mentions_username:{id:"settings.rewrite_mentions_username",defaultMessage:"Rewrite with username"}}),p=Object(b.g)(s=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(l.a)(Object(o.a)(t),"pages",[function(e){var t=e.intl,a=e.onChange,s=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page general"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.general",defaultMessage:"General"})),Object(n.a)(u,{settings:s,item:["show_reply_count"],id:"mastodon-settings--reply-count",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.show_reply_counter",defaultMessage:"Display an estimate of the reply count"})),Object(n.a)(u,{settings:s,item:["hicolor_privacy_icons"],id:"mastodon-settings--hicolor_privacy_icons",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.hicolor_privacy_icons",defaultMessage:"High color privacy icons"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.hicolor_privacy_icons.hint",defaultMessage:"Display privacy icons in bright and easily distinguishable colors"}))),Object(n.a)(u,{settings:s,item:["confirm_boost_missing_media_description"],id:"mastodon-settings--confirm_boost_missing_media_description",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.confirm_boost_missing_media_description",defaultMessage:"Show confirmation dialog before boosting toots lacking media descriptions"})),Object(n.a)(u,{settings:s,item:["tag_misleading_links"],id:"mastodon-settings--tag_misleading_links",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.tag_misleading_links",defaultMessage:"Tag misleading links"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.tag_misleading_links.hint",defaultMessage:"Add a visual indication with the link target host to every link not mentioning it explicitly"}))),Object(n.a)(u,{settings:s,item:["rewrite_mentions"],id:"mastodon-settings--rewrite_mentions",options:[{value:"no",message:t.formatMessage(m.rewrite_mentions_no)},{value:"acct",message:t.formatMessage(m.rewrite_mentions_acct)},{value:"username",message:t.formatMessage(m.rewrite_mentions_username)}],onChange:a},void 0,Object(n.a)(b.b,{id:"settings.rewrite_mentions",defaultMessage:"Rewrite mentions in displayed statuses"})),Object(n.a)("section",{},void 0,Object(n.a)("h2",{},void 0,Object(n.a)(b.b,{id:"settings.notifications_opts",defaultMessage:"Notifications options"})),Object(n.a)(u,{settings:s,item:["notifications","tab_badge"],id:"mastodon-settings--notifications-tab_badge",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.notifications.tab_badge",defaultMessage:"Unread notifications badge"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.notifications.tab_badge.hint",defaultMessage:"Display a badge for unread notifications in the column icons when the notifications column isn't open"}))),Object(n.a)(u,{settings:s,item:["notifications","favicon_badge"],id:"mastodon-settings--notifications-favicon_badge",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.notifications.favicon_badge",defaultMessage:"Unread notifications favicon badge"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.notifications.favicon_badge.hint",defaultMessage:"Add a badge for unread notifications to the favicon"})))),Object(n.a)("section",{},void 0,Object(n.a)("h2",{},void 0,Object(n.a)(b.b,{id:"settings.layout_opts",defaultMessage:"Layout options"})),Object(n.a)(u,{settings:s,item:["layout"],id:"mastodon-settings--layout",options:[{value:"auto",message:t.formatMessage(m.layout_auto),hint:t.formatMessage(m.layout_auto_hint)},{value:"multiple",message:t.formatMessage(m.layout_desktop),hint:t.formatMessage(m.layout_desktop_hint)},{value:"single",message:t.formatMessage(m.layout_mobile),hint:t.formatMessage(m.layout_mobile_hint)}],onChange:a},void 0,Object(n.a)(b.b,{id:"settings.layout",defaultMessage:"Layout:"})),Object(n.a)(u,{settings:s,item:["stretch"],id:"mastodon-settings--stretch",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.wide_view",defaultMessage:"Wide view (Desktop mode only)"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.wide_view_hint",defaultMessage:"Stretches columns to better fill the available space."}))),Object(n.a)(u,{settings:s,item:["navbar_under"],id:"mastodon-settings--navbar_under",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.navbar_under",defaultMessage:"Navbar at the bottom (Mobile only)"})),Object(n.a)(u,{settings:s,item:["swipe_to_change_columns"],id:"mastodon-settings--swipe_to_change_columns",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.swipe_to_change_columns",defaultMessage:"Allow swiping to change columns (Mobile only)"}))))},function(e){var t=e.intl,a=e.onChange,s=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page compose_box_opts"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.compose_box_opts",defaultMessage:"Compose box"})),Object(n.a)(u,{settings:s,item:["always_show_spoilers_field"],id:"mastodon-settings--always_show_spoilers_field",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.always_show_spoilers_field",defaultMessage:"Always enable the Content Warning field"})),Object(n.a)(u,{settings:s,item:["prepend_cw_re"],id:"mastodon-settings--prepend_cw_re",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.prepend_cw_re",defaultMessage:"Prepend “re: ” to content warnings when replying"})),Object(n.a)(u,{settings:s,item:["preselect_on_reply"],id:"mastodon-settings--preselect_on_reply",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.preselect_on_reply",defaultMessage:"Pre-select usernames on reply"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.preselect_on_reply_hint",defaultMessage:"When replying to a conversation with multiple participants, pre-select usernames past the first"}))),Object(n.a)(u,{settings:s,item:["confirm_missing_media_description"],id:"mastodon-settings--confirm_missing_media_description",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.confirm_missing_media_description",defaultMessage:"Show confirmation dialog before sending toots lacking media descriptions"})),Object(n.a)(u,{settings:s,item:["confirm_before_clearing_draft"],id:"mastodon-settings--confirm_before_clearing_draft",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.confirm_before_clearing_draft",defaultMessage:"Show confirmation dialog before overwriting the message being composed"})),Object(n.a)(u,{settings:s,item:["show_content_type_choice"],id:"mastodon-settings--show_content_type_choice",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.show_content_type_choice",defaultMessage:"Show content-type choice when authoring toots"})),Object(n.a)(u,{settings:s,item:["side_arm"],id:"mastodon-settings--side_arm",options:[{value:"none",message:t.formatMessage(m.side_arm_none)},{value:"direct",message:t.formatMessage({id:"privacy.direct.short"})},{value:"private",message:t.formatMessage({id:"privacy.private.short"})},{value:"unlisted",message:t.formatMessage({id:"privacy.unlisted.short"})},{value:"public",message:t.formatMessage({id:"privacy.public.short"})}],onChange:a},void 0,Object(n.a)(b.b,{id:"settings.side_arm",defaultMessage:"Secondary toot button:"})),Object(n.a)(u,{settings:s,item:["side_arm_reply_mode"],id:"mastodon-settings--side_arm_reply_mode",options:[{value:"keep",message:t.formatMessage(m.side_arm_keep)},{value:"copy",message:t.formatMessage(m.side_arm_copy)},{value:"restrict",message:t.formatMessage(m.side_arm_restrict)}],onChange:a},void 0,Object(n.a)(b.b,{id:"settings.side_arm_reply_mode",defaultMessage:"When replying to a toot:"})))},function(e){var t=e.intl,a=e.onChange,s=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page content_warnings"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.content_warnings",defaultMessage:"Content warnings"})),Object(n.a)(u,{settings:s,item:["content_warnings","auto_unfold"],id:"mastodon-settings--content_warnings-auto_unfold",onChange:a},void 0,Object(n.a)(b.b,{id:"settings.enable_content_warnings_auto_unfold",defaultMessage:"Automatically unfold content-warnings"})),Object(n.a)(u,{settings:s,item:["content_warnings","filter"],id:"mastodon-settings--content_warnings-auto_unfold",onChange:a,dependsOn:[["content_warnings","auto_unfold"]],placeholder:t.formatMessage(m.regexp)},void 0,Object(n.a)(b.b,{id:"settings.content_warnings_filter",defaultMessage:"Content warnings to not automatically unfold:"})))},function(e){var t=e.intl,a=e.onChange,s=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page filters"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.filters",defaultMessage:"Filters"})),Object(n.a)(u,{settings:s,item:["filtering_behavior"],id:"mastodon-settings--filters-behavior",onChange:a,options:[{value:"drop",message:t.formatMessage(m.filters_drop)},{value:"upstream",message:t.formatMessage(m.filters_upstream)},{value:"hide",message:t.formatMessage(m.filters_hide)},{value:"content_warning",message:t.formatMessage(m.filters_cw)}]},void 0,Object(n.a)(b.b,{id:"settings.filtering_behavior",defaultMessage:"Filtering behavior"})))},function(e){var t=e.onChange,a=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page collapsed"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.collapsed_statuses",defaultMessage:"Collapsed toots"})),Object(n.a)(u,{settings:a,item:["collapsed","enabled"],id:"mastodon-settings--collapsed-enabled",onChange:t},void 0,Object(n.a)(b.b,{id:"settings.enable_collapsed",defaultMessage:"Enable collapsed toots"})),Object(n.a)(u,{settings:a,item:["collapsed","show_action_bar"],id:"mastodon-settings--collapsed-show-action-bar",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(n.a)(b.b,{id:"settings.show_action_bar",defaultMessage:"Show action buttons in collapsed toots"})),Object(n.a)("section",{},void 0,Object(n.a)("h2",{},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse",defaultMessage:"Automatic collapsing"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","all"],id:"mastodon-settings--collapsed-auto-all",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_all",defaultMessage:"Everything"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","notifications"],id:"mastodon-settings--collapsed-auto-notifications",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_notifications",defaultMessage:"Notifications"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","lengthy"],id:"mastodon-settings--collapsed-auto-lengthy",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_lengthy",defaultMessage:"Lengthy toots"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","reblogs"],id:"mastodon-settings--collapsed-auto-reblogs",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_reblogs",defaultMessage:"Boosts"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","replies"],id:"mastodon-settings--collapsed-auto-replies",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_replies",defaultMessage:"Replies"})),Object(n.a)(u,{settings:a,item:["collapsed","auto","media"],id:"mastodon-settings--collapsed-auto-media",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(n.a)(b.b,{id:"settings.auto_collapse_media",defaultMessage:"Toots with media"}))),Object(n.a)("section",{},void 0,Object(n.a)("h2",{},void 0,Object(n.a)(b.b,{id:"settings.image_backgrounds",defaultMessage:"Image backgrounds"})),Object(n.a)(u,{settings:a,item:["collapsed","backgrounds","user_backgrounds"],id:"mastodon-settings--collapsed-user-backgrouns",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(n.a)(b.b,{id:"settings.image_backgrounds_users",defaultMessage:"Give collapsed toots an image background"})),Object(n.a)(u,{settings:a,item:["collapsed","backgrounds","preview_images"],id:"mastodon-settings--collapsed-preview-images",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(n.a)(b.b,{id:"settings.image_backgrounds_media",defaultMessage:"Preview collapsed toot media"}))))},function(e){var t=e.onChange,a=e.settings;return Object(n.a)("div",{className:"glitch local-settings__page media"},void 0,Object(n.a)("h1",{},void 0,Object(n.a)(b.b,{id:"settings.media",defaultMessage:"Media"})),Object(n.a)(u,{settings:a,item:["media","letterbox"],id:"mastodon-settings--media-letterbox",onChange:t},void 0,Object(n.a)(b.b,{id:"settings.media_letterbox",defaultMessage:"Letterbox media"}),Object(n.a)("span",{className:"hint"},void 0,Object(n.a)(b.b,{id:"settings.media_letterbox_hint",defaultMessage:"Scale down and letterbox media to fill the image containers instead of stretching and cropping them"}))),Object(n.a)(u,{settings:a,item:["media","fullwidth"],id:"mastodon-settings--media-fullwidth",onChange:t},void 0,Object(n.a)(b.b,{id:"settings.media_fullwidth",defaultMessage:"Full-width media previews"})),Object(n.a)(u,{settings:a,item:["inline_preview_cards"],id:"mastodon-settings--inline-preview-cards",onChange:t},void 0,Object(n.a)(b.b,{id:"settings.inline_preview_cards",defaultMessage:"Inline preview cards for external links"})),Object(n.a)(u,{settings:a,item:["media","reveal_behind_cw"],id:"mastodon-settings--reveal-behind-cw",onChange:t},void 0,Object(n.a)(b.b,{id:"settings.media_reveal_behind_cw",defaultMessage:"Reveal sensitive media behind a CW by default"})))}]),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.pages,t=this.props,a=t.index,s=t.intl,i=t.onChange,o=t.settings,d=e[a]||e[0];return Object(n.a)(d,{intl:s,onChange:i,settings:o})},t}(g.a.PureComponent))||s,_=a(12),f=a.n(_),h=a(23),v=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(l.a)(Object(o.a)(t),"handleClick",(function(e){var a=t.props,s=a.index,i=a.onNavigate;i&&(i(s),e.preventDefault())})),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.handleClick,t=this.props,a=t.active,s=t.className,i=t.href,o=t.icon,d=t.textIcon,l=t.onNavigate,c=t.title,g=f()("glitch","local-settings__navigation__item",{active:a},s),r=o?Object(n.a)(h.a,{fixedWidth:!0,id:o}):d?Object(n.a)("span",{className:"text-icon-button"},void 0,d):null;return i?Object(n.a)("a",{href:i,className:g},void 0,r," ",Object(n.a)("span",{},void 0,c)):l?Object(n.a)("a",{onClick:e,role:"button",tabIndex:"0",className:g},void 0,r," ",Object(n.a)("span",{},void 0,c)):null},t}(g.a.PureComponent),O=a(145),j=Object(b.f)({general:{id:"settings.general",defaultMessage:"General"},compose:{id:"settings.compose_box_opts",defaultMessage:"Compose box"},content_warnings:{id:"settings.content_warnings",defaultMessage:"Content Warnings"},filters:{id:"settings.filters",defaultMessage:"Filters"},collapsed:{id:"settings.collapsed_statuses",defaultMessage:"Collapsed toots"},media:{id:"settings.media",defaultMessage:"Media"},preferences:{id:"settings.preferences",defaultMessage:"Preferences"},close:{id:"settings.close",defaultMessage:"Close"}}),M=Object(b.g)(i=function(e){function t(){return e.apply(this,arguments)||this}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.index,a=e.intl,s=e.onClose,i=e.onNavigate;return Object(n.a)("nav",{className:"glitch local-settings__navigation"},void 0,Object(n.a)(v,{active:0===t,index:0,onNavigate:i,icon:"cogs",title:a.formatMessage(j.general)}),Object(n.a)(v,{active:1===t,index:1,onNavigate:i,icon:"pencil",title:a.formatMessage(j.compose)}),Object(n.a)(v,{active:2===t,index:2,onNavigate:i,textIcon:"CW",title:a.formatMessage(j.content_warnings)}),Object(n.a)(v,{active:3===t,index:3,onNavigate:i,icon:"filter",title:a.formatMessage(j.filters)}),Object(n.a)(v,{active:4===t,index:4,onNavigate:i,icon:"angle-double-up",title:a.formatMessage(j.collapsed)}),Object(n.a)(v,{active:5===t,index:5,onNavigate:i,icon:"image",title:a.formatMessage(j.media)}),Object(n.a)(v,{active:6===t,href:O.c,index:6,icon:"cog",title:a.formatMessage(j.preferences)}),Object(n.a)(v,{active:7===t,className:"close",index:7,onNavigate:s,icon:"times",title:a.formatMessage(j.close)}))},t}(g.a.PureComponent))||i,w=a(42),y=a(303),C=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(l.a)(Object(o.a)(t),"state",{currentIndex:0}),Object(l.a)(Object(o.a)(t),"navigateTo",(function(e){return t.setState({currentIndex:+e})})),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.navigateTo,t=this.props,a=t.onChange,s=t.onClose,i=t.settings,o=this.state.currentIndex;return Object(n.a)("div",{className:"glitch modal-root__modal local-settings"},void 0,Object(n.a)(M,{index:o,onClose:s,onNavigate:e}),Object(n.a)(p,{index:o,onChange:a,settings:i}))},t}(g.a.PureComponent);t.default=Object(r.connect)((function(e){return{settings:e.get("local_settings")}}),(function(e){return{onChange:function(t,a){e(Object(y.b)(t,a))},onClose:function(){e(Object(w.c)())}}}))(C)}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{836:function(e,t,a){"use strict";a.r(t);var s=a(0),i=a(2),n=(a(9),a(6),a(8)),o=a(1),d=a(3),l=a.n(d),c=a(15),g=a(7);var r,b=function(e){Object(n.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];return t=e.call.apply(e,[this].concat(s))||this,Object(o.a)(Object(i.a)(t),"handleChange",(function(e){var a=e.target,s=t.props,i=s.item,n=s.onChange,o=s.options,d=s.placeholder;o&&o.length>0?n(i,a.value):n(i,d?a.value:a.checked)})),t}return a.prototype.render=function(){var e=this.handleChange,t=this.props,a=t.settings,i=t.item,n=t.id,o=t.options,d=t.children,l=t.dependsOn,c=t.dependsOnNot,g=t.placeholder,r=!0;if(l)for(var b=0;b<l.length;b++)r=r&&a.getIn(l[b]);if(c)for(var u=0;u<c.length;u++)r=r&&!a.getIn(c[u]);if(o&&o.length>0){var m=a.getIn(i),p=o&&o.length>0&&o.map((function(t){var a=n+"--"+t.value;return(Object(s.a)("label",{htmlFor:a},void 0,Object(s.a)("input",{type:"radio",name:n,id:a,value:t.value,onBlur:e,onChange:e,checked:m===t.value,disabled:!r}),t.message,t.hint&&Object(s.a)("span",{className:"hint"},void 0,t.hint)))}));return Object(s.a)("div",{className:"glitch local-settings__page__item radio_buttons"},void 0,Object(s.a)("fieldset",{},void 0,Object(s.a)("legend",{},void 0,d),p))}return g?Object(s.a)("div",{className:"glitch local-settings__page__item string"},void 0,Object(s.a)("label",{htmlFor:n},void 0,Object(s.a)("p",{},void 0,d),Object(s.a)("p",{},void 0,Object(s.a)("input",{id:n,type:"text",value:a.getIn(i),placeholder:g,onChange:e,disabled:!r})))):Object(s.a)("div",{className:"glitch local-settings__page__item boolean"},void 0,Object(s.a)("label",{htmlFor:n},void 0,Object(s.a)("input",{id:n,type:"checkbox",checked:a.getIn(i),onChange:e,disabled:!r}),d))},a}(l.a.PureComponent);var u=Object(g.f)({layout_auto:{id:"layout.auto",defaultMessage:"Auto"},layout_auto_hint:{id:"layout.hint.auto",defaultMessage:"Automatically chose layout based on “Enable advanced web interface” setting and screen size."},layout_desktop:{id:"layout.desktop",defaultMessage:"Desktop"},layout_desktop_hint:{id:"layout.hint.desktop",defaultMessage:"Use multiple-column layout regardless of the “Enable advanced web interface” setting or screen size."},layout_mobile:{id:"layout.single",defaultMessage:"Mobile"},layout_mobile_hint:{id:"layout.hint.single",defaultMessage:"Use single-column layout regardless of the “Enable advanced web interface” setting or screen size."},side_arm_none:{id:"settings.side_arm.none",defaultMessage:"None"},side_arm_keep:{id:"settings.side_arm_reply_mode.keep",defaultMessage:"Keep secondary toot button to set privacy"},side_arm_copy:{id:"settings.side_arm_reply_mode.copy",defaultMessage:"Copy privacy setting of the toot being replied to"},side_arm_restrict:{id:"settings.side_arm_reply_mode.restrict",defaultMessage:"Restrict privacy setting to that of the toot being replied to"},regexp:{id:"settings.content_warnings.regexp",defaultMessage:"Regular expression"},filters_drop:{id:"settings.filtering_behavior.drop",defaultMessage:"Hide filtered toots completely"},filters_upstream:{id:"settings.filtering_behavior.upstream",defaultMessage:'Show "filtered" like vanilla Mastodon'},filters_hide:{id:"settings.filtering_behavior.hide",defaultMessage:'Show "filtered" and add a button to display why'},filters_cw:{id:"settings.filtering_behavior.cw",defaultMessage:"Still display the post, and add filtered words to content warning"},rewrite_mentions_no:{id:"settings.rewrite_mentions_no",defaultMessage:"Do not rewrite mentions"},rewrite_mentions_acct:{id:"settings.rewrite_mentions_acct",defaultMessage:"Rewrite with username and domain (when the account is remote)"},rewrite_mentions_username:{id:"settings.rewrite_mentions_username",defaultMessage:"Rewrite with username"}}),m=Object(g.g)(r=function(e){Object(n.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,n=new Array(a),d=0;d<a;d++)n[d]=arguments[d];return t=e.call.apply(e,[this].concat(n))||this,Object(o.a)(Object(i.a)(t),"pages",[function(e){var t=e.intl,a=e.onChange,i=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page general"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.general",defaultMessage:"General"})),Object(s.a)(b,{settings:i,item:["show_reply_count"],id:"mastodon-settings--reply-count",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.show_reply_counter",defaultMessage:"Display an estimate of the reply count"})),Object(s.a)(b,{settings:i,item:["hicolor_privacy_icons"],id:"mastodon-settings--hicolor_privacy_icons",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.hicolor_privacy_icons",defaultMessage:"High color privacy icons"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.hicolor_privacy_icons.hint",defaultMessage:"Display privacy icons in bright and easily distinguishable colors"}))),Object(s.a)(b,{settings:i,item:["confirm_boost_missing_media_description"],id:"mastodon-settings--confirm_boost_missing_media_description",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.confirm_boost_missing_media_description",defaultMessage:"Show confirmation dialog before boosting toots lacking media descriptions"})),Object(s.a)(b,{settings:i,item:["tag_misleading_links"],id:"mastodon-settings--tag_misleading_links",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.tag_misleading_links",defaultMessage:"Tag misleading links"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.tag_misleading_links.hint",defaultMessage:"Add a visual indication with the link target host to every link not mentioning it explicitly"}))),Object(s.a)(b,{settings:i,item:["rewrite_mentions"],id:"mastodon-settings--rewrite_mentions",options:[{value:"no",message:t.formatMessage(u.rewrite_mentions_no)},{value:"acct",message:t.formatMessage(u.rewrite_mentions_acct)},{value:"username",message:t.formatMessage(u.rewrite_mentions_username)}],onChange:a},void 0,Object(s.a)(g.b,{id:"settings.rewrite_mentions",defaultMessage:"Rewrite mentions in displayed statuses"})),Object(s.a)("section",{},void 0,Object(s.a)("h2",{},void 0,Object(s.a)(g.b,{id:"settings.notifications_opts",defaultMessage:"Notifications options"})),Object(s.a)(b,{settings:i,item:["notifications","tab_badge"],id:"mastodon-settings--notifications-tab_badge",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.notifications.tab_badge",defaultMessage:"Unread notifications badge"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.notifications.tab_badge.hint",defaultMessage:"Display a badge for unread notifications in the column icons when the notifications column isn't open"}))),Object(s.a)(b,{settings:i,item:["notifications","favicon_badge"],id:"mastodon-settings--notifications-favicon_badge",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.notifications.favicon_badge",defaultMessage:"Unread notifications favicon badge"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.notifications.favicon_badge.hint",defaultMessage:"Add a badge for unread notifications to the favicon"})))),Object(s.a)("section",{},void 0,Object(s.a)("h2",{},void 0,Object(s.a)(g.b,{id:"settings.layout_opts",defaultMessage:"Layout options"})),Object(s.a)(b,{settings:i,item:["layout"],id:"mastodon-settings--layout",options:[{value:"auto",message:t.formatMessage(u.layout_auto),hint:t.formatMessage(u.layout_auto_hint)},{value:"multiple",message:t.formatMessage(u.layout_desktop),hint:t.formatMessage(u.layout_desktop_hint)},{value:"single",message:t.formatMessage(u.layout_mobile),hint:t.formatMessage(u.layout_mobile_hint)}],onChange:a},void 0,Object(s.a)(g.b,{id:"settings.layout",defaultMessage:"Layout:"})),Object(s.a)(b,{settings:i,item:["stretch"],id:"mastodon-settings--stretch",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.wide_view",defaultMessage:"Wide view (Desktop mode only)"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.wide_view_hint",defaultMessage:"Stretches columns to better fill the available space."}))),Object(s.a)(b,{settings:i,item:["navbar_under"],id:"mastodon-settings--navbar_under",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.navbar_under",defaultMessage:"Navbar at the bottom (Mobile only)"})),Object(s.a)(b,{settings:i,item:["swipe_to_change_columns"],id:"mastodon-settings--swipe_to_change_columns",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.swipe_to_change_columns",defaultMessage:"Allow swiping to change columns (Mobile only)"})))))},function(e){var t=e.intl,a=e.onChange,i=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page compose_box_opts"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.compose_box_opts",defaultMessage:"Compose box"})),Object(s.a)(b,{settings:i,item:["always_show_spoilers_field"],id:"mastodon-settings--always_show_spoilers_field",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.always_show_spoilers_field",defaultMessage:"Always enable the Content Warning field"})),Object(s.a)(b,{settings:i,item:["prepend_cw_re"],id:"mastodon-settings--prepend_cw_re",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.prepend_cw_re",defaultMessage:"Prepend “re: ” to content warnings when replying"})),Object(s.a)(b,{settings:i,item:["preselect_on_reply"],id:"mastodon-settings--preselect_on_reply",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.preselect_on_reply",defaultMessage:"Pre-select usernames on reply"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.preselect_on_reply_hint",defaultMessage:"When replying to a conversation with multiple participants, pre-select usernames past the first"}))),Object(s.a)(b,{settings:i,item:["confirm_missing_media_description"],id:"mastodon-settings--confirm_missing_media_description",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.confirm_missing_media_description",defaultMessage:"Show confirmation dialog before sending toots lacking media descriptions"})),Object(s.a)(b,{settings:i,item:["confirm_before_clearing_draft"],id:"mastodon-settings--confirm_before_clearing_draft",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.confirm_before_clearing_draft",defaultMessage:"Show confirmation dialog before overwriting the message being composed"})),Object(s.a)(b,{settings:i,item:["show_content_type_choice"],id:"mastodon-settings--show_content_type_choice",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.show_content_type_choice",defaultMessage:"Show content-type choice when authoring toots"})),Object(s.a)(b,{settings:i,item:["side_arm"],id:"mastodon-settings--side_arm",options:[{value:"none",message:t.formatMessage(u.side_arm_none)},{value:"direct",message:t.formatMessage({id:"privacy.direct.short"})},{value:"private",message:t.formatMessage({id:"privacy.private.short"})},{value:"unlisted",message:t.formatMessage({id:"privacy.unlisted.short"})},{value:"public",message:t.formatMessage({id:"privacy.public.short"})}],onChange:a},void 0,Object(s.a)(g.b,{id:"settings.side_arm",defaultMessage:"Secondary toot button:"})),Object(s.a)(b,{settings:i,item:["side_arm_reply_mode"],id:"mastodon-settings--side_arm_reply_mode",options:[{value:"keep",message:t.formatMessage(u.side_arm_keep)},{value:"copy",message:t.formatMessage(u.side_arm_copy)},{value:"restrict",message:t.formatMessage(u.side_arm_restrict)}],onChange:a},void 0,Object(s.a)(g.b,{id:"settings.side_arm_reply_mode",defaultMessage:"When replying to a toot:"}))))},function(e){var t=e.intl,a=e.onChange,i=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page content_warnings"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.content_warnings",defaultMessage:"Content warnings"})),Object(s.a)(b,{settings:i,item:["content_warnings","auto_unfold"],id:"mastodon-settings--content_warnings-auto_unfold",onChange:a},void 0,Object(s.a)(g.b,{id:"settings.enable_content_warnings_auto_unfold",defaultMessage:"Automatically unfold content-warnings"})),Object(s.a)(b,{settings:i,item:["content_warnings","filter"],id:"mastodon-settings--content_warnings-auto_unfold",onChange:a,dependsOn:[["content_warnings","auto_unfold"]],placeholder:t.formatMessage(u.regexp)},void 0,Object(s.a)(g.b,{id:"settings.content_warnings_filter",defaultMessage:"Content warnings to not automatically unfold:"}))))},function(e){var t=e.intl,a=e.onChange,i=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page filters"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.filters",defaultMessage:"Filters"})),Object(s.a)(b,{settings:i,item:["filtering_behavior"],id:"mastodon-settings--filters-behavior",onChange:a,options:[{value:"drop",message:t.formatMessage(u.filters_drop)},{value:"upstream",message:t.formatMessage(u.filters_upstream)},{value:"hide",message:t.formatMessage(u.filters_hide)},{value:"content_warning",message:t.formatMessage(u.filters_cw)}]},void 0,Object(s.a)(g.b,{id:"settings.filtering_behavior",defaultMessage:"Filtering behavior"}))))},function(e){var t=e.onChange,a=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page collapsed"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.collapsed_statuses",defaultMessage:"Collapsed toots"})),Object(s.a)(b,{settings:a,item:["collapsed","enabled"],id:"mastodon-settings--collapsed-enabled",onChange:t},void 0,Object(s.a)(g.b,{id:"settings.enable_collapsed",defaultMessage:"Enable collapsed toots"})),Object(s.a)(b,{settings:a,item:["collapsed","show_action_bar"],id:"mastodon-settings--collapsed-show-action-bar",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(s.a)(g.b,{id:"settings.show_action_bar",defaultMessage:"Show action buttons in collapsed toots"})),Object(s.a)("section",{},void 0,Object(s.a)("h2",{},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse",defaultMessage:"Automatic collapsing"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","all"],id:"mastodon-settings--collapsed-auto-all",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_all",defaultMessage:"Everything"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","notifications"],id:"mastodon-settings--collapsed-auto-notifications",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_notifications",defaultMessage:"Notifications"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","lengthy"],id:"mastodon-settings--collapsed-auto-lengthy",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_lengthy",defaultMessage:"Lengthy toots"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","reblogs"],id:"mastodon-settings--collapsed-auto-reblogs",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_reblogs",defaultMessage:"Boosts"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","replies"],id:"mastodon-settings--collapsed-auto-replies",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_replies",defaultMessage:"Replies"})),Object(s.a)(b,{settings:a,item:["collapsed","auto","media"],id:"mastodon-settings--collapsed-auto-media",onChange:t,dependsOn:[["collapsed","enabled"]],dependsOnNot:[["collapsed","auto","all"]]},void 0,Object(s.a)(g.b,{id:"settings.auto_collapse_media",defaultMessage:"Toots with media"}))),Object(s.a)("section",{},void 0,Object(s.a)("h2",{},void 0,Object(s.a)(g.b,{id:"settings.image_backgrounds",defaultMessage:"Image backgrounds"})),Object(s.a)(b,{settings:a,item:["collapsed","backgrounds","user_backgrounds"],id:"mastodon-settings--collapsed-user-backgrouns",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(s.a)(g.b,{id:"settings.image_backgrounds_users",defaultMessage:"Give collapsed toots an image background"})),Object(s.a)(b,{settings:a,item:["collapsed","backgrounds","preview_images"],id:"mastodon-settings--collapsed-preview-images",onChange:t,dependsOn:[["collapsed","enabled"]]},void 0,Object(s.a)(g.b,{id:"settings.image_backgrounds_media",defaultMessage:"Preview collapsed toot media"})))))},function(e){var t=e.onChange,a=e.settings;return(Object(s.a)("div",{className:"glitch local-settings__page media"},void 0,Object(s.a)("h1",{},void 0,Object(s.a)(g.b,{id:"settings.media",defaultMessage:"Media"})),Object(s.a)(b,{settings:a,item:["media","letterbox"],id:"mastodon-settings--media-letterbox",onChange:t},void 0,Object(s.a)(g.b,{id:"settings.media_letterbox",defaultMessage:"Letterbox media"}),Object(s.a)("span",{className:"hint"},void 0,Object(s.a)(g.b,{id:"settings.media_letterbox_hint",defaultMessage:"Scale down and letterbox media to fill the image containers instead of stretching and cropping them"}))),Object(s.a)(b,{settings:a,item:["media","fullwidth"],id:"mastodon-settings--media-fullwidth",onChange:t},void 0,Object(s.a)(g.b,{id:"settings.media_fullwidth",defaultMessage:"Full-width media previews"})),Object(s.a)(b,{settings:a,item:["inline_preview_cards"],id:"mastodon-settings--inline-preview-cards",onChange:t},void 0,Object(s.a)(g.b,{id:"settings.inline_preview_cards",defaultMessage:"Inline preview cards for external links"})),Object(s.a)(b,{settings:a,item:["media","reveal_behind_cw"],id:"mastodon-settings--reveal-behind-cw",onChange:t},void 0,Object(s.a)(g.b,{id:"settings.media_reveal_behind_cw",defaultMessage:"Reveal sensitive media behind a CW by default"}))))}]),t}return a.prototype.render=function(){var e=this.pages,t=this.props,a=t.index,i=t.intl,n=t.onChange,o=t.settings,d=e[a]||e[0];return Object(s.a)(d,{intl:i,onChange:n,settings:o})},a}(l.a.PureComponent))||r,p=a(14),_=a.n(p),f=a(25);var h,v=function(e){Object(n.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];return t=e.call.apply(e,[this].concat(s))||this,Object(o.a)(Object(i.a)(t),"handleClick",(function(e){var a=t.props,s=a.index,i=a.onNavigate;i&&(i(s),e.preventDefault())})),t}return a.prototype.render=function(){var e=this.handleClick,t=this.props,a=t.active,i=t.className,n=t.href,o=t.icon,d=t.textIcon,l=t.onNavigate,c=t.title,g=_()("glitch","local-settings__navigation__item",{active:a},i),r=o?Object(s.a)(f.a,{fixedWidth:!0,id:o}):d?Object(s.a)("span",{className:"text-icon-button"},void 0,d):null;return n?Object(s.a)("a",{href:n,className:g},void 0,r," ",Object(s.a)("span",{},void 0,c)):l?Object(s.a)("a",{onClick:e,role:"button",tabIndex:"0",className:g},void 0,r," ",Object(s.a)("span",{},void 0,c)):null},a}(l.a.PureComponent),O=a(150);var j=Object(g.f)({general:{id:"settings.general",defaultMessage:"General"},compose:{id:"settings.compose_box_opts",defaultMessage:"Compose box"},content_warnings:{id:"settings.content_warnings",defaultMessage:"Content Warnings"},filters:{id:"settings.filters",defaultMessage:"Filters"},collapsed:{id:"settings.collapsed_statuses",defaultMessage:"Collapsed toots"},media:{id:"settings.media",defaultMessage:"Media"},preferences:{id:"settings.preferences",defaultMessage:"Preferences"},close:{id:"settings.close",defaultMessage:"Close"}}),M=Object(g.g)(h=function(e){Object(n.a)(a,e);var t;t=a;function a(){return e.apply(this,arguments)||this}return a.prototype.render=function(){var e=this.props,t=e.index,a=e.intl,i=e.onClose,n=e.onNavigate;return(Object(s.a)("nav",{className:"glitch local-settings__navigation"},void 0,Object(s.a)(v,{active:0===t,index:0,onNavigate:n,icon:"cogs",title:a.formatMessage(j.general)}),Object(s.a)(v,{active:1===t,index:1,onNavigate:n,icon:"pencil",title:a.formatMessage(j.compose)}),Object(s.a)(v,{active:2===t,index:2,onNavigate:n,textIcon:"CW",title:a.formatMessage(j.content_warnings)}),Object(s.a)(v,{active:3===t,index:3,onNavigate:n,icon:"filter",title:a.formatMessage(j.filters)}),Object(s.a)(v,{active:4===t,index:4,onNavigate:n,icon:"angle-double-up",title:a.formatMessage(j.collapsed)}),Object(s.a)(v,{active:5===t,index:5,onNavigate:n,icon:"image",title:a.formatMessage(j.media)}),Object(s.a)(v,{active:6===t,href:O.c,index:6,icon:"cog",title:a.formatMessage(j.preferences)}),Object(s.a)(v,{active:7===t,className:"close",index:7,onNavigate:i,icon:"times",title:a.formatMessage(j.close)})))},a}(l.a.PureComponent))||h,w=a(45),y=a(309);var C=function(e){Object(n.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];return t=e.call.apply(e,[this].concat(s))||this,Object(o.a)(Object(i.a)(t),"state",{currentIndex:0}),Object(o.a)(Object(i.a)(t),"navigateTo",(function(e){return t.setState({currentIndex:+e})})),t}return a.prototype.render=function(){var e=this.navigateTo,t=this.props,a=t.onChange,i=t.onClose,n=t.settings,o=this.state.currentIndex;return Object(s.a)("div",{className:"glitch modal-root__modal local-settings"},void 0,Object(s.a)(M,{index:o,onClose:i,onNavigate:e}),Object(s.a)(m,{index:o,onChange:a,settings:n}))},a}(l.a.PureComponent);t.default=Object(c.connect)((function(e){return{settings:e.get("local_settings")}}),(function(e){return{onChange:function(t,a){e(Object(y.b)(t,a))},onClose:function(){e(Object(w.c)())}}}))(C)}}]);
//# sourceMappingURL=settings_modal.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/settings_modal.js.map b/priv/static/packs/flavours/glitch/async/settings_modal.js.map
index 70ebb8ebe..eec31e79a 100644
--- a/priv/static/packs/flavours/glitch/async/settings_modal.js.map
+++ b/priv/static/packs/flavours/glitch/async/settings_modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/page/item/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/page/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/navigation/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/index.js"],"names":["LocalSettingsPageItem","e","target","props","item","onChange","options","placeholder","length","value","checked","render","handleChange","this","settings","id","children","dependsOn","dependsOnNot","enabled","i","getIn","currentValue","optionElems","map","opt","optionId","htmlFor","type","name","onBlur","disabled","message","hint","className","React","PureComponent","messages","defineMessages","layout_auto","layout_auto_hint","layout_desktop","layout_desktop_hint","layout_mobile","layout_mobile_hint","side_arm_none","side_arm_keep","side_arm_copy","side_arm_restrict","regexp","filters_drop","filters_upstream","filters_hide","filters_cw","rewrite_mentions_no","rewrite_mentions_acct","rewrite_mentions_username","LocalSettingsPage","injectIntl","intl","defaultMessage","formatMessage","pages","index","CurrentPage","onNavigate","preventDefault","handleClick","active","href","icon","textIcon","title","finalClassName","classNames","iconElem","fixedWidth","onClick","role","tabIndex","general","compose","content_warnings","filters","collapsed","media","preferences","close","LocalSettingsNavigation","onClose","preferencesLink","LocalSettings","currentIndex","setState","navigateTo","state","connect","get","dispatch","setting","changeLocalSetting","closeModal"],"mappings":"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","file":"flavours/glitch/async/settings_modal.js","sourcesContent":["// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nexport default class LocalSettingsPageItem extends React.PureComponent {\n\n static propTypes = {\n children: PropTypes.node.isRequired,\n dependsOn: PropTypes.array,\n dependsOnNot: PropTypes.array,\n id: PropTypes.string.isRequired,\n item: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n options: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired,\n hint: PropTypes.string,\n })),\n settings: ImmutablePropTypes.map.isRequired,\n placeholder: PropTypes.string,\n };\n\n handleChange = e => {\n const { target } = e;\n const { item, onChange, options, placeholder } = this.props;\n if (options && options.length > 0) onChange(item, target.value);\n else if (placeholder) onChange(item, target.value);\n else onChange(item, target.checked);\n }\n\n render () {\n const { handleChange } = this;\n const { settings, item, id, options, children, dependsOn, dependsOnNot, placeholder } = this.props;\n let enabled = true;\n\n if (dependsOn) {\n for (let i = 0; i < dependsOn.length; i++) {\n enabled = enabled && settings.getIn(dependsOn[i]);\n }\n }\n if (dependsOnNot) {\n for (let i = 0; i < dependsOnNot.length; i++) {\n enabled = enabled && !settings.getIn(dependsOnNot[i]);\n }\n }\n\n if (options && options.length > 0) {\n const currentValue = settings.getIn(item);\n const optionElems = options && options.length > 0 && options.map((opt) => {\n let optionId = `${id}--${opt.value}`;\n return (\n <label htmlFor={optionId}>\n <input type='radio'\n name={id}\n id={optionId}\n value={opt.value}\n onBlur={handleChange}\n onChange={handleChange}\n checked={ currentValue === opt.value }\n disabled={!enabled}\n />\n {opt.message}\n {opt.hint && <span className='hint'>{opt.hint}</span>}\n </label>\n );\n });\n return (\n <div className='glitch local-settings__page__item radio_buttons'>\n <fieldset>\n <legend>{children}</legend>\n {optionElems}\n </fieldset>\n </div>\n );\n } else if (placeholder) {\n return (\n <div className='glitch local-settings__page__item string'>\n <label htmlFor={id}>\n <p>{children}</p>\n <p>\n <input\n id={id}\n type='text'\n value={settings.getIn(item)}\n placeholder={placeholder}\n onChange={handleChange}\n disabled={!enabled}\n />\n </p>\n </label>\n </div>\n );\n } else return (\n <div className='glitch local-settings__page__item boolean'>\n <label htmlFor={id}>\n <input\n id={id}\n type='checkbox'\n checked={settings.getIn(item)}\n onChange={handleChange}\n disabled={!enabled}\n />\n {children}\n </label>\n </div>\n );\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\n\n// Our imports\nimport LocalSettingsPageItem from './item';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nconst messages = defineMessages({\n layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' },\n layout_auto_hint: { id: 'layout.hint.auto', defaultMessage: 'Automatically chose layout based on “Enable advanced web interface” setting and screen size.' },\n layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' },\n layout_desktop_hint: { id: 'layout.hint.desktop', defaultMessage: 'Use multiple-column layout regardless of the “Enable advanced web interface” setting or screen size.' },\n layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' },\n layout_mobile_hint: { id: 'layout.hint.single', defaultMessage: 'Use single-column layout regardless of the “Enable advanced web interface” setting or screen size.' },\n side_arm_none: { id: 'settings.side_arm.none', defaultMessage: 'None' },\n side_arm_keep: { id: 'settings.side_arm_reply_mode.keep', defaultMessage: 'Keep secondary toot button to set privacy' },\n side_arm_copy: { id: 'settings.side_arm_reply_mode.copy', defaultMessage: 'Copy privacy setting of the toot being replied to' },\n side_arm_restrict: { id: 'settings.side_arm_reply_mode.restrict', defaultMessage: 'Restrict privacy setting to that of the toot being replied to' },\n regexp: { id: 'settings.content_warnings.regexp', defaultMessage: 'Regular expression' },\n filters_drop: { id: 'settings.filtering_behavior.drop', defaultMessage: 'Hide filtered toots completely' },\n filters_upstream: { id: 'settings.filtering_behavior.upstream', defaultMessage: 'Show \"filtered\" like vanilla Mastodon' },\n filters_hide: { id: 'settings.filtering_behavior.hide', defaultMessage: 'Show \"filtered\" and add a button to display why' },\n filters_cw: { id: 'settings.filtering_behavior.cw', defaultMessage: 'Still display the post, and add filtered words to content warning' },\n rewrite_mentions_no: { id: 'settings.rewrite_mentions_no', defaultMessage: 'Do not rewrite mentions' },\n rewrite_mentions_acct: { id: 'settings.rewrite_mentions_acct', defaultMessage: 'Rewrite with username and domain (when the account is remote)' },\n rewrite_mentions_username: { id: 'settings.rewrite_mentions_username', defaultMessage: 'Rewrite with username' },\n});\n\nexport default @injectIntl\nclass LocalSettingsPage extends React.PureComponent {\n\n static propTypes = {\n index : PropTypes.number,\n intl : PropTypes.object.isRequired,\n onChange : PropTypes.func.isRequired,\n settings : ImmutablePropTypes.map.isRequired,\n };\n\n pages = [\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page general'>\n <h1><FormattedMessage id='settings.general' defaultMessage='General' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['show_reply_count']}\n id='mastodon-settings--reply-count'\n onChange={onChange}\n >\n <FormattedMessage id='settings.show_reply_counter' defaultMessage='Display an estimate of the reply count' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['hicolor_privacy_icons']}\n id='mastodon-settings--hicolor_privacy_icons'\n onChange={onChange}\n >\n <FormattedMessage id='settings.hicolor_privacy_icons' defaultMessage='High color privacy icons' />\n <span className='hint'><FormattedMessage id='settings.hicolor_privacy_icons.hint' defaultMessage=\"Display privacy icons in bright and easily distinguishable colors\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_boost_missing_media_description']}\n id='mastodon-settings--confirm_boost_missing_media_description'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_boost_missing_media_description' defaultMessage='Show confirmation dialog before boosting toots lacking media descriptions' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['tag_misleading_links']}\n id='mastodon-settings--tag_misleading_links'\n onChange={onChange}\n >\n <FormattedMessage id='settings.tag_misleading_links' defaultMessage='Tag misleading links' />\n <span className='hint'><FormattedMessage id='settings.tag_misleading_links.hint' defaultMessage=\"Add a visual indication with the link target host to every link not mentioning it explicitly\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['rewrite_mentions']}\n id='mastodon-settings--rewrite_mentions'\n options={[\n { value: 'no', message: intl.formatMessage(messages.rewrite_mentions_no) },\n { value: 'acct', message: intl.formatMessage(messages.rewrite_mentions_acct) },\n { value: 'username', message: intl.formatMessage(messages.rewrite_mentions_username) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.rewrite_mentions' defaultMessage='Rewrite mentions in displayed statuses' />\n </LocalSettingsPageItem>\n <section>\n <h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['notifications', 'tab_badge']}\n id='mastodon-settings--notifications-tab_badge'\n onChange={onChange}\n >\n <FormattedMessage id='settings.notifications.tab_badge' defaultMessage=\"Unread notifications badge\" />\n <span className='hint'><FormattedMessage id='settings.notifications.tab_badge.hint' defaultMessage=\"Display a badge for unread notifications in the column icons when the notifications column isn't open\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['notifications', 'favicon_badge']}\n id='mastodon-settings--notifications-favicon_badge'\n onChange={onChange}\n >\n <FormattedMessage id='settings.notifications.favicon_badge' defaultMessage='Unread notifications favicon badge' />\n <span className='hint'><FormattedMessage id='settings.notifications.favicon_badge.hint' defaultMessage=\"Add a badge for unread notifications to the favicon\" /></span>\n </LocalSettingsPageItem>\n </section>\n <section>\n <h2><FormattedMessage id='settings.layout_opts' defaultMessage='Layout options' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['layout']}\n id='mastodon-settings--layout'\n options={[\n { value: 'auto', message: intl.formatMessage(messages.layout_auto), hint: intl.formatMessage(messages.layout_auto_hint) },\n { value: 'multiple', message: intl.formatMessage(messages.layout_desktop), hint: intl.formatMessage(messages.layout_desktop_hint) },\n { value: 'single', message: intl.formatMessage(messages.layout_mobile), hint: intl.formatMessage(messages.layout_mobile_hint) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.layout' defaultMessage='Layout:' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['stretch']}\n id='mastodon-settings--stretch'\n onChange={onChange}\n >\n <FormattedMessage id='settings.wide_view' defaultMessage='Wide view (Desktop mode only)' />\n <span className='hint'><FormattedMessage id='settings.wide_view_hint' defaultMessage='Stretches columns to better fill the available space.' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['navbar_under']}\n id='mastodon-settings--navbar_under'\n onChange={onChange}\n >\n <FormattedMessage id='settings.navbar_under' defaultMessage='Navbar at the bottom (Mobile only)' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['swipe_to_change_columns']}\n id='mastodon-settings--swipe_to_change_columns'\n onChange={onChange}\n >\n <FormattedMessage id='settings.swipe_to_change_columns' defaultMessage='Allow swiping to change columns (Mobile only)' />\n </LocalSettingsPageItem>\n </section>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page compose_box_opts'>\n <h1><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['always_show_spoilers_field']}\n id='mastodon-settings--always_show_spoilers_field'\n onChange={onChange}\n >\n <FormattedMessage id='settings.always_show_spoilers_field' defaultMessage='Always enable the Content Warning field' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['prepend_cw_re']}\n id='mastodon-settings--prepend_cw_re'\n onChange={onChange}\n >\n <FormattedMessage id='settings.prepend_cw_re' defaultMessage='Prepend “re: ” to content warnings when replying' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['preselect_on_reply']}\n id='mastodon-settings--preselect_on_reply'\n onChange={onChange}\n >\n <FormattedMessage id='settings.preselect_on_reply' defaultMessage='Pre-select usernames on reply' />\n <span className='hint'><FormattedMessage id='settings.preselect_on_reply_hint' defaultMessage='When replying to a conversation with multiple participants, pre-select usernames past the first' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_missing_media_description']}\n id='mastodon-settings--confirm_missing_media_description'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_missing_media_description' defaultMessage='Show confirmation dialog before sending toots lacking media descriptions' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_before_clearing_draft']}\n id='mastodon-settings--confirm_before_clearing_draft'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_before_clearing_draft' defaultMessage='Show confirmation dialog before overwriting the message being composed' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['show_content_type_choice']}\n id='mastodon-settings--show_content_type_choice'\n onChange={onChange}\n >\n <FormattedMessage id='settings.show_content_type_choice' defaultMessage='Show content-type choice when authoring toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['side_arm']}\n id='mastodon-settings--side_arm'\n options={[\n { value: 'none', message: intl.formatMessage(messages.side_arm_none) },\n { value: 'direct', message: intl.formatMessage({ id: 'privacy.direct.short' }) },\n { value: 'private', message: intl.formatMessage({ id: 'privacy.private.short' }) },\n { value: 'unlisted', message: intl.formatMessage({ id: 'privacy.unlisted.short' }) },\n { value: 'public', message: intl.formatMessage({ id: 'privacy.public.short' }) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.side_arm' defaultMessage='Secondary toot button:' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['side_arm_reply_mode']}\n id='mastodon-settings--side_arm_reply_mode'\n options={[\n { value: 'keep', message: intl.formatMessage(messages.side_arm_keep) },\n { value: 'copy', message: intl.formatMessage(messages.side_arm_copy) },\n { value: 'restrict', message: intl.formatMessage(messages.side_arm_restrict) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.side_arm_reply_mode' defaultMessage='When replying to a toot:' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page content_warnings'>\n <h1><FormattedMessage id='settings.content_warnings' defaultMessage='Content warnings' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['content_warnings', 'auto_unfold']}\n id='mastodon-settings--content_warnings-auto_unfold'\n onChange={onChange}\n >\n <FormattedMessage id='settings.enable_content_warnings_auto_unfold' defaultMessage='Automatically unfold content-warnings' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['content_warnings', 'filter']}\n id='mastodon-settings--content_warnings-auto_unfold'\n onChange={onChange}\n dependsOn={[['content_warnings', 'auto_unfold']]}\n placeholder={intl.formatMessage(messages.regexp)}\n >\n <FormattedMessage id='settings.content_warnings_filter' defaultMessage='Content warnings to not automatically unfold:' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page filters'>\n <h1><FormattedMessage id='settings.filters' defaultMessage='Filters' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['filtering_behavior']}\n id='mastodon-settings--filters-behavior'\n onChange={onChange}\n options={[\n { value: 'drop', message: intl.formatMessage(messages.filters_drop) },\n { value: 'upstream', message: intl.formatMessage(messages.filters_upstream) },\n { value: 'hide', message: intl.formatMessage(messages.filters_hide) },\n { value: 'content_warning', message: intl.formatMessage(messages.filters_cw) }\n ]}\n >\n <FormattedMessage id='settings.filtering_behavior' defaultMessage='Filtering behavior' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ onChange, settings }) => (\n <div className='glitch local-settings__page collapsed'>\n <h1><FormattedMessage id='settings.collapsed_statuses' defaultMessage='Collapsed toots' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'enabled']}\n id='mastodon-settings--collapsed-enabled'\n onChange={onChange}\n >\n <FormattedMessage id='settings.enable_collapsed' defaultMessage='Enable collapsed toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'show_action_bar']}\n id='mastodon-settings--collapsed-show-action-bar'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.show_action_bar' defaultMessage='Show action buttons in collapsed toots' />\n </LocalSettingsPageItem>\n <section>\n <h2><FormattedMessage id='settings.auto_collapse' defaultMessage='Automatic collapsing' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'all']}\n id='mastodon-settings--collapsed-auto-all'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.auto_collapse_all' defaultMessage='Everything' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'notifications']}\n id='mastodon-settings--collapsed-auto-notifications'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_notifications' defaultMessage='Notifications' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'lengthy']}\n id='mastodon-settings--collapsed-auto-lengthy'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_lengthy' defaultMessage='Lengthy toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'reblogs']}\n id='mastodon-settings--collapsed-auto-reblogs'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_reblogs' defaultMessage='Boosts' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'replies']}\n id='mastodon-settings--collapsed-auto-replies'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_replies' defaultMessage='Replies' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'media']}\n id='mastodon-settings--collapsed-auto-media'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_media' defaultMessage='Toots with media' />\n </LocalSettingsPageItem>\n </section>\n <section>\n <h2><FormattedMessage id='settings.image_backgrounds' defaultMessage='Image backgrounds' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'backgrounds', 'user_backgrounds']}\n id='mastodon-settings--collapsed-user-backgrouns'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.image_backgrounds_users' defaultMessage='Give collapsed toots an image background' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'backgrounds', 'preview_images']}\n id='mastodon-settings--collapsed-preview-images'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.image_backgrounds_media' defaultMessage='Preview collapsed toot media' />\n </LocalSettingsPageItem>\n </section>\n </div>\n ),\n ({ onChange, settings }) => (\n <div className='glitch local-settings__page media'>\n <h1><FormattedMessage id='settings.media' defaultMessage='Media' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'letterbox']}\n id='mastodon-settings--media-letterbox'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_letterbox' defaultMessage='Letterbox media' />\n <span className='hint'><FormattedMessage id='settings.media_letterbox_hint' defaultMessage='Scale down and letterbox media to fill the image containers instead of stretching and cropping them' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'fullwidth']}\n id='mastodon-settings--media-fullwidth'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_fullwidth' defaultMessage='Full-width media previews' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['inline_preview_cards']}\n id='mastodon-settings--inline-preview-cards'\n onChange={onChange}\n >\n <FormattedMessage id='settings.inline_preview_cards' defaultMessage='Inline preview cards for external links' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'reveal_behind_cw']}\n id='mastodon-settings--reveal-behind-cw'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_reveal_behind_cw' defaultMessage='Reveal sensitive media behind a CW by default' />\n </LocalSettingsPageItem>\n </div>\n ),\n ];\n\n render () {\n const { pages } = this;\n const { index, intl, onChange, settings } = this.props;\n const CurrentPage = pages[index] || pages[0];\n\n return <CurrentPage intl={intl} onChange={onChange} settings={settings} />;\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Icon from 'flavours/glitch/components/icon';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nexport default class LocalSettingsPage extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n className: PropTypes.string,\n href: PropTypes.string,\n icon: PropTypes.string,\n textIcon: PropTypes.string,\n index: PropTypes.number.isRequired,\n onNavigate: PropTypes.func,\n title: PropTypes.string,\n };\n\n handleClick = (e) => {\n const { index, onNavigate } = this.props;\n if (onNavigate) {\n onNavigate(index);\n e.preventDefault();\n }\n }\n\n render () {\n const { handleClick } = this;\n const {\n active,\n className,\n href,\n icon,\n textIcon,\n onNavigate,\n title,\n } = this.props;\n\n const finalClassName = classNames('glitch', 'local-settings__navigation__item', {\n active,\n }, className);\n\n const iconElem = icon ? <Icon fixedWidth id={icon} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null);\n\n if (href) return (\n <a\n href={href}\n className={finalClassName}\n >\n {iconElem} <span>{title}</span>\n </a>\n );\n else if (onNavigate) return (\n <a\n onClick={handleClick}\n role='button'\n tabIndex='0'\n className={finalClassName}\n >\n {iconElem} <span>{title}</span>\n </a>\n );\n else return null;\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, defineMessages } from 'react-intl';\n\n// Our imports\nimport LocalSettingsNavigationItem from './item';\nimport { preferencesLink } from 'flavours/glitch/util/backend_links';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nconst messages = defineMessages({\n general: { id: 'settings.general', defaultMessage: 'General' },\n compose: { id: 'settings.compose_box_opts', defaultMessage: 'Compose box' },\n content_warnings: { id: 'settings.content_warnings', defaultMessage: 'Content Warnings' },\n filters: { id: 'settings.filters', defaultMessage: 'Filters' },\n collapsed: { id: 'settings.collapsed_statuses', defaultMessage: 'Collapsed toots' },\n media: { id: 'settings.media', defaultMessage: 'Media' },\n preferences: { id: 'settings.preferences', defaultMessage: 'Preferences' },\n close: { id: 'settings.close', defaultMessage: 'Close' },\n});\n\nexport default @injectIntl\nclass LocalSettingsNavigation extends React.PureComponent {\n\n static propTypes = {\n index : PropTypes.number,\n intl : PropTypes.object.isRequired,\n onClose : PropTypes.func.isRequired,\n onNavigate : PropTypes.func.isRequired,\n };\n\n render () {\n\n const { index, intl, onClose, onNavigate } = this.props;\n\n return (\n <nav className='glitch local-settings__navigation'>\n <LocalSettingsNavigationItem\n active={index === 0}\n index={0}\n onNavigate={onNavigate}\n icon='cogs'\n title={intl.formatMessage(messages.general)}\n />\n <LocalSettingsNavigationItem\n active={index === 1}\n index={1}\n onNavigate={onNavigate}\n icon='pencil'\n title={intl.formatMessage(messages.compose)}\n />\n <LocalSettingsNavigationItem\n active={index === 2}\n index={2}\n onNavigate={onNavigate}\n textIcon='CW'\n title={intl.formatMessage(messages.content_warnings)}\n />\n <LocalSettingsNavigationItem\n active={index === 3}\n index={3}\n onNavigate={onNavigate}\n icon='filter'\n title={intl.formatMessage(messages.filters)}\n />\n <LocalSettingsNavigationItem\n active={index === 4}\n index={4}\n onNavigate={onNavigate}\n icon='angle-double-up'\n title={intl.formatMessage(messages.collapsed)}\n />\n <LocalSettingsNavigationItem\n active={index === 5}\n index={5}\n onNavigate={onNavigate}\n icon='image'\n title={intl.formatMessage(messages.media)}\n />\n <LocalSettingsNavigationItem\n active={index === 6}\n href={ preferencesLink }\n index={6}\n icon='cog'\n title={intl.formatMessage(messages.preferences)}\n />\n <LocalSettingsNavigationItem\n active={index === 7}\n className='close'\n index={7}\n onNavigate={onClose}\n icon='times'\n title={intl.formatMessage(messages.close)}\n />\n </nav>\n );\n }\n\n}\n","// Package imports.\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\n\n// Our imports\nimport LocalSettingsPage from './page';\nimport LocalSettingsNavigation from './navigation';\nimport { closeModal } from 'flavours/glitch/actions/modal';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\n\nconst mapStateToProps = state => ({\n settings: state.get('local_settings'),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChange (setting, value) {\n dispatch(changeLocalSetting(setting, value));\n },\n onClose () {\n dispatch(closeModal());\n },\n});\n\nclass LocalSettings extends React.PureComponent {\n\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n settings: ImmutablePropTypes.map.isRequired,\n };\n\n state = {\n currentIndex: 0,\n };\n\n navigateTo = (index) =>\n this.setState({ currentIndex: +index });\n\n render () {\n\n const { navigateTo } = this;\n const { onChange, onClose, settings } = this.props;\n const { currentIndex } = this.state;\n\n return (\n <div className='glitch modal-root__modal local-settings'>\n <LocalSettingsNavigation\n index={currentIndex}\n onClose={onClose}\n onNavigate={navigateTo}\n />\n <LocalSettingsPage\n index={currentIndex}\n onChange={onChange}\n settings={settings}\n />\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LocalSettings);\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/page/item/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/page/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/navigation/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/local_settings/index.js"],"names":["LocalSettingsPageItem","e","target","props","item","onChange","options","placeholder","length","value","checked","render","handleChange","this","settings","id","children","dependsOn","dependsOnNot","enabled","i","getIn","currentValue","optionElems","map","opt","optionId","htmlFor","type","name","onBlur","disabled","message","hint","className","React","PureComponent","messages","defineMessages","layout_auto","layout_auto_hint","layout_desktop","layout_desktop_hint","layout_mobile","layout_mobile_hint","side_arm_none","side_arm_keep","side_arm_copy","side_arm_restrict","regexp","filters_drop","filters_upstream","filters_hide","filters_cw","rewrite_mentions_no","rewrite_mentions_acct","rewrite_mentions_username","LocalSettingsPage","injectIntl","intl","defaultMessage","formatMessage","pages","index","CurrentPage","onNavigate","preventDefault","handleClick","active","href","icon","textIcon","title","finalClassName","classNames","iconElem","fixedWidth","onClick","role","tabIndex","general","compose","content_warnings","filters","collapsed","media","preferences","close","LocalSettingsNavigation","onClose","preferencesLink","LocalSettings","currentIndex","setState","navigateTo","state","connect","get","dispatch","setting","changeLocalSetting","closeModal"],"mappings":"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","file":"flavours/glitch/async/settings_modal.js","sourcesContent":["// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nexport default class LocalSettingsPageItem extends React.PureComponent {\n\n static propTypes = {\n children: PropTypes.node.isRequired,\n dependsOn: PropTypes.array,\n dependsOnNot: PropTypes.array,\n id: PropTypes.string.isRequired,\n item: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n options: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired,\n hint: PropTypes.string,\n })),\n settings: ImmutablePropTypes.map.isRequired,\n placeholder: PropTypes.string,\n };\n\n handleChange = e => {\n const { target } = e;\n const { item, onChange, options, placeholder } = this.props;\n if (options && options.length > 0) onChange(item, target.value);\n else if (placeholder) onChange(item, target.value);\n else onChange(item, target.checked);\n }\n\n render () {\n const { handleChange } = this;\n const { settings, item, id, options, children, dependsOn, dependsOnNot, placeholder } = this.props;\n let enabled = true;\n\n if (dependsOn) {\n for (let i = 0; i < dependsOn.length; i++) {\n enabled = enabled && settings.getIn(dependsOn[i]);\n }\n }\n if (dependsOnNot) {\n for (let i = 0; i < dependsOnNot.length; i++) {\n enabled = enabled && !settings.getIn(dependsOnNot[i]);\n }\n }\n\n if (options && options.length > 0) {\n const currentValue = settings.getIn(item);\n const optionElems = options && options.length > 0 && options.map((opt) => {\n let optionId = `${id}--${opt.value}`;\n return (\n <label htmlFor={optionId}>\n <input type='radio'\n name={id}\n id={optionId}\n value={opt.value}\n onBlur={handleChange}\n onChange={handleChange}\n checked={ currentValue === opt.value }\n disabled={!enabled}\n />\n {opt.message}\n {opt.hint && <span className='hint'>{opt.hint}</span>}\n </label>\n );\n });\n return (\n <div className='glitch local-settings__page__item radio_buttons'>\n <fieldset>\n <legend>{children}</legend>\n {optionElems}\n </fieldset>\n </div>\n );\n } else if (placeholder) {\n return (\n <div className='glitch local-settings__page__item string'>\n <label htmlFor={id}>\n <p>{children}</p>\n <p>\n <input\n id={id}\n type='text'\n value={settings.getIn(item)}\n placeholder={placeholder}\n onChange={handleChange}\n disabled={!enabled}\n />\n </p>\n </label>\n </div>\n );\n } else return (\n <div className='glitch local-settings__page__item boolean'>\n <label htmlFor={id}>\n <input\n id={id}\n type='checkbox'\n checked={settings.getIn(item)}\n onChange={handleChange}\n disabled={!enabled}\n />\n {children}\n </label>\n </div>\n );\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\n\n// Our imports\nimport LocalSettingsPageItem from './item';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nconst messages = defineMessages({\n layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' },\n layout_auto_hint: { id: 'layout.hint.auto', defaultMessage: 'Automatically chose layout based on “Enable advanced web interface” setting and screen size.' },\n layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' },\n layout_desktop_hint: { id: 'layout.hint.desktop', defaultMessage: 'Use multiple-column layout regardless of the “Enable advanced web interface” setting or screen size.' },\n layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' },\n layout_mobile_hint: { id: 'layout.hint.single', defaultMessage: 'Use single-column layout regardless of the “Enable advanced web interface” setting or screen size.' },\n side_arm_none: { id: 'settings.side_arm.none', defaultMessage: 'None' },\n side_arm_keep: { id: 'settings.side_arm_reply_mode.keep', defaultMessage: 'Keep secondary toot button to set privacy' },\n side_arm_copy: { id: 'settings.side_arm_reply_mode.copy', defaultMessage: 'Copy privacy setting of the toot being replied to' },\n side_arm_restrict: { id: 'settings.side_arm_reply_mode.restrict', defaultMessage: 'Restrict privacy setting to that of the toot being replied to' },\n regexp: { id: 'settings.content_warnings.regexp', defaultMessage: 'Regular expression' },\n filters_drop: { id: 'settings.filtering_behavior.drop', defaultMessage: 'Hide filtered toots completely' },\n filters_upstream: { id: 'settings.filtering_behavior.upstream', defaultMessage: 'Show \"filtered\" like vanilla Mastodon' },\n filters_hide: { id: 'settings.filtering_behavior.hide', defaultMessage: 'Show \"filtered\" and add a button to display why' },\n filters_cw: { id: 'settings.filtering_behavior.cw', defaultMessage: 'Still display the post, and add filtered words to content warning' },\n rewrite_mentions_no: { id: 'settings.rewrite_mentions_no', defaultMessage: 'Do not rewrite mentions' },\n rewrite_mentions_acct: { id: 'settings.rewrite_mentions_acct', defaultMessage: 'Rewrite with username and domain (when the account is remote)' },\n rewrite_mentions_username: { id: 'settings.rewrite_mentions_username', defaultMessage: 'Rewrite with username' },\n});\n\nexport default @injectIntl\nclass LocalSettingsPage extends React.PureComponent {\n\n static propTypes = {\n index : PropTypes.number,\n intl : PropTypes.object.isRequired,\n onChange : PropTypes.func.isRequired,\n settings : ImmutablePropTypes.map.isRequired,\n };\n\n pages = [\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page general'>\n <h1><FormattedMessage id='settings.general' defaultMessage='General' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['show_reply_count']}\n id='mastodon-settings--reply-count'\n onChange={onChange}\n >\n <FormattedMessage id='settings.show_reply_counter' defaultMessage='Display an estimate of the reply count' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['hicolor_privacy_icons']}\n id='mastodon-settings--hicolor_privacy_icons'\n onChange={onChange}\n >\n <FormattedMessage id='settings.hicolor_privacy_icons' defaultMessage='High color privacy icons' />\n <span className='hint'><FormattedMessage id='settings.hicolor_privacy_icons.hint' defaultMessage=\"Display privacy icons in bright and easily distinguishable colors\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_boost_missing_media_description']}\n id='mastodon-settings--confirm_boost_missing_media_description'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_boost_missing_media_description' defaultMessage='Show confirmation dialog before boosting toots lacking media descriptions' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['tag_misleading_links']}\n id='mastodon-settings--tag_misleading_links'\n onChange={onChange}\n >\n <FormattedMessage id='settings.tag_misleading_links' defaultMessage='Tag misleading links' />\n <span className='hint'><FormattedMessage id='settings.tag_misleading_links.hint' defaultMessage=\"Add a visual indication with the link target host to every link not mentioning it explicitly\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['rewrite_mentions']}\n id='mastodon-settings--rewrite_mentions'\n options={[\n { value: 'no', message: intl.formatMessage(messages.rewrite_mentions_no) },\n { value: 'acct', message: intl.formatMessage(messages.rewrite_mentions_acct) },\n { value: 'username', message: intl.formatMessage(messages.rewrite_mentions_username) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.rewrite_mentions' defaultMessage='Rewrite mentions in displayed statuses' />\n </LocalSettingsPageItem>\n <section>\n <h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['notifications', 'tab_badge']}\n id='mastodon-settings--notifications-tab_badge'\n onChange={onChange}\n >\n <FormattedMessage id='settings.notifications.tab_badge' defaultMessage=\"Unread notifications badge\" />\n <span className='hint'><FormattedMessage id='settings.notifications.tab_badge.hint' defaultMessage=\"Display a badge for unread notifications in the column icons when the notifications column isn't open\" /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['notifications', 'favicon_badge']}\n id='mastodon-settings--notifications-favicon_badge'\n onChange={onChange}\n >\n <FormattedMessage id='settings.notifications.favicon_badge' defaultMessage='Unread notifications favicon badge' />\n <span className='hint'><FormattedMessage id='settings.notifications.favicon_badge.hint' defaultMessage=\"Add a badge for unread notifications to the favicon\" /></span>\n </LocalSettingsPageItem>\n </section>\n <section>\n <h2><FormattedMessage id='settings.layout_opts' defaultMessage='Layout options' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['layout']}\n id='mastodon-settings--layout'\n options={[\n { value: 'auto', message: intl.formatMessage(messages.layout_auto), hint: intl.formatMessage(messages.layout_auto_hint) },\n { value: 'multiple', message: intl.formatMessage(messages.layout_desktop), hint: intl.formatMessage(messages.layout_desktop_hint) },\n { value: 'single', message: intl.formatMessage(messages.layout_mobile), hint: intl.formatMessage(messages.layout_mobile_hint) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.layout' defaultMessage='Layout:' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['stretch']}\n id='mastodon-settings--stretch'\n onChange={onChange}\n >\n <FormattedMessage id='settings.wide_view' defaultMessage='Wide view (Desktop mode only)' />\n <span className='hint'><FormattedMessage id='settings.wide_view_hint' defaultMessage='Stretches columns to better fill the available space.' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['navbar_under']}\n id='mastodon-settings--navbar_under'\n onChange={onChange}\n >\n <FormattedMessage id='settings.navbar_under' defaultMessage='Navbar at the bottom (Mobile only)' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['swipe_to_change_columns']}\n id='mastodon-settings--swipe_to_change_columns'\n onChange={onChange}\n >\n <FormattedMessage id='settings.swipe_to_change_columns' defaultMessage='Allow swiping to change columns (Mobile only)' />\n </LocalSettingsPageItem>\n </section>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page compose_box_opts'>\n <h1><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['always_show_spoilers_field']}\n id='mastodon-settings--always_show_spoilers_field'\n onChange={onChange}\n >\n <FormattedMessage id='settings.always_show_spoilers_field' defaultMessage='Always enable the Content Warning field' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['prepend_cw_re']}\n id='mastodon-settings--prepend_cw_re'\n onChange={onChange}\n >\n <FormattedMessage id='settings.prepend_cw_re' defaultMessage='Prepend “re: ” to content warnings when replying' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['preselect_on_reply']}\n id='mastodon-settings--preselect_on_reply'\n onChange={onChange}\n >\n <FormattedMessage id='settings.preselect_on_reply' defaultMessage='Pre-select usernames on reply' />\n <span className='hint'><FormattedMessage id='settings.preselect_on_reply_hint' defaultMessage='When replying to a conversation with multiple participants, pre-select usernames past the first' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_missing_media_description']}\n id='mastodon-settings--confirm_missing_media_description'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_missing_media_description' defaultMessage='Show confirmation dialog before sending toots lacking media descriptions' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['confirm_before_clearing_draft']}\n id='mastodon-settings--confirm_before_clearing_draft'\n onChange={onChange}\n >\n <FormattedMessage id='settings.confirm_before_clearing_draft' defaultMessage='Show confirmation dialog before overwriting the message being composed' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['show_content_type_choice']}\n id='mastodon-settings--show_content_type_choice'\n onChange={onChange}\n >\n <FormattedMessage id='settings.show_content_type_choice' defaultMessage='Show content-type choice when authoring toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['side_arm']}\n id='mastodon-settings--side_arm'\n options={[\n { value: 'none', message: intl.formatMessage(messages.side_arm_none) },\n { value: 'direct', message: intl.formatMessage({ id: 'privacy.direct.short' }) },\n { value: 'private', message: intl.formatMessage({ id: 'privacy.private.short' }) },\n { value: 'unlisted', message: intl.formatMessage({ id: 'privacy.unlisted.short' }) },\n { value: 'public', message: intl.formatMessage({ id: 'privacy.public.short' }) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.side_arm' defaultMessage='Secondary toot button:' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['side_arm_reply_mode']}\n id='mastodon-settings--side_arm_reply_mode'\n options={[\n { value: 'keep', message: intl.formatMessage(messages.side_arm_keep) },\n { value: 'copy', message: intl.formatMessage(messages.side_arm_copy) },\n { value: 'restrict', message: intl.formatMessage(messages.side_arm_restrict) },\n ]}\n onChange={onChange}\n >\n <FormattedMessage id='settings.side_arm_reply_mode' defaultMessage='When replying to a toot:' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page content_warnings'>\n <h1><FormattedMessage id='settings.content_warnings' defaultMessage='Content warnings' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['content_warnings', 'auto_unfold']}\n id='mastodon-settings--content_warnings-auto_unfold'\n onChange={onChange}\n >\n <FormattedMessage id='settings.enable_content_warnings_auto_unfold' defaultMessage='Automatically unfold content-warnings' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['content_warnings', 'filter']}\n id='mastodon-settings--content_warnings-auto_unfold'\n onChange={onChange}\n dependsOn={[['content_warnings', 'auto_unfold']]}\n placeholder={intl.formatMessage(messages.regexp)}\n >\n <FormattedMessage id='settings.content_warnings_filter' defaultMessage='Content warnings to not automatically unfold:' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ intl, onChange, settings }) => (\n <div className='glitch local-settings__page filters'>\n <h1><FormattedMessage id='settings.filters' defaultMessage='Filters' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['filtering_behavior']}\n id='mastodon-settings--filters-behavior'\n onChange={onChange}\n options={[\n { value: 'drop', message: intl.formatMessage(messages.filters_drop) },\n { value: 'upstream', message: intl.formatMessage(messages.filters_upstream) },\n { value: 'hide', message: intl.formatMessage(messages.filters_hide) },\n { value: 'content_warning', message: intl.formatMessage(messages.filters_cw) }\n ]}\n >\n <FormattedMessage id='settings.filtering_behavior' defaultMessage='Filtering behavior' />\n </LocalSettingsPageItem>\n </div>\n ),\n ({ onChange, settings }) => (\n <div className='glitch local-settings__page collapsed'>\n <h1><FormattedMessage id='settings.collapsed_statuses' defaultMessage='Collapsed toots' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'enabled']}\n id='mastodon-settings--collapsed-enabled'\n onChange={onChange}\n >\n <FormattedMessage id='settings.enable_collapsed' defaultMessage='Enable collapsed toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'show_action_bar']}\n id='mastodon-settings--collapsed-show-action-bar'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.show_action_bar' defaultMessage='Show action buttons in collapsed toots' />\n </LocalSettingsPageItem>\n <section>\n <h2><FormattedMessage id='settings.auto_collapse' defaultMessage='Automatic collapsing' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'all']}\n id='mastodon-settings--collapsed-auto-all'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.auto_collapse_all' defaultMessage='Everything' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'notifications']}\n id='mastodon-settings--collapsed-auto-notifications'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_notifications' defaultMessage='Notifications' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'lengthy']}\n id='mastodon-settings--collapsed-auto-lengthy'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_lengthy' defaultMessage='Lengthy toots' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'reblogs']}\n id='mastodon-settings--collapsed-auto-reblogs'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_reblogs' defaultMessage='Boosts' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'replies']}\n id='mastodon-settings--collapsed-auto-replies'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_replies' defaultMessage='Replies' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'auto', 'media']}\n id='mastodon-settings--collapsed-auto-media'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n dependsOnNot={[['collapsed', 'auto', 'all']]}\n >\n <FormattedMessage id='settings.auto_collapse_media' defaultMessage='Toots with media' />\n </LocalSettingsPageItem>\n </section>\n <section>\n <h2><FormattedMessage id='settings.image_backgrounds' defaultMessage='Image backgrounds' /></h2>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'backgrounds', 'user_backgrounds']}\n id='mastodon-settings--collapsed-user-backgrouns'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.image_backgrounds_users' defaultMessage='Give collapsed toots an image background' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['collapsed', 'backgrounds', 'preview_images']}\n id='mastodon-settings--collapsed-preview-images'\n onChange={onChange}\n dependsOn={[['collapsed', 'enabled']]}\n >\n <FormattedMessage id='settings.image_backgrounds_media' defaultMessage='Preview collapsed toot media' />\n </LocalSettingsPageItem>\n </section>\n </div>\n ),\n ({ onChange, settings }) => (\n <div className='glitch local-settings__page media'>\n <h1><FormattedMessage id='settings.media' defaultMessage='Media' /></h1>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'letterbox']}\n id='mastodon-settings--media-letterbox'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_letterbox' defaultMessage='Letterbox media' />\n <span className='hint'><FormattedMessage id='settings.media_letterbox_hint' defaultMessage='Scale down and letterbox media to fill the image containers instead of stretching and cropping them' /></span>\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'fullwidth']}\n id='mastodon-settings--media-fullwidth'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_fullwidth' defaultMessage='Full-width media previews' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['inline_preview_cards']}\n id='mastodon-settings--inline-preview-cards'\n onChange={onChange}\n >\n <FormattedMessage id='settings.inline_preview_cards' defaultMessage='Inline preview cards for external links' />\n </LocalSettingsPageItem>\n <LocalSettingsPageItem\n settings={settings}\n item={['media', 'reveal_behind_cw']}\n id='mastodon-settings--reveal-behind-cw'\n onChange={onChange}\n >\n <FormattedMessage id='settings.media_reveal_behind_cw' defaultMessage='Reveal sensitive media behind a CW by default' />\n </LocalSettingsPageItem>\n </div>\n ),\n ];\n\n render () {\n const { pages } = this;\n const { index, intl, onChange, settings } = this.props;\n const CurrentPage = pages[index] || pages[0];\n\n return <CurrentPage intl={intl} onChange={onChange} settings={settings} />;\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Icon from 'flavours/glitch/components/icon';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nexport default class LocalSettingsPage extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n className: PropTypes.string,\n href: PropTypes.string,\n icon: PropTypes.string,\n textIcon: PropTypes.string,\n index: PropTypes.number.isRequired,\n onNavigate: PropTypes.func,\n title: PropTypes.string,\n };\n\n handleClick = (e) => {\n const { index, onNavigate } = this.props;\n if (onNavigate) {\n onNavigate(index);\n e.preventDefault();\n }\n }\n\n render () {\n const { handleClick } = this;\n const {\n active,\n className,\n href,\n icon,\n textIcon,\n onNavigate,\n title,\n } = this.props;\n\n const finalClassName = classNames('glitch', 'local-settings__navigation__item', {\n active,\n }, className);\n\n const iconElem = icon ? <Icon fixedWidth id={icon} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null);\n\n if (href) return (\n <a\n href={href}\n className={finalClassName}\n >\n {iconElem} <span>{title}</span>\n </a>\n );\n else if (onNavigate) return (\n <a\n onClick={handleClick}\n role='button'\n tabIndex='0'\n className={finalClassName}\n >\n {iconElem} <span>{title}</span>\n </a>\n );\n else return null;\n }\n\n}\n","// Package imports\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, defineMessages } from 'react-intl';\n\n// Our imports\nimport LocalSettingsNavigationItem from './item';\nimport { preferencesLink } from 'flavours/glitch/util/backend_links';\n\n// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\nconst messages = defineMessages({\n general: { id: 'settings.general', defaultMessage: 'General' },\n compose: { id: 'settings.compose_box_opts', defaultMessage: 'Compose box' },\n content_warnings: { id: 'settings.content_warnings', defaultMessage: 'Content Warnings' },\n filters: { id: 'settings.filters', defaultMessage: 'Filters' },\n collapsed: { id: 'settings.collapsed_statuses', defaultMessage: 'Collapsed toots' },\n media: { id: 'settings.media', defaultMessage: 'Media' },\n preferences: { id: 'settings.preferences', defaultMessage: 'Preferences' },\n close: { id: 'settings.close', defaultMessage: 'Close' },\n});\n\nexport default @injectIntl\nclass LocalSettingsNavigation extends React.PureComponent {\n\n static propTypes = {\n index : PropTypes.number,\n intl : PropTypes.object.isRequired,\n onClose : PropTypes.func.isRequired,\n onNavigate : PropTypes.func.isRequired,\n };\n\n render () {\n\n const { index, intl, onClose, onNavigate } = this.props;\n\n return (\n <nav className='glitch local-settings__navigation'>\n <LocalSettingsNavigationItem\n active={index === 0}\n index={0}\n onNavigate={onNavigate}\n icon='cogs'\n title={intl.formatMessage(messages.general)}\n />\n <LocalSettingsNavigationItem\n active={index === 1}\n index={1}\n onNavigate={onNavigate}\n icon='pencil'\n title={intl.formatMessage(messages.compose)}\n />\n <LocalSettingsNavigationItem\n active={index === 2}\n index={2}\n onNavigate={onNavigate}\n textIcon='CW'\n title={intl.formatMessage(messages.content_warnings)}\n />\n <LocalSettingsNavigationItem\n active={index === 3}\n index={3}\n onNavigate={onNavigate}\n icon='filter'\n title={intl.formatMessage(messages.filters)}\n />\n <LocalSettingsNavigationItem\n active={index === 4}\n index={4}\n onNavigate={onNavigate}\n icon='angle-double-up'\n title={intl.formatMessage(messages.collapsed)}\n />\n <LocalSettingsNavigationItem\n active={index === 5}\n index={5}\n onNavigate={onNavigate}\n icon='image'\n title={intl.formatMessage(messages.media)}\n />\n <LocalSettingsNavigationItem\n active={index === 6}\n href={ preferencesLink }\n index={6}\n icon='cog'\n title={intl.formatMessage(messages.preferences)}\n />\n <LocalSettingsNavigationItem\n active={index === 7}\n className='close'\n index={7}\n onNavigate={onClose}\n icon='times'\n title={intl.formatMessage(messages.close)}\n />\n </nav>\n );\n }\n\n}\n","// Package imports.\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\n\n// Our imports\nimport LocalSettingsPage from './page';\nimport LocalSettingsNavigation from './navigation';\nimport { closeModal } from 'flavours/glitch/actions/modal';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\n\nconst mapStateToProps = state => ({\n settings: state.get('local_settings'),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChange (setting, value) {\n dispatch(changeLocalSetting(setting, value));\n },\n onClose () {\n dispatch(closeModal());\n },\n});\n\nclass LocalSettings extends React.PureComponent {\n\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n settings: ImmutablePropTypes.map.isRequired,\n };\n\n state = {\n currentIndex: 0,\n };\n\n navigateTo = (index) =>\n this.setState({ currentIndex: +index });\n\n render () {\n\n const { navigateTo } = this;\n const { onChange, onClose, settings } = this.props;\n const { currentIndex } = this.state;\n\n return (\n <div className='glitch modal-root__modal local-settings'>\n <LocalSettingsNavigation\n index={currentIndex}\n onClose={onClose}\n onNavigate={navigateTo}\n />\n <LocalSettingsPage\n index={currentIndex}\n onChange={onChange}\n settings={settings}\n />\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LocalSettings);\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/status.js b/priv/static/packs/flavours/glitch/async/status.js
index f82c91fd6..bfb80c63d 100644
--- a/priv/static/packs/flavours/glitch/async/status.js
+++ b/priv/static/packs/flavours/glitch/async/status.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{757:function(e,t,a){"use strict";a.d(t,"a",(function(){return H}));var s=a(0),i=a(8),n=a(2),o=a(7),c=a(1),l=a(3),d=a.n(l),r=a(5),u=a.n(r),p=a(14),h=a.n(p),b=a(91),g=a(93),f=a(150),m=a(468),O=a(262),j=a(316),v=a(6),k=a(469),M=a(18),y=a(83),_=a(223),C=a(535),x=a(746),I=a(12),w=a.n(I),R=a(537),D=a(23),H=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return t=e.call.apply(e,[this].concat(s))||this,Object(c.a)(Object(n.a)(t),"state",{height:null}),Object(c.a)(Object(n.a)(t),"handleAccountClick",(function(e){if(0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)&&t.context.router){e.preventDefault();var a=Object(i.default)({},t.context.router.history.location.state);a.mastodonBackSteps=(a.mastodonBackSteps||0)+1,t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]),a)}e.stopPropagation()})),Object(c.a)(Object(n.a)(t),"parseClick",(function(e,a){if(0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)&&t.context.router){e.preventDefault();var s=Object(i.default)({},t.context.router.history.location.state);s.mastodonBackSteps=(s.mastodonBackSteps||0)+1,t.context.router.history.push(a,s)}e.stopPropagation()})),Object(c.a)(Object(n.a)(t),"handleOpenVideo",(function(e,a){t.props.onOpenVideo(e,a)})),Object(c.a)(Object(n.a)(t),"setRef",(function(e){t.node=e,t._measureHeight()})),Object(c.a)(Object(n.a)(t),"handleChildUpdate",(function(){t._measureHeight()})),Object(c.a)(Object(n.a)(t),"handleModalLink",(function(e){var t;e.preventDefault(),t="A"!==e.target.nodeName?e.target.parentNode.href:e.target.href,window.open(t,"mastodon-intent","width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes")})),t}Object(o.a)(t,e);var a=t.prototype;return a._measureHeight=function(e){var t=this;this.props.measureHeight&&this.node&&(Object(x.a)((function(){return t.node&&t.setState({height:Math.ceil(t.node.scrollHeight)+1})})),this.props.onHeightChange&&e&&this.props.onHeightChange())},a.componentDidUpdate=function(e,t){this._measureHeight(t.height!==this.state.height)},a.render=function(){var e=this.props.status&&this.props.status.get("reblog")?this.props.status.get("reblog"):this.props.status,t=this.props,a=t.expanded,i=t.onToggleHidden,n=t.settings,o={boxSizing:"border-box"},c=this.props.compact;if(!e)return null;var l=null,r=null,u="",p="",h="retweet",M="";if(this.props.measureHeight&&(o.height=this.state.height+"px"),e.get("poll"))l=Object(s.a)(R.a,{pollId:e.get("poll")}),r="tasks";else if(e.get("media_attachments").size>0)if(e.get("media_attachments").some((function(e){return"unknown"===e.get("type")})))l=Object(s.a)(O.a,{media:e.get("media_attachments")});else if("audio"===e.getIn(["media_attachments",0,"type"])){var x=e.getIn(["media_attachments",0]);l=Object(s.a)(_.default,{src:x.get("url"),alt:x.get("description"),duration:x.getIn(["meta","original","duration"],0),height:110,preload:!0}),r="music"}else if("video"===e.getIn(["media_attachments",0,"type"])){var I=e.getIn(["media_attachments",0]);l=Object(s.a)(y.default,{preview:I.get("preview_url"),blurhash:I.get("blurhash"),src:I.get("url"),alt:I.get("description"),inline:!0,sensitive:e.get("sensitive"),letterbox:n.getIn(["media","letterbox"]),fullwidth:n.getIn(["media","fullwidth"]),preventPlayback:!a,onOpenVideo:this.handleOpenVideo,autoplay:!0,visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility}),r="video-camera"}else l=Object(s.a)(m.default,{standalone:!0,sensitive:e.get("sensitive"),media:e.get("media_attachments"),letterbox:n.getIn(["media","letterbox"]),fullwidth:n.getIn(["media","fullwidth"]),hidden:!a,onOpenMedia:this.props.onOpenMedia,visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility}),r="picture-o";else e.get("card")&&(l=Object(s.a)(k.a,{onOpenMedia:this.props.onOpenMedia,card:e.get("card")}),r="link");return e.get("application")&&(u=Object(s.a)("span",{},void 0," · ",Object(s.a)("a",{className:"detailed-status__application",href:e.getIn(["application","website"]),target:"_blank",rel:"noopener noreferrer"},void 0,e.getIn(["application","name"])))),"direct"===e.get("visibility")?h="envelope":"private"===e.get("visibility")&&(h="lock"),p="private"===e.get("visibility")?Object(s.a)(D.a,{id:h}):this.context.router?Object(s.a)(j.a,{to:"/statuses/"+e.get("id")+"/reblogs",className:"detailed-status__link"},void 0,Object(s.a)(D.a,{id:h}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(v.c,{value:e.get("reblogs_count")}))):Object(s.a)("a",{href:"/interact/"+e.get("id")+"?type=reblog",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(s.a)(D.a,{id:h}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(v.c,{value:e.get("reblogs_count")}))),M=this.context.router?Object(s.a)(j.a,{to:"/statuses/"+e.get("id")+"/favourites",className:"detailed-status__link"},void 0,Object(s.a)(D.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(v.c,{value:e.get("favourites_count")}))):Object(s.a)("a",{href:"/interact/"+e.get("id")+"?type=favourite",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(s.a)(D.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(v.c,{value:e.get("favourites_count")}))),Object(s.a)("div",{style:o},void 0,d.a.createElement("div",{ref:this.setRef,className:w()("detailed-status",{compact:c}),"data-status-by":e.getIn(["account","acct"])},Object(s.a)("a",{href:e.getIn(["account","url"]),onClick:this.handleAccountClick,className:"detailed-status__display-name"},void 0,Object(s.a)("div",{className:"detailed-status__display-avatar"},void 0,Object(s.a)(b.a,{account:e.get("account"),size:48})),Object(s.a)(g.a,{account:e.get("account"),localDomain:this.props.domain})),Object(s.a)(f.a,{status:e,media:l,mediaIcon:r,expanded:a,collapsed:!1,onExpandedToggle:i,parseClick:this.parseClick,onUpdate:this.handleChildUpdate,tagLinks:n.get("tag_misleading_links"),rewriteMentions:n.get("rewrite_mentions"),disabled:!0}),Object(s.a)("div",{className:"detailed-status__meta"},void 0,Object(s.a)("a",{className:"detailed-status__datetime",href:e.get("url"),target:"_blank",rel:"noopener noreferrer"},void 0,Object(s.a)(v.a,{value:new Date(e.get("created_at")),hour12:!1,year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})),u," · ",p," · ",M," · ",Object(s.a)(C.a,{visibility:e.get("visibility")}))))},t}(M.a);Object(c.a)(H,"contextTypes",{router:u.a.object}),Object(c.a)(H,"propTypes",{status:h.a.map,settings:h.a.map.isRequired,onOpenMedia:u.a.func.isRequired,onOpenVideo:u.a.func.isRequired,onToggleHidden:u.a.func,expanded:u.a.bool,measureHeight:u.a.bool,onHeightChange:u.a.func,domain:u.a.string.isRequired,compact:u.a.bool,showMedia:u.a.bool,onToggleMediaVisibility:u.a.func})},832:function(e,t,a){"use strict";a.r(t);var s,i,n,o,c,l,d,r=a(0),u=a(8),p=a(2),h=a(7),b=a(1),g=a(4),f=a.n(g),m=a(3),O=a.n(m),j=a(13),v=a(5),k=a.n(v),M=a(12),y=a.n(M),_=a(14),C=a.n(_),x=a(54),I=a(113),w=a(1029),R=a(757),D=a(39),H=a(741),S=a(6),T=a(16),B=a(145),E=Object(S.f)({delete:{id:"status.delete",defaultMessage:"Delete"},redraft:{id:"status.redraft",defaultMessage:"Delete & re-draft"},direct:{id:"status.direct",defaultMessage:"Direct message @{name}"},mention:{id:"status.mention",defaultMessage:"Mention @{name}"},reply:{id:"status.reply",defaultMessage:"Reply"},reblog:{id:"status.reblog",defaultMessage:"Boost"},reblog_private:{id:"status.reblog_private",defaultMessage:"Boost to original audience"},cannot_reblog:{id:"status.cannot_reblog",defaultMessage:"This post cannot be boosted"},favourite:{id:"status.favourite",defaultMessage:"Favourite"},bookmark:{id:"status.bookmark",defaultMessage:"Bookmark"},mute:{id:"status.mute",defaultMessage:"Mute @{name}"},muteConversation:{id:"status.mute_conversation",defaultMessage:"Mute conversation"},unmuteConversation:{id:"status.unmute_conversation",defaultMessage:"Unmute conversation"},block:{id:"status.block",defaultMessage:"Block @{name}"},report:{id:"status.report",defaultMessage:"Report @{name}"},share:{id:"status.share",defaultMessage:"Share"},pin:{id:"status.pin",defaultMessage:"Pin on profile"},unpin:{id:"status.unpin",defaultMessage:"Unpin from profile"},embed:{id:"status.embed",defaultMessage:"Embed"},admin_account:{id:"status.admin_account",defaultMessage:"Open moderation interface for @{name}"},admin_status:{id:"status.admin_status",defaultMessage:"Open this status in the moderation interface"},copy:{id:"status.copy",defaultMessage:"Copy link to status"}}),N=Object(S.g)((n=i=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(b.a)(Object(p.a)(t),"handleReplyClick",(function(){t.props.onReply(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleReblogClick",(function(e){t.props.onReblog(t.props.status,e)})),Object(b.a)(Object(p.a)(t),"handleFavouriteClick",(function(e){t.props.onFavourite(t.props.status,e)})),Object(b.a)(Object(p.a)(t),"handleBookmarkClick",(function(e){t.props.onBookmark(t.props.status,e)})),Object(b.a)(Object(p.a)(t),"handleDeleteClick",(function(){t.props.onDelete(t.props.status,t.context.router.history)})),Object(b.a)(Object(p.a)(t),"handleRedraftClick",(function(){t.props.onDelete(t.props.status,t.context.router.history,!0)})),Object(b.a)(Object(p.a)(t),"handleDirectClick",(function(){t.props.onDirect(t.props.status.get("account"),t.context.router.history)})),Object(b.a)(Object(p.a)(t),"handleMentionClick",(function(){t.props.onMention(t.props.status.get("account"),t.context.router.history)})),Object(b.a)(Object(p.a)(t),"handleMuteClick",(function(){t.props.onMute(t.props.status.get("account"))})),Object(b.a)(Object(p.a)(t),"handleConversationMuteClick",(function(){t.props.onMuteConversation(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleBlockClick",(function(){t.props.onBlock(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleReport",(function(){t.props.onReport(t.props.status)})),Object(b.a)(Object(p.a)(t),"handlePinClick",(function(){t.props.onPin(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleShare",(function(){navigator.share({text:t.props.status.get("search_index"),url:t.props.status.get("url")})})),Object(b.a)(Object(p.a)(t),"handleEmbed",(function(){t.props.onEmbed(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleCopy",(function(){var e=t.props.status.get("url"),a=document.createElement("textarea");a.textContent=e,a.style.position="fixed",document.body.appendChild(a);try{a.select(),document.execCommand("copy")}catch(e){}finally{document.body.removeChild(a)}})),t}return Object(h.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.status,a=e.intl,s=["public","unlisted"].includes(t.get("visibility")),i=t.get("muted"),n=[];s&&(n.push({text:a.formatMessage(E.copy),action:this.handleCopy}),n.push({text:a.formatMessage(E.embed),action:this.handleEmbed}),n.push(null)),T.m===t.getIn(["account","id"])?(s&&n.push({text:a.formatMessage(t.get("pinned")?E.unpin:E.pin),action:this.handlePinClick}),n.push(null),n.push({text:a.formatMessage(i?E.unmuteConversation:E.muteConversation),action:this.handleConversationMuteClick}),n.push(null),n.push({text:a.formatMessage(E.delete),action:this.handleDeleteClick})):(n.push({text:a.formatMessage(E.mention,{name:t.getIn(["account","username"])}),action:this.handleMentionClick}),n.push({text:a.formatMessage(E.direct,{name:t.getIn(["account","username"])}),action:this.handleDirectClick}),n.push(null),n.push({text:a.formatMessage(E.mute,{name:t.getIn(["account","username"])}),action:this.handleMuteClick}),n.push({text:a.formatMessage(E.block,{name:t.getIn(["account","username"])}),action:this.handleBlockClick}),n.push({text:a.formatMessage(E.report,{name:t.getIn(["account","username"])}),action:this.handleReport}),T.j&&(B.a||B.g)&&(n.push(null),void 0!==B.a&&n.push({text:a.formatMessage(E.admin_account,{name:t.getIn(["account","username"])}),href:Object(B.a)(t.getIn(["account","id"]))}),void 0!==B.g&&n.push({text:a.formatMessage(E.admin_status),href:Object(B.g)(t.getIn(["account","id"]),t.get("id"))})));var o="share"in navigator&&"public"===t.get("visibility")&&Object(r.a)("div",{className:"detailed-status__button"},void 0,Object(r.a)(D.a,{title:a.formatMessage(E.share),icon:"share-alt",onClick:this.handleShare})),c="direct"===t.get("visibility")||"private"===t.get("visibility")&&T.m!==t.getIn(["account","id"]),l="private"===t.get("visibility")?E.reblog_private:E.reblog;return Object(r.a)("div",{className:"detailed-status__action-bar"},void 0,Object(r.a)("div",{className:"detailed-status__button"},void 0,Object(r.a)(D.a,{title:a.formatMessage(E.reply),icon:null===t.get("in_reply_to_id",null)?"reply":"reply-all",onClick:this.handleReplyClick})),Object(r.a)("div",{className:"detailed-status__button"},void 0,Object(r.a)(D.a,{disabled:c,active:t.get("reblogged"),title:c?a.formatMessage(E.cannot_reblog):a.formatMessage(l),icon:"retweet",onClick:this.handleReblogClick})),Object(r.a)("div",{className:"detailed-status__button"},void 0,Object(r.a)(D.a,{className:"star-icon",animate:!0,active:t.get("favourited"),title:a.formatMessage(E.favourite),icon:"star",onClick:this.handleFavouriteClick})),o,Object(r.a)("div",{className:"detailed-status__button"},void 0,Object(r.a)(D.a,{className:"bookmark-icon",active:t.get("bookmarked"),title:a.formatMessage(E.bookmark),icon:"bookmark",onClick:this.handleBookmarkClick})),Object(r.a)("div",{className:"detailed-status__action-bar-dropdown"},void 0,Object(r.a)(H.a,{size:18,icon:"ellipsis-h",items:n,direction:"left",ariaLabel:"More"})))},t}(O.a.PureComponent),Object(b.a)(i,"contextTypes",{router:k.a.object}),s=n))||s,A=a(730),V=a(46),F=a(19),U=a(303),z=a(119),P=a(225),q=a(99),K=a(103),L=a(467),W=a(1121),J=a(732),Y=a(1058),G=a(42),Q=a(18),X=a(295),Z=a(257),$=a(751),ee=a(844),te=a(23);a.d(t,"default",(function(){return se}));var ae=Object(S.f)({deleteConfirm:{id:"confirmations.delete.confirm",defaultMessage:"Delete"},deleteMessage:{id:"confirmations.delete.message",defaultMessage:"Are you sure you want to delete this status?"},redraftConfirm:{id:"confirmations.redraft.confirm",defaultMessage:"Delete & redraft"},redraftMessage:{id:"confirmations.redraft.message",defaultMessage:"Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it."},revealAll:{id:"status.show_more_all",defaultMessage:"Show more for all"},hideAll:{id:"status.show_less_all",defaultMessage:"Show less for all"},detailedStatus:{id:"status.detailed_status",defaultMessage:"Detailed conversation view"},replyConfirm:{id:"confirmations.reply.confirm",defaultMessage:"Reply"},replyMessage:{id:"confirmations.reply.message",defaultMessage:"Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?"},tootHeading:{id:"column.toot",defaultMessage:"Toots and replies"}}),se=(o=Object(j.connect)((function(){var e=Object(K.f)(),t=Object(x.a)([function(e,t){return t.id},function(e){return e.getIn(["contexts","inReplyTos"])}],(function(e,t){var a=f.a.List();return a=a.withMutations((function(a){for(var s=e;s;)a.unshift(s),s=t.get(s)}))})),a=Object(x.a)([function(e,t){return t.id},function(e){return e.getIn(["contexts","replies"])},function(e){return e.get("statuses")}],(function(e,t,a){for(var s=[],i=[e];i.length>0;){var n=i.shift(),o=t.get(n);e!==n&&s.push(n),o&&o.reverse().forEach((function(e){i.unshift(e)}))}var c=s.findIndex((function(e){return a.get(e).get("in_reply_to_account_id")!==a.get(e).get("account")}));return-1!==c&&s.forEach((function(e,t){t>c&&a.get(e).get("in_reply_to_account_id")===a.get(e).get("account")&&(s.splice(t,1),s.splice(c,0,e),c+=1)})),f.a.List(s)}));return function(s,i){var n=e(s,{id:i.params.statusId}),o=f.a.List(),c=f.a.List();return n&&(o=t(s,{id:n.get("in_reply_to_id")}),c=a(s,{id:n.get("id")})),{status:n,ancestorsIds:o,descendantsIds:c,settings:s.get("local_settings"),askReplyConfirmation:s.getIn(["local_settings","confirm_before_clearing_draft"])&&0!==s.getIn(["compose","text"]).trim().length,domain:s.getIn(["meta","domain"])}}})),Object(S.g)(c=o((d=l=function(e){function t(){for(var t,a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return t=e.call.apply(e,[this].concat(s))||this,Object(b.a)(Object(p.a)(t),"state",{fullscreen:!1,isExpanded:void 0,threadExpanded:void 0,statusId:void 0,loadedStatusId:void 0,showMedia:void 0,revealBehindCW:void 0}),Object(b.a)(Object(p.a)(t),"handleExpandedToggle",(function(){t.props.status.get("spoiler_text")&&t.setExpansion(!t.state.isExpanded)})),Object(b.a)(Object(p.a)(t),"handleToggleMediaVisibility",(function(){t.setState({showMedia:!t.state.showMedia})})),Object(b.a)(Object(p.a)(t),"handleModalFavourite",(function(e){t.props.dispatch(Object(V.p)(e))})),Object(b.a)(Object(p.a)(t),"handleFavouriteClick",(function(e,a){e.get("favourited")?t.props.dispatch(Object(V.v)(e)):a&&a.shiftKey||!T.h?t.handleModalFavourite(e):t.props.dispatch(Object(G.d)("FAVOURITE",{status:e,onFavourite:t.handleModalFavourite}))})),Object(b.a)(Object(p.a)(t),"handlePin",(function(e){e.get("pinned")?t.props.dispatch(Object(V.w)(e)):t.props.dispatch(Object(V.s)(e))})),Object(b.a)(Object(p.a)(t),"handleReplyClick",(function(e){var a=t.props,s=a.askReplyConfirmation,i=a.dispatch,n=a.intl;i(s?Object(G.d)("CONFIRM",{message:n.formatMessage(ae.replyMessage),confirm:n.formatMessage(ae.replyConfirm),onDoNotAsk:function(){return i(Object(U.b)(["confirm_before_clearing_draft"],!1))},onConfirm:function(){return i(Object(F.lb)(e,t.context.router.history))}}):Object(F.lb)(e,t.context.router.history))})),Object(b.a)(Object(p.a)(t),"handleModalReblog",(function(e){var a=t.props.dispatch;e.get("reblogged")?a(Object(V.x)(e)):a(Object(V.t)(e))})),Object(b.a)(Object(p.a)(t),"handleReblogClick",(function(e,a){var s=t.props,i=s.settings,n=s.dispatch;i.get("confirm_boost_missing_media_description")&&e.get("media_attachments").some((function(e){return!e.get("description")}))&&!e.get("reblogged")?n(Object(G.d)("BOOST",{status:e,onReblog:t.handleModalReblog,missingMediaDescription:!0})):a&&a.shiftKey||!T.b?t.handleModalReblog(e):n(Object(G.d)("BOOST",{status:e,onReblog:t.handleModalReblog}))})),Object(b.a)(Object(p.a)(t),"handleBookmarkClick",(function(e){e.get("bookmarked")?t.props.dispatch(Object(V.u)(e)):t.props.dispatch(Object(V.o)(e))})),Object(b.a)(Object(p.a)(t),"handleDeleteClick",(function(e,a,s){void 0===s&&(s=!1);var i=t.props,n=i.dispatch,o=i.intl;T.e?n(Object(G.d)("CONFIRM",{message:o.formatMessage(s?ae.redraftMessage:ae.deleteMessage),confirm:o.formatMessage(s?ae.redraftConfirm:ae.deleteConfirm),onConfirm:function(){return n(Object(I.e)(e.get("id"),a,s))}})):n(Object(I.e)(e.get("id"),a,s))})),Object(b.a)(Object(p.a)(t),"handleDirectClick",(function(e,a){t.props.dispatch(Object(F.bb)(e,a))})),Object(b.a)(Object(p.a)(t),"handleMentionClick",(function(e,a){t.props.dispatch(Object(F.hb)(e,a))})),Object(b.a)(Object(p.a)(t),"handleOpenMedia",(function(e,a){t.props.dispatch(Object(G.d)("MEDIA",{media:e,index:a}))})),Object(b.a)(Object(p.a)(t),"handleOpenVideo",(function(e,a){t.props.dispatch(Object(G.d)("VIDEO",{media:e,time:a}))})),Object(b.a)(Object(p.a)(t),"handleHotkeyOpenMedia",(function(e){var a=t.props.status;e.preventDefault(),a.get("media_attachments").size>0&&("audio"===a.getIn(["media_attachments",0,"type"])||("video"===a.getIn(["media_attachments",0,"type"])?t.handleOpenVideo(a.getIn(["media_attachments",0]),0):t.handleOpenMedia(a.get("media_attachments"),0)))})),Object(b.a)(Object(p.a)(t),"handleMuteClick",(function(e){t.props.dispatch(Object(z.g)(e))})),Object(b.a)(Object(p.a)(t),"handleConversationMuteClick",(function(e){e.get("muted")?t.props.dispatch(Object(I.j)(e.get("id"))):t.props.dispatch(Object(I.h)(e.get("id")))})),Object(b.a)(Object(p.a)(t),"handleToggleAll",(function(){var e=t.state.isExpanded;t.setState({isExpanded:!e,threadExpanded:!e})})),Object(b.a)(Object(p.a)(t),"handleBlockClick",(function(e){var a=t.props.dispatch,s=e.get("account");a(Object(P.f)(s))})),Object(b.a)(Object(p.a)(t),"handleReport",(function(e){t.props.dispatch(Object(q.k)(e.get("account"),e))})),Object(b.a)(Object(p.a)(t),"handleEmbed",(function(e){t.props.dispatch(Object(G.d)("EMBED",{url:e.get("url")}))})),Object(b.a)(Object(p.a)(t),"handleHotkeyToggleSensitive",(function(){t.handleToggleMediaVisibility()})),Object(b.a)(Object(p.a)(t),"handleHotkeyMoveUp",(function(){t.handleMoveUp(t.props.status.get("id"))})),Object(b.a)(Object(p.a)(t),"handleHotkeyMoveDown",(function(){t.handleMoveDown(t.props.status.get("id"))})),Object(b.a)(Object(p.a)(t),"handleHotkeyReply",(function(e){e.preventDefault(),t.handleReplyClick(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleHotkeyFavourite",(function(){t.handleFavouriteClick(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleHotkeyBoost",(function(){t.handleReblogClick(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleHotkeyBookmark",(function(){t.handleBookmarkClick(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleHotkeyMention",(function(e){e.preventDefault(),t.handleMentionClick(t.props.status)})),Object(b.a)(Object(p.a)(t),"handleHotkeyOpenProfile",(function(){var e=Object(u.default)({},t.context.router.history.location.state);e.mastodonBackSteps=(e.mastodonBackSteps||0)+1,t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]),e)})),Object(b.a)(Object(p.a)(t),"handleMoveUp",(function(e){var a=t.props,s=a.status,i=a.ancestorsIds,n=a.descendantsIds;if(e===s.get("id"))t._selectChild(i.size-1,!0);else{var o=i.indexOf(e);-1===o?(o=n.indexOf(e),t._selectChild(i.size+o,!0)):t._selectChild(o-1,!0)}})),Object(b.a)(Object(p.a)(t),"handleMoveDown",(function(e){var a=t.props,s=a.status,i=a.ancestorsIds,n=a.descendantsIds;if(e===s.get("id"))t._selectChild(i.size+1,!1);else{var o=i.indexOf(e);-1===o?(o=n.indexOf(e),t._selectChild(i.size+o+2,!1)):t._selectChild(o+1,!1)}})),Object(b.a)(Object(p.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(b.a)(Object(p.a)(t),"setExpansion",(function(e){t.setState({isExpanded:e})})),Object(b.a)(Object(p.a)(t),"setRef",(function(e){t.node=e})),Object(b.a)(Object(p.a)(t),"setColumnRef",(function(e){t.column=e})),Object(b.a)(Object(p.a)(t),"onFullScreenChange",(function(){t.setState({fullscreen:Object(Z.d)()})})),Object(b.a)(Object(p.a)(t),"shouldUpdateScroll",(function(e,t){var a=t.location;return!(((e||{}).location||{}).state||{}).mastodonModalOpen&&!(a.state&&a.state.mastodonModalOpen)})),t}Object(h.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){Object(Z.a)(this.onFullScreenChange),this.props.dispatch(Object(I.f)(this.props.params.statusId));var e=this.props,t=e.status,a=e.ancestorsIds;if(t&&a&&a.size>0){var s=this.node.querySelectorAll(".focusable")[a.size-1];window.requestAnimationFrame((function(){s.scrollIntoView(!0)}))}},t.getDerivedStateFromProps=function(e,t){var a={},s=!1;e.params.statusId&&t.statusId!==e.params.statusId&&(e.dispatch(Object(I.f)(e.params.statusId)),a.threadExpanded=void 0,a.statusId=e.params.statusId,s=!0);var i=e.settings.getIn(["media","reveal_behind_cw"]);return i!==t.revealBehindCW&&(a.revealBehindCW=i,i&&(a.showMedia=Object(ee.b)(e.status,e.settings)),s=!0),e.status&&t.loadedStatusId!==e.status.get("id")&&(a.showMedia=Object(ee.b)(e.status,e.settings),a.loadedStatusId=e.status.get("id"),a.isExpanded=Object($.a)(e.settings,e.status),s=!0),s?a:null},a._selectChild=function(e,t){var a=this.node,s=a.querySelectorAll(".focusable")[e];s&&(t&&a.scrollTop>s.offsetTop?s.scrollIntoView(!0):!t&&a.scrollTop+a.clientHeight<s.offsetTop+s.offsetHeight&&s.scrollIntoView(!1),s.focus())},a.renderChildren=function(e){var t=this;return e.map((function(e){return Object(r.a)(Y.a,{id:e,expanded:t.state.threadExpanded,onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown,contextType:"thread"},e)}))},a.componentDidUpdate=function(e){if(this.props.params.statusId&&(this.props.params.statusId!==e.params.statusId||e.ancestorsIds.size<this.props.ancestorsIds.size)){var t=this.props,a=t.status,s=t.ancestorsIds;if(a&&s&&s.size>0){var i=this.node.querySelectorAll(".focusable")[s.size-1];window.requestAnimationFrame((function(){i.scrollIntoView(!0)}))}}},a.componentWillUnmount=function(){Object(Z.b)(this.onFullScreenChange)},a.render=function(){this.setExpansion;var e,t,a=this.props,s=a.status,i=a.settings,n=a.ancestorsIds,o=a.descendantsIds,c=a.intl,l=a.domain,d=a.multiColumn,u=this.state,p=u.fullscreen,h=u.isExpanded;if(null===s)return Object(r.a)(A.a,{},void 0,Object(r.a)(W.a,{multiColumn:d}),Object(r.a)(w.a,{}));n&&n.size>0&&(e=Object(r.a)("div",{},void 0,this.renderChildren(n))),o&&o.size>0&&(t=Object(r.a)("div",{},void 0,this.renderChildren(o)));var b={moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,reply:this.handleHotkeyReply,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,bookmark:this.handleHotkeyBookmark,mention:this.handleHotkeyMention,openProfile:this.handleHotkeyOpenProfile,toggleSpoiler:this.handleExpandedToggle,toggleSensitive:this.handleHotkeyToggleSensitive,openMedia:this.handleHotkeyOpenMedia};return O.a.createElement(A.a,{bindToDocument:!d,ref:this.setColumnRef,label:c.formatMessage(ae.detailedStatus)},Object(r.a)(J.a,{icon:"comment",title:c.formatMessage(ae.tootHeading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:d,extraButton:Object(r.a)("button",{className:"column-header__button",title:c.formatMessage(h?ae.hideAll:ae.revealAll),"aria-label":c.formatMessage(h?ae.hideAll:ae.revealAll),onClick:this.handleToggleAll,"aria-pressed":h?"true":"false"},void 0,Object(r.a)(te.a,{id:s.get("hidden")?"eye-slash":"eye"}))}),Object(r.a)(L.a,{scrollKey:"thread",shouldUpdateScroll:this.shouldUpdateScroll},void 0,O.a.createElement("div",{className:y()("scrollable","detailed-status__wrapper",{fullscreen:p}),ref:this.setRef},e,Object(r.a)(X.HotKeys,{handlers:b},void 0,Object(r.a)("div",{className:"focusable",tabIndex:"0","aria-label":Object(ee.c)(c,s,!1,!s.get("hidden"))},void 0,Object(r.a)(R.a,{status:s,settings:i,onOpenVideo:this.handleOpenVideo,onOpenMedia:this.handleOpenMedia,expanded:h,onToggleHidden:this.handleExpandedToggle,domain:l,showMedia:this.state.showMedia,onToggleMediaVisibility:this.handleToggleMediaVisibility},"details-"+s.get("id")),Object(r.a)(N,{status:s,onReply:this.handleReplyClick,onFavourite:this.handleFavouriteClick,onReblog:this.handleReblogClick,onBookmark:this.handleBookmarkClick,onDelete:this.handleDeleteClick,onDirect:this.handleDirectClick,onMention:this.handleMentionClick,onMute:this.handleMuteClick,onMuteConversation:this.handleConversationMuteClick,onBlock:this.handleBlockClick,onReport:this.handleReport,onPin:this.handlePin,onEmbed:this.handleEmbed},"action-bar-"+s.get("id")))),t)))},t}(Q.a),Object(b.a)(l,"contextTypes",{router:k.a.object}),Object(b.a)(l,"propTypes",{params:k.a.object.isRequired,dispatch:k.a.func.isRequired,status:C.a.map,settings:C.a.map.isRequired,ancestorsIds:C.a.list,descendantsIds:C.a.list,intl:k.a.object.isRequired,askReplyConfirmation:k.a.bool,multiColumn:k.a.bool,domain:k.a.string.isRequired}),c=d))||c)||c)}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{783:function(e,t,a){"use strict";a.d(t,"a",(function(){return S}));var s=a(0),n=a(10),i=a(2),o=(a(9),a(6),a(8)),c=a(1),l=a(3),r=a.n(l),d=a(5),u=a.n(d),p=a(16),h=a.n(p),b=a(96),g=a(98),f=a(155),m=a(474),O=a(265),j=a(322),v=a(7),k=a(475),M=a(21),y=a(87),_=a(227),C=a(541),x=a(772),I=a(14),w=a.n(I),R=a(543),D=a(25),H=a(589);var S=function(e){Object(o.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return t=e.call.apply(e,[this].concat(s))||this,Object(c.a)(Object(i.a)(t),"state",{height:null}),Object(c.a)(Object(i.a)(t),"handleAccountClick",(function(e){if(0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)&&t.context.router){e.preventDefault();var a=Object(n.default)({},t.context.router.history.location.state);a.mastodonBackSteps=(a.mastodonBackSteps||0)+1,t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]),a)}e.stopPropagation()})),Object(c.a)(Object(i.a)(t),"parseClick",(function(e,a){if(0===e.button&&!(e.ctrlKey||e.altKey||e.metaKey)&&t.context.router){e.preventDefault();var s=Object(n.default)({},t.context.router.history.location.state);s.mastodonBackSteps=(s.mastodonBackSteps||0)+1,t.context.router.history.push(a,s)}e.stopPropagation()})),Object(c.a)(Object(i.a)(t),"handleOpenVideo",(function(e,a){t.props.onOpenVideo(e,a)})),Object(c.a)(Object(i.a)(t),"setRef",(function(e){t.node=e,t._measureHeight()})),Object(c.a)(Object(i.a)(t),"handleChildUpdate",(function(){t._measureHeight()})),Object(c.a)(Object(i.a)(t),"handleModalLink",(function(e){var t;e.preventDefault(),t="A"!==e.target.nodeName?e.target.parentNode.href:e.target.href,window.open(t,"mastodon-intent","width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes")})),t}var l=a.prototype;return l._measureHeight=function(e){var t=this;this.props.measureHeight&&this.node&&(Object(x.a)((function(){return t.node&&t.setState({height:Math.ceil(t.node.scrollHeight)+1})})),this.props.onHeightChange&&e&&this.props.onHeightChange())},l.componentDidUpdate=function(e,t){this._measureHeight(t.height!==this.state.height)},l.render=function(){var e=this.props.status&&this.props.status.get("reblog")?this.props.status.get("reblog"):this.props.status,t=this.props,a=t.expanded,n=t.onToggleHidden,i=t.settings,o={boxSizing:"border-box"},c=this.props.compact;if(!e)return null;var l=null,d=null,u="",p="",h="retweet",M="";if(this.props.measureHeight&&(o.height=this.state.height+"px"),e.get("poll"))l=Object(s.a)(R.a,{pollId:e.get("poll")}),d="tasks";else if(e.get("media_attachments").size>0)if(e.get("media_attachments").some((function(e){return"unknown"===e.get("type")})))l=Object(s.a)(O.a,{media:e.get("media_attachments")});else if("audio"===e.getIn(["media_attachments",0,"type"])){var x=e.getIn(["media_attachments",0]);l=Object(s.a)(_.default,{src:x.get("url"),alt:x.get("description"),duration:x.getIn(["meta","original","duration"],0),height:110,preload:!0}),d="music"}else if("video"===e.getIn(["media_attachments",0,"type"])){var I=e.getIn(["media_attachments",0]);l=Object(s.a)(y.default,{preview:I.get("preview_url"),blurhash:I.get("blurhash"),src:I.get("url"),alt:I.get("description"),inline:!0,sensitive:e.get("sensitive"),letterbox:i.getIn(["media","letterbox"]),fullwidth:i.getIn(["media","fullwidth"]),preventPlayback:!a,onOpenVideo:this.handleOpenVideo,autoplay:!0,visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility}),d="video-camera"}else l=Object(s.a)(m.default,{standalone:!0,sensitive:e.get("sensitive"),media:e.get("media_attachments"),letterbox:i.getIn(["media","letterbox"]),fullwidth:i.getIn(["media","fullwidth"]),hidden:!a,onOpenMedia:this.props.onOpenMedia,visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility}),d="picture-o";else e.get("card")&&(l=Object(s.a)(k.a,{onOpenMedia:this.props.onOpenMedia,card:e.get("card")}),d="link");return e.get("application")&&(u=Object(s.a)("span",{},void 0," · ",Object(s.a)("a",{className:"detailed-status__application",href:e.getIn(["application","website"]),target:"_blank",rel:"noopener noreferrer"},void 0,e.getIn(["application","name"])))),"direct"===e.get("visibility")?h="envelope":"private"===e.get("visibility")&&(h="lock"),p=["unlisted","public"].includes(e.get("visibility"))?this.context.router?Object(s.a)(j.a,{to:"/statuses/"+e.get("id")+"/reblogs",className:"detailed-status__link"},void 0,Object(s.a)(D.a,{id:h}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(H.a,{value:e.get("reblogs_count")}))):Object(s.a)("a",{href:"/interact/"+e.get("id")+"?type=reblog",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(s.a)(D.a,{id:h}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(H.a,{value:e.get("reblogs_count")}))):null,M=this.context.router?Object(s.a)(j.a,{to:"/statuses/"+e.get("id")+"/favourites",className:"detailed-status__link"},void 0,Object(s.a)(D.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(H.a,{value:e.get("favourites_count")}))):Object(s.a)("a",{href:"/interact/"+e.get("id")+"?type=favourite",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(s.a)(D.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(H.a,{value:e.get("favourites_count")}))),Object(s.a)("div",{style:o},void 0,r.a.createElement("div",{ref:this.setRef,className:w()("detailed-status",{compact:c}),"data-status-by":e.getIn(["account","acct"])},Object(s.a)("a",{href:e.getIn(["account","url"]),onClick:this.handleAccountClick,className:"detailed-status__display-name"},void 0,Object(s.a)("div",{className:"detailed-status__display-avatar"},void 0,Object(s.a)(b.a,{account:e.get("account"),size:48})),Object(s.a)(g.a,{account:e.get("account"),localDomain:this.props.domain})),Object(s.a)(f.a,{status:e,media:l,mediaIcon:d,expanded:a,collapsed:!1,onExpandedToggle:n,parseClick:this.parseClick,onUpdate:this.handleChildUpdate,tagLinks:i.get("tag_misleading_links"),rewriteMentions:i.get("rewrite_mentions"),disabled:!0}),Object(s.a)("div",{className:"detailed-status__meta"},void 0,Object(s.a)("a",{className:"detailed-status__datetime",href:e.get("url"),target:"_blank",rel:"noopener noreferrer"},void 0,Object(s.a)(v.a,{value:new Date(e.get("created_at")),hour12:!1,year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})),u," ",!!p&&["·",p]," · ",M," · ",Object(s.a)(C.a,{visibility:e.get("visibility")}))))},a}(M.a);Object(c.a)(S,"contextTypes",{router:u.a.object}),Object(c.a)(S,"propTypes",{status:h.a.map,settings:h.a.map.isRequired,onOpenMedia:u.a.func.isRequired,onOpenVideo:u.a.func.isRequired,onToggleHidden:u.a.func,expanded:u.a.bool,measureHeight:u.a.bool,onHeightChange:u.a.func,domain:u.a.string.isRequired,compact:u.a.bool,showMedia:u.a.bool,onToggleMediaVisibility:u.a.func})},858:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return se}));var s,n,i,o=a(0),c=a(10),l=a(2),r=(a(9),a(6),a(8)),d=a(1),u=a(4),p=a.n(u),h=a(3),b=a.n(h),g=a(15),f=a(5),m=a.n(f),O=a(14),j=a.n(O),v=a(16),k=a.n(v),M=a(57),y=a(117),_=a(1056),C=a(783),x=a(41),I=a(767),w=a(7),R=a(18),D=a(150);var H,S,T,B,E=Object(w.f)({delete:{id:"status.delete",defaultMessage:"Delete"},redraft:{id:"status.redraft",defaultMessage:"Delete & re-draft"},direct:{id:"status.direct",defaultMessage:"Direct message @{name}"},mention:{id:"status.mention",defaultMessage:"Mention @{name}"},reply:{id:"status.reply",defaultMessage:"Reply"},reblog:{id:"status.reblog",defaultMessage:"Boost"},reblog_private:{id:"status.reblog_private",defaultMessage:"Boost to original audience"},cannot_reblog:{id:"status.cannot_reblog",defaultMessage:"This post cannot be boosted"},favourite:{id:"status.favourite",defaultMessage:"Favourite"},bookmark:{id:"status.bookmark",defaultMessage:"Bookmark"},more:{id:"status.more",defaultMessage:"More"},mute:{id:"status.mute",defaultMessage:"Mute @{name}"},muteConversation:{id:"status.mute_conversation",defaultMessage:"Mute conversation"},unmuteConversation:{id:"status.unmute_conversation",defaultMessage:"Unmute conversation"},block:{id:"status.block",defaultMessage:"Block @{name}"},report:{id:"status.report",defaultMessage:"Report @{name}"},share:{id:"status.share",defaultMessage:"Share"},pin:{id:"status.pin",defaultMessage:"Pin on profile"},unpin:{id:"status.unpin",defaultMessage:"Unpin from profile"},embed:{id:"status.embed",defaultMessage:"Embed"},admin_account:{id:"status.admin_account",defaultMessage:"Open moderation interface for @{name}"},admin_status:{id:"status.admin_status",defaultMessage:"Open this status in the moderation interface"},copy:{id:"status.copy",defaultMessage:"Copy link to status"}}),N=Object(w.g)((i=n=function(e){Object(r.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];return t=e.call.apply(e,[this].concat(s))||this,Object(d.a)(Object(l.a)(t),"handleReplyClick",(function(){t.props.onReply(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleReblogClick",(function(e){t.props.onReblog(t.props.status,e)})),Object(d.a)(Object(l.a)(t),"handleFavouriteClick",(function(e){t.props.onFavourite(t.props.status,e)})),Object(d.a)(Object(l.a)(t),"handleBookmarkClick",(function(e){t.props.onBookmark(t.props.status,e)})),Object(d.a)(Object(l.a)(t),"handleDeleteClick",(function(){t.props.onDelete(t.props.status,t.context.router.history)})),Object(d.a)(Object(l.a)(t),"handleRedraftClick",(function(){t.props.onDelete(t.props.status,t.context.router.history,!0)})),Object(d.a)(Object(l.a)(t),"handleDirectClick",(function(){t.props.onDirect(t.props.status.get("account"),t.context.router.history)})),Object(d.a)(Object(l.a)(t),"handleMentionClick",(function(){t.props.onMention(t.props.status.get("account"),t.context.router.history)})),Object(d.a)(Object(l.a)(t),"handleMuteClick",(function(){t.props.onMute(t.props.status.get("account"))})),Object(d.a)(Object(l.a)(t),"handleConversationMuteClick",(function(){t.props.onMuteConversation(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleBlockClick",(function(){t.props.onBlock(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleReport",(function(){t.props.onReport(t.props.status)})),Object(d.a)(Object(l.a)(t),"handlePinClick",(function(){t.props.onPin(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleShare",(function(){navigator.share({text:t.props.status.get("search_index"),url:t.props.status.get("url")})})),Object(d.a)(Object(l.a)(t),"handleEmbed",(function(){t.props.onEmbed(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleCopy",(function(){var e=t.props.status.get("url"),a=document.createElement("textarea");a.textContent=e,a.style.position="fixed",document.body.appendChild(a);try{a.select(),document.execCommand("copy")}catch(e){}finally{document.body.removeChild(a)}})),t}return a.prototype.render=function(){var e=this.props,t=e.status,a=e.intl,s=["public","unlisted"].includes(t.get("visibility")),n=t.get("muted"),i=[];s&&(i.push({text:a.formatMessage(E.copy),action:this.handleCopy}),i.push({text:a.formatMessage(E.embed),action:this.handleEmbed}),i.push(null)),R.m===t.getIn(["account","id"])?(s&&i.push({text:a.formatMessage(t.get("pinned")?E.unpin:E.pin),action:this.handlePinClick}),i.push(null),i.push({text:a.formatMessage(n?E.unmuteConversation:E.muteConversation),action:this.handleConversationMuteClick}),i.push(null),i.push({text:a.formatMessage(E.delete),action:this.handleDeleteClick})):(i.push({text:a.formatMessage(E.mention,{name:t.getIn(["account","username"])}),action:this.handleMentionClick}),i.push({text:a.formatMessage(E.direct,{name:t.getIn(["account","username"])}),action:this.handleDirectClick}),i.push(null),i.push({text:a.formatMessage(E.mute,{name:t.getIn(["account","username"])}),action:this.handleMuteClick}),i.push({text:a.formatMessage(E.block,{name:t.getIn(["account","username"])}),action:this.handleBlockClick}),i.push({text:a.formatMessage(E.report,{name:t.getIn(["account","username"])}),action:this.handleReport}),R.j&&(D.a||D.g)&&(i.push(null),void 0!==D.a&&i.push({text:a.formatMessage(E.admin_account,{name:t.getIn(["account","username"])}),href:Object(D.a)(t.getIn(["account","id"]))}),void 0!==D.g&&i.push({text:a.formatMessage(E.admin_status),href:Object(D.g)(t.getIn(["account","id"]),t.get("id"))})));var c="share"in navigator&&s&&Object(o.a)("div",{className:"detailed-status__button"},void 0,Object(o.a)(x.a,{title:a.formatMessage(E.share),icon:"share-alt",onClick:this.handleShare})),l="direct"===t.get("visibility")||"private"===t.get("visibility")&&R.m!==t.getIn(["account","id"]),r="private"===t.get("visibility")?E.reblog_private:E.reblog;return Object(o.a)("div",{className:"detailed-status__action-bar"},void 0,Object(o.a)("div",{className:"detailed-status__button"},void 0,Object(o.a)(x.a,{title:a.formatMessage(E.reply),icon:null===t.get("in_reply_to_id",null)?"reply":"reply-all",onClick:this.handleReplyClick})),Object(o.a)("div",{className:"detailed-status__button"},void 0,Object(o.a)(x.a,{disabled:l,active:t.get("reblogged"),title:l?a.formatMessage(E.cannot_reblog):a.formatMessage(r),icon:"retweet",onClick:this.handleReblogClick})),Object(o.a)("div",{className:"detailed-status__button"},void 0,Object(o.a)(x.a,{className:"star-icon",animate:!0,active:t.get("favourited"),title:a.formatMessage(E.favourite),icon:"star",onClick:this.handleFavouriteClick})),c,Object(o.a)("div",{className:"detailed-status__button"},void 0,Object(o.a)(x.a,{className:"bookmark-icon",active:t.get("bookmarked"),title:a.formatMessage(E.bookmark),icon:"bookmark",onClick:this.handleBookmarkClick})),Object(o.a)("div",{className:"detailed-status__action-bar-dropdown"},void 0,Object(o.a)(I.a,{size:18,icon:"ellipsis-h",items:i,direction:"left",title:a.formatMessage(E.more)})))},a}(b.a.PureComponent),Object(d.a)(n,"contextTypes",{router:m.a.object}),s=i))||s,A=a(756),V=a(47),F=a(20),U=a(309),z=a(123),P=a(229),q=a(104),K=a(108),L=a(472),W=a(1153),J=a(758),Y=a(1085),G=a(45),Q=a(21),X=a(301),Z=a(260),$=a(777),ee=a(870),te=a(25);var ae=Object(w.f)({deleteConfirm:{id:"confirmations.delete.confirm",defaultMessage:"Delete"},deleteMessage:{id:"confirmations.delete.message",defaultMessage:"Are you sure you want to delete this status?"},redraftConfirm:{id:"confirmations.redraft.confirm",defaultMessage:"Delete & redraft"},redraftMessage:{id:"confirmations.redraft.message",defaultMessage:"Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it."},revealAll:{id:"status.show_more_all",defaultMessage:"Show more for all"},hideAll:{id:"status.show_less_all",defaultMessage:"Show less for all"},detailedStatus:{id:"status.detailed_status",defaultMessage:"Detailed conversation view"},replyConfirm:{id:"confirmations.reply.confirm",defaultMessage:"Reply"},replyMessage:{id:"confirmations.reply.message",defaultMessage:"Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?"},tootHeading:{id:"column.toot",defaultMessage:"Toots and replies"}}),se=(H=Object(g.connect)((function(){var e=Object(K.f)(),t=Object(M.a)([function(e,t){return t.id},function(e){return e.getIn(["contexts","inReplyTos"])}],(function(e,t){var a=p.a.List();return a=a.withMutations((function(a){for(var s=e;s;)a.unshift(s),s=t.get(s)}))})),a=Object(M.a)([function(e,t){return t.id},function(e){return e.getIn(["contexts","replies"])},function(e){return e.get("statuses")}],(function(e,t,a){for(var s=[],n=[e];n.length>0;){var i=n.shift(),o=t.get(i);e!==i&&s.push(i),o&&o.reverse().forEach((function(e){n.unshift(e)}))}var c=s.findIndex((function(e){return a.get(e).get("in_reply_to_account_id")!==a.get(e).get("account")}));return-1!==c&&s.forEach((function(e,t){t>c&&a.get(e).get("in_reply_to_account_id")===a.get(e).get("account")&&(s.splice(t,1),s.splice(c,0,e),c+=1)})),p.a.List(s)}));return function(s,n){var i=e(s,{id:n.params.statusId}),o=p.a.List(),c=p.a.List();return i&&(o=t(s,{id:i.get("in_reply_to_id")}),c=a(s,{id:i.get("id")})),{status:i,ancestorsIds:o,descendantsIds:c,settings:s.get("local_settings"),askReplyConfirmation:s.getIn(["local_settings","confirm_before_clearing_draft"])&&0!==s.getIn(["compose","text"]).trim().length,domain:s.getIn(["meta","domain"])}}})),Object(w.g)(S=H((B=T=function(e){Object(r.a)(a,e);var t;t=a;function a(){for(var t,a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];return t=e.call.apply(e,[this].concat(s))||this,Object(d.a)(Object(l.a)(t),"state",{fullscreen:!1,isExpanded:void 0,threadExpanded:void 0,statusId:void 0,loadedStatusId:void 0,showMedia:void 0,revealBehindCW:void 0}),Object(d.a)(Object(l.a)(t),"handleExpandedToggle",(function(){t.props.status.get("spoiler_text")&&t.setExpansion(!t.state.isExpanded)})),Object(d.a)(Object(l.a)(t),"handleToggleMediaVisibility",(function(){t.setState({showMedia:!t.state.showMedia})})),Object(d.a)(Object(l.a)(t),"handleModalFavourite",(function(e){t.props.dispatch(Object(V.p)(e))})),Object(d.a)(Object(l.a)(t),"handleFavouriteClick",(function(e,a){e.get("favourited")?t.props.dispatch(Object(V.v)(e)):a&&a.shiftKey||!R.h?t.handleModalFavourite(e):t.props.dispatch(Object(G.d)("FAVOURITE",{status:e,onFavourite:t.handleModalFavourite}))})),Object(d.a)(Object(l.a)(t),"handlePin",(function(e){e.get("pinned")?t.props.dispatch(Object(V.w)(e)):t.props.dispatch(Object(V.s)(e))})),Object(d.a)(Object(l.a)(t),"handleReplyClick",(function(e){var a=t.props,s=a.askReplyConfirmation,n=a.dispatch,i=a.intl;n(s?Object(G.d)("CONFIRM",{message:i.formatMessage(ae.replyMessage),confirm:i.formatMessage(ae.replyConfirm),onDoNotAsk:function(){return n(Object(U.b)(["confirm_before_clearing_draft"],!1))},onConfirm:function(){return n(Object(F.lb)(e,t.context.router.history))}}):Object(F.lb)(e,t.context.router.history))})),Object(d.a)(Object(l.a)(t),"handleModalReblog",(function(e){var a=t.props.dispatch;e.get("reblogged")?a(Object(V.x)(e)):a(Object(V.t)(e))})),Object(d.a)(Object(l.a)(t),"handleReblogClick",(function(e,a){var s=t.props,n=s.settings,i=s.dispatch;n.get("confirm_boost_missing_media_description")&&e.get("media_attachments").some((function(e){return!e.get("description")}))&&!e.get("reblogged")?i(Object(G.d)("BOOST",{status:e,onReblog:t.handleModalReblog,missingMediaDescription:!0})):a&&a.shiftKey||!R.b?t.handleModalReblog(e):i(Object(G.d)("BOOST",{status:e,onReblog:t.handleModalReblog}))})),Object(d.a)(Object(l.a)(t),"handleBookmarkClick",(function(e){e.get("bookmarked")?t.props.dispatch(Object(V.u)(e)):t.props.dispatch(Object(V.o)(e))})),Object(d.a)(Object(l.a)(t),"handleDeleteClick",(function(e,a,s){void 0===s&&(s=!1);var n=t.props,i=n.dispatch,o=n.intl;R.e?i(Object(G.d)("CONFIRM",{message:o.formatMessage(s?ae.redraftMessage:ae.deleteMessage),confirm:o.formatMessage(s?ae.redraftConfirm:ae.deleteConfirm),onConfirm:function(){return i(Object(y.e)(e.get("id"),a,s))}})):i(Object(y.e)(e.get("id"),a,s))})),Object(d.a)(Object(l.a)(t),"handleDirectClick",(function(e,a){t.props.dispatch(Object(F.bb)(e,a))})),Object(d.a)(Object(l.a)(t),"handleMentionClick",(function(e,a){t.props.dispatch(Object(F.hb)(e,a))})),Object(d.a)(Object(l.a)(t),"handleOpenMedia",(function(e,a){t.props.dispatch(Object(G.d)("MEDIA",{media:e,index:a}))})),Object(d.a)(Object(l.a)(t),"handleOpenVideo",(function(e,a){t.props.dispatch(Object(G.d)("VIDEO",{media:e,time:a}))})),Object(d.a)(Object(l.a)(t),"handleHotkeyOpenMedia",(function(e){var a=t.props.status;e.preventDefault(),a.get("media_attachments").size>0&&("audio"===a.getIn(["media_attachments",0,"type"])||("video"===a.getIn(["media_attachments",0,"type"])?t.handleOpenVideo(a.getIn(["media_attachments",0]),0):t.handleOpenMedia(a.get("media_attachments"),0)))})),Object(d.a)(Object(l.a)(t),"handleMuteClick",(function(e){t.props.dispatch(Object(z.g)(e))})),Object(d.a)(Object(l.a)(t),"handleConversationMuteClick",(function(e){e.get("muted")?t.props.dispatch(Object(y.j)(e.get("id"))):t.props.dispatch(Object(y.h)(e.get("id")))})),Object(d.a)(Object(l.a)(t),"handleToggleAll",(function(){var e=t.state.isExpanded;t.setState({isExpanded:!e,threadExpanded:!e})})),Object(d.a)(Object(l.a)(t),"handleBlockClick",(function(e){var a=t.props.dispatch,s=e.get("account");a(Object(P.f)(s))})),Object(d.a)(Object(l.a)(t),"handleReport",(function(e){t.props.dispatch(Object(q.k)(e.get("account"),e))})),Object(d.a)(Object(l.a)(t),"handleEmbed",(function(e){t.props.dispatch(Object(G.d)("EMBED",{url:e.get("url")}))})),Object(d.a)(Object(l.a)(t),"handleHotkeyToggleSensitive",(function(){t.handleToggleMediaVisibility()})),Object(d.a)(Object(l.a)(t),"handleHotkeyMoveUp",(function(){t.handleMoveUp(t.props.status.get("id"))})),Object(d.a)(Object(l.a)(t),"handleHotkeyMoveDown",(function(){t.handleMoveDown(t.props.status.get("id"))})),Object(d.a)(Object(l.a)(t),"handleHotkeyReply",(function(e){e.preventDefault(),t.handleReplyClick(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleHotkeyFavourite",(function(){t.handleFavouriteClick(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleHotkeyBoost",(function(){t.handleReblogClick(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleHotkeyBookmark",(function(){t.handleBookmarkClick(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleHotkeyMention",(function(e){e.preventDefault(),t.handleMentionClick(t.props.status)})),Object(d.a)(Object(l.a)(t),"handleHotkeyOpenProfile",(function(){var e=Object(c.default)({},t.context.router.history.location.state);e.mastodonBackSteps=(e.mastodonBackSteps||0)+1,t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]),e)})),Object(d.a)(Object(l.a)(t),"handleMoveUp",(function(e){var a=t.props,s=a.status,n=a.ancestorsIds,i=a.descendantsIds;if(e===s.get("id"))t._selectChild(n.size-1,!0);else{var o=n.indexOf(e);-1===o?(o=i.indexOf(e),t._selectChild(n.size+o,!0)):t._selectChild(o-1,!0)}})),Object(d.a)(Object(l.a)(t),"handleMoveDown",(function(e){var a=t.props,s=a.status,n=a.ancestorsIds,i=a.descendantsIds;if(e===s.get("id"))t._selectChild(n.size+1,!1);else{var o=n.indexOf(e);-1===o?(o=i.indexOf(e),t._selectChild(n.size+o+2,!1)):t._selectChild(o+1,!1)}})),Object(d.a)(Object(l.a)(t),"handleHeaderClick",(function(){t.column.scrollTop()})),Object(d.a)(Object(l.a)(t),"setExpansion",(function(e){t.setState({isExpanded:e})})),Object(d.a)(Object(l.a)(t),"setRef",(function(e){t.node=e})),Object(d.a)(Object(l.a)(t),"setColumnRef",(function(e){t.column=e})),Object(d.a)(Object(l.a)(t),"onFullScreenChange",(function(){t.setState({fullscreen:Object(Z.d)()})})),Object(d.a)(Object(l.a)(t),"shouldUpdateScroll",(function(e,t){var a=t.location;return!(((e||{}).location||{}).state||{}).mastodonModalOpen&&!(a.state&&a.state.mastodonModalOpen)})),t}var s=a.prototype;return s.componentDidMount=function(){Object(Z.a)(this.onFullScreenChange),this.props.dispatch(Object(y.f)(this.props.params.statusId));var e=this.props,t=e.status,a=e.ancestorsIds;if(t&&a&&a.size>0){var s=this.node.querySelectorAll(".focusable")[a.size-1];window.requestAnimationFrame((function(){s.scrollIntoView(!0)}))}},a.getDerivedStateFromProps=function(e,t){var a={},s=!1;e.params.statusId&&t.statusId!==e.params.statusId&&(e.dispatch(Object(y.f)(e.params.statusId)),a.threadExpanded=void 0,a.statusId=e.params.statusId,s=!0);var n=e.settings.getIn(["media","reveal_behind_cw"]);return n!==t.revealBehindCW&&(a.revealBehindCW=n,n&&(a.showMedia=Object(ee.b)(e.status,e.settings)),s=!0),e.status&&t.loadedStatusId!==e.status.get("id")&&(a.showMedia=Object(ee.b)(e.status,e.settings),a.loadedStatusId=e.status.get("id"),a.isExpanded=Object($.a)(e.settings,e.status),s=!0),s?a:null},s._selectChild=function(e,t){var a=this.node,s=a.querySelectorAll(".focusable")[e];s&&(t&&a.scrollTop>s.offsetTop?s.scrollIntoView(!0):!t&&a.scrollTop+a.clientHeight<s.offsetTop+s.offsetHeight&&s.scrollIntoView(!1),s.focus())},s.renderChildren=function(e){var t=this;return e.map((function(e){return Object(o.a)(Y.a,{id:e,expanded:t.state.threadExpanded,onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown,contextType:"thread"},e)}))},s.componentDidUpdate=function(e){if(this.props.params.statusId&&(this.props.params.statusId!==e.params.statusId||e.ancestorsIds.size<this.props.ancestorsIds.size)){var t=this.props,a=t.status,s=t.ancestorsIds;if(a&&s&&s.size>0){var n=this.node.querySelectorAll(".focusable")[s.size-1];window.requestAnimationFrame((function(){n.scrollIntoView(!0)}))}}},s.componentWillUnmount=function(){Object(Z.b)(this.onFullScreenChange)},s.render=function(){this.setExpansion;var e,t,a=this.props,s=a.status,n=a.settings,i=a.ancestorsIds,c=a.descendantsIds,l=a.intl,r=a.domain,d=a.multiColumn,u=this.state,p=u.fullscreen,h=u.isExpanded;if(null===s)return Object(o.a)(A.a,{},void 0,Object(o.a)(W.a,{multiColumn:d}),Object(o.a)(_.a,{}));i&&i.size>0&&(e=Object(o.a)("div",{},void 0,this.renderChildren(i))),c&&c.size>0&&(t=Object(o.a)("div",{},void 0,this.renderChildren(c)));var g={moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,reply:this.handleHotkeyReply,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,bookmark:this.handleHotkeyBookmark,mention:this.handleHotkeyMention,openProfile:this.handleHotkeyOpenProfile,toggleSpoiler:this.handleExpandedToggle,toggleSensitive:this.handleHotkeyToggleSensitive,openMedia:this.handleHotkeyOpenMedia};return(b.a.createElement(A.a,{bindToDocument:!d,ref:this.setColumnRef,label:l.formatMessage(ae.detailedStatus)},Object(o.a)(J.a,{icon:"comment",title:l.formatMessage(ae.tootHeading),onClick:this.handleHeaderClick,showBackButton:!0,multiColumn:d,extraButton:Object(o.a)("button",{className:"column-header__button",title:l.formatMessage(h?ae.hideAll:ae.revealAll),"aria-label":l.formatMessage(h?ae.hideAll:ae.revealAll),onClick:this.handleToggleAll,"aria-pressed":h?"true":"false"},void 0,Object(o.a)(te.a,{id:s.get("hidden")?"eye-slash":"eye"}))}),Object(o.a)(L.a,{scrollKey:"thread",shouldUpdateScroll:this.shouldUpdateScroll},void 0,b.a.createElement("div",{className:j()("scrollable","detailed-status__wrapper",{fullscreen:p}),ref:this.setRef},e,Object(o.a)(X.HotKeys,{handlers:g},void 0,Object(o.a)("div",{className:"focusable",tabIndex:"0","aria-label":Object(ee.c)(l,s,!1,!s.get("hidden"))},void 0,Object(o.a)(C.a,{status:s,settings:n,onOpenVideo:this.handleOpenVideo,onOpenMedia:this.handleOpenMedia,expanded:h,onToggleHidden:this.handleExpandedToggle,domain:r,showMedia:this.state.showMedia,onToggleMediaVisibility:this.handleToggleMediaVisibility},"details-"+s.get("id")),Object(o.a)(N,{status:s,onReply:this.handleReplyClick,onFavourite:this.handleFavouriteClick,onReblog:this.handleReblogClick,onBookmark:this.handleBookmarkClick,onDelete:this.handleDeleteClick,onDirect:this.handleDirectClick,onMention:this.handleMentionClick,onMute:this.handleMuteClick,onMuteConversation:this.handleConversationMuteClick,onBlock:this.handleBlockClick,onReport:this.handleReport,onPin:this.handlePin,onEmbed:this.handleEmbed},"action-bar-"+s.get("id")))),t))))},a}(Q.a),Object(d.a)(T,"contextTypes",{router:m.a.object}),Object(d.a)(T,"propTypes",{params:m.a.object.isRequired,dispatch:m.a.func.isRequired,status:k.a.map,settings:k.a.map.isRequired,ancestorsIds:k.a.list,descendantsIds:k.a.list,intl:m.a.object.isRequired,askReplyConfirmation:m.a.bool,multiColumn:m.a.bool,domain:m.a.string.isRequired}),S=B))||S)||S)}}]);
//# sourceMappingURL=status.js.map \ No newline at end of file
diff --git a/priv/static/packs/flavours/glitch/async/status.js.map b/priv/static/packs/flavours/glitch/async/status.js.map
index 012698efb..a8c110f98 100644
--- a/priv/static/packs/flavours/glitch/async/status.js.map
+++ b/priv/static/packs/flavours/glitch/async/status.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/detailed_status.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/action_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","altKey","metaKey","context","router","preventDefault","state","history","location","mastodonBackSteps","push","props","status","getIn","stopPropagation","destination","media","startTime","onOpenVideo","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","render","get","expanded","onToggleHidden","settings","outerStyle","boxSizing","compact","mediaIcon","applicationLink","reblogLink","reblogIcon","favouriteLink","pollId","size","some","item","attachment","src","alt","duration","preload","preview","blurhash","inline","sensitive","letterbox","fullwidth","preventPlayback","handleOpenVideo","autoplay","visible","showMedia","onToggleVisibility","onToggleMediaVisibility","standalone","hidden","onOpenMedia","card","className","rel","id","to","value","onClick","handleModalLink","style","ref","setRef","classNames","data-status-by","handleAccountClick","account","localDomain","domain","collapsed","onExpandedToggle","parseClick","onUpdate","handleChildUpdate","tagLinks","rewriteMentions","disabled","Date","hour12","year","month","day","hour","minute","visibility","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","redraft","direct","mention","reply","reblog","reblog_private","cannot_reblog","favourite","bookmark","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","onBookmark","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","textarea","document","createElement","textContent","position","body","appendChild","select","execCommand","removeChild","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleConversationMuteClick","handleDeleteClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","accountAdminLink","statusAdminLink","undefined","shareButton","title","icon","handleShare","reblog_disabled","reblog_message","handleReplyClick","active","handleReblogClick","animate","handleFavouriteClick","handleBookmarkClick","items","direction","ariaLabel","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","tootHeading","Status","connect","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","statusId","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","length","shift","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","askReplyConfirmation","trim","fullscreen","isExpanded","threadExpanded","loadedStatusId","revealBehindCW","setExpansion","dispatch","unfavourite","shiftKey","favouriteModal","handleModalFavourite","openModal","message","confirm","onDoNotAsk","changeLocalSetting","onConfirm","replyCompose","unreblog","handleModalReblog","missingMediaDescription","boostModal","unbookmark","withRedraft","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","initBlockModal","initReport","handleToggleMediaVisibility","handleMoveUp","handleMoveDown","_selectChild","indexOf","column","scrollTop","isFullscreen","prevRouterProps","mastodonModalOpen","componentDidMount","attachFullscreenListener","onFullScreenChange","fetchStatus","element","querySelectorAll","requestAnimationFrame","scrollIntoView","getDerivedStateFromProps","update","updated","defaultMediaVisibility","autoUnfoldCW","align_top","container","offsetTop","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","componentWillUnmount","detachFullscreenListener","ancestors","descendants","multiColumn","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleSpoiler","handleExpandedToggle","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","setColumnRef","label","handleHeaderClick","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","scrollKey","shouldUpdateScroll","tabIndex","textForScreenReader","handlePin"],"mappings":"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","file":"flavours/glitch/async/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport MediaGallery from 'flavours/glitch/components/media_gallery';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate, FormattedNumber } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from 'flavours/glitch/features/video';\nimport Audio from 'flavours/glitch/features/audio';\nimport VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';\nimport scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n settings: ImmutablePropTypes.map.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func,\n expanded: PropTypes.bool,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n showMedia: PropTypes.bool,\n onToggleMediaVisibility: PropTypes.func,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);\n }\n\n e.stopPropagation();\n }\n\n parseClick = (e, destination) => {\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(destination, state);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n _measureHeight (heightJustChanged) {\n if (this.props.measureHeight && this.node) {\n scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n if (this.props.onHeightChange && heightJustChanged) {\n this.props.onHeightChange();\n }\n }\n }\n\n setRef = c => {\n this.node = c;\n this._measureHeight();\n }\n\n componentDidUpdate (prevProps, prevState) {\n this._measureHeight(prevState.height !== this.state.height);\n }\n\n handleChildUpdate = () => {\n this._measureHeight();\n }\n\n handleModalLink = e => {\n e.preventDefault();\n\n let href;\n\n if (e.target.nodeName !== 'A') {\n href = e.target.parentNode.href;\n } else {\n href = e.target.href;\n }\n\n window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n }\n\n render () {\n const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;\n const { expanded, onToggleHidden, settings } = this.props;\n const outerStyle = { boxSizing: 'border-box' };\n const { compact } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = null;\n let mediaIcon = null;\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n let favouriteLink = '';\n\n if (this.props.measureHeight) {\n outerStyle.height = `${this.state.height}px`;\n }\n\n if (status.get('poll')) {\n media = <PollContainer pollId={status.get('poll')} />;\n mediaIcon = 'tasks';\n } else if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n media = <AttachmentList media={status.get('media_attachments')} />;\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n <Audio\n src={attachment.get('url')}\n alt={attachment.get('description')}\n duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n height={110}\n preload\n />\n );\n mediaIcon = 'music';\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n media = (\n <Video\n preview={attachment.get('preview_url')}\n blurhash={attachment.get('blurhash')}\n src={attachment.get('url')}\n alt={attachment.get('description')}\n inline\n sensitive={status.get('sensitive')}\n letterbox={settings.getIn(['media', 'letterbox'])}\n fullwidth={settings.getIn(['media', 'fullwidth'])}\n preventPlayback={!expanded}\n onOpenVideo={this.handleOpenVideo}\n autoplay\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n mediaIcon = 'video-camera';\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n letterbox={settings.getIn(['media', 'letterbox'])}\n fullwidth={settings.getIn(['media', 'fullwidth'])}\n hidden={!expanded}\n onOpenMedia={this.props.onOpenMedia}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n mediaIcon = 'picture-o';\n }\n } else if (status.get('card')) {\n media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card')} />;\n mediaIcon = 'link';\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></span>;\n }\n\n if (status.get('visibility') === 'direct') {\n reblogIcon = 'envelope';\n } else if (status.get('visibility') === 'private') {\n reblogIcon = 'lock';\n }\n\n if (status.get('visibility') === 'private') {\n reblogLink = <Icon id={reblogIcon} />;\n } else if (this.context.router) {\n reblogLink = (\n <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <FormattedNumber value={status.get('reblogs_count')} />\n </span>\n </Link>\n );\n } else {\n reblogLink = (\n <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <FormattedNumber value={status.get('reblogs_count')} />\n </span>\n </a>\n );\n }\n\n if (this.context.router) {\n favouriteLink = (\n <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <FormattedNumber value={status.get('favourites_count')} />\n </span>\n </Link>\n );\n } else {\n favouriteLink = (\n <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <FormattedNumber value={status.get('favourites_count')} />\n </span>\n </a>\n );\n }\n\n return (\n <div style={outerStyle}>\n <div ref={this.setRef} className={classNames('detailed-status', { compact })} data-status-by={status.getIn(['account', 'acct'])}>\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n <DisplayName account={status.get('account')} localDomain={this.props.domain} />\n </a>\n\n <StatusContent\n status={status}\n media={media}\n mediaIcon={mediaIcon}\n expanded={expanded}\n collapsed={false}\n onExpandedToggle={onToggleHidden}\n parseClick={this.parseClick}\n onUpdate={this.handleChildUpdate}\n tagLinks={settings.get('tag_misleading_links')}\n rewriteMentions={settings.get('rewrite_mentions')}\n disabled\n />\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>\n <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n </a>{applicationLink} · {reblogLink} · {favouriteLink} · <VisibilityIcon visibility={status.get('visibility')} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from 'flavours/glitch/util/initial_state';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/util/backend_links';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n share: { id: 'status.share', defaultMessage: 'Share' },\n pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n embed: { id: 'status.embed', defaultMessage: 'Embed' },\n admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n});\n\nexport default @injectIntl\nclass ActionBar extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onBookmark: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onBlock: PropTypes.func,\n onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n }\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n }\n\n handleFavouriteClick = (e) => {\n this.props.onFavourite(this.props.status, e);\n }\n\n handleBookmarkClick = (e) => {\n this.props.onBookmark(this.props.status, e);\n }\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history);\n }\n\n handleRedraftClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history, true);\n }\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMuteClick = () => {\n this.props.onMute(this.props.status.get('account'));\n }\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(this.props.status);\n }\n\n handleBlockClick = () => {\n this.props.onBlock(this.props.status);\n }\n\n handleReport = () => {\n this.props.onReport(this.props.status);\n }\n\n handlePinClick = () => {\n this.props.onPin(this.props.status);\n }\n\n handleShare = () => {\n navigator.share({\n text: this.props.status.get('search_index'),\n url: this.props.status.get('url'),\n });\n }\n\n handleEmbed = () => {\n this.props.onEmbed(this.props.status);\n }\n\n handleCopy = () => {\n const url = this.props.status.get('url');\n const textarea = document.createElement('textarea');\n\n textarea.textContent = url;\n textarea.style.position = 'fixed';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.select();\n document.execCommand('copy');\n } catch (e) {\n\n } finally {\n document.body.removeChild(textarea);\n }\n }\n\n render () {\n const { status, intl } = this.props;\n\n const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n const mutingConversation = status.get('muted');\n\n let menu = [];\n\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (me === status.getIn(['account', 'id'])) {\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n }\n\n menu.push(null);\n menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n if (isStaff && (accountAdminLink || statusAdminLink)) {\n menu.push(null);\n if (accountAdminLink !== undefined) {\n menu.push({\n text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }),\n href: accountAdminLink(status.getIn(['account', 'id'])),\n });\n }\n if (statusAdminLink !== undefined) {\n menu.push({\n text: intl.formatMessage(messages.admin_status),\n href: statusAdminLink(status.getIn(['account', 'id']), status.get('id')),\n });\n }\n }\n }\n\n const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n );\n\n let reblogIcon = 'retweet';\n //if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n // else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n let reblog_disabled = (status.get('visibility') === 'direct' || (status.get('visibility') === 'private' && me !== status.getIn(['account', 'id'])));\n let reblog_message = status.get('visibility') === 'private' ? messages.reblog_private : messages.reblog;\n\n return (\n <div className='detailed-status__action-bar'>\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_id', null) === null ? 'reply' : 'reply-all'} onClick={this.handleReplyClick} /></div>\n <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblog_message)} icon={reblogIcon} onClick={this.handleReblogClick} /></div>\n <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>\n {shareButton}\n <div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>\n\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' ariaLabel='More' />\n </div>\n </div>\n );\n }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { createSelector } from 'reselect';\nimport { fetchStatus } from 'flavours/glitch/actions/statuses';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport {\n favourite,\n unfavourite,\n bookmark,\n unbookmark,\n reblog,\n unreblog,\n pin,\n unpin,\n} from 'flavours/glitch/actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from 'flavours/glitch/actions/compose';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\nimport { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses';\nimport { initMuteModal } from 'flavours/glitch/actions/mutes';\nimport { initBlockModal } from 'flavours/glitch/actions/blocks';\nimport { initReport } from 'flavours/glitch/actions/reports';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';\nimport { autoUnfoldCW } from 'flavours/glitch/util/content_warning';\nimport { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },\n revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n tootHeading: { id: 'column.toot', defaultMessage: 'Toots and replies' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const getAncestorsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'inReplyTos']),\n ], (statusId, inReplyTos) => {\n let ancestorsIds = Immutable.List();\n ancestorsIds = ancestorsIds.withMutations(mutable => {\n let id = statusId;\n\n while (id) {\n mutable.unshift(id);\n id = inReplyTos.get(id);\n }\n });\n\n return ancestorsIds;\n });\n\n const getDescendantsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'replies']),\n state => state.get('statuses'),\n ], (statusId, contextReplies, statuses) => {\n let descendantsIds = [];\n const ids = [statusId];\n\n while (ids.length > 0) {\n let id = ids.shift();\n const replies = contextReplies.get(id);\n\n if (statusId !== id) {\n descendantsIds.push(id);\n }\n\n if (replies) {\n replies.reverse().forEach(reply => {\n ids.unshift(reply);\n });\n }\n }\n\n let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account'));\n if (insertAt !== -1) {\n descendantsIds.forEach((id, idx) => {\n if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) {\n descendantsIds.splice(idx, 1);\n descendantsIds.splice(insertAt, 0, id);\n insertAt += 1;\n }\n });\n }\n\n return Immutable.List(descendantsIds);\n });\n\n const mapStateToProps = (state, props) => {\n const status = getStatus(state, { id: props.params.statusId });\n let ancestorsIds = Immutable.List();\n let descendantsIds = Immutable.List();\n\n if (status) {\n ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') });\n descendantsIds = getDescendantsIds(state, { id: status.get('id') });\n }\n\n return {\n status,\n ancestorsIds,\n descendantsIds,\n settings: state.get('local_settings'),\n askReplyConfirmation: state.getIn(['local_settings', 'confirm_before_clearing_draft']) && state.getIn(['compose', 'text']).trim().length !== 0,\n domain: state.getIn(['meta', 'domain']),\n };\n };\n\n return mapStateToProps;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n settings: ImmutablePropTypes.map.isRequired,\n ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n };\n\n state = {\n fullscreen: false,\n isExpanded: undefined,\n threadExpanded: undefined,\n statusId: undefined,\n loadedStatusId: undefined,\n showMedia: undefined,\n revealBehindCW: undefined,\n };\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n let update = {};\n let updated = false;\n\n if (props.params.statusId && state.statusId !== props.params.statusId) {\n props.dispatch(fetchStatus(props.params.statusId));\n update.threadExpanded = undefined;\n update.statusId = props.params.statusId;\n updated = true;\n }\n\n const revealBehindCW = props.settings.getIn(['media', 'reveal_behind_cw']);\n if (revealBehindCW !== state.revealBehindCW) {\n update.revealBehindCW = revealBehindCW;\n if (revealBehindCW) update.showMedia = defaultMediaVisibility(props.status, props.settings);\n updated = true;\n }\n\n if (props.status && state.loadedStatusId !== props.status.get('id')) {\n update.showMedia = defaultMediaVisibility(props.status, props.settings);\n update.loadedStatusId = props.status.get('id');\n update.isExpanded = autoUnfoldCW(props.settings, props.status);\n updated = true;\n }\n\n return updated ? update : null;\n }\n\n handleExpandedToggle = () => {\n if (this.props.status.get('spoiler_text')) {\n this.setExpansion(!this.state.isExpanded);\n }\n };\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n }\n\n handleModalFavourite = (status) => {\n this.props.dispatch(favourite(status));\n }\n\n handleFavouriteClick = (status, e) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n if ((e && e.shiftKey) || !favouriteModal) {\n this.handleModalFavourite(status);\n } else {\n this.props.dispatch(openModal('FAVOURITE', { status, onFavourite: this.handleModalFavourite }));\n }\n }\n }\n\n handlePin = (status) => {\n if (status.get('pinned')) {\n this.props.dispatch(unpin(status));\n } else {\n this.props.dispatch(pin(status));\n }\n }\n\n handleReplyClick = (status) => {\n let { askReplyConfirmation, dispatch, intl } = this.props;\n if (askReplyConfirmation) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_before_clearing_draft'], false)),\n onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n }));\n } else {\n dispatch(replyCompose(status, this.context.router.history));\n }\n }\n\n handleModalReblog = (status) => {\n const { dispatch } = this.props;\n\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n dispatch(reblog(status));\n }\n }\n\n handleReblogClick = (status, e) => {\n const { settings, dispatch } = this.props;\n\n if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) {\n dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true }));\n } else if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\n }\n\n handleBookmarkClick = (status) => {\n if (status.get('bookmarked')) {\n this.props.dispatch(unbookmark(status));\n } else {\n this.props.dispatch(bookmark(status));\n }\n }\n\n handleDeleteClick = (status, history, withRedraft = false) => {\n const { dispatch, intl } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id'), history, withRedraft));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n }));\n }\n }\n\n handleDirectClick = (account, router) => {\n this.props.dispatch(directCompose(account, router));\n }\n\n handleMentionClick = (account, router) => {\n this.props.dispatch(mentionCompose(account, router));\n }\n\n handleOpenMedia = (media, index) => {\n this.props.dispatch(openModal('MEDIA', { media, index }));\n }\n\n handleOpenVideo = (media, time) => {\n this.props.dispatch(openModal('VIDEO', { media, time }));\n }\n\n handleHotkeyOpenMedia = e => {\n const { status } = this.props;\n\n e.preventDefault();\n\n if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n // TODO: toggle play/paused?\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n this.handleOpenVideo(status.getIn(['media_attachments', 0]), 0);\n } else {\n this.handleOpenMedia(status.get('media_attachments'), 0);\n }\n }\n }\n\n handleMuteClick = (account) => {\n this.props.dispatch(initMuteModal(account));\n }\n\n handleConversationMuteClick = (status) => {\n if (status.get('muted')) {\n this.props.dispatch(unmuteStatus(status.get('id')));\n } else {\n this.props.dispatch(muteStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { isExpanded } = this.state;\n this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\n }\n\n handleBlockClick = (status) => {\n const { dispatch } = this.props;\n const account = status.get('account');\n dispatch(initBlockModal(account));\n }\n\n handleReport = (status) => {\n this.props.dispatch(initReport(status.get('account'), status));\n }\n\n handleEmbed = (status) => {\n this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n }\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\n }\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n }\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n }\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n }\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n }\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n }\n\n handleHotkeyBookmark = () => {\n this.handleBookmarkClick(this.props.status);\n }\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status);\n }\n\n handleHotkeyOpenProfile = () => {\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);\n }\n\n handleMoveUp = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size - 1, true);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index, true);\n } else {\n this._selectChild(index - 1, true);\n }\n }\n }\n\n handleMoveDown = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size + 1, false);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index + 2, false);\n } else {\n this._selectChild(index + 1, false);\n }\n }\n }\n\n _selectChild (index, align_top) {\n const container = this.node;\n const element = container.querySelectorAll('.focusable')[index];\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n expanded={this.state.threadExpanded}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n />\n ));\n }\n\n setExpansion = value => {\n this.setState({ isExpanded: value });\n }\n\n setRef = c => {\n this.node = c;\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.params.statusId && (this.props.params.statusId !== prevProps.params.statusId || prevProps.ancestorsIds.size < this.props.ancestorsIds.size)) {\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n }\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n shouldUpdateScroll = (prevRouterProps, { location }) => {\n if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n return !(location.state && location.state.mastodonModalOpen);\n }\n\n render () {\n let ancestors, descendants;\n const { setExpansion } = this;\n const { status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props;\n const { fullscreen, isExpanded } = this.state;\n\n if (status === null) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = <div>{this.renderChildren(descendantsIds)}</div>;\n }\n\n const handlers = {\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n reply: this.handleHotkeyReply,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n bookmark: this.handleHotkeyBookmark,\n mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleSpoiler: this.handleExpandedToggle,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n };\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n icon='comment'\n title={intl.formatMessage(messages.tootHeading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={!isExpanded ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>\n <div className={classNames('scrollable', 'detailed-status__wrapper', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className='focusable' tabIndex='0' aria-label={textForScreenReader(intl, status, false, !status.get('hidden'))}>\n <DetailedStatus\n key={`details-${status.get('id')}`}\n status={status}\n settings={settings}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n expanded={isExpanded}\n onToggleHidden={this.handleExpandedToggle}\n domain={domain}\n showMedia={this.state.showMedia}\n onToggleMediaVisibility={this.handleToggleMediaVisibility}\n />\n\n <ActionBar\n key={`action-bar-${status.get('id')}`}\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReblog={this.handleReblogClick}\n onBookmark={this.handleBookmarkClick}\n onDelete={this.handleDeleteClick}\n onDirect={this.handleDirectClick}\n onMention={this.handleMentionClick}\n onMute={this.handleMuteClick}\n onMuteConversation={this.handleConversationMuteClick}\n onBlock={this.handleBlockClick}\n onReport={this.handleReport}\n onPin={this.handlePin}\n onEmbed={this.handleEmbed}\n />\n </div>\n </HotKeys>\n\n {descendants}\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/detailed_status.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/action_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","altKey","metaKey","context","router","preventDefault","state","history","location","mastodonBackSteps","push","props","status","getIn","stopPropagation","destination","media","startTime","onOpenVideo","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","render","get","expanded","onToggleHidden","settings","outerStyle","boxSizing","compact","mediaIcon","applicationLink","reblogLink","reblogIcon","favouriteLink","pollId","size","some","item","attachment","src","alt","duration","preload","preview","blurhash","inline","sensitive","letterbox","fullwidth","preventPlayback","handleOpenVideo","autoplay","visible","showMedia","onToggleVisibility","onToggleMediaVisibility","standalone","hidden","onOpenMedia","card","className","rel","includes","to","id","value","onClick","handleModalLink","style","ref","setRef","classNames","data-status-by","handleAccountClick","account","localDomain","domain","collapsed","onExpandedToggle","parseClick","onUpdate","handleChildUpdate","tagLinks","rewriteMentions","disabled","Date","hour12","year","month","day","hour","minute","visibility","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","redraft","direct","mention","reply","reblog","reblog_private","cannot_reblog","favourite","bookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","onBookmark","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","textarea","document","createElement","textContent","position","body","appendChild","select","execCommand","removeChild","intl","publicStatus","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleConversationMuteClick","handleDeleteClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","accountAdminLink","statusAdminLink","undefined","shareButton","title","icon","handleShare","reblog_disabled","reblog_message","handleReplyClick","active","handleReblogClick","animate","handleFavouriteClick","handleBookmarkClick","items","direction","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","tootHeading","Status","connect","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","statusId","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","length","shift","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","askReplyConfirmation","trim","fullscreen","isExpanded","threadExpanded","loadedStatusId","revealBehindCW","setExpansion","dispatch","unfavourite","shiftKey","favouriteModal","handleModalFavourite","openModal","message","confirm","onDoNotAsk","changeLocalSetting","onConfirm","replyCompose","unreblog","handleModalReblog","missingMediaDescription","boostModal","unbookmark","withRedraft","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","initBlockModal","initReport","handleToggleMediaVisibility","handleMoveUp","handleMoveDown","_selectChild","indexOf","column","scrollTop","isFullscreen","prevRouterProps","mastodonModalOpen","componentDidMount","attachFullscreenListener","onFullScreenChange","fetchStatus","element","querySelectorAll","requestAnimationFrame","scrollIntoView","getDerivedStateFromProps","update","updated","defaultMediaVisibility","autoUnfoldCW","align_top","container","offsetTop","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","componentWillUnmount","detachFullscreenListener","ancestors","descendants","multiColumn","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleSpoiler","handleExpandedToggle","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","setColumnRef","label","handleHeaderClick","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","scrollKey","shouldUpdateScroll","tabIndex","textForScreenReader","handlePin"],"mappings":"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","file":"flavours/glitch/async/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport MediaGallery from 'flavours/glitch/components/media_gallery';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from 'flavours/glitch/features/video';\nimport Audio from 'flavours/glitch/features/audio';\nimport VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';\nimport scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\nimport Icon from 'flavours/glitch/components/icon';\nimport AnimatedNumber from 'flavours/glitch/components/animated_number';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n settings: ImmutablePropTypes.map.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func,\n expanded: PropTypes.bool,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n showMedia: PropTypes.bool,\n onToggleMediaVisibility: PropTypes.func,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);\n }\n\n e.stopPropagation();\n }\n\n parseClick = (e, destination) => {\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(destination, state);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n _measureHeight (heightJustChanged) {\n if (this.props.measureHeight && this.node) {\n scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n if (this.props.onHeightChange && heightJustChanged) {\n this.props.onHeightChange();\n }\n }\n }\n\n setRef = c => {\n this.node = c;\n this._measureHeight();\n }\n\n componentDidUpdate (prevProps, prevState) {\n this._measureHeight(prevState.height !== this.state.height);\n }\n\n handleChildUpdate = () => {\n this._measureHeight();\n }\n\n handleModalLink = e => {\n e.preventDefault();\n\n let href;\n\n if (e.target.nodeName !== 'A') {\n href = e.target.parentNode.href;\n } else {\n href = e.target.href;\n }\n\n window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n }\n\n render () {\n const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;\n const { expanded, onToggleHidden, settings } = this.props;\n const outerStyle = { boxSizing: 'border-box' };\n const { compact } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = null;\n let mediaIcon = null;\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n let favouriteLink = '';\n\n if (this.props.measureHeight) {\n outerStyle.height = `${this.state.height}px`;\n }\n\n if (status.get('poll')) {\n media = <PollContainer pollId={status.get('poll')} />;\n mediaIcon = 'tasks';\n } else if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n media = <AttachmentList media={status.get('media_attachments')} />;\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n <Audio\n src={attachment.get('url')}\n alt={attachment.get('description')}\n duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n height={110}\n preload\n />\n );\n mediaIcon = 'music';\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n media = (\n <Video\n preview={attachment.get('preview_url')}\n blurhash={attachment.get('blurhash')}\n src={attachment.get('url')}\n alt={attachment.get('description')}\n inline\n sensitive={status.get('sensitive')}\n letterbox={settings.getIn(['media', 'letterbox'])}\n fullwidth={settings.getIn(['media', 'fullwidth'])}\n preventPlayback={!expanded}\n onOpenVideo={this.handleOpenVideo}\n autoplay\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n mediaIcon = 'video-camera';\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n letterbox={settings.getIn(['media', 'letterbox'])}\n fullwidth={settings.getIn(['media', 'fullwidth'])}\n hidden={!expanded}\n onOpenMedia={this.props.onOpenMedia}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n mediaIcon = 'picture-o';\n }\n } else if (status.get('card')) {\n media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card')} />;\n mediaIcon = 'link';\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></span>;\n }\n\n if (status.get('visibility') === 'direct') {\n reblogIcon = 'envelope';\n } else if (status.get('visibility') === 'private') {\n reblogIcon = 'lock';\n }\n\n if (!['unlisted', 'public'].includes(status.get('visibility'))) {\n reblogLink = null;\n } else if (this.context.router) {\n reblogLink = (\n <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <AnimatedNumber value={status.get('reblogs_count')} />\n </span>\n </Link>\n );\n } else {\n reblogLink = (\n <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <AnimatedNumber value={status.get('reblogs_count')} />\n </span>\n </a>\n );\n }\n\n if (this.context.router) {\n favouriteLink = (\n <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <AnimatedNumber value={status.get('favourites_count')} />\n </span>\n </Link>\n );\n } else {\n favouriteLink = (\n <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <AnimatedNumber value={status.get('favourites_count')} />\n </span>\n </a>\n );\n }\n\n return (\n <div style={outerStyle}>\n <div ref={this.setRef} className={classNames('detailed-status', { compact })} data-status-by={status.getIn(['account', 'acct'])}>\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n <DisplayName account={status.get('account')} localDomain={this.props.domain} />\n </a>\n\n <StatusContent\n status={status}\n media={media}\n mediaIcon={mediaIcon}\n expanded={expanded}\n collapsed={false}\n onExpandedToggle={onToggleHidden}\n parseClick={this.parseClick}\n onUpdate={this.handleChildUpdate}\n tagLinks={settings.get('tag_misleading_links')}\n rewriteMentions={settings.get('rewrite_mentions')}\n disabled\n />\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>\n <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n </a>{applicationLink} {!!reblogLink && ['·', reblogLink]} · {favouriteLink} · <VisibilityIcon visibility={status.get('visibility')} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from 'flavours/glitch/util/initial_state';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/util/backend_links';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n more: { id: 'status.more', defaultMessage: 'More' },\n mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n share: { id: 'status.share', defaultMessage: 'Share' },\n pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n embed: { id: 'status.embed', defaultMessage: 'Embed' },\n admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n});\n\nexport default @injectIntl\nclass ActionBar extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onBookmark: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onBlock: PropTypes.func,\n onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n }\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n }\n\n handleFavouriteClick = (e) => {\n this.props.onFavourite(this.props.status, e);\n }\n\n handleBookmarkClick = (e) => {\n this.props.onBookmark(this.props.status, e);\n }\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history);\n }\n\n handleRedraftClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history, true);\n }\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMuteClick = () => {\n this.props.onMute(this.props.status.get('account'));\n }\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(this.props.status);\n }\n\n handleBlockClick = () => {\n this.props.onBlock(this.props.status);\n }\n\n handleReport = () => {\n this.props.onReport(this.props.status);\n }\n\n handlePinClick = () => {\n this.props.onPin(this.props.status);\n }\n\n handleShare = () => {\n navigator.share({\n text: this.props.status.get('search_index'),\n url: this.props.status.get('url'),\n });\n }\n\n handleEmbed = () => {\n this.props.onEmbed(this.props.status);\n }\n\n handleCopy = () => {\n const url = this.props.status.get('url');\n const textarea = document.createElement('textarea');\n\n textarea.textContent = url;\n textarea.style.position = 'fixed';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.select();\n document.execCommand('copy');\n } catch (e) {\n\n } finally {\n document.body.removeChild(textarea);\n }\n }\n\n render () {\n const { status, intl } = this.props;\n\n const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n const mutingConversation = status.get('muted');\n\n let menu = [];\n\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (me === status.getIn(['account', 'id'])) {\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n }\n\n menu.push(null);\n menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n if (isStaff && (accountAdminLink || statusAdminLink)) {\n menu.push(null);\n if (accountAdminLink !== undefined) {\n menu.push({\n text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }),\n href: accountAdminLink(status.getIn(['account', 'id'])),\n });\n }\n if (statusAdminLink !== undefined) {\n menu.push({\n text: intl.formatMessage(messages.admin_status),\n href: statusAdminLink(status.getIn(['account', 'id']), status.get('id')),\n });\n }\n }\n }\n\n const shareButton = ('share' in navigator) && publicStatus && (\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n );\n\n let reblogIcon = 'retweet';\n //if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n // else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n let reblog_disabled = (status.get('visibility') === 'direct' || (status.get('visibility') === 'private' && me !== status.getIn(['account', 'id'])));\n let reblog_message = status.get('visibility') === 'private' ? messages.reblog_private : messages.reblog;\n\n return (\n <div className='detailed-status__action-bar'>\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_id', null) === null ? 'reply' : 'reply-all'} onClick={this.handleReplyClick} /></div>\n <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblog_message)} icon={reblogIcon} onClick={this.handleReblogClick} /></div>\n <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>\n {shareButton}\n <div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>\n\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title={intl.formatMessage(messages.more)} />\n </div>\n </div>\n );\n }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { createSelector } from 'reselect';\nimport { fetchStatus } from 'flavours/glitch/actions/statuses';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport {\n favourite,\n unfavourite,\n bookmark,\n unbookmark,\n reblog,\n unreblog,\n pin,\n unpin,\n} from 'flavours/glitch/actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from 'flavours/glitch/actions/compose';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\nimport { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses';\nimport { initMuteModal } from 'flavours/glitch/actions/mutes';\nimport { initBlockModal } from 'flavours/glitch/actions/blocks';\nimport { initReport } from 'flavours/glitch/actions/reports';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';\nimport { autoUnfoldCW } from 'flavours/glitch/util/content_warning';\nimport { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },\n revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n tootHeading: { id: 'column.toot', defaultMessage: 'Toots and replies' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const getAncestorsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'inReplyTos']),\n ], (statusId, inReplyTos) => {\n let ancestorsIds = Immutable.List();\n ancestorsIds = ancestorsIds.withMutations(mutable => {\n let id = statusId;\n\n while (id) {\n mutable.unshift(id);\n id = inReplyTos.get(id);\n }\n });\n\n return ancestorsIds;\n });\n\n const getDescendantsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'replies']),\n state => state.get('statuses'),\n ], (statusId, contextReplies, statuses) => {\n let descendantsIds = [];\n const ids = [statusId];\n\n while (ids.length > 0) {\n let id = ids.shift();\n const replies = contextReplies.get(id);\n\n if (statusId !== id) {\n descendantsIds.push(id);\n }\n\n if (replies) {\n replies.reverse().forEach(reply => {\n ids.unshift(reply);\n });\n }\n }\n\n let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account'));\n if (insertAt !== -1) {\n descendantsIds.forEach((id, idx) => {\n if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) {\n descendantsIds.splice(idx, 1);\n descendantsIds.splice(insertAt, 0, id);\n insertAt += 1;\n }\n });\n }\n\n return Immutable.List(descendantsIds);\n });\n\n const mapStateToProps = (state, props) => {\n const status = getStatus(state, { id: props.params.statusId });\n let ancestorsIds = Immutable.List();\n let descendantsIds = Immutable.List();\n\n if (status) {\n ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') });\n descendantsIds = getDescendantsIds(state, { id: status.get('id') });\n }\n\n return {\n status,\n ancestorsIds,\n descendantsIds,\n settings: state.get('local_settings'),\n askReplyConfirmation: state.getIn(['local_settings', 'confirm_before_clearing_draft']) && state.getIn(['compose', 'text']).trim().length !== 0,\n domain: state.getIn(['meta', 'domain']),\n };\n };\n\n return mapStateToProps;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n settings: ImmutablePropTypes.map.isRequired,\n ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n };\n\n state = {\n fullscreen: false,\n isExpanded: undefined,\n threadExpanded: undefined,\n statusId: undefined,\n loadedStatusId: undefined,\n showMedia: undefined,\n revealBehindCW: undefined,\n };\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n let update = {};\n let updated = false;\n\n if (props.params.statusId && state.statusId !== props.params.statusId) {\n props.dispatch(fetchStatus(props.params.statusId));\n update.threadExpanded = undefined;\n update.statusId = props.params.statusId;\n updated = true;\n }\n\n const revealBehindCW = props.settings.getIn(['media', 'reveal_behind_cw']);\n if (revealBehindCW !== state.revealBehindCW) {\n update.revealBehindCW = revealBehindCW;\n if (revealBehindCW) update.showMedia = defaultMediaVisibility(props.status, props.settings);\n updated = true;\n }\n\n if (props.status && state.loadedStatusId !== props.status.get('id')) {\n update.showMedia = defaultMediaVisibility(props.status, props.settings);\n update.loadedStatusId = props.status.get('id');\n update.isExpanded = autoUnfoldCW(props.settings, props.status);\n updated = true;\n }\n\n return updated ? update : null;\n }\n\n handleExpandedToggle = () => {\n if (this.props.status.get('spoiler_text')) {\n this.setExpansion(!this.state.isExpanded);\n }\n };\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n }\n\n handleModalFavourite = (status) => {\n this.props.dispatch(favourite(status));\n }\n\n handleFavouriteClick = (status, e) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n if ((e && e.shiftKey) || !favouriteModal) {\n this.handleModalFavourite(status);\n } else {\n this.props.dispatch(openModal('FAVOURITE', { status, onFavourite: this.handleModalFavourite }));\n }\n }\n }\n\n handlePin = (status) => {\n if (status.get('pinned')) {\n this.props.dispatch(unpin(status));\n } else {\n this.props.dispatch(pin(status));\n }\n }\n\n handleReplyClick = (status) => {\n let { askReplyConfirmation, dispatch, intl } = this.props;\n if (askReplyConfirmation) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_before_clearing_draft'], false)),\n onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n }));\n } else {\n dispatch(replyCompose(status, this.context.router.history));\n }\n }\n\n handleModalReblog = (status) => {\n const { dispatch } = this.props;\n\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n dispatch(reblog(status));\n }\n }\n\n handleReblogClick = (status, e) => {\n const { settings, dispatch } = this.props;\n\n if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) {\n dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true }));\n } else if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\n }\n\n handleBookmarkClick = (status) => {\n if (status.get('bookmarked')) {\n this.props.dispatch(unbookmark(status));\n } else {\n this.props.dispatch(bookmark(status));\n }\n }\n\n handleDeleteClick = (status, history, withRedraft = false) => {\n const { dispatch, intl } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id'), history, withRedraft));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n }));\n }\n }\n\n handleDirectClick = (account, router) => {\n this.props.dispatch(directCompose(account, router));\n }\n\n handleMentionClick = (account, router) => {\n this.props.dispatch(mentionCompose(account, router));\n }\n\n handleOpenMedia = (media, index) => {\n this.props.dispatch(openModal('MEDIA', { media, index }));\n }\n\n handleOpenVideo = (media, time) => {\n this.props.dispatch(openModal('VIDEO', { media, time }));\n }\n\n handleHotkeyOpenMedia = e => {\n const { status } = this.props;\n\n e.preventDefault();\n\n if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n // TODO: toggle play/paused?\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n this.handleOpenVideo(status.getIn(['media_attachments', 0]), 0);\n } else {\n this.handleOpenMedia(status.get('media_attachments'), 0);\n }\n }\n }\n\n handleMuteClick = (account) => {\n this.props.dispatch(initMuteModal(account));\n }\n\n handleConversationMuteClick = (status) => {\n if (status.get('muted')) {\n this.props.dispatch(unmuteStatus(status.get('id')));\n } else {\n this.props.dispatch(muteStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { isExpanded } = this.state;\n this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\n }\n\n handleBlockClick = (status) => {\n const { dispatch } = this.props;\n const account = status.get('account');\n dispatch(initBlockModal(account));\n }\n\n handleReport = (status) => {\n this.props.dispatch(initReport(status.get('account'), status));\n }\n\n handleEmbed = (status) => {\n this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n }\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\n }\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n }\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n }\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n }\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n }\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n }\n\n handleHotkeyBookmark = () => {\n this.handleBookmarkClick(this.props.status);\n }\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status);\n }\n\n handleHotkeyOpenProfile = () => {\n let state = {...this.context.router.history.location.state};\n state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);\n }\n\n handleMoveUp = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size - 1, true);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index, true);\n } else {\n this._selectChild(index - 1, true);\n }\n }\n }\n\n handleMoveDown = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size + 1, false);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index + 2, false);\n } else {\n this._selectChild(index + 1, false);\n }\n }\n }\n\n _selectChild (index, align_top) {\n const container = this.node;\n const element = container.querySelectorAll('.focusable')[index];\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n expanded={this.state.threadExpanded}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n />\n ));\n }\n\n setExpansion = value => {\n this.setState({ isExpanded: value });\n }\n\n setRef = c => {\n this.node = c;\n }\n\n setColumnRef = c => {\n this.column = c;\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.params.statusId && (this.props.params.statusId !== prevProps.params.statusId || prevProps.ancestorsIds.size < this.props.ancestorsIds.size)) {\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n }\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n shouldUpdateScroll = (prevRouterProps, { location }) => {\n if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n return !(location.state && location.state.mastodonModalOpen);\n }\n\n render () {\n let ancestors, descendants;\n const { setExpansion } = this;\n const { status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props;\n const { fullscreen, isExpanded } = this.state;\n\n if (status === null) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = <div>{this.renderChildren(descendantsIds)}</div>;\n }\n\n const handlers = {\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n reply: this.handleHotkeyReply,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n bookmark: this.handleHotkeyBookmark,\n mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleSpoiler: this.handleExpandedToggle,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n };\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n icon='comment'\n title={intl.formatMessage(messages.tootHeading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={!isExpanded ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>\n <div className={classNames('scrollable', 'detailed-status__wrapper', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className='focusable' tabIndex='0' aria-label={textForScreenReader(intl, status, false, !status.get('hidden'))}>\n <DetailedStatus\n key={`details-${status.get('id')}`}\n status={status}\n settings={settings}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n expanded={isExpanded}\n onToggleHidden={this.handleExpandedToggle}\n domain={domain}\n showMedia={this.state.showMedia}\n onToggleMediaVisibility={this.handleToggleMediaVisibility}\n />\n\n <ActionBar\n key={`action-bar-${status.get('id')}`}\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReblog={this.handleReblogClick}\n onBookmark={this.handleBookmarkClick}\n onDelete={this.handleDeleteClick}\n onDirect={this.handleDirectClick}\n onMention={this.handleMentionClick}\n onMute={this.handleMuteClick}\n onMuteConversation={this.handleConversationMuteClick}\n onBlock={this.handleBlockClick}\n onReport={this.handleReport}\n onPin={this.handlePin}\n onEmbed={this.handleEmbed}\n />\n </div>\n </HotKeys>\n\n {descendants}\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} \ No newline at end of file