diff options
Diffstat (limited to 'priv/static/packs/features')
64 files changed, 68 insertions, 56 deletions
diff --git a/priv/static/packs/features/account_gallery.js b/priv/static/packs/features/account_gallery.js index f9f5e72ac..8edf216a9 100644 --- a/priv/static/packs/features/account_gallery.js +++ b/priv/static/packs/features/account_gallery.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{713:function(a,e,t){"use strict";t.r(e);var r=t(0),n=t(2),o=t(6),s=t(1),c=(t(3),t(21)),i=t(26),l=t.n(i),d=t(5),p=t.n(d),u=t(27),b=t(35),h=t(272),m=t(626),O=t(629),j=t(25),f=t(200),v=t(379),g=t(24),I=t(30),y=function(c){function a(){for(var a,e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return a=c.call.apply(c,[this].concat(t))||this,Object(s.a)(Object(n.a)(a),"state",{visible:"hide_all"!==g.f&&!a.props.media.getIn(["status","sensitive"])||"show_all"===g.f}),Object(s.a)(Object(n.a)(a),"handleClick",function(){return!a.state.visible&&(a.setState({visible:!0}),!0)}),a}return Object(o.a)(a,c),a.prototype.render=function(){var a,e,t=this.props.media,o=this.state.visible,c=t.get("status"),n=100*(t.getIn(["meta","focus","x"])/2+.5),s=100*(t.getIn(["meta","focus","y"])/-2+.5),i={};return"gifv"===t.get("type")&&(a=Object(r.a)("span",{className:"media-gallery__gifv__label"},void 0,"GIF")),o?(i.backgroundImage="url("+t.get("preview_url")+")",i.backgroundPosition=n+"% "+s+"%"):e=Object(r.a)("span",{className:"account-gallery__item__icons"},void 0,Object(r.a)(I.a,{id:"eye-slash"})),Object(r.a)("div",{className:"account-gallery__item"},void 0,Object(r.a)(v.a,{to:"/statuses/"+c.get("id"),href:c.get("url"),style:i,onInterceptClick:this.handleClick},void 0,e,a))},a}(j.a);Object(s.a)(y,"propTypes",{media:l.a.map.isRequired});var _,L,M,w=t(917),S=t(427),k=t(985),A=t(897);t.d(e,"default",function(){return x});var T=function(c){function a(){for(var a,e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return a=c.call.apply(c,[this].concat(t))||this,Object(s.a)(Object(n.a)(a),"handleLoadMore",function(){a.props.onLoadMore(a.props.maxId)}),a}return Object(o.a)(a,c),a.prototype.render=function(){return Object(r.a)(k.a,{disabled:this.props.disabled,onClick:this.handleLoadMore})},a}(j.a);Object(s.a)(T,"propTypes",{shouldUpdateScroll:p.a.func,maxId:p.a.string,onLoadMore:p.a.func.isRequired});var x=Object(c.connect)(function(a,e){return{isAccount:!!a.getIn(["accounts",e.params.accountId]),medias:Object(f.a)(a,e.params.accountId),isLoading:a.getIn(["timelines","account:"+e.params.accountId+":media","isLoading"]),hasMore:a.getIn(["timelines","account:"+e.params.accountId+":media","hasMore"])}})((M=L=function(c){function a(){for(var o,a=arguments.length,e=new Array(a),t=0;t<a;t++)e[t]=arguments[t];return o=c.call.apply(c,[this].concat(e))||this,Object(s.a)(Object(n.a)(o),"handleScrollToBottom",function(){o.props.hasMore&&o.handleLoadMore(0<o.props.medias.size?o.props.medias.last().getIn(["status","id"]):void 0)}),Object(s.a)(Object(n.a)(o),"handleScroll",function(a){var e=a.target,t=e.scrollTop;e.scrollHeight-t-e.clientHeight<150&&!o.props.isLoading&&o.handleScrollToBottom()}),Object(s.a)(Object(n.a)(o),"handleLoadMore",function(a){o.props.dispatch(Object(b.o)(o.props.params.accountId,{maxId:a}))}),Object(s.a)(Object(n.a)(o),"handleLoadOlder",function(a){a.preventDefault(),o.handleScrollToBottom()}),o}Object(o.a)(a,c);var e=a.prototype;return e.componentDidMount=function(){this.props.dispatch(Object(u.A)(this.props.params.accountId)),this.props.dispatch(Object(b.o)(this.props.params.accountId))},e.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(u.A)(a.params.accountId)),this.props.dispatch(Object(b.o)(this.props.params.accountId)))},e.render=function(){var t=this,a=this.props,o=a.medias,e=a.shouldUpdateScroll,c=a.isLoading,n=a.hasMore;if(!a.isAccount)return Object(r.a)(m.a,{},void 0,Object(r.a)(A.a,{}));var s=null;return!o&&c?Object(r.a)(m.a,{},void 0,Object(r.a)(h.a,{})):(!n||c&&0===o.size||(s=Object(r.a)(k.a,{visible:!c,onClick:this.handleLoadOlder})),Object(r.a)(m.a,{},void 0,Object(r.a)(O.a,{}),Object(r.a)(S.a,{scrollKey:"account_gallery",shouldUpdateScroll:e},void 0,Object(r.a)("div",{className:"scrollable scrollable--flex",onScroll:this.handleScroll},void 0,Object(r.a)(w.a,{accountId:this.props.params.accountId}),Object(r.a)("div",{role:"feed",className:"account-gallery__container"},void 0,o.map(function(a,e){return null===a?Object(r.a)(T,{maxId:0<e?o.getIn(e-1,"id"):null,onLoadMore:t.handleLoadMore},"more:"+o.getIn(e+1,"id")):Object(r.a)(y,{media:a},a.get("id"))}),s),c&&0===o.size&&Object(r.a)("div",{className:"scrollable__append"},void 0,Object(r.a)(h.a,{}))))))},a}(j.a),Object(s.a)(L,"propTypes",{params:p.a.object.isRequired,dispatch:p.a.func.isRequired,medias:l.a.list.isRequired,isLoading:p.a.bool,hasMore:p.a.bool,isAccount:p.a.bool}),_=M))||_}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{768: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(12),d=a(18),p=a.n(d),u=a(5),h=a.n(u),b=a(26),m=a(35),O=a(294),g=a(663),f=a(666),j=a(19),v=a(204),y=a(27),_=a(20),I=a(10),M=a.n(I),L=a(208),w=a(114),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",{visible:"hide_all"!==_.f&&!t.props.attachment.getIn(["status","sensitive"])||"show_all"===_.f,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(L.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!_.a&&-1!==["gifv","video"].indexOf(this.props.attachment.get("type"))},a.render=function(){var e,t=this.props,a=t.attachment,o=t.displayWidth,i=this.state,c=i.visible,s=i.loaded,l=Math.floor((o-4)/3)-4+"px",d=l,p=a.get("status"),u=p.get("spoiler_text")||a.get("description"),h="";if("unknown"===a.get("type"));else if("audio"===a.get("type"))h=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(y.a,{id:"music"}));else if("image"===a.get("type")){var b=100*((a.getIn(["meta","focus","x"])||0)/2+.5),m=100*((a.getIn(["meta","focus","y"])||0)/-2+.5);h=Object(n.a)("img",{src:a.get("preview_url"),alt:a.get("description"),title:a.get("description"),style:{objectPosition:b+"% "+m+"%"},onLoad:this.handleImageLoad})}else if(-1!==["gifv","video"].indexOf(a.get("type"))){var O=!Object(w.a)()&&_.a;h=Object(n.a)("div",{className:M()("media-gallery__gifv",{autoplay:O})},void 0,Object(n.a)("video",{className:"media-gallery__item-gifv-thumbnail","aria-label":a.get("description"),title:a.get("description"),role:"application",src:a.get("url"),onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,autoPlay:O,loop:!0,muted:!0}),Object(n.a)("span",{className:"media-gallery__gifv__label"},void 0,"GIF"))}return c||(e=Object(n.a)("span",{className:"account-gallery__item__icons"},void 0,Object(n.a)(y.a,{id:"eye-slash"}))),Object(n.a)("div",{className:"account-gallery__item",style:{width:l,height:d}},void 0,Object(n.a)("a",{className:"media-gallery__item-thumbnail",href:p.get("url"),target:"_blank",onClick:this.handleClick,title:u},void 0,r.a.createElement("canvas",{width:32,height:32,ref:this.setCanvasRef,className:M()("media-gallery__preview",{"media-gallery__preview--hidden":c&&s})}),c&&h,!c&&e))},t}(j.a);Object(c.a)(x,"propTypes",{attachment:p.a.map.isRequired,displayWidth:h.a.number.isRequired,onOpenMedia:h.a.func.isRequired});var R,S,C,N=a(998),T=a(460),k=a(994),A=a(970),D=a(47);a.d(t,"default",function(){return E});var q=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)(k.a,{disabled:this.props.disabled,onClick:this.handleLoadMore})},t}(j.a);Object(c.a)(q,"propTypes",{shouldUpdateScroll:h.a.func,maxId:h.a.string,onLoadMore:h.a.func.isRequired});var E=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"])}})((C=S=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),"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),"handleOpenMedia",function(e){if(["video","audio"].includes(e.get("type")))t.props.dispatch(Object(D.d)("VIDEO",{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(D.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.A)(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.A)(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.shouldUpdateScroll,i=t.isLoading,c=t.hasMore,s=t.isAccount,l=t.multiColumn,d=this.state.width;if(!s)return Object(n.a)(g.a,{},void 0,Object(n.a)(A.a,{}));if(!a&&i)return Object(n.a)(g.a,{},void 0,Object(n.a)(O.a,{}));var p=null;return!c||i&&0===a.size||(p=Object(n.a)(k.a,{visible:!i,onClick:this.handleLoadOlder})),Object(n.a)(g.a,{},void 0,Object(n.a)(f.a,{multiColumn:l}),Object(n.a)(T.a,{scrollKey:"account_gallery",shouldUpdateScroll:o},void 0,Object(n.a)("div",{className:"scrollable scrollable--flex",onScroll:this.handleScroll},void 0,Object(n.a)(N.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)(q,{maxId:o>0?a.getIn(o-1,"id"):null,onLoadMore:e.handleLoadMore},"more:"+a.getIn(o+1,"id")):Object(n.a)(x,{attachment:t,displayWidth:d,onOpenMedia:e.handleOpenMedia},t.get("id"))}),p),i&&0===a.size&&Object(n.a)("div",{className:"scrollable__append"},void 0,Object(n.a)(O.a,{})))))},t}(j.a),Object(c.a)(S,"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=C))||R}}]); //# sourceMappingURL=account_gallery.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/account_gallery.js.map b/priv/static/packs/features/account_gallery.js.map index c3ca6a4d6..48f410fa0 100644 --- a/priv/static/packs/features/account_gallery.js.map +++ b/priv/static/packs/features/account_gallery.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/components/media_item.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","_this","props","media","getIn","state","setState","render","label","icon","this","status","get","x","y","style","Object","jsx","className","backgroundImage","backgroundPosition","components_icon","id","permalink","to","href","onInterceptClick","handleClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","LoadMoreMedia","onLoadMore","maxId","load_more","disabled","onClick","handleLoadMore","shouldUpdateScroll","PropTypes","func","string","AccountGallery","connect","isAccount","params","accountId","medias","getAccountGallery","isLoading","hasMore","_this2","size","last","undefined","e","_e$target","target","scrollTop","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","preventDefault","componentDidMount","fetchAccount","componentWillReceiveProps","nextProps","_this3","_this$props","column","missing_indicator","loadOlder","loading_indicator","handleLoadOlder","column_back_button","react_router_scroll_4_es","scrollKey","onScroll","handleScroll","header_container","role","index","account_gallery_LoadMoreMedia","media_item_MediaItem","object","list","bool"],"mappings":"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","file":"features/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from '../../../components/permalink';\nimport { displayMedia } from '../../../initial_state';\nimport Icon from 'mastodon/components/icon';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n static propTypes = {\n media: ImmutablePropTypes.map.isRequired,\n };\n\n state = {\n visible: displayMedia !== 'hide_all' && !this.props.media.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n };\n\n handleClick = () => {\n if (!this.state.visible) {\n this.setState({ visible: true });\n return true;\n }\n\n return false;\n }\n\n render () {\n const { media } = this.props;\n const { visible } = this.state;\n const status = media.get('status');\n const focusX = media.getIn(['meta', 'focus', 'x']);\n const focusY = media.getIn(['meta', 'focus', 'y']);\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n const style = {};\n\n let label, icon;\n\n if (media.get('type') === 'gifv') {\n label = <span className='media-gallery__gifv__label'>GIF</span>;\n }\n\n if (visible) {\n style.backgroundImage = `url(${media.get('preview_url')})`;\n style.backgroundPosition = `${x}% ${y}%`;\n } else {\n icon = (\n <span className='account-gallery__item__icons'>\n <Icon id='eye-slash' />\n </span>\n );\n }\n\n return (\n <div className='account-gallery__item'>\n <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>\n {icon}\n {label}\n </Permalink>\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 '../../actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from '../../selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from '../../components/load_more';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\n\nconst mapStateToProps = (state, props) => ({\n isAccount: !!state.getIn(['accounts', props.params.accountId]),\n medias: 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 shouldUpdateScroll: PropTypes.func,\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 medias: ImmutablePropTypes.list.isRequired,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n isAccount: PropTypes.bool,\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 handleScrollToBottom = () => {\n if (this.props.hasMore) {\n this.handleLoadMore(this.props.medias.size > 0 ? this.props.medias.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 render () {\n const { medias, shouldUpdateScroll, isLoading, hasMore, isAccount } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n let loadOlder = null;\n\n if (!medias && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n if (hasMore && !(isLoading && medias.size === 0)) {\n loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n }\n\n return (\n <Column>\n <ColumnBackButton />\n\n <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={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'>\n {medias.map((media, index) => media === null ? (\n <LoadMoreMedia\n key={'more:' + medias.getIn(index + 1, 'id')}\n maxId={index > 0 ? medias.getIn(index - 1, 'id') : null}\n onLoadMore={this.handleLoadMore}\n />\n ) : (\n <MediaItem\n key={media.get('id')}\n media={media}\n />\n ))}\n {loadOlder}\n </div>\n\n {isLoading && medias.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/mastodon/features/account_gallery/components/media_item.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/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","icon","displayWidth","width","Math","floor","height","status","title","thumbnail","className","id","x","y","src","alt","style","objectPosition","onLoad","handleImageLoad","autoPlay","isIOS","classNames","autoplay","aria-label","role","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","loop","muted","href","onClick","handleClick","ref","setCanvasRef","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","number","func","LoadMoreMedia","onLoadMore","maxId","disabled","handleLoadMore","shouldUpdateScroll","string","AccountGallery","connect","isAccount","params","accountId","attachments","getAccountGallery","isLoading","hasMore","size","last","undefined","scrollTop","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","includes","openModal","media","index","findIndex","offsetWidth","fetchAccount","componentWillReceiveProps","nextProps","multiColumn","loadOlder","handleLoadOlder","scrollKey","onScroll","handleScroll","handleRef","handleOpenMedia","object","list","bool"],"mappings":"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","file":"features/account_gallery.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Icon from 'mastodon/components/icon';\nimport { autoPlayGif, displayMedia } from 'mastodon/initial_state';\nimport classNames from 'classnames';\nimport { decode } from 'blurhash';\nimport { isIOS } from 'mastodon/is_mobile';\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 let icon;\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\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'>GIF</span>\n </div>\n );\n }\n\n if (!visible) {\n icon = (\n <span className='account-gallery__item__icons'>\n <Icon id='eye-slash' />\n </span>\n );\n }\n\n return (\n <div className='account-gallery__item' style={{ width, height }}>\n <a className='media-gallery__item-thumbnail' href={status.get('url')} target='_blank' onClick={this.handleClick} title={title}>\n <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} />\n {visible && thumbnail}\n {!visible && 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 'mastodon/actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from 'mastodon/components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from 'mastodon/components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'mastodon/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from 'mastodon/components/load_more';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\nimport { openModal } from 'mastodon/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 shouldUpdateScroll: PropTypes.func,\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 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 handleOpenMedia = attachment => {\n if (['video', 'audio'].includes(attachment.get('type'))) {\n this.props.dispatch(openModal('VIDEO', { 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, shouldUpdateScroll, 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>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={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/features/account_timeline.js b/priv/static/packs/features/account_timeline.js index ff92fb1e4..b6f861be7 100644 --- a/priv/static/packs/features/account_timeline.js +++ b/priv/static/packs/features/account_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{678:function(t,a,e){"use strict";e.r(a),e.d(a,"default",function(){return _});var s,c,i,p=e(0),o=e(2),n=e(6),r=e(1),d=(e(3),e(21)),u=e(26),l=e.n(u),h=e(5),b=e.n(h),m=e(27),j=e(35),I=e(914),O=e(272),f=e(626),w=e(917),g=e(629),v=e(4),R=e(25),y=e(7),M=e(265),L=e(897),S=Object(v.List)(),_=Object(d.connect)(function(t,a){var e=a.params.accountId,s=a.withReplies,c=void 0!==s&&s,i=c?e+":with_replies":e;return{isAccount:!!t.getIn(["accounts",e]),statusIds:t.getIn(["timelines","account:"+i,"items"],S),featuredStatusIds:c?Object(v.List)():t.getIn(["timelines","account:"+e+":pinned","items"],S),isLoading:t.getIn(["timelines","account:"+i,"isLoading"]),hasMore:t.getIn(["timelines","account:"+i,"hasMore"]),blockedBy:t.getIn(["relationships",e,"blocked_by"],!1)}})((i=c=function(c){function t(){for(var a,t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];return a=c.call.apply(c,[this].concat(e))||this,Object(r.a)(Object(o.a)(a),"handleLoadMore",function(t){a.props.dispatch(Object(j.p)(a.props.params.accountId,{maxId:t,withReplies:a.props.withReplies}))}),a}Object(n.a)(t,c);var a=t.prototype;return a.componentWillMount=function(){var t=this.props,a=t.params.accountId,e=t.withReplies;this.props.dispatch(Object(m.A)(a)),this.props.dispatch(Object(M.d)(a)),e||this.props.dispatch(Object(j.n)(a)),this.props.dispatch(Object(j.p)(a,{withReplies:e}))},a.componentWillReceiveProps=function(t){(t.params.accountId!==this.props.params.accountId&&t.params.accountId||t.withReplies!==this.props.withReplies)&&(this.props.dispatch(Object(m.A)(t.params.accountId)),this.props.dispatch(Object(M.d)(t.params.accountId)),t.withReplies||this.props.dispatch(Object(j.n)(t.params.accountId)),this.props.dispatch(Object(j.p)(t.params.accountId,{withReplies:t.params.withReplies})))},a.render=function(){var t=this.props,a=t.shouldUpdateScroll,e=t.statusIds,s=t.featuredStatusIds,c=t.isLoading,i=t.hasMore,o=t.blockedBy;if(!t.isAccount)return Object(p.a)(f.a,{},void 0,Object(p.a)(L.a,{}));if(!e&&c)return Object(p.a)(f.a,{},void 0,Object(p.a)(O.a,{}));var n=o?Object(p.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(p.a)(y.b,{id:"empty_column.account_timeline",defaultMessage:"No toots here!"});return Object(p.a)(f.a,{},void 0,Object(p.a)(g.a,{}),Object(p.a)(I.a,{prepend:Object(p.a)(w.a,{accountId:this.props.params.accountId}),alwaysPrepend:!0,scrollKey:"account_timeline",statusIds:o?S:e,featuredStatusIds:s,isLoading:c,hasMore:i,onLoadMore:this.handleLoadMore,shouldUpdateScroll:a,emptyMessage:n}))},t}(R.a),Object(r.a)(c,"propTypes",{params:b.a.object.isRequired,dispatch:b.a.func.isRequired,shouldUpdateScroll:b.a.func,statusIds:l.a.list,featuredStatusIds:l.a.list,isLoading:b.a.bool,hasMore:b.a.bool,withReplies:b.a.bool,blockedBy:b.a.bool,isAccount:b.a.bool}),s=i))||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{725:function(t,a,e){"use strict";e.r(a),e.d(a,"default",function(){return _});var s,o,i,c=e(0),n=e(2),p=e(7),r=e(1),d=(e(3),e(12)),u=e(18),l=e.n(u),h=e(5),b=e.n(h),m=e(26),j=e(35),I=e(995),O=e(294),f=e(663),w=e(998),g=e(666),v=e(4),R=e(19),y=e(6),M=e(283),L=e(970),S=Object(v.List)(),_=Object(d.connect)(function(t,a){var e=a.params.accountId,s=a.withReplies,o=void 0!==s&&s,i=o?e+":with_replies":e;return{isAccount:!!t.getIn(["accounts",e]),statusIds:t.getIn(["timelines","account:"+i,"items"],S),featuredStatusIds:o?Object(v.List)():t.getIn(["timelines","account:"+e+":pinned","items"],S),isLoading:t.getIn(["timelines","account:"+i,"isLoading"]),hasMore:t.getIn(["timelines","account:"+i,"hasMore"]),blockedBy:t.getIn(["relationships",e,"blocked_by"],!1)}})((i=o=function(t){function a(){for(var a,e=arguments.length,s=new Array(e),o=0;o<e;o++)s[o]=arguments[o];return a=t.call.apply(t,[this].concat(s))||this,Object(r.a)(Object(n.a)(a),"handleLoadMore",function(t){a.props.dispatch(Object(j.q)(a.props.params.accountId,{maxId:t,withReplies:a.props.withReplies}))}),a}Object(p.a)(a,t);var e=a.prototype;return e.componentWillMount=function(){var t=this.props,a=t.params.accountId,e=t.withReplies;this.props.dispatch(Object(m.A)(a)),this.props.dispatch(Object(M.d)(a)),e||this.props.dispatch(Object(j.o)(a)),this.props.dispatch(Object(j.q)(a,{withReplies:e}))},e.componentWillReceiveProps=function(t){(t.params.accountId!==this.props.params.accountId&&t.params.accountId||t.withReplies!==this.props.withReplies)&&(this.props.dispatch(Object(m.A)(t.params.accountId)),this.props.dispatch(Object(M.d)(t.params.accountId)),t.withReplies||this.props.dispatch(Object(j.o)(t.params.accountId)),this.props.dispatch(Object(j.q)(t.params.accountId,{withReplies:t.params.withReplies})))},e.render=function(){var t=this.props,a=t.shouldUpdateScroll,e=t.statusIds,s=t.featuredStatusIds,o=t.isLoading,i=t.hasMore,n=t.blockedBy,p=t.isAccount,r=t.multiColumn;if(!p)return Object(c.a)(f.a,{},void 0,Object(c.a)(L.a,{}));if(!e&&o)return Object(c.a)(f.a,{},void 0,Object(c.a)(O.a,{}));var d=n?Object(c.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(c.a)(y.b,{id:"empty_column.account_timeline",defaultMessage:"No toots here!"});return Object(c.a)(f.a,{},void 0,Object(c.a)(g.a,{multiColumn:r}),Object(c.a)(I.a,{prepend:Object(c.a)(w.a,{accountId:this.props.params.accountId}),alwaysPrepend:!0,scrollKey:"account_timeline",statusIds:n?S:e,featuredStatusIds:s,isLoading:o,hasMore:i,onLoadMore:this.handleLoadMore,shouldUpdateScroll:a,emptyMessage:d,bindToDocument:!r}))},a}(R.a),Object(r.a)(o,"propTypes",{params:b.a.object.isRequired,dispatch:b.a.func.isRequired,shouldUpdateScroll:b.a.func,statusIds:l.a.list,featuredStatusIds:l.a.list,isLoading:b.a.bool,hasMore:b.a.bool,withReplies:b.a.bool,blockedBy:b.a.bool,isAccount:b.a.bool,multiColumn:b.a.bool}),s=i))||s}}]); //# sourceMappingURL=account_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/account_timeline.js.map b/priv/static/packs/features/account_timeline.js.map index 663093e45..a7be230e9 100644 --- a/priv/static/packs/features/account_timeline.js.map +++ b/priv/static/packs/features/account_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_timeline/index.js"],"names":["emptyList","ImmutableList","AccountTimeline","connect","state","_ref","accountId","params","_ref$withReplies","withReplies","path","isAccount","getIn","statusIds","featuredStatusIds","isLoading","hasMore","blockedBy","maxId","_this","props","dispatch","expandAccountTimeline","componentWillMount","_this$props","this","fetchAccount","fetchAccountIdentityProofs","expandAccountFeaturedTimeline","componentWillReceiveProps","nextProps","render","_this$props2","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_12__","mastodon_components_missing_indicator__WEBPACK_IMPORTED_MODULE_19__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_11__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_17__","id","defaultMessage","_components_column_back_button__WEBPACK_IMPORTED_MODULE_14__","_components_status_list__WEBPACK_IMPORTED_MODULE_10__","prepend","_containers_header_container__WEBPACK_IMPORTED_MODULE_13__","alwaysPrepend","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"mUAiBMA,EAAYC,iBAgBZC,EADUC,kBAbQ,SAACC,EAADC,GAA2D,IAAvCC,EAAuCD,EAAjDE,OAAUD,UAAuCE,EAAAH,EAA1BI,mBAA0B,IAAAD,KAC3EE,EAAOD,EAAiBH,EAAN,gBAAiCA,EAEzD,MAAO,CACLK,YAAaP,EAAMQ,MAAM,CAAC,WAAYN,IACtCO,UAAWT,EAAMQ,MAAM,CAAC,YAAD,WAAyBF,EAAQ,SAAUV,GAClEc,kBAAmBL,EAAcR,iBAAkBG,EAAMQ,MAAM,CAAC,YAAD,WAAyBN,EAAzB,UAA6C,SAAUN,GACtHe,UAAWX,EAAMQ,MAAM,CAAC,YAAD,WAAyBF,EAAQ,cACxDM,QAASZ,EAAMQ,MAAM,CAAC,YAAD,WAAyBF,EAAQ,YACtDO,UAAWb,EAAMQ,MAAM,CAAC,gBAAiBN,EAAW,eAAe,0MA8CpD,SAAAY,GACfC,EAAKC,MAAMC,SAASC,YAAsBH,EAAKC,MAAMb,OAAOD,UAAW,CAAEY,QAAOT,YAAaU,EAAKC,MAAMX,+DA3B1Gc,mBAAA,WAAsB,IAAAC,EAC2BC,KAAKL,MAAlCd,EADEkB,EACZjB,OAAUD,UAAaG,EADXe,EACWf,YAE/BgB,KAAKL,MAAMC,SAASK,YAAapB,IACjCmB,KAAKL,MAAMC,SAASM,YAA2BrB,IAE1CG,GACHgB,KAAKL,MAAMC,SAASO,YAA8BtB,IAGpDmB,KAAKL,MAAMC,SAASC,YAAsBhB,EAAW,CAAEG,oBAGzDoB,0BAAA,SAA2BC,IACpBA,EAAUvB,OAAOD,YAAcmB,KAAKL,MAAMb,OAAOD,WAAawB,EAAUvB,OAAOD,WAAcwB,EAAUrB,cAAgBgB,KAAKL,MAAMX,eACrIgB,KAAKL,MAAMC,SAASK,YAAaI,EAAUvB,OAAOD,YAClDmB,KAAKL,MAAMC,SAASM,YAA2BG,EAAUvB,OAAOD,YAE3DwB,EAAUrB,aACbgB,KAAKL,MAAMC,SAASO,YAA8BE,EAAUvB,OAAOD,YAGrEmB,KAAKL,MAAMC,SAASC,YAAsBQ,EAAUvB,OAAOD,UAAW,CAAEG,YAAaqB,EAAUvB,OAAOE,mBAQ1GsB,OAAA,WAAU,IAAAC,EAC+FP,KAAKL,MAApGa,EADAD,EACAC,mBAAoBpB,EADpBmB,EACoBnB,UAAWC,EAD/BkB,EAC+BlB,kBAAmBC,EADlDiB,EACkDjB,UAAWC,EAD7DgB,EAC6DhB,QAASC,EADtEe,EACsEf,UAE9E,IAHQe,EACiFrB,UAGvF,OACEuB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAKxB,GAAaE,EAChB,OACEmB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACI,EAAA,EAAD,KAKN,IAAMC,EAAetB,EAAYiB,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,mCAAmCC,eAAe,wBAA2BR,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,gCAAgCC,eAAe,mBAEvM,OACER,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,IAEAT,OAAAC,EAAA,EAAAD,CAACU,EAAA,EAAD,CACEC,QAASX,OAAAC,EAAA,EAAAD,CAACY,EAAA,EAAD,CAAiBxC,UAAWmB,KAAKL,MAAMb,OAAOD,YACvDyC,eAAa,EACbC,UAAU,mBACVnC,UAAWI,EAAYjB,EAAYa,EACnCC,kBAAmBA,EACnBC,UAAWA,EACXC,QAASA,EACTiC,WAAYxB,KAAKyB,eACjBjB,mBAAoBA,EACpBM,aAAcA,SAhFMY,+BAET,CACjB5C,OAAQ6C,IAAUC,OAAOC,WACzBjC,SAAU+B,IAAUG,KAAKD,WACzBrB,mBAAoBmB,IAAUG,KAC9B1C,UAAW2C,IAAmBC,KAC9B3C,kBAAmB0C,IAAmBC,KACtC1C,UAAWqC,IAAUM,KACrB1C,QAASoC,IAAUM,KACnBjD,YAAa2C,IAAUM,KACvBzC,UAAWmC,IAAUM,KACrB/C,UAAWyC,IAAUM","file":"features/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 '../../actions/accounts';\nimport { expandAccountFeaturedTimeline, expandAccountTimeline } from '../../actions/timelines';\nimport StatusList from '../../components/status_list';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport HeaderContainer from './containers/header_container';\nimport ColumnBackButton from '../../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 'mastodon/components/missing_indicator';\n\nconst emptyList = ImmutableList();\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'], emptyList),\n featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], emptyList),\n isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']),\n blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n statusIds: ImmutablePropTypes.list,\n featuredStatusIds: ImmutablePropTypes.list,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n withReplies: PropTypes.bool,\n blockedBy: PropTypes.bool,\n isAccount: 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\n if (!withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(accountId));\n }\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\n if (!nextProps.withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId));\n }\n\n this.props.dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies }));\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies }));\n }\n\n render () {\n const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!statusIds && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='empty_column.account_timeline' defaultMessage='No toots here!' />;\n\n return (\n <Column>\n <ColumnBackButton />\n\n <StatusList\n prepend={<HeaderContainer accountId={this.props.params.accountId} />}\n alwaysPrepend\n scrollKey='account_timeline'\n statusIds={blockedBy ? emptyList : statusIds}\n featuredStatusIds={featuredStatusIds}\n isLoading={isLoading}\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/account_timeline/index.js"],"names":["emptyList","ImmutableList","AccountTimeline","connect","state","accountId","params","withReplies","path","isAccount","getIn","statusIds","featuredStatusIds","isLoading","hasMore","blockedBy","maxId","props","dispatch","expandAccountTimeline","componentWillMount","this","fetchAccount","fetchAccountIdentityProofs","expandAccountFeaturedTimeline","componentWillReceiveProps","nextProps","render","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","prepend","alwaysPrepend","scrollKey","onLoadMore","handleLoadMore","bindToDocument","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"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","file":"features/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 '../../actions/accounts';\nimport { expandAccountFeaturedTimeline, expandAccountTimeline } from '../../actions/timelines';\nimport StatusList from '../../components/status_list';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport HeaderContainer from './containers/header_container';\nimport ColumnBackButton from '../../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 'mastodon/components/missing_indicator';\n\nconst emptyList = ImmutableList();\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'], emptyList),\n featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], emptyList),\n isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']),\n blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n statusIds: ImmutablePropTypes.list,\n featuredStatusIds: ImmutablePropTypes.list,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n withReplies: PropTypes.bool,\n blockedBy: 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\n if (!withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(accountId));\n }\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\n if (!nextProps.withReplies) {\n this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId));\n }\n\n this.props.dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies }));\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies }));\n }\n\n render () {\n const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount, multiColumn } = this.props;\n\n if (!isAccount) {\n return (\n <Column>\n <MissingIndicator />\n </Column>\n );\n }\n\n if (!statusIds && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n const emptyMessage = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='empty_column.account_timeline' defaultMessage='No toots here!' />;\n\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <StatusList\n prepend={<HeaderContainer accountId={this.props.params.accountId} />}\n alwaysPrepend\n scrollKey='account_timeline'\n statusIds={blockedBy ? emptyList : statusIds}\n featuredStatusIds={featuredStatusIds}\n isLoading={isLoading}\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\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/features/blocks.js b/priv/static/packs/features/blocks.js index 6a40dc669..9efc0b216 100644 --- a/priv/static/packs/features/blocks.js +++ b/priv/static/packs/features/blocks.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{685:function(e,t,a){"use strict";a.r(t),a.d(t,"default",function(){return q});var o,n,c,s=a(0),r=a(2),i=a(6),d=a(1),u=a(56),l=a.n(u),b=(a(3),a(21)),p=a(7),h=a(25),f=a(26),j=a.n(f),O=a(5),g=a.n(O),M=a(272),k=a(626),m=a(634),v=a(895),y=a(361),w=a(893),I=Object(p.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"])}})(o=Object(p.g)((c=n=function(n){function e(){for(var e,t=arguments.length,a=new Array(t),o=0;o<t;o++)a[o]=arguments[o];return e=n.call.apply(n,[this].concat(a))||this,Object(d.a)(Object(r.a)(e),"handleLoadMore",l()(function(){e.props.dispatch(Object(y.c)())},300,{leading:!0})),e}Object(i.a)(e,n);var t=e.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(y.d)())},t.render=function(){var e=this.props,t=e.intl,a=e.accountIds,o=e.shouldUpdateScroll,n=e.hasMore;if(!a)return Object(s.a)(k.a,{},void 0,Object(s.a)(M.a,{}));var c=Object(s.a)(p.b,{id:"empty_column.blocks",defaultMessage:"You haven't blocked any users yet."});return Object(s.a)(k.a,{icon:"ban",heading:t.formatMessage(I.heading)},void 0,Object(s.a)(m.a,{}),Object(s.a)(w.a,{scrollKey:"blocks",onLoadMore:this.handleLoadMore,hasMore:n,shouldUpdateScroll:o,emptyMessage:c},void 0,a.map(function(e){return Object(s.a)(v.a,{id:e},e)})))},e}(h.a),Object(d.a)(n,"propTypes",{params:g.a.object.isRequired,dispatch:g.a.func.isRequired,shouldUpdateScroll:g.a.func,accountIds:j.a.list,hasMore:g.a.bool,intl:g.a.object.isRequired}),o=c))||o)||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{732:function(e,t,o){"use strict";o.r(t),o.d(t,"default",function(){return q});var a,n,c,s=o(0),r=o(2),i=o(7),u=o(1),l=o(63),d=o.n(l),b=(o(3),o(12)),p=o(6),h=o(19),f=o(18),j=o.n(f),O=o(5),m=o.n(O),g=o(294),M=o(663),k=o(670),v=o(966),y=o(220),w=o(964),I=Object(p.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(p.g)((c=n=function(e){function t(){for(var t,o=arguments.length,a=new Array(o),n=0;n<o;n++)a[n]=arguments[n];return t=e.call.apply(e,[this].concat(a))||this,Object(u.a)(Object(r.a)(t),"handleLoadMore",d()(function(){t.props.dispatch(Object(y.d)())},300,{leading:!0})),t}Object(i.a)(t,e);var o=t.prototype;return o.componentWillMount=function(){this.props.dispatch(Object(y.e)())},o.render=function(){var e=this.props,t=e.intl,o=e.accountIds,a=e.shouldUpdateScroll,n=e.hasMore,c=e.multiColumn;if(!o)return Object(s.a)(M.a,{},void 0,Object(s.a)(g.a,{}));var r=Object(s.a)(p.b,{id:"empty_column.blocks",defaultMessage:"You haven't blocked any users yet."});return Object(s.a)(M.a,{bindToDocument:!c,icon:"ban",heading:t.formatMessage(I.heading)},void 0,Object(s.a)(k.a,{}),Object(s.a)(w.a,{scrollKey:"blocks",onLoadMore:this.handleLoadMore,hasMore:n,shouldUpdateScroll:a,emptyMessage:r,bindToDocument:!c},void 0,o.map(function(e){return Object(s.a)(v.a,{id:e},e)})))},t}(h.a),Object(u.a)(n,"propTypes",{params:m.a.object.isRequired,dispatch:m.a.func.isRequired,shouldUpdateScroll:m.a.func,accountIds:j.a.list,hasMore:m.a.bool,intl:m.a.object.isRequired,multiColumn:m.a.bool}),a=c))||a)||a}}]); //# sourceMappingURL=blocks.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/blocks.js.map b/priv/static/packs/features/blocks.js.map index f84742bbf..f2678ee46 100644 --- a/priv/static/packs/features/blocks.js.map +++ b/priv/static/packs/features/blocks.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/blocks/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","Blocks","connect","state","accountIds","getIn","hasMore","injectIntl","lodash_debounce__WEBPACK_IMPORTED_MODULE_4___default","_this","props","dispatch","expandBlocks","leading","componentWillMount","this","fetchBlocks","render","_this$props","intl","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_12__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_11__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_7__","icon","formatMessage","_components_column_back_button_slim__WEBPACK_IMPORTED_MODULE_13__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_16__","scrollKey","onLoadMore","handleLoadMore","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_14__","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"oTAcMA,EAAWC,YAAe,CAC9BC,QAAO,CAAAC,GAAA,gBAAAC,eAAA,mBAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,SAAU,UACjDC,UAAWH,EAAME,MAAM,CAAC,aAAc,SAAU,cAIjDE,gNAgBkBC,IAAS,WACxBC,EAAKC,MAAMC,SAASC,gBACnB,IAAK,CAAEC,SAAS,mDANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,kBAOtBC,OAAA,WAAU,IAAAC,EACkDH,KAAKL,MAAvDS,EADAD,EACAC,KAAMf,EADNc,EACMd,WAAYgB,EADlBF,EACkBE,mBAAoBd,EADtCY,EACsCZ,QAE9C,IAAKF,EACH,OACEiB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAMC,EAAeJ,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAkB3B,GAAG,sBAAsBC,eAAe,uCAE/E,OACEqB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,CAAQI,KAAK,MAAM7B,QAASqB,EAAKS,cAAchC,EAASE,eAAxD,EACEuB,OAAAC,EAAA,EAAAD,CAACQ,EAAA,EAAD,IACAR,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,CACEC,UAAU,SACVC,WAAYjB,KAAKkB,eACjB3B,QAASA,EACTc,mBAAoBA,EACpBK,aAAcA,QALhB,EAOGrB,EAAW8B,IAAI,SAAAnC,GAAE,OAChBsB,OAAAC,EAAA,EAAAD,CAACc,EAAA,EAAD,CAA2BpC,GAAIA,GAARA,WA3CdqC,+BAEA,CACjBC,OAAQC,IAAUC,OAAOC,WACzB7B,SAAU2B,IAAUG,KAAKD,WACzBpB,mBAAoBkB,IAAUG,KAC9BrC,WAAYsC,IAAmBC,KAC/BrC,QAASgC,IAAUM,KACnBzB,KAAMmB,IAAUC,OAAOC","file":"features/blocks.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\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 AccountContainer from '../../containers/account_container';\nimport { fetchBlocks, expandBlocks } from '../../actions/blocks';\nimport ScrollableList from '../../components/scrollable_list';\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 shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n intl: PropTypes.object.isRequired,\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, shouldUpdateScroll, hasMore } = 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 icon='ban' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/blocks/index.js"],"names":["messages","defineMessages","heading","Blocks","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandBlocks","leading","componentWillMount","this","fetchBlocks","render","intl","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"oTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,qDAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,SAAU,UACjDC,UAAWH,EAAME,MAAM,CAAC,aAAc,SAAU,W,GAIjDE,a,mMAiBkB,IAAS,WACxB,EAAKC,MAAMC,SAASC,gBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKL,MAApEQ,EADA,EACAA,KAAMZ,EADN,EACMA,WAAYa,EADlB,EACkBA,mBAAoBX,EADtC,EACsCA,QAASY,EAD/C,EAC+CA,YAEvD,IAAKd,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMe,EAAe,YAAC,IAAD,CAAkBC,GAAG,sBAAsBC,eAAe,uCAE/E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,MAAMvB,QAASgB,EAAKQ,cAAc1B,EAASE,eAAtF,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,SACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTW,mBAAoBA,EACpBE,aAAcA,EACdG,gBAAiBJ,QANnB,EAQGd,EAAWwB,IAAI,SAAAR,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,Q,GA7CdS,K,0BAEA,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzBhB,mBAAoBc,IAAUG,KAC9B9B,WAAY+B,IAAmBC,KAC/B9B,QAASyB,IAAUM,KACnBrB,KAAMe,IAAUC,OAAOC,WACvBf,YAAaa,IAAUM,O","file":"features/blocks.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\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 AccountContainer from '../../containers/account_container';\nimport { fetchBlocks, expandBlocks } from '../../actions/blocks';\nimport ScrollableList from '../../components/scrollable_list';\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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, 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 bindToDocument={!multiColumn} icon='ban' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\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/features/community_timeline.js b/priv/static/packs/features/community_timeline.js index 15222d119..2f47d914f 100644 --- a/priv/static/packs/features/community_timeline.js +++ b/priv/static/packs/features/community_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{715:function(e,t,n){"use strict";n.r(t);var o,i,c,d=n(0),a=n(2),l=n(6),s=n(1),r=n(3),u=n.n(r),m=n(21),p=n(7),h=n(5),b=n.n(h),y=n(904),f=n(633),j=n(628),M=n(35),O=n(222),g=n(987),v=n(70),I=Object(m.connect)(function(e,t){var n=t.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex(function(e){return e.get("uuid")===n});return{settings:n&&0<=i?o.get(i).get("params"):e.getIn(["settings","community"])}},function(n,e){var o=e.columnId;return{onChange:function(e,t){n(o?Object(O.f)(o,e,t):Object(v.c)(["community"].concat(e),t))}}})(g.a),C=n(635);n.d(t,"default",function(){return U});var w=Object(p.f)({title:{id:"column.community",defaultMessage:"Local timeline"}}),U=Object(m.connect)(function(e,t){var n=t.onlyMedia,o=t.columnId,i=o,c=e.getIn(["settings","columns"]),a=c.findIndex(function(e){return e.get("uuid")===i});return{hasUnread:0<e.getIn(["timelines","community"+(n?":media":""),"unread"]),onlyMedia:o&&0<=a?c.get(a).getIn(["params","other","onlyMedia"]):e.getIn(["settings","community","other","onlyMedia"])}})(o=Object(p.g)((c=i=function(o){function e(){for(var i,e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return i=o.call.apply(o,[this].concat(t))||this,Object(s.a)(Object(a.a)(i),"handlePin",function(){var e=i.props,t=e.columnId,n=e.dispatch,o=e.onlyMedia;n(t?Object(O.h)(t):Object(O.e)("COMMUNITY",{other:{onlyMedia:o}}))}),Object(s.a)(Object(a.a)(i),"handleMove",function(e){var t=i.props,n=t.columnId;(0,t.dispatch)(Object(O.g)(n,e))}),Object(s.a)(Object(a.a)(i),"handleHeaderClick",function(){i.column.scrollTop()}),Object(s.a)(Object(a.a)(i),"setRef",function(e){i.column=e}),Object(s.a)(Object(a.a)(i),"handleLoadMore",function(e){var t=i.props,n=t.dispatch,o=t.onlyMedia;n(Object(M.q)({maxId:e,onlyMedia:o}))}),i}Object(l.a)(e,o);var t=e.prototype;return t.componentDidMount=function(){var e=this.props,t=e.dispatch,n=e.onlyMedia;t(Object(M.q)({onlyMedia:n})),this.disconnect=t(Object(C.a)({onlyMedia:n}))},t.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var t=this.props,n=t.dispatch,o=t.onlyMedia;this.disconnect(),n(Object(M.q)({onlyMedia:o})),this.disconnect=n(Object(C.a)({onlyMedia:o}))}},t.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,t=e.intl,n=e.shouldUpdateScroll,o=e.hasUnread,i=e.columnId,c=e.multiColumn,a=e.onlyMedia,l=!!i;return u.a.createElement(f.a,{ref:this.setRef,label:t.formatMessage(w.title)},Object(d.a)(j.a,{icon:"users",active:o,title:t.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:c},void 0,Object(d.a)(I,{columnId:i})),Object(d.a)(y.a,{trackScroll:!l,scrollKey:"community_timeline-"+i,timelineId:"community"+(a?":media":""),onLoadMore:this.handleLoadMore,emptyMessage:Object(d.a)(p.b,{id:"empty_column.community",defaultMessage:"The local timeline is empty. Write something publicly to get the ball rolling!"}),shouldUpdateScroll:n}))},e}(u.a.PureComponent),Object(s.a)(i,"contextTypes",{router:b.a.object}),Object(s.a)(i,"defaultProps",{onlyMedia:!1}),o=c))||o)||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{766:function(e,t,n){"use strict";n.r(t);var o,i,c,a=n(0),l=n(2),d=n(7),s=n(1),r=n(3),u=n.n(r),m=n(12),p=n(6),h=n(5),b=n.n(h),y=n(977),f=n(669),j=n(665),M=n(35),O=n(245),g=n(1092),I=n(72),v=Object(m.connect)(function(e,t){var n=t.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex(function(e){return e.get("uuid")===n});return{settings:n&&i>=0?o.get(i).get("params"):e.getIn(["settings","community"])}},function(e,t){var n=t.columnId;return{onChange:function(t,o){e(n?Object(O.f)(n,t,o):Object(I.c)(["community"].concat(t),o))}}})(g.a),C=n(672);n.d(t,"default",function(){return U});var w=Object(p.f)({title:{id:"column.community",defaultMessage:"Local timeline"}}),U=Object(m.connect)(function(e,t){var n=t.onlyMedia,o=t.columnId,i=o,c=e.getIn(["settings","columns"]),a=c.findIndex(function(e){return e.get("uuid")===i}),l=e.getIn(["timelines","community"+(n?":media":"")]);return{hasUnread:!!l&&(l.get("unread")>0||l.get("pendingItems").size>0),onlyMedia:o&&a>=0?c.get(a).getIn(["params","other","onlyMedia"]):e.getIn(["settings","community","other","onlyMedia"])}})(o=Object(p.g)((c=i=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return t=e.call.apply(e,[this].concat(o))||this,Object(s.a)(Object(l.a)(t),"handlePin",function(){var e=t.props,n=e.columnId,o=e.dispatch,i=e.onlyMedia;o(n?Object(O.h)(n):Object(O.e)("COMMUNITY",{other:{onlyMedia:i}}))}),Object(s.a)(Object(l.a)(t),"handleMove",function(e){var n=t.props,o=n.columnId;(0,n.dispatch)(Object(O.g)(o,e))}),Object(s.a)(Object(l.a)(t),"handleHeaderClick",function(){t.column.scrollTop()}),Object(s.a)(Object(l.a)(t),"setRef",function(e){t.column=e}),Object(s.a)(Object(l.a)(t),"handleLoadMore",function(e){var n=t.props,o=n.dispatch,i=n.onlyMedia;o(Object(M.r)({maxId:e,onlyMedia:i}))}),t}Object(d.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this.props,t=e.dispatch,n=e.onlyMedia;t(Object(M.r)({onlyMedia:n})),this.disconnect=t(Object(C.a)({onlyMedia:n}))},n.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var t=this.props,n=t.dispatch,o=t.onlyMedia;this.disconnect(),n(Object(M.r)({onlyMedia:o})),this.disconnect=n(Object(C.a)({onlyMedia:o}))}},n.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},n.render=function(){var e=this.props,t=e.intl,n=e.shouldUpdateScroll,o=e.hasUnread,i=e.columnId,c=e.multiColumn,l=e.onlyMedia,d=!!i;return u.a.createElement(f.a,{bindToDocument:!c,ref:this.setRef,label:t.formatMessage(w.title)},Object(a.a)(j.a,{icon:"users",active:o,title:t.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:d,multiColumn:c},void 0,Object(a.a)(v,{columnId:i})),Object(a.a)(y.a,{trackScroll:!d,scrollKey:"community_timeline-"+i,timelineId:"community"+(l?":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!"}),shouldUpdateScroll:n,bindToDocument:!c}))},t}(u.a.PureComponent),Object(s.a)(i,"contextTypes",{router:b.a.object}),Object(s.a)(i,"defaultProps",{onlyMedia:!1}),o=c))||o)||o}}]); //# sourceMappingURL=community_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/community_timeline.js.map b/priv/static/packs/features/community_timeline.js.map index 954c80697..4a53ae01d 100644 --- a/priv/static/packs/features/community_timeline.js.map +++ b/priv/static/packs/features/community_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/community_timeline/containers/column_settings_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/community_timeline/index.js"],"names":["connect","state","_ref","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","_ref2","onChange","key","checked","changeColumnParams","changeSetting","concat","ColumnSettings","messages","defineMessages","title","id","defaultMessage","CommunityTimeline","onlyMedia","hasUnread","injectIntl","_this$props","_this","props","removeColumn","addColumn","other","dir","_this$props2","moveColumn","column","scrollTop","maxId","_this$props3","expandCommunityTimeline","componentDidMount","_this$props4","this","disconnect","connectCommunityStream","componentDidUpdate","prevProps","_this$props5","componentWillUnmount","render","_this$props6","intl","shouldUpdateScroll","multiColumn","pinned","react_default","a","createElement","ref","setRef","label","formatMessage","Object","jsx","column_header","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","column_settings_container","status_list_container","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","index_es","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"features/community_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { changeColumnParams } from '../../../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', '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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandCommunityTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectCommunityStream } from '../../actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.community', defaultMessage: 'Local timeline' },\n});\n\nconst mapStateToProps = (state, { onlyMedia, 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 hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0,\n onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']),\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass CommunityTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, hasUnread, columnId, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/features/community_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/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","size","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandCommunityTimeline","componentDidMount","this","disconnect","connectCommunityStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","shouldUpdateScroll","multiColumn","pinned","bindToDocument","ref","setRef","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":"features/community_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { changeColumnParams } from '../../../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', '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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandCommunityTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectCommunityStream } from '../../actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.community', defaultMessage: 'Local timeline' },\n});\n\nconst mapStateToProps = (state, { onlyMedia, columnId }) => {\n const uuid = columnId;\n const columns = state.getIn(['settings', 'columns']);\n const index = columns.findIndex(c => c.get('uuid') === uuid);\n const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]);\n\n return {\n hasUnread: !!timelineState && (timelineState.get('unread') > 0 || timelineState.get('pendingItems').size > 0),\n onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']),\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass CommunityTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, hasUnread, columnId, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/compose.js b/priv/static/packs/features/compose.js index d5ed58ff4..4238d4627 100644 --- a/priv/static/packs/features/compose.js +++ b/priv/static/packs/features/compose.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{650:function(e,l,u){"use strict";(function(e){u.d(l,"a",function(){return r});var n=u(0),a=u(6),t=u(3),o=u.n(t),i=u(64),s=u.n(i),c=e.env.CDN_HOST||"",r=function(e){function t(){return e.apply(this,arguments)||this}return Object(a.a)(t,e),t.prototype.render=function(){var e,t=this.props.emoji;if(t.custom)e=t.imageUrl;else{var a=s.a[t.native]||s.a[t.native.replace(/\uFE0F$/,"")];if(!a)return null;e=c+"/emoji/"+a.filename+".svg"}return Object(n.a)("div",{className:"autosuggest-emoji"},void 0,Object(n.a)("img",{className:"emojione",src:e,alt:t.native||t.colons}),t.colons)},t}(o.a.PureComponent)}).call(this,u(52))},651:function(e,T,D){"use strict";(function(e){D.d(T,"a",function(){return I});var t,a,n,o,l,i,d=D(0),s=D(2),c=D(6),r=D(1),u=D(3),p=D.n(u),b=D(7),g=D(46),h=D(244),m=D.n(h),f=D(12),j=D.n(f),O=D(77),v=D.n(O),_=D(38),y=Object(b.f)({emoji:{id:"emoji_button.label",defaultMessage:"Insert emoji"},emoji_search:{id:"emoji_button.search",defaultMessage:"Search..."},emoji_not_found:{id:"emoji_button.not_found",defaultMessage:"No emojos!! (╯°□°)╯︵ ┻━┻"},custom:{id:"emoji_button.custom",defaultMessage:"Custom"},recent:{id:"emoji_button.recent",defaultMessage:"Frequently used"},search_results:{id:"emoji_button.search_results",defaultMessage:"Search results"},people:{id:"emoji_button.people",defaultMessage:"People"},nature:{id:"emoji_button.nature",defaultMessage:"Nature"},food:{id:"emoji_button.food",defaultMessage:"Food & Drink"},activity:{id:"emoji_button.activity",defaultMessage:"Activity"},travel:{id:"emoji_button.travel",defaultMessage:"Travel & Places"},objects:{id:"emoji_button.objects",defaultMessage:"Objects"},symbols:{id:"emoji_button.symbols",defaultMessage:"Symbols"},flags:{id:"emoji_button.flags",defaultMessage:"Flags"}}),C=e.env.CDN_HOST||"",k=function(){return C+"/emoji/sheet_10.png"},M=!!v.a.hasSupport&&{passive:!0},S=["recent","custom","people","nature","foods","activity","places","objects","symbols","flags"],w=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(r.a)(Object(s.a)(t),"handleClick",function(e){t.props.onSelect(1*e.currentTarget.getAttribute("data-index"))}),Object(r.a)(Object(s.a)(t),"handleDocumentClick",function(e){t.node&&!t.node.contains(e.target)&&t.props.onClose()}),Object(r.a)(Object(s.a)(t),"setRef",function(e){t.node=e}),t}Object(c.a)(e,o);var t=e.prototype;return t.componentWillReceiveProps=function(e){e.active?this.attachListeners():this.removeListeners()},t.componentWillUnmount=function(){this.removeListeners()},t.attachListeners=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,M)},t.removeListeners=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,M)},t.render=function(){var e=this.props.active;return p.a.createElement("div",{className:"emoji-picker-dropdown__modifiers__menu",style:{display:e?"block":"none"},ref:this.setRef},Object(d.a)("button",{onClick:this.handleClick,"data-index":1},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:1,backgroundImageFn:k})),Object(d.a)("button",{onClick:this.handleClick,"data-index":2},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:2,backgroundImageFn:k})),Object(d.a)("button",{onClick:this.handleClick,"data-index":3},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:3,backgroundImageFn:k})),Object(d.a)("button",{onClick:this.handleClick,"data-index":4},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:4,backgroundImageFn:k})),Object(d.a)("button",{onClick:this.handleClick,"data-index":5},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:5,backgroundImageFn:k})),Object(d.a)("button",{onClick:this.handleClick,"data-index":6},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:6,backgroundImageFn:k})))},e}(p.a.PureComponent),x=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(r.a)(Object(s.a)(t),"handleClick",function(){t.props.active?t.props.onClose():t.props.onOpen()}),Object(r.a)(Object(s.a)(t),"handleSelect",function(e){t.props.onChange(e),t.props.onClose()}),t}return Object(c.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.active,a=e.modifier;return Object(d.a)("div",{className:"emoji-picker-dropdown__modifiers"},void 0,Object(d.a)(i,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:a,onClick:this.handleClick,backgroundImageFn:k}),Object(d.a)(w,{active:t,onSelect:this.handleSelect,onClose:this.props.onClose}))},e}(p.a.PureComponent),N=Object(b.g)((n=a=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(r.a)(Object(s.a)(t),"state",{modifierOpen:!1,placement:null}),Object(r.a)(Object(s.a)(t),"handleDocumentClick",function(e){t.node&&!t.node.contains(e.target)&&t.props.onClose()}),Object(r.a)(Object(s.a)(t),"setRef",function(e){t.node=e}),Object(r.a)(Object(s.a)(t),"getI18n",function(){var e=t.props.intl;return{search:e.formatMessage(y.emoji_search),notfound:e.formatMessage(y.emoji_not_found),categories:{search:e.formatMessage(y.search_results),recent:e.formatMessage(y.recent),people:e.formatMessage(y.people),nature:e.formatMessage(y.nature),foods:e.formatMessage(y.food),activity:e.formatMessage(y.activity),places:e.formatMessage(y.travel),objects:e.formatMessage(y.objects),symbols:e.formatMessage(y.symbols),flags:e.formatMessage(y.flags),custom:e.formatMessage(y.custom)}}}),Object(r.a)(Object(s.a)(t),"handleClick",function(e){e.native||(e.native=e.colons),t.props.onClose(),t.props.onPick(e)}),Object(r.a)(Object(s.a)(t),"handleModifierOpen",function(){t.setState({modifierOpen:!0})}),Object(r.a)(Object(s.a)(t),"handleModifierClose",function(){t.setState({modifierOpen:!1})}),Object(r.a)(Object(s.a)(t),"handleModifierChange",function(e){t.props.onSkinTone(e)}),t}Object(c.a)(e,o);var t=e.prototype;return t.componentDidMount=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,M)},t.componentWillUnmount=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,M)},t.render=function(){var e=this.props,t=e.loading,a=e.style,n=e.intl,o=e.custom_emojis,i=e.skinTone,s=e.frequentlyUsedEmojis;if(t)return Object(d.a)("div",{style:{width:299}});var c=n.formatMessage(y.emoji),r=this.state.modifierOpen;return p.a.createElement("div",{className:j()("emoji-picker-dropdown__menu",{selecting:r}),style:a,ref:this.setRef},Object(d.a)(l,{perLine:8,emojiSize:22,sheetSize:32,custom:Object(_.buildCustomEmojis)(o),color:"",emoji:"",set:"twitter",title:c,i18n:this.getI18n(),onClick:this.handleClick,include:S,recent:s,skin:i,showPreview:!1,backgroundImageFn:k,autoFocus:!0,emojiTooltip:!0}),Object(d.a)(x,{active:r,modifier:i,onOpen:this.handleModifierOpen,onClose:this.handleModifierClose,onChange:this.handleModifierChange}))},e}(p.a.PureComponent),Object(r.a)(a,"defaultProps",{style:{},loading:!0,frequentlyUsedEmojis:[]}),t=n))||t,I=Object(b.g)(o=function(o){function e(){for(var n,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return n=o.call.apply(o,[this].concat(t))||this,Object(r.a)(Object(s.a)(n),"state",{active:!1,loading:!1}),Object(r.a)(Object(s.a)(n),"setRef",function(e){n.dropdown=e}),Object(r.a)(Object(s.a)(n),"onShowDropdown",function(e){var t=e.target;n.setState({active:!0}),l||(n.setState({loading:!0}),Object(g.i)().then(function(e){l=e.Picker,i=e.Emoji,n.setState({loading:!1})}).catch(function(){n.setState({loading:!1})}));var a=t.getBoundingClientRect().top;n.setState({placement:2*a<innerHeight?"bottom":"top"})}),Object(r.a)(Object(s.a)(n),"onHideDropdown",function(){n.setState({active:!1})}),Object(r.a)(Object(s.a)(n),"onToggle",function(e){n.state.loading||e.key&&"Enter"!==e.key||(n.state.active?n.onHideDropdown():n.onShowDropdown(e))}),Object(r.a)(Object(s.a)(n),"handleKeyDown",function(e){"Escape"===e.key&&n.onHideDropdown()}),Object(r.a)(Object(s.a)(n),"setTargetRef",function(e){n.target=e}),Object(r.a)(Object(s.a)(n),"findTarget",function(){return n.target}),n}return Object(c.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.intl,a=e.onPickEmoji,n=e.onSkinTone,o=e.skinTone,i=e.frequentlyUsedEmojis,s=t.formatMessage(y.emoji),c=this.state,r=c.active,l=c.loading,u=c.placement;return Object(d.a)("div",{className:"emoji-picker-dropdown",onKeyDown:this.handleKeyDown},void 0,p.a.createElement("div",{ref:this.setTargetRef,className:"emoji-button",title:s,"aria-label":s,"aria-expanded":r,role:"button",onClick:this.onToggle,onKeyDown:this.onToggle,tabIndex:0},Object(d.a)("img",{className:j()("emojione",{"pulse-loading":r&&l}),alt:"🙂",src:C+"/emoji/1f602.svg"})),Object(d.a)(m.a,{show:r,placement:u,target:this.findTarget},void 0,Object(d.a)(N,{custom_emojis:this.props.custom_emojis,loading:l,onClose:this.onHideDropdown,onPick:a,onSkinTone:n,skinTone:o,frequentlyUsedEmojis:i})))},e}(p.a.PureComponent))||o}).call(this,D(52))},689:function(e,t,a){"use strict";var n,o,i,s=a(21),u=a(0),c=a(2),r=a(6),d=a(1),l=a(3),p=a.n(l),b=a(273),g=function(e){function t(){return e.apply(this,arguments)||this}Object(r.a)(t,e);var a=t.prototype;return a.checkRemainingText=function(e){return e<0?Object(u.a)("span",{className:"character-counter character-counter--over"},void 0,e):Object(u.a)("span",{className:"character-counter"},void 0,e)},a.render=function(){var e=this.props.max-Object(b.length)(this.props.text);return this.checkRemainingText(e)},t}(p.a.PureComponent),h=a(197),m=a(26),f=a.n(m),j=a(5),O=a.n(j),v=a(22),_=a(200),y=a(194),C=a(67),k=a(195),M=a(7),S=a(25),w=a(274),x=Object(M.f)({cancel:{id:"reply_indicator.cancel",defaultMessage:"Cancel"}}),N=Object(M.g)((i=o=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleClick",function(){t.props.onCancel()}),Object(d.a)(Object(c.a)(t),"handleAccountClick",function(e){0!==e.button||e.ctrlKey||e.metaKey||(e.preventDefault(),t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"])))}),t}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.status,a=e.intl;if(!t)return null;var n={__html:t.get("contentHtml")},o={direction:Object(w.a)(t.get("search_index"))?"rtl":"ltr"};return Object(u.a)("div",{className:"reply-indicator"},void 0,Object(u.a)("div",{className:"reply-indicator__header"},void 0,Object(u.a)("div",{className:"reply-indicator__cancel"},void 0,Object(u.a)(C.a,{title:a.formatMessage(x.cancel),icon:"times",onClick:this.handleClick,inverted:!0})),Object(u.a)("a",{href:t.getIn(["account","url"]),onClick:this.handleAccountClick,className:"reply-indicator__display-name"},void 0,Object(u.a)("div",{className:"reply-indicator__display-avatar"},void 0,Object(u.a)(y.a,{account:t.get("account"),size:24})),Object(u.a)(k.a,{account:t.get("account")}))),Object(u.a)("div",{className:"reply-indicator__content",style:o,dangerouslySetInnerHTML:n}))},e}(S.a),Object(d.a)(o,"contextTypes",{router:O.a.object}),Object(d.a)(o,"propTypes",{status:f.a.map,onCancel:O.a.func.isRequired,intl:O.a.object.isRequired}),n=i))||n,I=Object(s.connect)(function(){var t=Object(_.f)();return function(e){return{status:t(e,{id:e.getIn(["compose","in_reply_to"])})}}},function(e){return{onCancel:function(){e(Object(v.M)())}}})(N),T=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props.account;return Object(u.a)("div",{className:"autosuggest-account",title:e.get("acct")},void 0,Object(u.a)("div",{className:"autosuggest-account-icon"},void 0,Object(u.a)(y.a,{account:e,size:18})),Object(u.a)(k.a,{account:e}))},t}(S.a);Object(d.a)(T,"propTypes",{account:f.a.map.isRequired});var D,P=Object(s.connect)(function(){var n=Object(_.d)();return function(e,t){var a=t.id;return{account:n(e,a)}}})(T),R=a(650),E=a(505),q=a(12),A=a.n(q),F=function(n){function e(){for(var l,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return l=n.call.apply(n,[this].concat(t))||this,Object(d.a)(Object(c.a)(l),"state",{suggestionsHidden:!1,selectedSuggestion:0,lastToken:null,tokenStart:0}),Object(d.a)(Object(c.a)(l),"onChange",function(e){var t,a,n,o,i,s=(t=e.target.value,a=e.target.selectionStart,o=t.slice(0,a).search(/\S+$/),i=t.slice(a).search(/\s/),!(n=i<0?t.slice(o):t.slice(o,i+a))||n.trim().length<3||-1===["@",":","#"].indexOf(n[0])?[null,null]:0<(n=n.trim().toLowerCase()).length?[o+1,n]:[null,null]),c=s[0],r=s[1];null!==r&&l.state.lastToken!==r?(l.setState({lastToken:r,selectedSuggestion:0,tokenStart:c}),l.props.onSuggestionsFetchRequested(r)):null===r&&(l.setState({lastToken:null}),l.props.onSuggestionsClearRequested()),l.props.onChange(e)}),Object(d.a)(Object(c.a)(l),"onKeyDown",function(e){var t=l.props,a=t.suggestions,n=t.disabled,o=l.state,i=o.selectedSuggestion,s=o.suggestionsHidden;if(n)e.preventDefault();else if(229!==e.which&&!e.isComposing){switch(e.key){case"Escape":0===a.size||s?document.querySelector(".ui").parentElement.focus():(e.preventDefault(),l.setState({suggestionsHidden:!0}));break;case"ArrowDown":0<a.size&&!s&&(e.preventDefault(),l.setState({selectedSuggestion:Math.min(i+1,a.size-1)}));break;case"ArrowUp":0<a.size&&!s&&(e.preventDefault(),l.setState({selectedSuggestion:Math.max(i-1,0)}));break;case"Enter":case"Tab":null!==l.state.lastToken&&0<a.size&&!s&&(e.preventDefault(),e.stopPropagation(),l.props.onSuggestionSelected(l.state.tokenStart,l.state.lastToken,a.get(i)))}!e.defaultPrevented&&l.props.onKeyDown&&l.props.onKeyDown(e)}}),Object(d.a)(Object(c.a)(l),"onBlur",function(){l.setState({suggestionsHidden:!0})}),Object(d.a)(Object(c.a)(l),"onSuggestionClick",function(e){var t=l.props.suggestions.get(e.currentTarget.getAttribute("data-index"));e.preventDefault(),l.props.onSuggestionSelected(l.state.tokenStart,l.state.lastToken,t),l.textarea.focus()}),Object(d.a)(Object(c.a)(l),"setTextarea",function(e){l.textarea=e}),Object(d.a)(Object(c.a)(l),"onPaste",function(e){e.clipboardData&&1===e.clipboardData.files.length&&(l.props.onPaste(e.clipboardData.files),e.preventDefault())}),Object(d.a)(Object(c.a)(l),"renderSuggestion",function(e,t){var a,n,o=l.state.selectedSuggestion;return n="object"==typeof e?(a=Object(u.a)(R.a,{emoji:e}),e.id):"#"===e[0]?a=e:(a=Object(u.a)(P,{id:e}),e),Object(u.a)("div",{role:"button",tabIndex:"0","data-index":t,className:A()("autosuggest-textarea__suggestions__item",{selected:t===o}),onMouseDown:l.onSuggestionClick},n,a)}),l}Object(r.a)(e,n);var t=e.prototype;return t.componentWillReceiveProps=function(e){e.suggestions!==this.props.suggestions&&0<e.suggestions.size&&this.state.suggestionsHidden&&this.setState({suggestionsHidden:!1})},t.render=function(){var e=this.props,t=e.value,a=e.suggestions,n=e.disabled,o=e.placeholder,i=e.onKeyUp,s=e.autoFocus,c=this.state.suggestionsHidden,r={direction:"ltr"};return Object(w.a)(t)&&(r.direction="rtl"),Object(u.a)("div",{className:"autosuggest-textarea"},void 0,Object(u.a)("label",{},void 0,Object(u.a)("span",{style:{display:"none"}},void 0,o),Object(u.a)(E.a,{inputRef:this.setTextarea,className:"autosuggest-textarea__textarea",disabled:n,placeholder:o,autoFocus:s,value:t,onChange:this.onChange,onKeyDown:this.onKeyDown,onKeyUp:i,onBlur:this.onBlur,onPaste:this.onPaste,style:r,"aria-autocomplete":"list"})),Object(u.a)("div",{className:"autosuggest-textarea__suggestions "+(c||a.isEmpty()?"":"autosuggest-textarea__suggestions--visible")},void 0,a.map(this.renderSuggestion)))},e}(S.a);Object(d.a)(F,"propTypes",{value:O.a.string,suggestions:f.a.list,disabled:O.a.bool,placeholder:O.a.string,onSuggestionSelected:O.a.func.isRequired,onSuggestionsClearRequested:O.a.func.isRequired,onSuggestionsFetchRequested:O.a.func.isRequired,onChange:O.a.func.isRequired,onKeyUp:O.a.func,onKeyDown:O.a.func,onPaste:O.a.func.isRequired,autoFocus:O.a.bool}),Object(d.a)(F,"defaultProps",{autoFocus:!0});var U,K,z,L,W,H,B,Y,X,G,J,V=Object(M.f)({add_poll:{id:"poll_button.add_poll",defaultMessage:"Add a poll"},remove_poll:{id:"poll_button.remove_poll",defaultMessage:"Remove poll"}}),$={height:null,lineHeight:"27px"},Q=Object(M.g)(D=function(o){function e(){for(var e,t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];return e=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(e),"handleClick",function(){e.props.onClick()}),e}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.intl,a=e.active,n=e.unavailable,o=e.disabled;return n?null:Object(u.a)("div",{className:"compose-form__poll-button"},void 0,Object(u.a)(C.a,{icon:"tasks",title:t.formatMessage(a?V.remove_poll:V.add_poll),disabled:o,onClick:this.handleClick,className:"compose-form__poll-button-icon "+(a?"active":""),size:18,inverted:!0,style:$}))},e}(p.a.PureComponent))||D,Z=Object(s.connect)(function(e){return{unavailable:e.getIn(["compose","is_uploading"])||0<e.getIn(["compose","media_attachments"]).size,active:null!==e.getIn(["compose","poll"])}},function(a){return{onClick:function(){a(function(e,t){t().getIn(["compose","poll"])?a(Object(v.db)()):a(Object(v.K)())})}}})(Q),ee=Object(M.f)({upload:{id:"upload_button.label",defaultMessage:"Add media (JPEG, PNG, GIF, WebM, MP4, MOV)"}}),te={height:null,lineHeight:"27px"},ae=Object(s.connect)(function(){return function(e){return{acceptContentTypes:e.getIn(["media_attachments","accept_content_types"])}}})(U=Object(M.g)((z=K=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleChange",function(e){0<e.target.files.length&&t.props.onSelectFile(e.target.files)}),Object(d.a)(Object(c.a)(t),"handleClick",function(){t.fileElement.click()}),Object(d.a)(Object(c.a)(t),"setRef",function(e){t.fileElement=e}),t}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.intl,a=e.resetFileKey,n=e.unavailable,o=e.disabled,i=e.acceptContentTypes;return n?null:Object(u.a)("div",{className:"compose-form__upload-button"},void 0,Object(u.a)(C.a,{icon:"camera",title:t.formatMessage(ee.upload),disabled:o,onClick:this.handleClick,className:"compose-form__upload-button-icon",size:18,inverted:!0,style:te}),Object(u.a)("label",{},void 0,Object(u.a)("span",{style:{display:"none"}},void 0,t.formatMessage(ee.upload)),p.a.createElement("input",{key:a,ref:this.setRef,type:"file",multiple:!0,accept:i.toArray().join(","),onChange:this.handleChange,disabled:o,style:{display:"none"}})))},e}(S.a),Object(d.a)(K,"propTypes",{disabled:O.a.bool,unavailable:O.a.bool,onSelectFile:O.a.func.isRequired,style:O.a.object,resetFileKey:O.a.number,acceptContentTypes:f.a.listOf(O.a.string).isRequired,intl:O.a.object.isRequired}),U=z))||U)||U,ne=Object(s.connect)(function(e){return{disabled:e.getIn(["compose","is_uploading"])||3<e.getIn(["compose","media_attachments"]).size||e.getIn(["compose","media_attachments"]).some(function(e){return"video"===e.get("type")}),unavailable:null!==e.getIn(["compose","poll"]),resetFileKey:e.getIn(["compose","resetFileKey"])}},function(t){return{onSelectFile:function(e){t(Object(v.lb)(e))}}})(ae),oe=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleClick",function(e){e.preventDefault(),t.props.onClick()}),t}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.label,a=e.title,n=e.active,o=e.ariaControls;return Object(u.a)("button",{title:a,"aria-label":a,className:"text-icon-button "+(n?"active":""),"aria-expanded":n,onClick:this.handleClick,"aria-controls":o},void 0,t)},e}(p.a.PureComponent),ie=Object(M.f)({marked:{id:"compose_form.spoiler.marked",defaultMessage:"Text is hidden behind warning"},unmarked:{id:"compose_form.spoiler.unmarked",defaultMessage:"Text is not hidden"}}),se=Object(M.g)(Object(s.connect)(function(e,t){return{label:"CW",title:t.intl.formatMessage(e.getIn(["compose","spoiler"])?ie.marked:ie.unmarked),active:e.getIn(["compose","spoiler"]),ariaControls:"cw-spoiler-input"}},function(e){return{onClick:function(){e(Object(v.Q)())}}})(oe)),ce=a(15),re=a(244),le=a.n(re),ue=a(90),de=a(45),pe=a.n(de),be=a(77),ge=a.n(be),he=a(30),me=Object(M.f)({public_short:{id:"privacy.public.short",defaultMessage:"Public"},public_long:{id:"privacy.public.long",defaultMessage:"Post to public timelines"},unlisted_short:{id:"privacy.unlisted.short",defaultMessage:"Unlisted"},unlisted_long:{id:"privacy.unlisted.long",defaultMessage:"Do not show in public timelines"},private_short:{id:"privacy.private.short",defaultMessage:"Followers-only"},private_long:{id:"privacy.private.long",defaultMessage:"Post to followers only"},direct_short:{id:"privacy.direct.short",defaultMessage:"Direct"},direct_long:{id:"privacy.direct.long",defaultMessage:"Post to mentioned users only"},change_privacy:{id:"privacy.change",defaultMessage:"Adjust status privacy"}}),fe=!!ge.a.hasSupport&&{passive:!0},je=function(n){function e(){for(var i,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return i=n.call.apply(n,[this].concat(t))||this,Object(d.a)(Object(c.a)(i),"state",{mounted:!1}),Object(d.a)(Object(c.a)(i),"handleDocumentClick",function(e){i.node&&!i.node.contains(e.target)&&i.props.onClose()}),Object(d.a)(Object(c.a)(i),"handleKeyDown",function(e){var t,a=i.props.items,n=e.currentTarget.getAttribute("data-index"),o=a.findIndex(function(e){return e.value===n});switch(e.key){case"Escape":i.props.onClose();break;case"Enter":i.handleClick(e);break;case"ArrowDown":(t=i.node.childNodes[o+1])&&(t.focus(),i.props.onChange(t.getAttribute("data-index")));break;case"ArrowUp":(t=i.node.childNodes[o-1])&&(t.focus(),i.props.onChange(t.getAttribute("data-index")));break;case"Home":(t=i.node.firstChild)&&(t.focus(),i.props.onChange(t.getAttribute("data-index")));break;case"End":(t=i.node.lastChild)&&(t.focus(),i.props.onChange(t.getAttribute("data-index")))}}),Object(d.a)(Object(c.a)(i),"handleClick",function(e){var t=e.currentTarget.getAttribute("data-index");e.preventDefault(),i.props.onClose(),i.props.onChange(t)}),Object(d.a)(Object(c.a)(i),"setRef",function(e){i.node=e}),Object(d.a)(Object(c.a)(i),"setFocusRef",function(e){i.focusedItem=e}),i}Object(r.a)(e,n);var t=e.prototype;return t.componentDidMount=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,fe),this.focusedItem&&this.focusedItem.focus(),this.setState({mounted:!0})},t.componentWillUnmount=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,fe)},t.render=function(){var o=this,i=this.state.mounted,e=this.props,s=e.style,c=e.items,r=e.placement,l=e.value;return Object(u.a)(ue.a,{defaultStyle:{opacity:0,scaleX:.85,scaleY:.75},style:{opacity:pe()(1,{damping:35,stiffness:400}),scaleX:pe()(1,{damping:35,stiffness:400}),scaleY:pe()(1,{damping:35,stiffness:400})}},void 0,function(e){var t=e.opacity,a=e.scaleX,n=e.scaleY;return p.a.createElement("div",{className:"privacy-dropdown__dropdown "+r,style:Object(ce.a)({},s,{opacity:t,transform:i?"scale("+a+", "+n+")":null}),role:"listbox",ref:o.setRef},c.map(function(e){return p.a.createElement("div",{role:"option",tabIndex:"0",key:e.value,"data-index":e.value,onKeyDown:o.handleKeyDown,onClick:o.handleClick,className:A()("privacy-dropdown__option",{active:e.value===l}),"aria-selected":e.value===l,ref:e.value===l?o.setFocusRef:null},Object(u.a)("div",{className:"privacy-dropdown__option__icon"},void 0,Object(u.a)(he.a,{id:e.icon,fixedWidth:!0})),Object(u.a)("div",{className:"privacy-dropdown__option__content"},void 0,Object(u.a)("strong",{},void 0,e.text),e.meta))}))})},e}(p.a.PureComponent),Oe=Object(M.g)(L=function(o){function e(){for(var n,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return n=o.call.apply(o,[this].concat(t))||this,Object(d.a)(Object(c.a)(n),"state",{open:!1,placement:"bottom"}),Object(d.a)(Object(c.a)(n),"handleToggle",function(e){var t=e.target;if(n.props.isUserTouching())n.state.open?n.props.onModalClose():n.props.onModalOpen({actions:n.options.map(function(e){return Object(ce.a)({},e,{active:e.value===n.props.value})}),onClick:n.handleModalActionClick});else{var a=t.getBoundingClientRect().top;n.setState({placement:2*a<innerHeight?"bottom":"top"}),n.setState({open:!n.state.open})}}),Object(d.a)(Object(c.a)(n),"handleModalActionClick",function(e){e.preventDefault();var t=n.options[e.currentTarget.getAttribute("data-index")].value;n.props.onModalClose(),n.props.onChange(t)}),Object(d.a)(Object(c.a)(n),"handleKeyDown",function(e){switch(e.key){case"Escape":n.handleClose()}}),Object(d.a)(Object(c.a)(n),"handleClose",function(){n.setState({open:!1})}),Object(d.a)(Object(c.a)(n),"handleChange",function(e){n.props.onChange(e)}),n}Object(r.a)(e,o);var t=e.prototype;return t.componentWillMount=function(){var e=this.props.intl.formatMessage;this.options=[{icon:"globe",value:"public",text:e(me.public_short),meta:e(me.public_long)},{icon:"unlock",value:"unlisted",text:e(me.unlisted_short),meta:e(me.unlisted_long)},{icon:"lock",value:"private",text:e(me.private_short),meta:e(me.private_long)},{icon:"envelope",value:"direct",text:e(me.direct_short),meta:e(me.direct_long)}]},t.render=function(){var e=this.props,t=e.value,a=e.intl,n=this.state,o=n.open,i=n.placement,s=this.options.find(function(e){return e.value===t});return Object(u.a)("div",{className:A()("privacy-dropdown",i,{active:o}),onKeyDown:this.handleKeyDown},void 0,Object(u.a)("div",{className:A()("privacy-dropdown__value",{active:0===this.options.indexOf(s)})},void 0,Object(u.a)(C.a,{className:"privacy-dropdown__value-icon",icon:s.icon,title:a.formatMessage(me.change_privacy),size:18,expanded:o,active:o,inverted:!0,onClick:this.handleToggle,style:{height:null,lineHeight:"27px"}})),Object(u.a)(le.a,{show:o,placement:i,target:this},void 0,Object(u.a)(je,{items:this.options,value:t,onClose:this.handleClose,onChange:this.handleChange,placement:i})))},e}(p.a.PureComponent))||L,ve=a(57),_e=a(223),ye=Object(s.connect)(function(e){return{isModalOpen:"ACTIONS"===e.get("modal").modalType,value:e.getIn(["compose","privacy"])}},function(t){return{onChange:function(e){t(Object(v.R)(e))},isUserTouching:_e.c,onModalOpen:function(e){return t(Object(ve.d)("ACTIONS",e))},onModalClose:function(){return t(Object(ve.c)())}}})(Oe),Ce=Object(M.f)({marked:{id:"compose_form.sensitive.marked",defaultMessage:"Media is marked as sensitive"},unmarked:{id:"compose_form.sensitive.unmarked",defaultMessage:"Media is not marked as sensitive"}}),ke=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props,o=e.visible,i=e.active,s=e.disabled,c=e.onClick,r=e.intl;return Object(u.a)(ue.a,{defaultStyle:{scale:.87},style:{scale:pe()(o?1:.87,{stiffness:200,damping:3})}},void 0,function(e){var t=e.scale,a=i?"eye-slash":"eye",n=A()("compose-form__sensitive-button",{"compose-form__sensitive-button--visible":o});return Object(u.a)("div",{className:n,style:{transform:"scale("+t+")"}},void 0,Object(u.a)(C.a,{className:"compose-form__sensitive-button__icon",title:r.formatMessage(i?Ce.marked:Ce.unmarked),icon:a,onClick:c,size:18,active:i,disabled:s,style:{lineHeight:null,height:null},inverted:!0}))})},t}(p.a.PureComponent),Me=Object(s.connect)(function(e){return{visible:0<e.getIn(["compose","media_attachments"]).size,active:e.getIn(["compose","sensitive"]),disabled:e.getIn(["compose","spoiler"])}},function(e){return{onClick:function(){e(Object(v.O)())}}})(Object(M.g)(ke)),Se=a(651),we=a(70),xe=a(61),Ne=a(4),Ie=a(237),Te=["+1","grinning","kissing_heart","heart_eyes","laughing","stuck_out_tongue_winking_eye","sweat_smile","joy","yum","disappointed","thinking_face","weary","sob","sunglasses","heart","ok_hand"],De=Object(xe.a)([function(e){return e.getIn(["settings","frequentlyUsedEmojis"],Object(Ne.Map)())}],function(a){var t=a.keySeq().sort(function(e,t){return a.get(e)-a.get(t)}).reverse().slice(0,16).toArray();if(t.length<Te.length){var e=Te.filter(function(e){return!t.includes(e)});t=t.concat(e.slice(0,Te.length-t.length))}return t}),Pe=Object(xe.a)([function(e){return e.get("custom_emojis")}],function(e){return e.filter(function(e){return e.get("visible_in_picker")}).sort(function(e,t){var a=e.get("shortcode").toLowerCase(),n=t.get("shortcode").toLowerCase();return a<n?-1:n<a?1:0})}),Re=Object(s.connect)(function(e){return{custom_emojis:Pe(e),skinTone:e.getIn(["settings","skinTone"]),frequentlyUsedEmojis:De(e)}},function(t,e){var a=e.onPickEmoji;return{onSkinTone:function(e){t(Object(we.c)(["skinTone"],e))},onPickEmoji:function(e){t(Object(Ie.b)(e)),a&&a(e)}}})(Se.a),Ee=Object(M.f)({option_placeholder:{id:"compose_form.poll.option_placeholder",defaultMessage:"Choice {number}"},add_option:{id:"compose_form.poll.add_option",defaultMessage:"Add a choice"},remove_option:{id:"compose_form.poll.remove_option",defaultMessage:"Remove this choice"},poll_duration:{id:"compose_form.poll.duration",defaultMessage:"Poll duration"},minutes:{id:"intervals.full.minutes",defaultMessage:"{number, plural, one {# minute} other {# minutes}}"},hours:{id:"intervals.full.hours",defaultMessage:"{number, plural, one {# hour} other {# hours}}"},days:{id:"intervals.full.days",defaultMessage:"{number, plural, one {# day} other {# days}}"}}),qe=Object(M.g)(W=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleOptionTitleChange",function(e){t.props.onChange(t.props.index,e.target.value)}),Object(d.a)(Object(c.a)(t),"handleOptionRemove",function(){t.props.onRemove(t.props.index)}),Object(d.a)(Object(c.a)(t),"handleToggleMultiple",function(e){t.props.onToggleMultiple(),e.preventDefault(),e.stopPropagation()}),t}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.isPollMultiple,a=e.title,n=e.index,o=e.intl;return Object(u.a)("li",{},void 0,Object(u.a)("label",{className:"poll__text editable"},void 0,Object(u.a)("span",{className:A()("poll__input",{checkbox:t}),onClick:this.handleToggleMultiple,role:"button",tabIndex:"0"}),Object(u.a)("input",{type:"text",placeholder:o.formatMessage(Ee.option_placeholder,{number:n+1}),maxLength:25,value:a,onChange:this.handleOptionTitleChange})),Object(u.a)("div",{className:"poll__cancel"},void 0,Object(u.a)(C.a,{disabled:n<=1,title:o.formatMessage(Ee.remove_option),icon:"times",onClick:this.handleOptionRemove})))},e}(p.a.PureComponent))||W,Ae=Object(M.g)((Y=B=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"handleAddOption",function(){t.props.onAddOption("")}),Object(d.a)(Object(c.a)(t),"handleSelectDuration",function(e){t.props.onChangeSettings(e.target.value,t.props.isMultiple)}),Object(d.a)(Object(c.a)(t),"handleToggleMultiple",function(){t.props.onChangeSettings(t.props.expiresIn,!t.props.isMultiple)}),t}return Object(r.a)(e,o),e.prototype.render=function(){var a=this,e=this.props,t=e.options,n=e.expiresIn,o=e.isMultiple,i=e.onChangeOption,s=e.onRemoveOption,c=e.intl;return t?Object(u.a)("div",{className:"compose-form__poll-wrapper"},void 0,Object(u.a)("ul",{},void 0,t.map(function(e,t){return Object(u.a)(qe,{title:e,index:t,onChange:i,onRemove:s,isPollMultiple:o,onToggleMultiple:a.handleToggleMultiple},t)})),Object(u.a)("div",{className:"poll__footer"},void 0,t.size<4&&Object(u.a)("button",{className:"button button-secondary",onClick:this.handleAddOption},void 0,Object(u.a)(he.a,{id:"plus"})," ",p.a.createElement(M.b,Ee.add_option)),Object(u.a)("select",{value:n,onChange:this.handleSelectDuration},void 0,Object(u.a)("option",{value:300},void 0,c.formatMessage(Ee.minutes,{number:5})),Object(u.a)("option",{value:1800},void 0,c.formatMessage(Ee.minutes,{number:30})),Object(u.a)("option",{value:3600},void 0,c.formatMessage(Ee.hours,{number:1})),Object(u.a)("option",{value:21600},void 0,c.formatMessage(Ee.hours,{number:6})),Object(u.a)("option",{value:86400},void 0,c.formatMessage(Ee.days,{number:1})),Object(u.a)("option",{value:259200},void 0,c.formatMessage(Ee.days,{number:3})),Object(u.a)("option",{value:604800},void 0,c.formatMessage(Ee.days,{number:7}))))):null},e}(S.a),Object(d.a)(B,"propTypes",{options:f.a.list,expiresIn:O.a.number,isMultiple:O.a.bool,onChangeOption:O.a.func.isRequired,onAddOption:O.a.func.isRequired,onRemoveOption:O.a.func.isRequired,onChangeSettings:O.a.func.isRequired,intl:O.a.object.isRequired}),H=Y))||H,Fe=Object(s.connect)(function(e){return{options:e.getIn(["compose","poll","options"]),expiresIn:e.getIn(["compose","poll","expires_in"]),isMultiple:e.getIn(["compose","poll","multiple"])}},function(a){return{onAddOption:function(e){a(Object(v.L)(e))},onRemoveOption:function(e){a(Object(v.eb)(e))},onChangeOption:function(e,t){a(Object(v.T)(e,t))},onChangeSettings:function(e,t){a(Object(v.U)(e,t))}}})(Ae),Ue=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.active,a=e.progress;return t?Object(u.a)("div",{className:"upload-progress"},void 0,Object(u.a)("div",{className:"upload-progress__icon"},void 0,Object(u.a)(he.a,{id:"upload"})),Object(u.a)("div",{className:"upload-progress__message"},void 0,Object(u.a)(M.b,{id:"upload_progress.label",defaultMessage:"Uploading..."}),Object(u.a)("div",{className:"upload-progress__backdrop"},void 0,Object(u.a)(ue.a,{defaultStyle:{width:0},style:{width:pe()(a)}},void 0,function(e){var t=e.width;return Object(u.a)("div",{className:"upload-progress__tracker",style:{width:t+"%"}})})))):null},t}(p.a.PureComponent),Ke=Object(s.connect)(function(e){return{active:e.getIn(["compose","is_uploading"]),progress:e.getIn(["compose","progress"])}})(Ue),ze=Object(M.f)({description:{id:"upload_form.description",defaultMessage:"Describe for the visually impaired"}}),Le=Object(M.g)((J=G=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(c.a)(t),"state",{hovered:!1,focused:!1,dirtyDescription:null}),Object(d.a)(Object(c.a)(t),"handleKeyDown",function(e){13===e.keyCode&&(e.ctrlKey||e.metaKey)&&t.handleSubmit()}),Object(d.a)(Object(c.a)(t),"handleSubmit",function(){t.handleInputBlur(),t.props.onSubmit(t.context.router.history)}),Object(d.a)(Object(c.a)(t),"handleUndoClick",function(e){e.stopPropagation(),t.props.onUndo(t.props.media.get("id"))}),Object(d.a)(Object(c.a)(t),"handleFocalPointClick",function(e){e.stopPropagation(),t.props.onOpenFocalPoint(t.props.media.get("id"))}),Object(d.a)(Object(c.a)(t),"handleInputChange",function(e){t.setState({dirtyDescription:e.target.value})}),Object(d.a)(Object(c.a)(t),"handleMouseEnter",function(){t.setState({hovered:!0})}),Object(d.a)(Object(c.a)(t),"handleMouseLeave",function(){t.setState({hovered:!1})}),Object(d.a)(Object(c.a)(t),"handleInputFocus",function(){t.setState({focused:!0})}),Object(d.a)(Object(c.a)(t),"handleClick",function(){t.setState({focused:!0})}),Object(d.a)(Object(c.a)(t),"handleInputBlur",function(){var e=t.state.dirtyDescription;t.setState({focused:!1,dirtyDescription:null}),null!==e&&t.props.onDescriptionChange(t.props.media.get("id"),e)}),t}return Object(r.a)(e,o),e.prototype.render=function(){var a=this,e=this.props,n=e.intl,o=e.media,i=this.state.hovered||this.state.focused,s=this.state.dirtyDescription||""!==this.state.dirtyDescription&&o.get("description")||"",t=o.getIn(["meta","focus","x"]),c=o.getIn(["meta","focus","y"]),r=100*(t/2+.5),l=100*(c/-2+.5);return Object(u.a)("div",{className:"compose-form__upload",tabIndex:"0",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onClick:this.handleClick,role:"button"},void 0,Object(u.a)(ue.a,{defaultStyle:{scale:.8},style:{scale:pe()(1,{stiffness:180,damping:12})}},void 0,function(e){var t=e.scale;return Object(u.a)("div",{className:"compose-form__upload-thumbnail",style:{transform:"scale("+t+")",backgroundImage:"url("+o.get("preview_url")+")",backgroundPosition:r+"% "+l+"%"}},void 0,Object(u.a)("div",{className:A()("compose-form__upload__actions",{active:i})},void 0,Object(u.a)("button",{className:"icon-button",onClick:a.handleUndoClick},void 0,Object(u.a)(he.a,{id:"times"})," ",Object(u.a)(M.b,{id:"upload_form.undo",defaultMessage:"Delete"})),"image"===o.get("type")&&Object(u.a)("button",{className:"icon-button",onClick:a.handleFocalPointClick},void 0,Object(u.a)(he.a,{id:"crosshairs"})," ",Object(u.a)(M.b,{id:"upload_form.focus",defaultMessage:"Crop"}))),Object(u.a)("div",{className:A()("compose-form__upload-description",{active:i})},void 0,Object(u.a)("label",{},void 0,Object(u.a)("span",{style:{display:"none"}},void 0,n.formatMessage(ze.description)),Object(u.a)("textarea",{placeholder:n.formatMessage(ze.description),value:s,maxLength:420,onFocus:a.handleInputFocus,onChange:a.handleInputChange,onBlur:a.handleInputBlur,onKeyDown:a.handleKeyDown}))))}))},e}(S.a),Object(d.a)(G,"contextTypes",{router:O.a.object}),Object(d.a)(G,"propTypes",{media:f.a.map.isRequired,intl:O.a.object.isRequired,onUndo:O.a.func.isRequired,onDescriptionChange:O.a.func.isRequired,onOpenFocalPoint:O.a.func.isRequired,onSubmit:O.a.func.isRequired}),X=J))||X,We=Object(s.connect)(function(e,t){var a=t.id;return{media:e.getIn(["compose","media_attachments"]).find(function(e){return e.get("id")===a})}},function(a){return{onUndo:function(e){a(Object(v.jb)(e))},onDescriptionChange:function(e,t){a(Object(v.V)(e,{description:t}))},onOpenFocalPoint:function(e){a(Object(ve.d)("FOCAL_POINT",{id:e}))},onSubmit:function(e){a(Object(v.ib)(e))}}})(Le),He=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props.mediaIds;return Object(u.a)("div",{className:"compose-form__upload-wrapper"},void 0,Object(u.a)(Ke,{}),Object(u.a)("div",{className:"compose-form__uploads-wrapper"},void 0,e.map(function(e){return Object(u.a)(We,{id:e},e)})))},t}(S.a);Object(d.a)(He,"propTypes",{mediaIds:f.a.list.isRequired});var Be,Ye,Xe,Ge=Object(s.connect)(function(e){return{mediaIds:e.getIn(["compose","media_attachments"]).map(function(e){return e.get("id")})}})(He),Je=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var o=this.props.message;return Object(u.a)(ue.a,{defaultStyle:{opacity:0,scaleX:.85,scaleY:.75},style:{opacity:pe()(1,{damping:35,stiffness:400}),scaleX:pe()(1,{damping:35,stiffness:400}),scaleY:pe()(1,{damping:35,stiffness:400})}},void 0,function(e){var t=e.opacity,a=e.scaleX,n=e.scaleY;return Object(u.a)("div",{className:"compose-form__warning",style:{opacity:t,transform:"scale("+a+", "+n+")"}},void 0,o)})},t}(p.a.PureComponent),Ve=a(24),$e=/(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i,Qe=Object(s.connect)(function(e){return{needsLockWarning:"private"===e.getIn(["compose","privacy"])&&!e.getIn(["accounts",Ve.k,"locked"]),hashtagWarning:"public"!==e.getIn(["compose","privacy"])&&$e.test(e.getIn(["compose","text"])),directMessageWarning:"direct"===e.getIn(["compose","privacy"])}})(function(e){var t=e.needsLockWarning,a=e.hashtagWarning,n=e.directMessageWarning;if(t)return Object(u.a)(Je,{message:Object(u.a)(M.b,{id:"compose_form.lock_disclaimer",defaultMessage:"Your account is not {locked}. Anyone can follow you to view your follower-only posts.",values:{locked:Object(u.a)("a",{href:"/user-settings"},void 0,Object(u.a)(M.b,{id:"compose_form.lock_disclaimer.lock",defaultMessage:"locked"}))}})});if(a)return Object(u.a)(Je,{message:Object(u.a)(M.b,{id:"compose_form.hashtag_warning",defaultMessage:"This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag."})});if(n){var o=Object(u.a)("span",{},void 0,Object(u.a)(M.b,{id:"compose_form.direct_message_warning",defaultMessage:"This toot will only be sent to all the mentioned users."})," ",Object(u.a)("a",{href:"/terms",target:"_blank"},void 0,Object(u.a)(M.b,{id:"compose_form.direct_message_warning_learn_more",defaultMessage:"Learn more"})));return Object(u.a)(Je,{message:o})}return null}),Ze=Object(M.f)({placeholder:{id:"compose_form.placeholder",defaultMessage:"What is on your mind?"},spoiler_placeholder:{id:"compose_form.spoiler_placeholder",defaultMessage:"Write your warning here"},publish:{id:"compose_form.publish",defaultMessage:"Toot"},publishLoud:{id:"compose_form.publish_loud",defaultMessage:"{publish}!"}}),et=Object(M.g)((Xe=Ye=function(n){function e(){for(var s,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return s=n.call.apply(n,[this].concat(t))||this,Object(d.a)(Object(c.a)(s),"handleChange",function(e){s.props.onChange(e.target.value)}),Object(d.a)(Object(c.a)(s),"handleKeyDown",function(e){13===e.keyCode&&(e.ctrlKey||e.metaKey)&&s.handleSubmit()}),Object(d.a)(Object(c.a)(s),"handleSubmit",function(){s.props.text!==s.autosuggestTextarea.textarea.value&&s.props.onChange(s.autosuggestTextarea.textarea.value);var e=s.props,t=e.isSubmitting,a=e.isChangingUpload,n=e.isUploading,o=e.anyMedia,i=[s.props.spoilerText,s.props.text].join("");t||n||a||Object(b.length)(i)>Ve.j||0!==i.length&&0===i.trim().length&&!o||s.props.onSubmit(s.context.router?s.context.router.history:null)}),Object(d.a)(Object(c.a)(s),"onSuggestionsClearRequested",function(){s.props.onClearSuggestions()}),Object(d.a)(Object(c.a)(s),"onSuggestionsFetchRequested",function(e){s.props.onFetchSuggestions(e)}),Object(d.a)(Object(c.a)(s),"onSuggestionSelected",function(e,t,a){s.props.onSuggestionSelected(e,t,a)}),Object(d.a)(Object(c.a)(s),"handleChangeSpoilerText",function(e){s.props.onChangeSpoilerText(e.target.value)}),Object(d.a)(Object(c.a)(s),"setAutosuggestTextarea",function(e){s.autosuggestTextarea=e}),Object(d.a)(Object(c.a)(s),"setSpoilerText",function(e){s.spoilerText=e}),Object(d.a)(Object(c.a)(s),"handleEmojiPick",function(e){var t=s.props.text,a=s.autosuggestTextarea.textarea.selectionStart,n=e.custom&&0<a&&!"><
\u2028\u2029\t\n\v\f\r".includes(t[a-1]);s.props.onPickEmoji(a,e,n)}),s}Object(r.a)(e,n);var t=e.prototype;return t.componentDidUpdate=function(e){var t,a;this.props.focusDate!==e.focusDate?(this.props.preselectDate!==e.preselectDate?(t=this.props.text.length,a=this.props.text.search(/\s/)+1):"number"==typeof this.props.caretPosition?(a=this.props.caretPosition,t=this.props.caretPosition):a=t=this.props.text.length,this.autosuggestTextarea.textarea.setSelectionRange(a,t),this.autosuggestTextarea.textarea.focus()):e.isSubmitting&&!this.props.isSubmitting?this.autosuggestTextarea.textarea.focus():this.props.spoiler!==e.spoiler&&(this.props.spoiler?this.spoilerText.focus():this.autosuggestTextarea.textarea.focus())},t.render=function(){var e=this.props,t=e.intl,a=e.onPaste,n=e.showSearch,o=e.anyMedia,i=this.props.isSubmitting,s=[this.props.spoilerText,this.props.text].join(""),c=i||this.props.isUploading||this.props.isChangingUpload||Object(b.length)(s)>Ve.j||0!==s.length&&0===s.trim().length&&!o,r="";return r="private"===this.props.privacy||"direct"===this.props.privacy?Object(u.a)("span",{className:"compose-form__publish-private"},void 0,Object(u.a)(he.a,{id:"lock"})," ",t.formatMessage(Ze.publish)):"unlisted"!==this.props.privacy?t.formatMessage(Ze.publishLoud,{publish:t.formatMessage(Ze.publish)}):t.formatMessage(Ze.publish),Object(u.a)("div",{className:"compose-form"},void 0,Object(u.a)(Qe,{}),Object(u.a)(I,{}),Object(u.a)("div",{className:"spoiler-input "+(this.props.spoiler?"spoiler-input--visible":"")},void 0,Object(u.a)("label",{},void 0,Object(u.a)("span",{style:{display:"none"}},void 0,t.formatMessage(Ze.spoiler_placeholder)),p.a.createElement("input",{placeholder:t.formatMessage(Ze.spoiler_placeholder),value:this.props.spoilerText,onChange:this.handleChangeSpoilerText,onKeyDown:this.handleKeyDown,tabIndex:this.props.spoiler?0:-1,type:"text",className:"spoiler-input__input",id:"cw-spoiler-input",ref:this.setSpoilerText}))),Object(u.a)("div",{className:"compose-form__autosuggest-wrapper"},void 0,p.a.createElement(F,{ref:this.setAutosuggestTextarea,placeholder:t.formatMessage(Ze.placeholder),disabled:i,value:this.props.text,onChange:this.handleChange,suggestions:this.props.suggestions,onKeyDown:this.handleKeyDown,onSuggestionsFetchRequested:this.onSuggestionsFetchRequested,onSuggestionsClearRequested:this.onSuggestionsClearRequested,onSuggestionSelected:this.onSuggestionSelected,onPaste:a,autoFocus:!n&&!Object(_e.b)(window.innerWidth)}),Object(u.a)(Re,{onPickEmoji:this.handleEmojiPick})),Object(u.a)("div",{className:"compose-form__modifiers"},void 0,Object(u.a)(Ge,{}),Object(u.a)(Fe,{})),Object(u.a)("div",{className:"compose-form__buttons-wrapper"},void 0,Object(u.a)("div",{className:"compose-form__buttons"},void 0,Object(u.a)(ne,{}),Object(u.a)(Z,{}),Object(u.a)(ye,{}),Object(u.a)(Me,{}),Object(u.a)(se,{})),Object(u.a)("div",{className:"character-counter__wrapper"},void 0,Object(u.a)(g,{max:Ve.j,text:s}))),Object(u.a)("div",{className:"compose-form__publish"},void 0,Object(u.a)("div",{className:"compose-form__publish-button-wrapper"},void 0,Object(u.a)(h.a,{text:r,onClick:this.handleSubmit,disabled:c,block:!0}))))},e}(S.a),Object(d.a)(Ye,"contextTypes",{router:O.a.object}),Object(d.a)(Ye,"propTypes",{intl:O.a.object.isRequired,text:O.a.string.isRequired,suggestions:f.a.list,spoiler:O.a.bool,privacy:O.a.string,spoilerText:O.a.string,focusDate:O.a.instanceOf(Date),caretPosition:O.a.number,preselectDate:O.a.instanceOf(Date),isSubmitting:O.a.bool,isChangingUpload:O.a.bool,isUploading:O.a.bool,onChange:O.a.func.isRequired,onSubmit:O.a.func.isRequired,onClearSuggestions:O.a.func.isRequired,onFetchSuggestions:O.a.func.isRequired,onSuggestionSelected:O.a.func.isRequired,onChangeSpoilerText:O.a.func.isRequired,onPaste:O.a.func.isRequired,onPickEmoji:O.a.func.isRequired,showSearch:O.a.bool,anyMedia:O.a.bool}),Object(d.a)(Ye,"defaultProps",{showSearch:!1}),Be=Xe))||Be;t.a=Object(s.connect)(function(e){return{text:e.getIn(["compose","text"]),suggestions:e.getIn(["compose","suggestions"]),spoiler:e.getIn(["compose","spoiler"]),spoilerText:e.getIn(["compose","spoiler_text"]),privacy:e.getIn(["compose","privacy"]),focusDate:e.getIn(["compose","focusDate"]),caretPosition:e.getIn(["compose","caretPosition"]),preselectDate:e.getIn(["compose","preselectDate"]),is_submitting:e.getIn(["compose","is_submitting"]),isChangingUpload:e.getIn(["compose","is_changing_upload"]),isUploading:e.getIn(["compose","is_uploading"]),showSearch:e.getIn(["search","submitted"])&&!e.getIn(["search","hidden"]),anyMedia:0<e.getIn(["compose","media_attachments"]).size}},function(n){return{onChange:function(e){n(Object(v.N)(e))},onSubmit:function(e){n(Object(v.ib)(e))},onClearSuggestions:function(){n(Object(v.W)())},onFetchSuggestions:function(e){n(Object(v.Y)(e))},onSuggestionSelected:function(e,t,a){n(Object(v.hb)(e,t,a))},onChangeSpoilerText:function(e){n(Object(v.P)(e))},onPaste:function(e){n(Object(v.lb)(e))},onPickEmoji:function(e,t,a){n(Object(v.ab)(e,t,a))}}})(et)},693:function(e,t,a){"use strict";a.r(t);var n,o,i,s,c,l=a(0),r=a(2),u=a(6),d=a(1),p=a(3),b=a.n(p),g=a(689),h=a(21),m=a(992),f=a(24),j=Object(h.connect)(function(e){return{account:e.getIn(["accounts",f.k])}})(m.a),O=a(22),v=a(358),_=a(7),y=a(233),C=a(15),k=a(244),M=a.n(k),S=a(90),w=a(45),x=a.n(w),N=a(30),I=Object(_.f)({placeholder:{id:"search.placeholder",defaultMessage:"Search"}}),T=function(e){function t(){return e.apply(this,arguments)||this}return Object(u.a)(t,e),t.prototype.render=function(){var e=this.props.style,o=f.n?Object(l.a)(_.b,{id:"search_popout.tips.full_text",defaultMessage:"Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags."}):Object(l.a)(_.b,{id:"search_popout.tips.text",defaultMessage:"Simple text returns matching display names, usernames and hashtags"});return Object(l.a)("div",{style:Object(C.a)({},e,{position:"absolute",width:315})},void 0,Object(l.a)(S.a,{defaultStyle:{opacity:0,scaleX:.85,scaleY:.75},style:{opacity:x()(1,{damping:35,stiffness:400}),scaleX:x()(1,{damping:35,stiffness:400}),scaleY:x()(1,{damping:35,stiffness:400})}},void 0,function(e){var t=e.opacity,a=e.scaleX,n=e.scaleY;return Object(l.a)("div",{className:"search-popout",style:{opacity:t,transform:"scale("+a+", "+n+")"}},void 0,Object(l.a)("h4",{},void 0,Object(l.a)(_.b,{id:"search_popout.search_format",defaultMessage:"Advanced search format"})),Object(l.a)("ul",{},void 0,Object(l.a)("li",{},void 0,Object(l.a)("em",{},void 0,"#example")," ",Object(l.a)(_.b,{id:"search_popout.tips.hashtag",defaultMessage:"hashtag"})),Object(l.a)("li",{},void 0,Object(l.a)("em",{},void 0,"@username@domain")," ",Object(l.a)(_.b,{id:"search_popout.tips.user",defaultMessage:"user"})),Object(l.a)("li",{},void 0,Object(l.a)("em",{},void 0,"URL")," ",Object(l.a)(_.b,{id:"search_popout.tips.user",defaultMessage:"user"})),Object(l.a)("li",{},void 0,Object(l.a)("em",{},void 0,"URL")," ",Object(l.a)(_.b,{id:"search_popout.tips.status",defaultMessage:"status"}))),o)}))},t}(b.a.PureComponent),D=Object(_.g)(n=function(o){function e(){for(var t,e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return t=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(r.a)(t),"state",{expanded:!1}),Object(d.a)(Object(r.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(d.a)(Object(r.a)(t),"handleClear",function(e){e.preventDefault(),(0<t.props.value.length||t.props.submitted)&&t.props.onClear()}),Object(d.a)(Object(r.a)(t),"handleKeyUp",function(e){"Enter"===e.key?(e.preventDefault(),t.props.onSubmit()):"Escape"===e.key&&document.querySelector(".ui").parentElement.focus()}),Object(d.a)(Object(r.a)(t),"handleFocus",function(){t.setState({expanded:!0}),t.props.onShow()}),Object(d.a)(Object(r.a)(t),"handleBlur",function(){t.setState({expanded:!1})}),t}return Object(u.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.intl,a=e.value,n=e.submitted,o=this.state.expanded,i=0<a.length||n;return Object(l.a)("div",{className:"search"},void 0,Object(l.a)("label",{},void 0,Object(l.a)("span",{style:{display:"none"}},void 0,t.formatMessage(I.placeholder)),Object(l.a)("input",{className:"search__input",type:"text",placeholder:t.formatMessage(I.placeholder),value:a,onChange:this.handleChange,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur})),Object(l.a)("div",{role:"button",tabIndex:"0",className:"search__icon",onClick:this.handleClear},void 0,Object(l.a)(N.a,{id:"search",className:i?"":"active"}),Object(l.a)(N.a,{id:"times-circle",className:i?"active":"","aria-label":t.formatMessage(I.placeholder)})),Object(l.a)(M.a,{show:o&&!i,placement:"bottom",target:this},void 0,Object(l.a)(T,{})))},e}(b.a.PureComponent))||n,P=Object(h.connect)(function(e){return{value:e.getIn(["search","value"]),submitted:e.getIn(["search","submitted"])}},function(t){return{onChange:function(e){t(Object(y.e)(e))},onClear:function(){t(Object(y.f)())},onSubmit:function(){t(Object(y.h)())},onShow:function(){t(Object(y.g)())}}})(D),R=a(5),E=a.n(R),q=a(26),A=a.n(q),F=a(895),U=a(903),K=a(25),z=a(966),L=a(379),W=a(984),H=function(e){var t=e.hashtag;return Object(l.a)("div",{className:"trends__item"},void 0,Object(l.a)("div",{className:"trends__item__name"},void 0,Object(l.a)(L.a,{href:t.get("url"),to:"/timelines/tag/"+t.get("name")},void 0,"#",Object(l.a)("span",{},void 0,t.get("name"))),Object(l.a)(_.b,{id:"trends.count_by_accounts",defaultMessage:"{count} {rawCount, plural, one {person} other {people}} talking",values:{rawCount:t.getIn(["history",0,"accounts"]),count:Object(l.a)("strong",{},void 0,Object(W.a)(t.getIn(["history",0,"accounts"])))}})),Object(l.a)("div",{className:"trends__item__current"},void 0,Object(W.a)(t.getIn(["history",0,"uses"]))),Object(l.a)("div",{className:"trends__item__sparkline"},void 0,Object(l.a)(z.Sparklines,{width:50,height:28,data:t.get("history")&&t.get("history").reverse().map(function(e){return e.get("uses")}).toArray()},void 0,Object(l.a)(z.SparklinesCurve,{style:{fill:"none"}}))))},B=Object(_.f)({dismissSuggestion:{id:"suggestions.dismiss",defaultMessage:"Dismiss suggestion"}}),Y=Object(_.g)((s=i=function(e){function t(){return e.apply(this,arguments)||this}Object(u.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){this.props.fetchSuggestions()},a.render=function(){var e,t,a,n=this.props,o=n.intl,i=n.results,s=n.suggestions,c=n.dismissSuggestion;if(i.isEmpty()&&!s.isEmpty())return Object(l.a)("div",{className:"search-results"},void 0,Object(l.a)("div",{className:"trends"},void 0,Object(l.a)("div",{className:"trends__header"},void 0,Object(l.a)(N.a,{id:"user-plus",fixedWidth:!0}),Object(l.a)(_.b,{id:"suggestions.header",defaultMessage:"You might be interested in…"})),s&&s.map(function(e){return Object(l.a)(F.a,{id:e,actionIcon:"times",actionTitle:o.formatMessage(B.dismissSuggestion),onActionClick:c},e)})));var r=0;return i.get("accounts")&&0<i.get("accounts").size&&(r+=i.get("accounts").size,e=Object(l.a)("div",{className:"search-results__section"},void 0,Object(l.a)("h5",{},void 0,Object(l.a)(N.a,{id:"users",fixedWidth:!0}),Object(l.a)(_.b,{id:"search_results.accounts",defaultMessage:"People"})),i.get("accounts").map(function(e){return Object(l.a)(F.a,{id:e},e)}))),i.get("statuses")&&0<i.get("statuses").size&&(r+=i.get("statuses").size,t=Object(l.a)("div",{className:"search-results__section"},void 0,Object(l.a)("h5",{},void 0,Object(l.a)(N.a,{id:"quote-right",fixedWidth:!0}),Object(l.a)(_.b,{id:"search_results.statuses",defaultMessage:"Toots"})),i.get("statuses").map(function(e){return Object(l.a)(U.a,{id:e},e)}))),i.get("hashtags")&&0<i.get("hashtags").size&&(r+=i.get("hashtags").size,a=Object(l.a)("div",{className:"search-results__section"},void 0,Object(l.a)("h5",{},void 0,Object(l.a)(N.a,{id:"hashtag",fixedWidth:!0}),Object(l.a)(_.b,{id:"search_results.hashtags",defaultMessage:"Hashtags"})),i.get("hashtags").map(function(e){return Object(l.a)(H,{hashtag:e},e.get("name"))}))),Object(l.a)("div",{className:"search-results"},void 0,Object(l.a)("div",{className:"search-results__header"},void 0,Object(l.a)(N.a,{id:"search",fixedWidth:!0}),Object(l.a)(_.b,{id:"search_results.total",defaultMessage:"{count, number} {count, plural, one {result} other {results}}",values:{count:r}})),e,t,a)},t}(K.a),Object(d.a)(i,"propTypes",{results:A.a.map.isRequired,suggestions:A.a.list.isRequired,fetchSuggestions:E.a.func.isRequired,dismissSuggestion:E.a.func.isRequired,intl:E.a.object.isRequired}),o=s))||o,X=a(234),G=Object(h.connect)(function(e){return{results:e.getIn(["search","results"]),suggestions:e.getIn(["suggestions","items"])}},function(t){return{fetchSuggestions:function(){return t(Object(X.f)())},dismissSuggestion:function(e){return t(Object(X.e)(e.get("id")))}}})(Y);a.d(t,"default",function(){return V});var J=Object(_.f)({start:{id:"getting_started.heading",defaultMessage:"Getting started"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},community:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},logout:{id:"navigation_bar.logout",defaultMessage:"Logout"},compose:{id:"navigation_bar.compose",defaultMessage:"Compose new toot"}}),V=Object(h.connect)(function(e,t){return{columns:e.getIn(["settings","columns"]),showSearch:t.multiColumn?e.getIn(["search","submitted"])&&!e.getIn(["search","hidden"]):t.isSearchPage}})(c=Object(_.g)(c=function(o){function e(){for(var e,t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];return e=o.call.apply(o,[this].concat(a))||this,Object(d.a)(Object(r.a)(e),"onFocus",function(){e.props.dispatch(Object(O.S)(!0))}),Object(d.a)(Object(r.a)(e),"onBlur",function(){e.props.dispatch(Object(O.S)(!1))}),e}Object(u.a)(e,o);var t=e.prototype;return t.componentDidMount=function(){this.props.isSearchPage||this.props.dispatch(Object(O.cb)())},t.componentWillUnmount=function(){this.props.isSearchPage||this.props.dispatch(Object(O.kb)())},t.render=function(){var e=this.props,t=e.multiColumn,a=e.showSearch,n=e.isSearchPage,o=e.intl,i="";if(t){var s=this.props.columns;i=Object(l.a)("nav",{className:"drawer__header"},void 0,Object(l.a)(v.a,{to:"/getting-started",className:"drawer__tab",title:o.formatMessage(J.start),"aria-label":o.formatMessage(J.start)},void 0,Object(l.a)(N.a,{id:"bars",fixedWidth:!0})),!s.some(function(e){return"HOME"===e.get("id")})&&Object(l.a)(v.a,{to:"/timelines/home",className:"drawer__tab",title:o.formatMessage(J.home_timeline),"aria-label":o.formatMessage(J.home_timeline)},void 0,Object(l.a)(N.a,{id:"home",fixedWidth:!0})),!s.some(function(e){return"NOTIFICATIONS"===e.get("id")})&&Object(l.a)(v.a,{to:"/notifications",className:"drawer__tab",title:o.formatMessage(J.notifications),"aria-label":o.formatMessage(J.notifications)},void 0,Object(l.a)(N.a,{id:"bell",fixedWidth:!0})),!s.some(function(e){return"COMMUNITY"===e.get("id")})&&Object(l.a)(v.a,{to:"/timelines/public/local",className:"drawer__tab",title:o.formatMessage(J.community),"aria-label":o.formatMessage(J.community)},void 0,Object(l.a)(N.a,{id:"users",fixedWidth:!0})),!s.some(function(e){return"PUBLIC"===e.get("id")})&&Object(l.a)(v.a,{to:"/timelines/public",className:"drawer__tab",title:o.formatMessage(J.public),"aria-label":o.formatMessage(J.public)},void 0,Object(l.a)(N.a,{id:"globe",fixedWidth:!0})),Object(l.a)("a",{href:"/user-settings",className:"drawer__tab",title:o.formatMessage(J.preferences),"aria-label":o.formatMessage(J.preferences)},void 0,Object(l.a)(N.a,{id:"cog",fixedWidth:!0})),Object(l.a)("a",{href:"/auth/sign_out",className:"drawer__tab","data-method":"delete",title:o.formatMessage(J.logout),"aria-label":o.formatMessage(J.logout)},void 0,Object(l.a)(N.a,{id:"sign-out",fixedWidth:!0})))}return Object(l.a)("div",{className:"drawer",role:"region","aria-label":o.formatMessage(J.compose)},void 0,i,(t||n)&&Object(l.a)(P,{}),Object(l.a)("div",{className:"drawer__pager"},void 0,!n&&Object(l.a)("div",{className:"drawer__inner",onFocus:this.onFocus},void 0,Object(l.a)(j,{onClose:this.onBlur}),Object(l.a)(g.a,{})),Object(l.a)(S.a,{defaultStyle:{x:n?0:-100},style:{x:x()(a||n?0:-100,{stiffness:210,damping:20})}},void 0,function(e){var t=e.x;return Object(l.a)("div",{className:"drawer__inner darker",style:{transform:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,Object(l.a)(G,{}))})))},e}(b.a.PureComponent))||c)||c}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{391:function(e,t,o){"use strict";(function(e){o.d(t,"a",function(){return u});var n=o(0),a=o(7),s=o(3),i=o.n(s),c=o(79),r=o.n(c),l=e.env.CDN_HOST||"",u=function(e){function t(){return e.apply(this,arguments)||this}return Object(a.a)(t,e),t.prototype.render=function(){var e,t=this.props.emoji;if(t.custom)e=t.imageUrl;else{var o=r.a[t.native]||r.a[t.native.replace(/\uFE0F$/,"")];if(!o)return null;e=l+"/emoji/"+o.filename+".svg"}return Object(n.a)("div",{className:"autosuggest-emoji"},void 0,Object(n.a)("img",{className:"emojione",src:e,alt:t.native||t.colons}),t.colons)},t}(i.a.PureComponent)}).call(this,o(46))},573:function(e,t,o){"use strict";(function(e){o.d(t,"a",function(){return N});var n,a,s,i,c,r,l=o(0),u=o(2),d=o(7),p=o(1),g=o(3),b=o.n(g),m=o(6),f=o(41),h=o(113),j=o.n(h),O=o(10),v=o.n(O),y=o(64),_=o.n(y),C=o(52),k=Object(m.f)({emoji:{id:"emoji_button.label",defaultMessage:"Insert emoji"},emoji_search:{id:"emoji_button.search",defaultMessage:"Search..."},emoji_not_found:{id:"emoji_button.not_found",defaultMessage:"No emojos!! (╯°□°)╯︵ ┻━┻"},custom:{id:"emoji_button.custom",defaultMessage:"Custom"},recent:{id:"emoji_button.recent",defaultMessage:"Frequently used"},search_results:{id:"emoji_button.search_results",defaultMessage:"Search results"},people:{id:"emoji_button.people",defaultMessage:"People"},nature:{id:"emoji_button.nature",defaultMessage:"Nature"},food:{id:"emoji_button.food",defaultMessage:"Food & Drink"},activity:{id:"emoji_button.activity",defaultMessage:"Activity"},travel:{id:"emoji_button.travel",defaultMessage:"Travel & Places"},objects:{id:"emoji_button.objects",defaultMessage:"Objects"},symbols:{id:"emoji_button.symbols",defaultMessage:"Symbols"},flags:{id:"emoji_button.flags",defaultMessage:"Flags"}}),S=e.env.CDN_HOST||"",M=function(){return S+"/emoji/sheet_10.png"},w=!!_.a.hasSupport&&{passive:!0},x=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(p.a)(Object(u.a)(t),"handleClick",function(e){t.props.onSelect(1*e.currentTarget.getAttribute("data-index"))}),Object(p.a)(Object(u.a)(t),"handleDocumentClick",function(e){t.node&&!t.node.contains(e.target)&&t.props.onClose()}),Object(p.a)(Object(u.a)(t),"setRef",function(e){t.node=e}),t}Object(d.a)(t,e);var o=t.prototype;return o.componentWillReceiveProps=function(e){e.active?this.attachListeners():this.removeListeners()},o.componentWillUnmount=function(){this.removeListeners()},o.attachListeners=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,w)},o.removeListeners=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,w)},o.render=function(){var e=this.props.active;return b.a.createElement("div",{className:"emoji-picker-dropdown__modifiers__menu",style:{display:e?"block":"none"},ref:this.setRef},Object(l.a)("button",{onClick:this.handleClick,"data-index":1},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:1,backgroundImageFn:M})),Object(l.a)("button",{onClick:this.handleClick,"data-index":2},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:2,backgroundImageFn:M})),Object(l.a)("button",{onClick:this.handleClick,"data-index":3},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:3,backgroundImageFn:M})),Object(l.a)("button",{onClick:this.handleClick,"data-index":4},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:4,backgroundImageFn:M})),Object(l.a)("button",{onClick:this.handleClick,"data-index":5},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:5,backgroundImageFn:M})),Object(l.a)("button",{onClick:this.handleClick,"data-index":6},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:6,backgroundImageFn:M})))},t}(b.a.PureComponent),T=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(p.a)(Object(u.a)(t),"handleClick",function(){t.props.active?t.props.onClose():t.props.onOpen()}),Object(p.a)(Object(u.a)(t),"handleSelect",function(e){t.props.onChange(e),t.props.onClose()}),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.active,o=e.modifier;return Object(l.a)("div",{className:"emoji-picker-dropdown__modifiers"},void 0,Object(l.a)(r,{emoji:"fist",set:"twitter",size:22,sheetSize:32,skin:o,onClick:this.handleClick,backgroundImageFn:M}),Object(l.a)(x,{active:t,onSelect:this.handleSelect,onClose:this.props.onClose}))},t}(b.a.PureComponent),D=Object(m.g)((s=a=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(p.a)(Object(u.a)(t),"state",{modifierOpen:!1,placement:null}),Object(p.a)(Object(u.a)(t),"handleDocumentClick",function(e){t.node&&!t.node.contains(e.target)&&t.props.onClose()}),Object(p.a)(Object(u.a)(t),"setRef",function(e){t.node=e}),Object(p.a)(Object(u.a)(t),"getI18n",function(){var e=t.props.intl;return{search:e.formatMessage(k.emoji_search),notfound:e.formatMessage(k.emoji_not_found),categories:{search:e.formatMessage(k.search_results),recent:e.formatMessage(k.recent),people:e.formatMessage(k.people),nature:e.formatMessage(k.nature),foods:e.formatMessage(k.food),activity:e.formatMessage(k.activity),places:e.formatMessage(k.travel),objects:e.formatMessage(k.objects),symbols:e.formatMessage(k.symbols),flags:e.formatMessage(k.flags),custom:e.formatMessage(k.custom)}}}),Object(p.a)(Object(u.a)(t),"handleClick",function(e){e.native||(e.native=e.colons),t.props.onClose(),t.props.onPick(e)}),Object(p.a)(Object(u.a)(t),"handleModifierOpen",function(){t.setState({modifierOpen:!0})}),Object(p.a)(Object(u.a)(t),"handleModifierClose",function(){t.setState({modifierOpen:!1})}),Object(p.a)(Object(u.a)(t),"handleModifierChange",function(e){t.props.onSkinTone(e)}),t}Object(d.a)(t,e);var o=t.prototype;return o.componentDidMount=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,w)},o.componentWillUnmount=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,w)},o.render=function(){var e=this.props,t=e.loading,o=e.style,n=e.intl,a=e.custom_emojis,s=e.skinTone,i=e.frequentlyUsedEmojis;if(t)return Object(l.a)("div",{style:{width:299}});var r=n.formatMessage(k.emoji),u=this.state.modifierOpen,d=["recent","people","nature","foods","activity","places","objects","symbols","flags"];return d.splice.apply(d,[1,0].concat(Array.from(Object(C.categoriesFromEmojis)(a)).sort())),b.a.createElement("div",{className:v()("emoji-picker-dropdown__menu",{selecting:u}),style:o,ref:this.setRef},Object(l.a)(c,{perLine:8,emojiSize:22,sheetSize:32,custom:Object(C.buildCustomEmojis)(a),color:"",emoji:"",set:"twitter",title:r,i18n:this.getI18n(),onClick:this.handleClick,include:d,recent:i,skin:s,showPreview:!1,backgroundImageFn:M,autoFocus:!0,emojiTooltip:!0}),Object(l.a)(T,{active:u,modifier:s,onOpen:this.handleModifierOpen,onClose:this.handleModifierClose,onChange:this.handleModifierChange}))},t}(b.a.PureComponent),Object(p.a)(a,"defaultProps",{style:{},loading:!0,frequentlyUsedEmojis:[]}),n=s))||n,N=Object(m.g)(i=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(p.a)(Object(u.a)(t),"state",{active:!1,loading:!1}),Object(p.a)(Object(u.a)(t),"setRef",function(e){t.dropdown=e}),Object(p.a)(Object(u.a)(t),"onShowDropdown",function(e){var o=e.target;t.setState({active:!0}),c||(t.setState({loading:!0}),Object(f.l)().then(function(e){c=e.Picker,r=e.Emoji,t.setState({loading:!1})}).catch(function(){t.setState({loading:!1})}));var n=o.getBoundingClientRect().top;t.setState({placement:2*n<innerHeight?"bottom":"top"})}),Object(p.a)(Object(u.a)(t),"onHideDropdown",function(){t.setState({active:!1})}),Object(p.a)(Object(u.a)(t),"onToggle",function(e){t.state.loading||e.key&&"Enter"!==e.key||(t.state.active?t.onHideDropdown():t.onShowDropdown(e))}),Object(p.a)(Object(u.a)(t),"handleKeyDown",function(e){"Escape"===e.key&&t.onHideDropdown()}),Object(p.a)(Object(u.a)(t),"setTargetRef",function(e){t.target=e}),Object(p.a)(Object(u.a)(t),"findTarget",function(){return t.target}),t}return Object(d.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.intl,o=e.onPickEmoji,n=e.onSkinTone,a=e.skinTone,s=e.frequentlyUsedEmojis,i=t.formatMessage(k.emoji),c=this.state,r=c.active,u=c.loading,d=c.placement;return Object(l.a)("div",{className:"emoji-picker-dropdown",onKeyDown:this.handleKeyDown},void 0,b.a.createElement("div",{ref:this.setTargetRef,className:"emoji-button",title:i,"aria-label":i,"aria-expanded":r,role:"button",onClick:this.onToggle,onKeyDown:this.onToggle,tabIndex:0},Object(l.a)("img",{className:v()("emojione",{"pulse-loading":r&&u}),alt:"🙂",src:S+"/emoji/1f602.svg"})),Object(l.a)(j.a,{show:r,placement:d,target:this.findTarget},void 0,Object(l.a)(D,{custom_emojis:this.props.custom_emojis,loading:u,onClose:this.onHideDropdown,onPick:o,onSkinTone:n,skinTone:a,frequentlyUsedEmojis:s})))},t}(b.a.PureComponent))||i}).call(this,o(46))},574:function(e,t,o){"use strict";var n,a,s,i=o(12),c=o(0),r=o(2),l=o(7),u=o(1),d=o(3),p=o.n(d),g=o(308),b=o(101),m=o(18),f=o.n(m),h=o(5),j=o.n(h),O=o(21),v=o(204),y=o(107),_=o(51),C=o(116),k=o(6),S=o(19),M=o(214),w=o(276),x=Object(k.f)({cancel:{id:"reply_indicator.cancel",defaultMessage:"Cancel"}}),T=Object(k.g)((s=a=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleClick",function(){t.props.onCancel()}),Object(u.a)(Object(r.a)(t),"handleAccountClick",function(e){0!==e.button||e.ctrlKey||e.metaKey||(e.preventDefault(),t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"])))}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.status,o=e.intl;if(!t)return null;var n={__html:t.get("contentHtml")},a={direction:Object(M.a)(t.get("search_index"))?"rtl":"ltr"};return Object(c.a)("div",{className:"reply-indicator"},void 0,Object(c.a)("div",{className:"reply-indicator__header"},void 0,Object(c.a)("div",{className:"reply-indicator__cancel"},void 0,Object(c.a)(_.a,{title:o.formatMessage(x.cancel),icon:"times",onClick:this.handleClick,inverted:!0})),Object(c.a)("a",{href:t.getIn(["account","url"]),onClick:this.handleAccountClick,className:"reply-indicator__display-name"},void 0,Object(c.a)("div",{className:"reply-indicator__display-avatar"},void 0,Object(c.a)(y.a,{account:t.get("account"),size:24})),Object(c.a)(C.a,{account:t.get("account")}))),Object(c.a)("div",{className:"reply-indicator__content",style:a,dangerouslySetInnerHTML:n}),t.get("media_attachments").size>0&&Object(c.a)(w.a,{compact:!0,media:t.get("media_attachments")}))},t}(S.a),Object(u.a)(a,"contextTypes",{router:j.a.object}),Object(u.a)(a,"propTypes",{status:f.a.map,onCancel:j.a.func.isRequired,intl:j.a.object.isRequired}),n=s))||n,D=Object(i.connect)(function(){var e=Object(v.f)();return function(t){return{status:e(t,{id:t.getIn(["compose","in_reply_to"])})}}},function(e){return{onCancel:function(){e(Object(O.M)())}}})(T),N=function(e){function t(){return e.apply(this,arguments)||this}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props.account;return Object(c.a)("div",{className:"autosuggest-account",title:e.get("acct")},void 0,Object(c.a)("div",{className:"autosuggest-account-icon"},void 0,Object(c.a)(y.a,{account:e,size:18})),Object(c.a)(C.a,{account:e}))},t}(S.a);Object(u.a)(N,"propTypes",{account:f.a.map.isRequired});var I=Object(i.connect)(function(){var e=Object(v.d)();return function(t,o){var n=o.id;return{account:e(t,n)}}})(N),R=o(391),P=o(408),F=function(e){function t(){return e.apply(this,arguments)||this}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props.tag,t=e.history&&Object(P.a)(e.history.reduce(function(e,t){return e+1*t.uses},0));return Object(c.a)("div",{className:"autosuggest-hashtag"},void 0,Object(c.a)("div",{className:"autosuggest-hashtag__name"},void 0,"#",Object(c.a)("strong",{},void 0,e.name)),void 0!==e.history&&Object(c.a)("div",{className:"autosuggest-hashtag__uses"},void 0,Object(c.a)(k.b,{id:"autosuggest_hashtag.per_week",defaultMessage:"{count} per week",values:{count:t}})))},t}(p.a.PureComponent),E=o(145),q=o(10),A=o.n(q),K=function(e,t){var o,n=e.slice(0,t).search(/\S+$/),a=e.slice(t).search(/\s/);return!(o=a<0?e.slice(n):e.slice(n,a+t))||o.trim().length<3||-1===["@",":","#"].indexOf(o[0])?[null,null]:(o=o.trim().toLowerCase()).length>0?[n+1,o]:[null,null]},L=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"state",{suggestionsHidden:!0,focused:!1,selectedSuggestion:0,lastToken:null,tokenStart:0}),Object(u.a)(Object(r.a)(t),"onChange",function(e){var o=K(e.target.value,e.target.selectionStart),n=o[0],a=o[1];null!==a&&t.state.lastToken!==a?(t.setState({lastToken:a,selectedSuggestion:0,tokenStart:n}),t.props.onSuggestionsFetchRequested(a)):null===a&&(t.setState({lastToken:null}),t.props.onSuggestionsClearRequested()),t.props.onChange(e)}),Object(u.a)(Object(r.a)(t),"onKeyDown",function(e){var o=t.props,n=o.suggestions,a=o.disabled,s=t.state,i=s.selectedSuggestion,c=s.suggestionsHidden;if(a)e.preventDefault();else if(229!==e.which&&!e.isComposing){switch(e.key){case"Escape":0===n.size||c?document.querySelector(".ui").parentElement.focus():(e.preventDefault(),t.setState({suggestionsHidden:!0}));break;case"ArrowDown":n.size>0&&!c&&(e.preventDefault(),t.setState({selectedSuggestion:Math.min(i+1,n.size-1)}));break;case"ArrowUp":n.size>0&&!c&&(e.preventDefault(),t.setState({selectedSuggestion:Math.max(i-1,0)}));break;case"Enter":case"Tab":null!==t.state.lastToken&&n.size>0&&!c&&(e.preventDefault(),e.stopPropagation(),t.props.onSuggestionSelected(t.state.tokenStart,t.state.lastToken,n.get(i)))}!e.defaultPrevented&&t.props.onKeyDown&&t.props.onKeyDown(e)}}),Object(u.a)(Object(r.a)(t),"onBlur",function(){t.setState({suggestionsHidden:!0,focused:!1})}),Object(u.a)(Object(r.a)(t),"onFocus",function(e){t.setState({focused:!0}),t.props.onFocus&&t.props.onFocus(e)}),Object(u.a)(Object(r.a)(t),"onSuggestionClick",function(e){var o=t.props.suggestions.get(e.currentTarget.getAttribute("data-index"));e.preventDefault(),t.props.onSuggestionSelected(t.state.tokenStart,t.state.lastToken,o),t.textarea.focus()}),Object(u.a)(Object(r.a)(t),"setTextarea",function(e){t.textarea=e}),Object(u.a)(Object(r.a)(t),"onPaste",function(e){e.clipboardData&&1===e.clipboardData.files.length&&(t.props.onPaste(e.clipboardData.files),e.preventDefault())}),Object(u.a)(Object(r.a)(t),"renderSuggestion",function(e,o){var n,a,s=t.state.selectedSuggestion;return"emoji"===e.type?(n=Object(c.a)(R.a,{emoji:e}),a=e.id):"hashtag"===e.type?(n=Object(c.a)(F,{tag:e}),a=e.name):"account"===e.type&&(n=Object(c.a)(I,{id:e.id}),a=e.id),Object(c.a)("div",{role:"button",tabIndex:"0","data-index":o,className:A()("autosuggest-textarea__suggestions__item",{selected:o===s}),onMouseDown:t.onSuggestionClick},a,n)}),t}Object(l.a)(t,e);var o=t.prototype;return o.componentWillReceiveProps=function(e){e.suggestions!==this.props.suggestions&&e.suggestions.size>0&&this.state.suggestionsHidden&&this.state.focused&&this.setState({suggestionsHidden:!1})},o.render=function(){var e=this.props,t=e.value,o=e.suggestions,n=e.disabled,a=e.placeholder,s=e.onKeyUp,i=e.autoFocus,r=e.children,l=this.state.suggestionsHidden,u={direction:"ltr"};return Object(M.a)(t)&&(u.direction="rtl"),[Object(c.a)("div",{className:"compose-form__autosuggest-wrapper"},"autosuggest-wrapper",Object(c.a)("div",{className:"autosuggest-textarea"},void 0,Object(c.a)("label",{},void 0,Object(c.a)("span",{style:{display:"none"}},void 0,a),Object(c.a)(E.a,{inputRef:this.setTextarea,className:"autosuggest-textarea__textarea",disabled:n,placeholder:a,autoFocus:i,value:t,onChange:this.onChange,onKeyDown:this.onKeyDown,onKeyUp:s,onFocus:this.onFocus,onBlur:this.onBlur,onPaste:this.onPaste,style:u,"aria-autocomplete":"list"}))),r),Object(c.a)("div",{className:"autosuggest-textarea__suggestions-wrapper"},"suggestions-wrapper",Object(c.a)("div",{className:"autosuggest-textarea__suggestions "+(l||o.isEmpty()?"":"autosuggest-textarea__suggestions--visible")},void 0,o.map(this.renderSuggestion)))]},t}(S.a);Object(u.a)(L,"propTypes",{value:j.a.string,suggestions:f.a.list,disabled:j.a.bool,placeholder:j.a.string,onSuggestionSelected:j.a.func.isRequired,onSuggestionsClearRequested:j.a.func.isRequired,onSuggestionsFetchRequested:j.a.func.isRequired,onChange:j.a.func.isRequired,onKeyUp:j.a.func,onKeyDown:j.a.func,onPaste:j.a.func.isRequired,autoFocus:j.a.bool}),Object(u.a)(L,"defaultProps",{autoFocus:!0});var U,z=o(4),W=function(e,t,o){var n,a=e.slice(0,t).search(/\S+$/),s=e.slice(t).search(/\s/);return!(n=s<0?e.slice(a):e.slice(a,s+t))||n.trim().length<3||-1===o.indexOf(n[0])?[null,null]:(n=n.trim().toLowerCase()).length>0?[a+1,n]:[null,null]},H=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"state",{suggestionsHidden:!0,focused:!1,selectedSuggestion:0,lastToken:null,tokenStart:0}),Object(u.a)(Object(r.a)(t),"onChange",function(e){var o=W(e.target.value,e.target.selectionStart,t.props.searchTokens),n=o[0],a=o[1];null!==a&&t.state.lastToken!==a?(t.setState({lastToken:a,selectedSuggestion:0,tokenStart:n}),t.props.onSuggestionsFetchRequested(a)):null===a&&(t.setState({lastToken:null}),t.props.onSuggestionsClearRequested()),t.props.onChange(e)}),Object(u.a)(Object(r.a)(t),"onKeyDown",function(e){var o=t.props,n=o.suggestions,a=o.disabled,s=t.state,i=s.selectedSuggestion,c=s.suggestionsHidden;if(a)e.preventDefault();else if(229!==e.which&&!e.isComposing){switch(e.key){case"Escape":0===n.size||c?document.querySelector(".ui").parentElement.focus():(e.preventDefault(),t.setState({suggestionsHidden:!0}));break;case"ArrowDown":n.size>0&&!c&&(e.preventDefault(),t.setState({selectedSuggestion:Math.min(i+1,n.size-1)}));break;case"ArrowUp":n.size>0&&!c&&(e.preventDefault(),t.setState({selectedSuggestion:Math.max(i-1,0)}));break;case"Enter":case"Tab":null!==t.state.lastToken&&n.size>0&&!c&&(e.preventDefault(),e.stopPropagation(),t.props.onSuggestionSelected(t.state.tokenStart,t.state.lastToken,n.get(i)))}!e.defaultPrevented&&t.props.onKeyDown&&t.props.onKeyDown(e)}}),Object(u.a)(Object(r.a)(t),"onBlur",function(){t.setState({suggestionsHidden:!0,focused:!1})}),Object(u.a)(Object(r.a)(t),"onFocus",function(){t.setState({focused:!0})}),Object(u.a)(Object(r.a)(t),"onSuggestionClick",function(e){var o=t.props.suggestions.get(e.currentTarget.getAttribute("data-index"));e.preventDefault(),t.props.onSuggestionSelected(t.state.tokenStart,t.state.lastToken,o),t.input.focus()}),Object(u.a)(Object(r.a)(t),"setInput",function(e){t.input=e}),Object(u.a)(Object(r.a)(t),"renderSuggestion",function(e,o){var n,a,s=t.state.selectedSuggestion;return"emoji"===e.type?(n=Object(c.a)(R.a,{emoji:e}),a=e.id):"hashtag"===e.type?(n=Object(c.a)(F,{tag:e}),a=e.name):"account"===e.type&&(n=Object(c.a)(I,{id:e.id}),a=e.id),Object(c.a)("div",{role:"button",tabIndex:"0","data-index":o,className:A()("autosuggest-textarea__suggestions__item",{selected:o===s}),onMouseDown:t.onSuggestionClick},a,n)}),t}Object(l.a)(t,e);var o=t.prototype;return o.componentWillReceiveProps=function(e){e.suggestions!==this.props.suggestions&&e.suggestions.size>0&&this.state.suggestionsHidden&&this.state.focused&&this.setState({suggestionsHidden:!1})},o.render=function(){var e=this.props,t=e.value,o=e.suggestions,n=e.disabled,a=e.placeholder,s=e.onKeyUp,i=e.autoFocus,r=e.className,l=e.id,u=e.maxLength,d=this.state.suggestionsHidden,g={direction:"ltr"};return Object(M.a)(t)&&(g.direction="rtl"),Object(c.a)("div",{className:"autosuggest-input"},void 0,Object(c.a)("label",{},void 0,Object(c.a)("span",{style:{display:"none"}},void 0,a),p.a.createElement("input",{type:"text",ref:this.setInput,disabled:n,placeholder:a,autoFocus:i,value:t,onChange:this.onChange,onKeyDown:this.onKeyDown,onKeyUp:s,onFocus:this.onFocus,onBlur:this.onBlur,style:g,"aria-autocomplete":"list",id:l,className:r,maxLength:u})),Object(c.a)("div",{className:"autosuggest-textarea__suggestions "+(d||o.isEmpty()?"":"autosuggest-textarea__suggestions--visible")},void 0,o.map(this.renderSuggestion)))},t}(S.a);Object(u.a)(H,"propTypes",{value:j.a.string,suggestions:f.a.list,disabled:j.a.bool,placeholder:j.a.string,onSuggestionSelected:j.a.func.isRequired,onSuggestionsClearRequested:j.a.func.isRequired,onSuggestionsFetchRequested:j.a.func.isRequired,onChange:j.a.func.isRequired,onKeyUp:j.a.func,onKeyDown:j.a.func,autoFocus:j.a.bool,className:j.a.string,id:j.a.string,searchTokens:j.a.arrayOf(j.a.string),maxLength:j.a.number}),Object(u.a)(H,"defaultProps",{autoFocus:!0,searchTokens:Object(z.List)(["@",":","#"])});var B,G,Y,X,V,J,Z,$,Q=Object(k.f)({add_poll:{id:"poll_button.add_poll",defaultMessage:"Add a poll"},remove_poll:{id:"poll_button.remove_poll",defaultMessage:"Remove poll"}}),ee={height:null,lineHeight:"27px"},te=Object(k.g)(U=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleClick",function(){t.props.onClick()}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.intl,o=e.active,n=e.unavailable,a=e.disabled;return n?null:Object(c.a)("div",{className:"compose-form__poll-button"},void 0,Object(c.a)(_.a,{icon:"tasks",title:t.formatMessage(o?Q.remove_poll:Q.add_poll),disabled:a,onClick:this.handleClick,className:"compose-form__poll-button-icon "+(o?"active":""),size:18,inverted:!0,style:ee}))},t}(p.a.PureComponent))||U,oe=Object(i.connect)(function(e){return{unavailable:e.getIn(["compose","is_uploading"])||e.getIn(["compose","media_attachments"]).size>0,active:null!==e.getIn(["compose","poll"])}},function(e){return{onClick:function(){e(function(t,o){o().getIn(["compose","poll"])?e(Object(O.eb)()):e(Object(O.K)())})}}})(te),ne=Object(k.f)({upload:{id:"upload_button.label",defaultMessage:"Add media ({formats})"}}),ae={height:null,lineHeight:"27px"},se=Object(i.connect)(function(){return function(e){return{acceptContentTypes:e.getIn(["media_attachments","accept_content_types"])}}})(B=Object(k.g)((Y=G=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleChange",function(e){e.target.files.length>0&&t.props.onSelectFile(e.target.files)}),Object(u.a)(Object(r.a)(t),"handleClick",function(){t.fileElement.click()}),Object(u.a)(Object(r.a)(t),"setRef",function(e){t.fileElement=e}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.intl,o=e.resetFileKey,n=e.unavailable,a=e.disabled;e.acceptContentTypes;return n?null:Object(c.a)("div",{className:"compose-form__upload-button"},void 0,Object(c.a)(_.a,{icon:"paperclip",title:t.formatMessage(ne.upload,{formats:"JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC"}),disabled:a,onClick:this.handleClick,className:"compose-form__upload-button-icon",size:18,inverted:!0,style:ae}),Object(c.a)("label",{},void 0,Object(c.a)("span",{style:{display:"none"}},void 0,t.formatMessage(ne.upload,{formats:"JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC"})),p.a.createElement("input",{key:o,ref:this.setRef,type:"file",multiple:!0,onChange:this.handleChange,disabled:a,style:{display:"none"}})))},t}(S.a),Object(u.a)(G,"propTypes",{disabled:j.a.bool,unavailable:j.a.bool,onSelectFile:j.a.func.isRequired,style:j.a.object,resetFileKey:j.a.number,acceptContentTypes:f.a.listOf(j.a.string).isRequired,intl:j.a.object.isRequired}),B=Y))||B)||B,ie=Object(i.connect)(function(e){return{disabled:e.getIn(["compose","is_uploading"])||e.getIn(["compose","media_attachments"]).size>3||e.getIn(["compose","media_attachments"]).some(function(e){return["video","audio"].includes(e.get("type"))}),unavailable:null!==e.getIn(["compose","poll"]),resetFileKey:e.getIn(["compose","resetFileKey"])}},function(e){return{onSelectFile:function(t){e(Object(O.mb)(t))}}})(se),ce={height:null,lineHeight:"27px",width:"23.14285722px"},re=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleClick",function(e){e.preventDefault(),t.props.onClick()}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.label,o=e.title,n=e.active,a=e.ariaControls;return Object(c.a)("button",{title:o,"aria-label":o,className:"text-icon-button "+(n?"active":""),"aria-expanded":n,onClick:this.handleClick,"aria-controls":a,style:ce},void 0,t)},t}(p.a.PureComponent),le=Object(k.f)({marked:{id:"compose_form.spoiler.marked",defaultMessage:"Text is hidden behind warning"},unmarked:{id:"compose_form.spoiler.unmarked",defaultMessage:"Text is not hidden"}}),ue=Object(k.g)(Object(i.connect)(function(e,t){return{label:"CW",title:t.intl.formatMessage(e.getIn(["compose","spoiler"])?le.marked:le.unmarked),active:e.getIn(["compose","spoiler"]),ariaControls:"cw-spoiler-input"}},function(e){return{onClick:function(){e(Object(O.Q)())}}})(re)),de=o(13),pe=o(113),ge=o.n(pe),be=o(88),me=o(34),fe=o.n(me),he=o(64),je=o.n(he),Oe=o(27),ve=Object(k.f)({public_short:{id:"privacy.public.short",defaultMessage:"Public"},public_long:{id:"privacy.public.long",defaultMessage:"Post to public timelines"},unlisted_short:{id:"privacy.unlisted.short",defaultMessage:"Unlisted"},unlisted_long:{id:"privacy.unlisted.long",defaultMessage:"Do not show in public timelines"},private_short:{id:"privacy.private.short",defaultMessage:"Followers-only"},private_long:{id:"privacy.private.long",defaultMessage:"Post to followers only"},direct_short:{id:"privacy.direct.short",defaultMessage:"Direct"},direct_long:{id:"privacy.direct.long",defaultMessage:"Post to mentioned users only"},change_privacy:{id:"privacy.change",defaultMessage:"Adjust status privacy"}}),ye=!!je.a.hasSupport&&{passive:!0},_e=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"state",{mounted:!1}),Object(u.a)(Object(r.a)(t),"handleDocumentClick",function(e){t.node&&!t.node.contains(e.target)&&t.props.onClose()}),Object(u.a)(Object(r.a)(t),"handleKeyDown",function(e){var o,n=t.props.items,a=e.currentTarget.getAttribute("data-index"),s=n.findIndex(function(e){return e.value===a});switch(e.key){case"Escape":t.props.onClose();break;case"Enter":t.handleClick(e);break;case"ArrowDown":(o=t.node.childNodes[s+1])&&(o.focus(),t.props.onChange(o.getAttribute("data-index")));break;case"ArrowUp":(o=t.node.childNodes[s-1])&&(o.focus(),t.props.onChange(o.getAttribute("data-index")));break;case"Tab":(o=e.shiftKey?t.node.childNodes[s-1]||t.node.lastChild:t.node.childNodes[s+1]||t.node.firstChild)&&(o.focus(),t.props.onChange(o.getAttribute("data-index")),e.preventDefault(),e.stopPropagation());break;case"Home":(o=t.node.firstChild)&&(o.focus(),t.props.onChange(o.getAttribute("data-index")));break;case"End":(o=t.node.lastChild)&&(o.focus(),t.props.onChange(o.getAttribute("data-index")))}}),Object(u.a)(Object(r.a)(t),"handleClick",function(e){var o=e.currentTarget.getAttribute("data-index");e.preventDefault(),t.props.onClose(),t.props.onChange(o)}),Object(u.a)(Object(r.a)(t),"setRef",function(e){t.node=e}),Object(u.a)(Object(r.a)(t),"setFocusRef",function(e){t.focusedItem=e}),t}Object(l.a)(t,e);var o=t.prototype;return o.componentDidMount=function(){document.addEventListener("click",this.handleDocumentClick,!1),document.addEventListener("touchend",this.handleDocumentClick,ye),this.focusedItem&&this.focusedItem.focus(),this.setState({mounted:!0})},o.componentWillUnmount=function(){document.removeEventListener("click",this.handleDocumentClick,!1),document.removeEventListener("touchend",this.handleDocumentClick,ye)},o.render=function(){var e=this,t=this.state.mounted,o=this.props,n=o.style,a=o.items,s=o.placement,i=o.value;return Object(c.a)(be.a,{defaultStyle:{opacity:0,scaleX:.85,scaleY:.75},style:{opacity:fe()(1,{damping:35,stiffness:400}),scaleX:fe()(1,{damping:35,stiffness:400}),scaleY:fe()(1,{damping:35,stiffness:400})}},void 0,function(o){var r=o.opacity,l=o.scaleX,u=o.scaleY;return p.a.createElement("div",{className:"privacy-dropdown__dropdown "+s,style:Object(de.default)({},n,{opacity:r,transform:t?"scale("+l+", "+u+")":null,zIndex:2}),role:"listbox",ref:e.setRef},a.map(function(t){return p.a.createElement("div",{role:"option",tabIndex:"0",key:t.value,"data-index":t.value,onKeyDown:e.handleKeyDown,onClick:e.handleClick,className:A()("privacy-dropdown__option",{active:t.value===i}),"aria-selected":t.value===i,ref:t.value===i?e.setFocusRef:null},Object(c.a)("div",{className:"privacy-dropdown__option__icon"},void 0,Object(c.a)(Oe.a,{id:t.icon,fixedWidth:!0})),Object(c.a)("div",{className:"privacy-dropdown__option__content"},void 0,Object(c.a)("strong",{},void 0,t.text),t.meta))}))})},t}(p.a.PureComponent),Ce=Object(k.g)(X=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"state",{open:!1,placement:"bottom"}),Object(u.a)(Object(r.a)(t),"handleToggle",function(e){var o=e.target;if(t.props.isUserTouching())t.state.open?t.props.onModalClose():t.props.onModalOpen({actions:t.options.map(function(e){return Object(de.default)({},e,{active:e.value===t.props.value})}),onClick:t.handleModalActionClick});else{var n=o.getBoundingClientRect().top;t.state.open&&t.activeElement&&t.activeElement.focus(),t.setState({placement:2*n<innerHeight?"bottom":"top"}),t.setState({open:!t.state.open})}}),Object(u.a)(Object(r.a)(t),"handleModalActionClick",function(e){e.preventDefault();var o=t.options[e.currentTarget.getAttribute("data-index")].value;t.props.onModalClose(),t.props.onChange(o)}),Object(u.a)(Object(r.a)(t),"handleKeyDown",function(e){switch(e.key){case"Escape":t.handleClose()}}),Object(u.a)(Object(r.a)(t),"handleMouseDown",function(){t.state.open||(t.activeElement=document.activeElement)}),Object(u.a)(Object(r.a)(t),"handleButtonKeyDown",function(e){switch(e.key){case" ":case"Enter":t.handleMouseDown()}}),Object(u.a)(Object(r.a)(t),"handleClose",function(){t.state.open&&t.activeElement&&t.activeElement.focus(),t.setState({open:!1})}),Object(u.a)(Object(r.a)(t),"handleChange",function(e){t.props.onChange(e)}),t}Object(l.a)(t,e);var o=t.prototype;return o.componentWillMount=function(){var e=this.props.intl.formatMessage;this.options=[{icon:"globe",value:"public",text:e(ve.public_short),meta:e(ve.public_long)},{icon:"unlock",value:"unlisted",text:e(ve.unlisted_short),meta:e(ve.unlisted_long)},{icon:"lock",value:"private",text:e(ve.private_short),meta:e(ve.private_long)},{icon:"envelope",value:"direct",text:e(ve.direct_short),meta:e(ve.direct_long)}]},o.render=function(){var e=this.props,t=e.value,o=e.intl,n=this.state,a=n.open,s=n.placement,i=this.options.find(function(e){return e.value===t});return Object(c.a)("div",{className:A()("privacy-dropdown",s,{active:a}),onKeyDown:this.handleKeyDown},void 0,Object(c.a)("div",{className:A()("privacy-dropdown__value",{active:this.options.indexOf(i)===("bottom"===s?0:this.options.length-1)})},void 0,Object(c.a)(_.a,{className:"privacy-dropdown__value-icon",icon:i.icon,title:o.formatMessage(ve.change_privacy),size:18,expanded:a,active:a,inverted:!0,onClick:this.handleToggle,onMouseDown:this.handleMouseDown,onKeyDown:this.handleButtonKeyDown,style:{height:null,lineHeight:"27px"}})),Object(c.a)(ge.a,{show:a,placement:s,target:this},void 0,Object(c.a)(_e,{items:this.options,value:t,onClose:this.handleClose,onChange:this.handleChange,placement:s})))},t}(p.a.PureComponent))||X,ke=o(47),Se=o(114),Me=Object(i.connect)(function(e){return{isModalOpen:"ACTIONS"===e.get("modal").modalType,value:e.getIn(["compose","privacy"])}},function(e){return{onChange:function(t){e(Object(O.R)(t))},isUserTouching:Se.c,onModalOpen:function(t){return e(Object(ke.d)("ACTIONS",t))},onModalClose:function(){return e(Object(ke.c)())}}})(Ce),we=o(573),xe=o(72),Te=o(53),De=o(225),Ne=["+1","grinning","kissing_heart","heart_eyes","laughing","stuck_out_tongue_winking_eye","sweat_smile","joy","yum","disappointed","thinking_face","weary","sob","sunglasses","heart","ok_hand"],Ie=Object(Te.a)([function(e){return e.getIn(["settings","frequentlyUsedEmojis"],Object(z.Map)())}],function(e){var t=e.keySeq().sort(function(t,o){return e.get(t)-e.get(o)}).reverse().slice(0,16).toArray();if(t.length<Ne.length){var o=Ne.filter(function(e){return!t.includes(e)});t=t.concat(o.slice(0,Ne.length-t.length))}return t}),Re=Object(Te.a)([function(e){return e.get("custom_emojis")}],function(e){return e.filter(function(e){return e.get("visible_in_picker")}).sort(function(e,t){var o=e.get("shortcode").toLowerCase(),n=t.get("shortcode").toLowerCase();return o<n?-1:o>n?1:0})}),Pe=Object(i.connect)(function(e){return{custom_emojis:Re(e),skinTone:e.getIn(["settings","skinTone"]),frequentlyUsedEmojis:Ie(e)}},function(e,t){var o=t.onPickEmoji;return{onSkinTone:function(t){e(Object(xe.c)(["skinTone"],t))},onPickEmoji:function(t){e(Object(De.b)(t)),o&&o(t)}}})(we.a),Fe=o(22),Ee=o(31),qe=Object(k.f)({option_placeholder:{id:"compose_form.poll.option_placeholder",defaultMessage:"Choice {number}"},add_option:{id:"compose_form.poll.add_option",defaultMessage:"Add a choice"},remove_option:{id:"compose_form.poll.remove_option",defaultMessage:"Remove this choice"},poll_duration:{id:"compose_form.poll.duration",defaultMessage:"Poll duration"},minutes:{id:"intervals.full.minutes",defaultMessage:"{number, plural, one {# minute} other {# minutes}}"},hours:{id:"intervals.full.hours",defaultMessage:"{number, plural, one {# hour} other {# hours}}"},days:{id:"intervals.full.days",defaultMessage:"{number, plural, one {# day} other {# days}}"}}),Ae=Object(k.g)(V=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleOptionTitleChange",function(e){t.props.onChange(t.props.index,e.target.value)}),Object(u.a)(Object(r.a)(t),"handleOptionRemove",function(){t.props.onRemove(t.props.index)}),Object(u.a)(Object(r.a)(t),"handleToggleMultiple",function(e){t.props.onToggleMultiple(),e.preventDefault(),e.stopPropagation()}),Object(u.a)(Object(r.a)(t),"onSuggestionsClearRequested",function(){t.props.onClearSuggestions()}),Object(u.a)(Object(r.a)(t),"onSuggestionsFetchRequested",function(e){t.props.onFetchSuggestions(e)}),Object(u.a)(Object(r.a)(t),"onSuggestionSelected",function(e,o,n){t.props.onSuggestionSelected(e,o,n,["poll","options",t.props.index])}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.isPollMultiple,o=e.title,n=e.index,a=e.intl;return Object(c.a)("li",{},void 0,Object(c.a)("label",{className:"poll__text editable"},void 0,Object(c.a)("span",{className:A()("poll__input",{checkbox:t}),onClick:this.handleToggleMultiple,role:"button",tabIndex:"0"}),Object(c.a)(H,{placeholder:a.formatMessage(qe.option_placeholder,{number:n+1}),maxLength:25,value:o,onChange:this.handleOptionTitleChange,suggestions:this.props.suggestions,onSuggestionsFetchRequested:this.onSuggestionsFetchRequested,onSuggestionsClearRequested:this.onSuggestionsClearRequested,onSuggestionSelected:this.onSuggestionSelected,searchTokens:[":"]})),Object(c.a)("div",{className:"poll__cancel"},void 0,Object(c.a)(_.a,{disabled:n<=1,title:a.formatMessage(qe.remove_option),icon:"times",onClick:this.handleOptionRemove})))},t}(p.a.PureComponent))||V,Ke=Object(k.g)(($=Z=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleAddOption",function(){t.props.onAddOption("")}),Object(u.a)(Object(r.a)(t),"handleSelectDuration",function(e){t.props.onChangeSettings(e.target.value,t.props.isMultiple)}),Object(u.a)(Object(r.a)(t),"handleToggleMultiple",function(){t.props.onChangeSettings(t.props.expiresIn,!t.props.isMultiple)}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this,t=this.props,o=t.options,n=t.expiresIn,a=t.isMultiple,s=t.onChangeOption,i=t.onRemoveOption,r=t.intl,l=Object(Ee.default)(t,["options","expiresIn","isMultiple","onChangeOption","onRemoveOption","intl"]);return o?Object(c.a)("div",{className:"compose-form__poll-wrapper"},void 0,Object(c.a)("ul",{},void 0,o.map(function(t,o){return p.a.createElement(Ae,Object(Fe.a)({title:t,key:o,index:o,onChange:s,onRemove:i,isPollMultiple:a,onToggleMultiple:e.handleToggleMultiple},l))})),Object(c.a)("div",{className:"poll__footer"},void 0,o.size<4&&Object(c.a)("button",{className:"button button-secondary",onClick:this.handleAddOption},void 0,Object(c.a)(Oe.a,{id:"plus"})," ",p.a.createElement(k.b,qe.add_option)),Object(c.a)("select",{value:n,onChange:this.handleSelectDuration},void 0,Object(c.a)("option",{value:300},void 0,r.formatMessage(qe.minutes,{number:5})),Object(c.a)("option",{value:1800},void 0,r.formatMessage(qe.minutes,{number:30})),Object(c.a)("option",{value:3600},void 0,r.formatMessage(qe.hours,{number:1})),Object(c.a)("option",{value:21600},void 0,r.formatMessage(qe.hours,{number:6})),Object(c.a)("option",{value:86400},void 0,r.formatMessage(qe.days,{number:1})),Object(c.a)("option",{value:259200},void 0,r.formatMessage(qe.days,{number:3})),Object(c.a)("option",{value:604800},void 0,r.formatMessage(qe.days,{number:7}))))):null},t}(S.a),Object(u.a)(Z,"propTypes",{options:f.a.list,expiresIn:j.a.number,isMultiple:j.a.bool,onChangeOption:j.a.func.isRequired,onAddOption:j.a.func.isRequired,onRemoveOption:j.a.func.isRequired,onChangeSettings:j.a.func.isRequired,suggestions:f.a.list,onClearSuggestions:j.a.func.isRequired,onFetchSuggestions:j.a.func.isRequired,onSuggestionSelected:j.a.func.isRequired,intl:j.a.object.isRequired}),J=$))||J,Le=Object(i.connect)(function(e){return{suggestions:e.getIn(["compose","suggestions"]),options:e.getIn(["compose","poll","options"]),expiresIn:e.getIn(["compose","poll","expires_in"]),isMultiple:e.getIn(["compose","poll","multiple"])}},function(e){return{onAddOption:function(t){e(Object(O.L)(t))},onRemoveOption:function(t){e(Object(O.fb)(t))},onChangeOption:function(t,o){e(Object(O.T)(t,o))},onChangeSettings:function(t,o){e(Object(O.U)(t,o))},onClearSuggestions:function(){e(Object(O.W)())},onFetchSuggestions:function(t){e(Object(O.Z)(t))},onSuggestionSelected:function(t,o,n,a){e(Object(O.ib)(t,o,n,a))}}})(Ke),Ue=o(307),ze=Object(i.connect)(function(e){return{active:e.getIn(["compose","is_uploading"]),progress:e.getIn(["compose","progress"])}})(Ue.a),We=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleUndoClick",function(e){e.stopPropagation(),t.props.onUndo(t.props.media.get("id"))}),Object(u.a)(Object(r.a)(t),"handleFocalPointClick",function(e){e.stopPropagation(),t.props.onOpenFocalPoint(t.props.media.get("id"))}),t}return Object(l.a)(t,e),t.prototype.render=function(){var e=this,t=this.props.media,o=t.getIn(["meta","focus","x"]),n=t.getIn(["meta","focus","y"]),a=100*(o/2+.5),s=100*(n/-2+.5);return Object(c.a)("div",{className:"compose-form__upload",tabIndex:"0",role:"button"},void 0,Object(c.a)(be.a,{defaultStyle:{scale:.8},style:{scale:fe()(1,{stiffness:180,damping:12})}},void 0,function(o){var n=o.scale;return Object(c.a)("div",{className:"compose-form__upload-thumbnail",style:{transform:"scale("+n+")",backgroundImage:"url("+t.get("preview_url")+")",backgroundPosition:a+"% "+s+"%"}},void 0,Object(c.a)("div",{className:A()("compose-form__upload__actions",{active:!0})},void 0,Object(c.a)("button",{className:"icon-button",onClick:e.handleUndoClick},void 0,Object(c.a)(Oe.a,{id:"times"})," ",Object(c.a)(k.b,{id:"upload_form.undo",defaultMessage:"Delete"})),Object(c.a)("button",{className:"icon-button",onClick:e.handleFocalPointClick},void 0,Object(c.a)(Oe.a,{id:"pencil"})," ",Object(c.a)(k.b,{id:"upload_form.edit",defaultMessage:"Edit"}))))}))},t}(S.a);Object(u.a)(We,"contextTypes",{router:j.a.object}),Object(u.a)(We,"propTypes",{media:f.a.map.isRequired,onUndo:j.a.func.isRequired,onOpenFocalPoint:j.a.func.isRequired});var He=Object(i.connect)(function(e,t){var o=t.id;return{media:e.getIn(["compose","media_attachments"]).find(function(e){return e.get("id")===o})}},function(e){return{onUndo:function(t){e(Object(O.kb)(t))},onOpenFocalPoint:function(t){e(Object(ke.d)("FOCAL_POINT",{id:t}))},onSubmit:function(t){e(Object(O.jb)(t))}}})(We),Be=Object(k.f)({marked:{id:"compose_form.sensitive.marked",defaultMessage:"Media is marked as sensitive"},unmarked:{id:"compose_form.sensitive.unmarked",defaultMessage:"Media is not marked as sensitive"}}),Ge=function(e){function t(){return e.apply(this,arguments)||this}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.active,o=e.disabled,n=e.onClick,a=e.intl;return Object(c.a)("div",{className:"compose-form__sensitive-button"},void 0,Object(c.a)("label",{className:A()("icon-button",{active:t}),title:a.formatMessage(t?Be.marked:Be.unmarked)},void 0,Object(c.a)("input",{name:"mark-sensitive",type:"checkbox",checked:t,onChange:n,disabled:o}),Object(c.a)("span",{className:A()("checkbox",{active:t})}),Object(c.a)(k.b,{id:"compose_form.sensitive.hide",defaultMessage:"Mark media as sensitive"})))},t}(p.a.PureComponent),Ye=Object(i.connect)(function(e){return{active:e.getIn(["compose","sensitive"]),disabled:e.getIn(["compose","spoiler"])}},function(e){return{onClick:function(){e(Object(O.O)())}}})(Object(k.g)(Ge)),Xe=function(e){function t(){return e.apply(this,arguments)||this}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props.mediaIds;return Object(c.a)("div",{className:"compose-form__upload-wrapper"},void 0,Object(c.a)(ze,{icon:"upload",message:Object(c.a)(k.b,{id:"upload_progress.label",defaultMessage:"Uploading…"})}),Object(c.a)("div",{className:"compose-form__uploads-wrapper"},void 0,e.map(function(e){return Object(c.a)(He,{id:e},e)})),!e.isEmpty()&&Object(c.a)(Ye,{}))},t}(S.a);Object(u.a)(Xe,"propTypes",{mediaIds:f.a.list.isRequired});var Ve,Je,Ze,$e=Object(i.connect)(function(e){return{mediaIds:e.getIn(["compose","media_attachments"]).map(function(e){return e.get("id")})}})(Xe),Qe=function(e){function t(){return e.apply(this,arguments)||this}return Object(l.a)(t,e),t.prototype.render=function(){var e=this.props.message;return Object(c.a)(be.a,{defaultStyle:{opacity:0,scaleX:.85,scaleY:.75},style:{opacity:fe()(1,{damping:35,stiffness:400}),scaleX:fe()(1,{damping:35,stiffness:400}),scaleY:fe()(1,{damping:35,stiffness:400})}},void 0,function(t){var o=t.opacity,n=t.scaleX,a=t.scaleY;return Object(c.a)("div",{className:"compose-form__warning",style:{opacity:o,transform:"scale("+n+", "+a+")"}},void 0,e)})},t}(p.a.PureComponent),et=o(20),tt=/(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i,ot=Object(i.connect)(function(e){return{needsLockWarning:"private"===e.getIn(["compose","privacy"])&&!e.getIn(["accounts",et.m,"locked"]),hashtagWarning:"public"!==e.getIn(["compose","privacy"])&&tt.test(e.getIn(["compose","text"])),directMessageWarning:"direct"===e.getIn(["compose","privacy"])}})(function(e){var t=e.needsLockWarning,o=e.hashtagWarning,n=e.directMessageWarning;if(t)return Object(c.a)(Qe,{message:Object(c.a)(k.b,{id:"compose_form.lock_disclaimer",defaultMessage:"Your account is not {locked}. Anyone can follow you to view your follower-only posts.",values:{locked:Object(c.a)("a",{href:"/user-settings"},void 0,Object(c.a)(k.b,{id:"compose_form.lock_disclaimer.lock",defaultMessage:"locked"}))}})});if(o)return Object(c.a)(Qe,{message:Object(c.a)(k.b,{id:"compose_form.hashtag_warning",defaultMessage:"This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag."})});if(n){var a=Object(c.a)("span",{},void 0,Object(c.a)(k.b,{id:"compose_form.direct_message_warning",defaultMessage:"This toot will only be sent to all the mentioned users."})," ",Object(c.a)("a",{href:"/terms",target:"_blank"},void 0,Object(c.a)(k.b,{id:"compose_form.direct_message_warning_learn_more",defaultMessage:"Learn more"})));return Object(c.a)(Qe,{message:a})}return null}),nt=o(76),at="><
\u2028\u2029\t\n\v\f\r",st=Object(k.f)({placeholder:{id:"compose_form.placeholder",defaultMessage:"What is on your mind?"},spoiler_placeholder:{id:"compose_form.spoiler_placeholder",defaultMessage:"Write your warning here"},publish:{id:"compose_form.publish",defaultMessage:"Toot"},publishLoud:{id:"compose_form.publish_loud",defaultMessage:"{publish}!"}}),it=Object(k.g)((Ze=Je=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(u.a)(Object(r.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(u.a)(Object(r.a)(t),"handleKeyDown",function(e){13===e.keyCode&&(e.ctrlKey||e.metaKey)&&t.handleSubmit()}),Object(u.a)(Object(r.a)(t),"handleSubmit",function(){t.props.text!==t.autosuggestTextarea.textarea.value&&t.props.onChange(t.autosuggestTextarea.textarea.value);var e=t.props,o=e.isSubmitting,n=e.isChangingUpload,a=e.isUploading,s=e.anyMedia,i=[t.props.spoilerText,t.props.text].join("");o||a||n||Object(nt.length)(i)>et.l||0!==i.length&&0===i.trim().length&&!s||t.props.onSubmit(t.context.router?t.context.router.history:null)}),Object(u.a)(Object(r.a)(t),"onSuggestionsClearRequested",function(){t.props.onClearSuggestions()}),Object(u.a)(Object(r.a)(t),"onSuggestionsFetchRequested",function(e){t.props.onFetchSuggestions(e)}),Object(u.a)(Object(r.a)(t),"onSuggestionSelected",function(e,o,n){t.props.onSuggestionSelected(e,o,n,["text"])}),Object(u.a)(Object(r.a)(t),"onSpoilerSuggestionSelected",function(e,o,n){t.props.onSuggestionSelected(e,o,n,["spoiler_text"])}),Object(u.a)(Object(r.a)(t),"handleChangeSpoilerText",function(e){t.props.onChangeSpoilerText(e.target.value)}),Object(u.a)(Object(r.a)(t),"handleFocus",function(){if(t.composeForm&&!t.props.singleColumn){var e=t.composeForm.getBoundingClientRect(),o=e.left,n=e.right;(o<0||n>(window.innerWidth||document.documentElement.clientWidth))&&t.composeForm.scrollIntoView()}}),Object(u.a)(Object(r.a)(t),"setAutosuggestTextarea",function(e){t.autosuggestTextarea=e}),Object(u.a)(Object(r.a)(t),"setSpoilerText",function(e){t.spoilerText=e}),Object(u.a)(Object(r.a)(t),"setRef",function(e){t.composeForm=e}),Object(u.a)(Object(r.a)(t),"handleEmojiPick",function(e){var o=t.props.text,n=t.autosuggestTextarea.textarea.selectionStart,a=e.custom&&n>0&&!at.includes(o[n-1]);t.props.onPickEmoji(n,e,a)}),t}Object(l.a)(t,e);var o=t.prototype;return o.componentDidUpdate=function(e){var t,o;this.props.focusDate!==e.focusDate?(this.props.preselectDate!==e.preselectDate?(t=this.props.text.length,o=this.props.text.search(/\s/)+1):"number"==typeof this.props.caretPosition?(o=this.props.caretPosition,t=this.props.caretPosition):o=t=this.props.text.length,this.autosuggestTextarea.textarea.setSelectionRange(o,t),this.autosuggestTextarea.textarea.focus()):e.isSubmitting&&!this.props.isSubmitting?this.autosuggestTextarea.textarea.focus():this.props.spoiler!==e.spoiler&&(this.props.spoiler?this.spoilerText.input.focus():this.autosuggestTextarea.textarea.focus())},o.render=function(){var e=this.props,t=e.intl,o=e.onPaste,n=e.showSearch,a=e.anyMedia,s=this.props.isSubmitting,i=[this.props.spoilerText,this.props.text].join(""),r=s||this.props.isUploading||this.props.isChangingUpload||Object(nt.length)(i)>et.l||0!==i.length&&0===i.trim().length&&!a,l="";return l="private"===this.props.privacy||"direct"===this.props.privacy?Object(c.a)("span",{className:"compose-form__publish-private"},void 0,Object(c.a)(Oe.a,{id:"lock"})," ",t.formatMessage(st.publish)):"unlisted"!==this.props.privacy?t.formatMessage(st.publishLoud,{publish:t.formatMessage(st.publish)}):t.formatMessage(st.publish),Object(c.a)("div",{className:"compose-form"},void 0,Object(c.a)(ot,{}),Object(c.a)(D,{}),p.a.createElement("div",{className:"spoiler-input "+(this.props.spoiler?"spoiler-input--visible":""),ref:this.setRef},p.a.createElement(H,{placeholder:t.formatMessage(st.spoiler_placeholder),value:this.props.spoilerText,onChange:this.handleChangeSpoilerText,onKeyDown:this.handleKeyDown,disabled:!this.props.spoiler,ref:this.setSpoilerText,suggestions:this.props.suggestions,onSuggestionsFetchRequested:this.onSuggestionsFetchRequested,onSuggestionsClearRequested:this.onSuggestionsClearRequested,onSuggestionSelected:this.onSpoilerSuggestionSelected,searchTokens:[":"],id:"cw-spoiler-input",className:"spoiler-input__input"})),p.a.createElement(L,{ref:this.setAutosuggestTextarea,placeholder:t.formatMessage(st.placeholder),disabled:s,value:this.props.text,onChange:this.handleChange,suggestions:this.props.suggestions,onFocus:this.handleFocus,onKeyDown:this.handleKeyDown,onSuggestionsFetchRequested:this.onSuggestionsFetchRequested,onSuggestionsClearRequested:this.onSuggestionsClearRequested,onSuggestionSelected:this.onSuggestionSelected,onPaste:o,autoFocus:!n&&!Object(Se.b)(window.innerWidth)},Object(c.a)(Pe,{onPickEmoji:this.handleEmojiPick}),Object(c.a)("div",{className:"compose-form__modifiers"},void 0,Object(c.a)($e,{}),Object(c.a)(Le,{}))),Object(c.a)("div",{className:"compose-form__buttons-wrapper"},void 0,Object(c.a)("div",{className:"compose-form__buttons"},void 0,Object(c.a)(ie,{}),Object(c.a)(oe,{}),Object(c.a)(Me,{}),Object(c.a)(ue,{})),Object(c.a)("div",{className:"character-counter__wrapper"},void 0,Object(c.a)(g.a,{max:et.l,text:i}))),Object(c.a)("div",{className:"compose-form__publish"},void 0,Object(c.a)("div",{className:"compose-form__publish-button-wrapper"},void 0,Object(c.a)(b.a,{text:l,onClick:this.handleSubmit,disabled:r,block:!0}))))},t}(S.a),Object(u.a)(Je,"contextTypes",{router:j.a.object}),Object(u.a)(Je,"propTypes",{intl:j.a.object.isRequired,text:j.a.string.isRequired,suggestions:f.a.list,spoiler:j.a.bool,privacy:j.a.string,spoilerText:j.a.string,focusDate:j.a.instanceOf(Date),caretPosition:j.a.number,preselectDate:j.a.instanceOf(Date),isSubmitting:j.a.bool,isChangingUpload:j.a.bool,isUploading:j.a.bool,onChange:j.a.func.isRequired,onSubmit:j.a.func.isRequired,onClearSuggestions:j.a.func.isRequired,onFetchSuggestions:j.a.func.isRequired,onSuggestionSelected:j.a.func.isRequired,onChangeSpoilerText:j.a.func.isRequired,onPaste:j.a.func.isRequired,onPickEmoji:j.a.func.isRequired,showSearch:j.a.bool,anyMedia:j.a.bool,singleColumn:j.a.bool}),Object(u.a)(Je,"defaultProps",{showSearch:!1}),Ve=Ze))||Ve;t.a=Object(i.connect)(function(e){return{text:e.getIn(["compose","text"]),suggestions:e.getIn(["compose","suggestions"]),spoiler:e.getIn(["compose","spoiler"]),spoilerText:e.getIn(["compose","spoiler_text"]),privacy:e.getIn(["compose","privacy"]),focusDate:e.getIn(["compose","focusDate"]),caretPosition:e.getIn(["compose","caretPosition"]),preselectDate:e.getIn(["compose","preselectDate"]),isSubmitting:e.getIn(["compose","is_submitting"]),isChangingUpload:e.getIn(["compose","is_changing_upload"]),isUploading:e.getIn(["compose","is_uploading"]),showSearch:e.getIn(["search","submitted"])&&!e.getIn(["search","hidden"]),anyMedia:e.getIn(["compose","media_attachments"]).size>0}},function(e){return{onChange:function(t){e(Object(O.N)(t))},onSubmit:function(t){e(Object(O.jb)(t))},onClearSuggestions:function(){e(Object(O.W)())},onFetchSuggestions:function(t){e(Object(O.Z)(t))},onSuggestionSelected:function(t,o,n,a){e(Object(O.ib)(t,o,n,a))},onChangeSpoilerText:function(t){e(Object(O.P)(t))},onPaste:function(t){e(Object(O.mb)(t))},onPickEmoji:function(t,o,n){e(Object(O.bb)(t,o,n))}}})(it)},693:function(e,t,o){"use strict";var n=o(12),a=o(6),s=o(688),i=o(638),c=o(47),r=o(20),l=Object(a.f)({logoutMessage:{id:"confirmations.logout.message",defaultMessage:"Are you sure you want to log out?"},logoutConfirm:{id:"confirmations.logout.confirm",defaultMessage:"Log out"}});t.a=Object(a.g)(Object(n.connect)(function(e){return{account:e.getIn(["accounts",r.m])}},function(e,t){var o=t.intl;return{onLogout:function(){e(Object(c.d)("CONFIRM",{message:o.formatMessage(l.logoutMessage),confirm:o.formatMessage(l.logoutConfirm),onConfirm:function(){return Object(i.a)()}}))}}})(s.a))},719:function(e,t,o){"use strict";o.r(t),o.d(t,"default",function(){return M});var n,a=o(0),s=o(2),i=o(7),c=o(1),r=o(3),l=o.n(r),u=o(574),d=o(693),p=o(12),g=o(21),b=o(310),m=o(6),f=o(687),h=o(88),j=o(34),O=o.n(j),v=o(1097),y=o(47),_=o(20),C=o(27),k=o(638),S=Object(m.f)({start:{id:"getting_started.heading",defaultMessage:"Getting started"},home_timeline:{id:"tabs_bar.home",defaultMessage:"Home"},notifications:{id:"tabs_bar.notifications",defaultMessage:"Notifications"},public:{id:"navigation_bar.public_timeline",defaultMessage:"Federated timeline"},community:{id:"navigation_bar.community_timeline",defaultMessage:"Local timeline"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},logout:{id:"navigation_bar.logout",defaultMessage:"Logout"},compose:{id:"navigation_bar.compose",defaultMessage:"Compose new toot"},logoutMessage:{id:"confirmations.logout.message",defaultMessage:"Are you sure you want to log out?"},logoutConfirm:{id:"confirmations.logout.confirm",defaultMessage:"Log out"}}),M=Object(p.connect)(function(e,t){return{columns:e.getIn(["settings","columns"]),showSearch:t.multiColumn?e.getIn(["search","submitted"])&&!e.getIn(["search","hidden"]):t.isSearchPage}})(n=Object(m.g)(n=function(e){function t(){for(var t,o=arguments.length,n=new Array(o),a=0;a<o;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(c.a)(Object(s.a)(t),"handleLogoutClick",function(e){var o=t.props,n=o.dispatch,a=o.intl;return e.preventDefault(),e.stopPropagation(),n(Object(y.d)("CONFIRM",{message:a.formatMessage(S.logoutMessage),confirm:a.formatMessage(S.logoutConfirm),onConfirm:function(){return Object(k.a)()}})),!1}),Object(c.a)(Object(s.a)(t),"onFocus",function(){t.props.dispatch(Object(g.S)(!0))}),Object(c.a)(Object(s.a)(t),"onBlur",function(){t.props.dispatch(Object(g.S)(!1))}),t}Object(i.a)(t,e);var o=t.prototype;return o.componentDidMount=function(){this.props.isSearchPage||this.props.dispatch(Object(g.db)())},o.componentWillUnmount=function(){this.props.isSearchPage||this.props.dispatch(Object(g.lb)())},o.render=function(){var e=this.props,t=e.multiColumn,o=e.showSearch,n=e.isSearchPage,s=e.intl,i="";if(t){var c=this.props.columns;i=Object(a.a)("nav",{className:"drawer__header"},void 0,Object(a.a)(b.a,{to:"/getting-started",className:"drawer__tab",title:s.formatMessage(S.start),"aria-label":s.formatMessage(S.start)},void 0,Object(a.a)(C.a,{id:"bars",fixedWidth:!0})),!c.some(function(e){return"HOME"===e.get("id")})&&Object(a.a)(b.a,{to:"/timelines/home",className:"drawer__tab",title:s.formatMessage(S.home_timeline),"aria-label":s.formatMessage(S.home_timeline)},void 0,Object(a.a)(C.a,{id:"home",fixedWidth:!0})),!c.some(function(e){return"NOTIFICATIONS"===e.get("id")})&&Object(a.a)(b.a,{to:"/notifications",className:"drawer__tab",title:s.formatMessage(S.notifications),"aria-label":s.formatMessage(S.notifications)},void 0,Object(a.a)(C.a,{id:"bell",fixedWidth:!0})),!c.some(function(e){return"COMMUNITY"===e.get("id")})&&Object(a.a)(b.a,{to:"/timelines/public/local",className:"drawer__tab",title:s.formatMessage(S.community),"aria-label":s.formatMessage(S.community)},void 0,Object(a.a)(C.a,{id:"users",fixedWidth:!0})),!c.some(function(e){return"PUBLIC"===e.get("id")})&&Object(a.a)(b.a,{to:"/timelines/public",className:"drawer__tab",title:s.formatMessage(S.public),"aria-label":s.formatMessage(S.public)},void 0,Object(a.a)(C.a,{id:"globe",fixedWidth:!0})),Object(a.a)("a",{href:"/user-settings",className:"drawer__tab",title:s.formatMessage(S.preferences),"aria-label":s.formatMessage(S.preferences)},void 0,Object(a.a)(C.a,{id:"cog",fixedWidth:!0})),Object(a.a)("a",{href:"/auth/sign_out",className:"drawer__tab",title:s.formatMessage(S.logout),"aria-label":s.formatMessage(S.logout),onClick:this.handleLogoutClick},void 0,Object(a.a)(C.a,{id:"sign-out",fixedWidth:!0})))}return Object(a.a)("div",{className:"drawer",role:"region","aria-label":s.formatMessage(S.compose)},void 0,i,(t||n)&&Object(a.a)(f.a,{}),Object(a.a)("div",{className:"drawer__pager"},void 0,!n&&Object(a.a)("div",{className:"drawer__inner",onFocus:this.onFocus},void 0,Object(a.a)(d.a,{onClose:this.onBlur}),Object(a.a)(u.a,{}),Object(a.a)("div",{className:"drawer__inner__mastodon"},void 0,Object(a.a)("img",{alt:"",draggable:"false",src:_.k||elephantUIPlane}))),Object(a.a)(h.a,{defaultStyle:{x:n?0:-100},style:{x:O()(o||n?0:-100,{stiffness:210,damping:20})}},void 0,function(e){var t=e.x;return Object(a.a)("div",{className:"drawer__inner darker",style:{transform:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,Object(a.a)(v.a,{}))})))},t}(l.a.PureComponent))||n)||n}}]); //# sourceMappingURL=compose.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/compose.js.map b/priv/static/packs/features/compose.js.map index 3ce8bff0e..f87484bdd 100644 --- a/priv/static/packs/features/compose.js.map +++ b/priv/static/packs/features/compose.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/components/autosuggest_emoji.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/character_counter.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/reply_indicator.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/reply_indicator_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/autosuggest_account.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/autosuggest_account_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/components/autosuggest_textarea.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/poll_button.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/poll_button_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload_button.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_button_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/text_icon_button.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/spoiler_button_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/privacy_dropdown.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/privacy_dropdown_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/poll_form.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/poll_form_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload_progress.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_progress_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload_form.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_form_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/warning.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/warning_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/compose_form.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/compose_form_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/navigation_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/search.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/search_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/components/hashtag.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/components/search_results.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/search_results_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/compose/index.js"],"names":["assetHost","process","env","CDN_HOST","AutosuggestEmoji","render","url","emoji","this","props","custom","imageUrl","mapping","unicodeMapping","native","replace","filename","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","className","src","alt","colons","React","PureComponent","EmojiPicker","Emoji","messages","defineMessages","id","defaultMessage","emoji_search","emoji_not_found","recent","search_results","people","nature","food","activity","travel","objects","symbols","flags","backgroundImageFn","listenerOptions","detectPassiveEvents","hasSupport","passive","categoriesSort","ModifierPickerMenu","e","_this","onSelect","currentTarget","getAttribute","node","contains","target","onClose","c","componentWillReceiveProps","nextProps","active","attachListeners","removeListeners","componentWillUnmount","document","addEventListener","handleDocumentClick","removeEventListener","react__WEBPACK_IMPORTED_MODULE_4___default","a","createElement","style","display","ref","setRef","onClick","handleClick","data-index","set","size","sheetSize","skin","ModifierPicker","_this2","onOpen","modifier","onChange","_this$props","handleSelect","EmojiPickerMenu","injectIntl","modifierOpen","placement","_this3","intl","search","formatMessage","notfound","categories","foods","places","onPick","setState","onSkinTone","componentDidMount","_this$props2","loading","custom_emojis","skinTone","frequentlyUsedEmojis","width","title","state","classNames","selecting","perLine","emojiSize","buildCustomEmojis","color","i18n","getI18n","include","showPreview","autoFocus","emojiTooltip","handleModifierOpen","handleModifierClose","handleModifierChange","EmojiPickerDropdown","_this4","dropdown","_ref","EmojiPickerAsync","then","EmojiMart","Picker","catch","top","getBoundingClientRect","innerHeight","key","onHideDropdown","onShowDropdown","_this$props3","onPickEmoji","_this$state","onKeyDown","handleKeyDown","setTargetRef","aria-label","aria-expanded","role","onToggle","tabIndex","pulse-loading","react_overlays_lib_Overlay__WEBPACK_IMPORTED_MODULE_7___default","show","findTarget","CharacterCounter","checkRemainingText","diff","jsx","max","length","text","cancel","ReplyIndicator","onCancel","button","ctrlKey","metaKey","preventDefault","context","router","history","push","status","getIn","content","__html","get","direction","isRtl","icon_button","icon","inverted","href","handleAccountClick","avatar","account","display_name","dangerouslySetInnerHTML","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","func","isRequired","connect","getStatus","makeGetStatus","dispatch","cancelReplyCompose","AutosuggestAccount","getAccount","makeGetAccount","AutosuggestTextarea","suggestionsHidden","selectedSuggestion","lastToken","tokenStart","str","caretPosition","word","left","right","_textAtCursorMatchesT","value","selectionStart","slice","trim","indexOf","toLowerCase","token","onSuggestionsFetchRequested","onSuggestionsClearRequested","suggestions","disabled","which","isComposing","querySelector","parentElement","focus","Math","min","stopPropagation","onSuggestionSelected","defaultPrevented","suggestion","textarea","clipboardData","files","onPaste","i","inner","autosuggest_emoji","autosuggest_account_container","selected","onMouseDown","onSuggestionClick","placeholder","onKeyUp","react_textarea_autosize_esm_browser","inputRef","setTextarea","onBlur","aria-autocomplete","isEmpty","renderSuggestion","string","list","bool","add_poll","remove_poll","iconStyle","height","lineHeight","PollButton","unavailable","_","getState","removePoll","addPoll","upload","UploadButton","acceptContentTypes","onSelectFile","fileElement","click","resetFileKey","react_default","type","multiple","accept","toArray","join","handleChange","number","listOf","some","m","uploadCompose","TextIconButton","label","ariaControls","aria-controls","marked","unmarked","changeComposeSpoilerness","public_short","public_long","unlisted_short","unlisted_long","private_short","private_long","direct_short","direct_long","change_privacy","PrivacyDropdownMenu","mounted","element","items","index","findIndex","item","childNodes","firstChild","lastChild","focusedItem","optional_motion","defaultStyle","opacity","scaleX","scaleY","spring","damping","stiffness","objectSpread","transform","aria-selected","setFocusRef","components_icon","fixedWidth","meta","PrivacyDropdown","open","_ref2","isUserTouching","onModalClose","onModalOpen","actions","options","option","handleModalActionClick","handleClose","componentWillMount","valueOption","find","expanded","handleToggle","Overlay_default","privacy_dropdown_PrivacyDropdownMenu","isModalOpen","modalType","changeComposeVisibility","openModal","closeModal","SensitiveButton","visible","scale","compose-form__sensitive-button--visible","changeComposeSensitivity","DEFAULTS","getFrequentlyUsedEmojis","createSelector","ImmutableMap","emojiCounters","emojis","keySeq","sort","b","reverse","uniqueDefaults","filter","includes","concat","getCustomEmojis","aShort","bShort","changeSetting","useEmoji","option_placeholder","add_option","remove_option","poll_duration","minutes","hours","days","Option","onRemove","onToggleMultiple","isPollMultiple","checkbox","handleToggleMultiple","maxLength","handleOptionTitleChange","handleOptionRemove","PollForm","onAddOption","onChangeSettings","isMultiple","expiresIn","onChangeOption","onRemoveOption","poll_form_Option","handleAddOption","index_es","handleSelectDuration","addPollOption","removePollOption","changePollOption","changePollSettings","UploadProgress","progress","description","Upload","hovered","focused","dirtyDescription","keyCode","handleSubmit","handleInputBlur","onSubmit","onUndo","media","onOpenFocalPoint","onDescriptionChange","focusX","focusY","x","y","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","backgroundImage","backgroundPosition","handleUndoClick","handleFocalPointClick","onFocus","handleInputFocus","handleInputChange","undoUploadCompose","changeUploadCompose","submitCompose","UploadForm","mediaIds","upload_progress_container","upload_container","Warning","message","APPROX_HASHTAG_RE","needsLockWarning","me","hashtagWarning","test","directMessageWarning","warning_Warning","values","locked","spoiler_placeholder","publish","publishLoud","ComposeForm","autosuggestTextarea","isSubmitting","isChangingUpload","isUploading","anyMedia","fulltext","spoilerText","maxChars","onClearSuggestions","onFetchSuggestions","onChangeSpoilerText","data","position","needsSpace","componentDidUpdate","prevProps","selectionEnd","focusDate","preselectDate","setSelectionRange","spoiler","showSearch","disabledButton","publishText","privacy","warning_container","reply_indicator_container","handleChangeSpoilerText","setSpoilerText","autosuggest_textarea_AutosuggestTextarea","setAutosuggestTextarea","isMobile","window","innerWidth","emoji_picker_dropdown_container","handleEmojiPick","upload_form_container","poll_form_container","upload_button_container","poll_button_container","privacy_dropdown_container","sensitive_button_container","spoiler_button_container","character_counter_CharacterCounter","components_button","block","instanceOf","Date","is_submitting","changeCompose","clearComposeSuggestions","fetchComposeSuggestions","selectComposeSuggestion","checked","changeComposeSpoilerText","insertEmojiCompose","NavigationBar","SearchPopout","extraInformation","searchEnabled","Search","submitted","onClear","onShow","hasValue","handleKeyUp","handleFocus","handleBlur","handleClear","search_SearchPopout","changeSearch","clearSearch","submitSearch","Hashtag","hashtag","permalink","to","rawCount","count","shortNumberFormat","build","day","fill","dismissSuggestion","SearchResults","fetchSuggestions","accounts","statuses","hashtags","results","accountId","account_container","actionIcon","actionTitle","onActionClick","statusId","status_container","components_hashtag","start","home_timeline","notifications","public","community","preferences","logout","compose","Compose","ownProps","columns","multiColumn","isSearchPage","changeComposing","mountCompose","unmountCompose","header","Link","column","data-method","search_container","navigation_container","compose_form_container","visibility","search_results_container"],"mappings":"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","file":"features/compose.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport unicodeMapping from '../features/emoji/emoji_unicode_mapping_light';\n\nconst assetHost = process.env.CDN_HOST || '';\n\nexport default class AutosuggestEmoji extends React.PureComponent {\n\n static propTypes = {\n emoji: PropTypes.object.isRequired,\n };\n\n render () {\n const { emoji } = this.props;\n let url;\n\n if (emoji.custom) {\n url = emoji.imageUrl;\n } else {\n const mapping = unicodeMapping[emoji.native] || unicodeMapping[emoji.native.replace(/\\uFE0F$/, '')];\n\n if (!mapping) {\n return null;\n }\n\n url = `${assetHost}/emoji/${mapping.filename}.svg`;\n }\n\n return (\n <div className='autosuggest-emoji'>\n <img\n className='emojione'\n src={url}\n alt={emoji.native || emoji.colons}\n />\n\n {emoji.colons}\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport detectPassiveEvents from 'detect-passive-events';\nimport { buildCustomEmojis } from '../../emoji/emoji';\n\nconst messages = defineMessages({\n emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },\n emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' },\n emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' },\n custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },\n recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },\n search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' },\n people: { id: 'emoji_button.people', defaultMessage: 'People' },\n nature: { id: 'emoji_button.nature', defaultMessage: 'Nature' },\n food: { id: 'emoji_button.food', defaultMessage: 'Food & Drink' },\n activity: { id: 'emoji_button.activity', defaultMessage: 'Activity' },\n travel: { id: 'emoji_button.travel', defaultMessage: 'Travel & Places' },\n objects: { id: 'emoji_button.objects', defaultMessage: 'Objects' },\n symbols: { id: 'emoji_button.symbols', defaultMessage: 'Symbols' },\n flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' },\n});\n\nconst assetHost = process.env.CDN_HOST || '';\nlet EmojiPicker, Emoji; // load asynchronously\n\nconst backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;\nconst listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;\n\nconst categoriesSort = [\n 'recent',\n 'custom',\n 'people',\n 'nature',\n 'foods',\n 'activity',\n 'places',\n 'objects',\n 'symbols',\n 'flags',\n];\n\nclass ModifierPickerMenu extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n };\n\n handleClick = e => {\n this.props.onSelect(e.currentTarget.getAttribute('data-index') * 1);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.active) {\n this.attachListeners();\n } else {\n this.removeListeners();\n }\n }\n\n componentWillUnmount () {\n this.removeListeners();\n }\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n attachListeners () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n removeListeners () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n render () {\n const { active } = this.props;\n\n return (\n <div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>\n <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button>\n </div>\n );\n }\n\n}\n\nclass ModifierPicker extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n modifier: PropTypes.number,\n onChange: PropTypes.func,\n onClose: PropTypes.func,\n onOpen: PropTypes.func,\n };\n\n handleClick = () => {\n if (this.props.active) {\n this.props.onClose();\n } else {\n this.props.onOpen();\n }\n }\n\n handleSelect = modifier => {\n this.props.onChange(modifier);\n this.props.onClose();\n }\n\n render () {\n const { active, modifier } = this.props;\n\n return (\n <div className='emoji-picker-dropdown__modifiers'>\n <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />\n <ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} />\n </div>\n );\n }\n\n}\n\n@injectIntl\nclass EmojiPickerMenu extends React.PureComponent {\n\n static propTypes = {\n custom_emojis: ImmutablePropTypes.list,\n frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n loading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onPick: PropTypes.func.isRequired,\n style: PropTypes.object,\n placement: PropTypes.string,\n arrowOffsetLeft: PropTypes.string,\n arrowOffsetTop: PropTypes.string,\n intl: PropTypes.object.isRequired,\n skinTone: PropTypes.number.isRequired,\n onSkinTone: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n style: {},\n loading: true,\n frequentlyUsedEmojis: [],\n };\n\n state = {\n modifierOpen: false,\n placement: null,\n };\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n componentDidMount () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n componentWillUnmount () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n getI18n = () => {\n const { intl } = this.props;\n\n return {\n search: intl.formatMessage(messages.emoji_search),\n notfound: intl.formatMessage(messages.emoji_not_found),\n categories: {\n search: intl.formatMessage(messages.search_results),\n recent: intl.formatMessage(messages.recent),\n people: intl.formatMessage(messages.people),\n nature: intl.formatMessage(messages.nature),\n foods: intl.formatMessage(messages.food),\n activity: intl.formatMessage(messages.activity),\n places: intl.formatMessage(messages.travel),\n objects: intl.formatMessage(messages.objects),\n symbols: intl.formatMessage(messages.symbols),\n flags: intl.formatMessage(messages.flags),\n custom: intl.formatMessage(messages.custom),\n },\n };\n }\n\n handleClick = emoji => {\n if (!emoji.native) {\n emoji.native = emoji.colons;\n }\n\n this.props.onClose();\n this.props.onPick(emoji);\n }\n\n handleModifierOpen = () => {\n this.setState({ modifierOpen: true });\n }\n\n handleModifierClose = () => {\n this.setState({ modifierOpen: false });\n }\n\n handleModifierChange = modifier => {\n this.props.onSkinTone(modifier);\n }\n\n render () {\n const { loading, style, intl, custom_emojis, skinTone, frequentlyUsedEmojis } = this.props;\n\n if (loading) {\n return <div style={{ width: 299 }} />;\n }\n\n const title = intl.formatMessage(messages.emoji);\n const { modifierOpen } = this.state;\n\n return (\n <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}>\n <EmojiPicker\n perLine={8}\n emojiSize={22}\n sheetSize={32}\n custom={buildCustomEmojis(custom_emojis)}\n color=''\n emoji=''\n set='twitter'\n title={title}\n i18n={this.getI18n()}\n onClick={this.handleClick}\n include={categoriesSort}\n recent={frequentlyUsedEmojis}\n skin={skinTone}\n showPreview={false}\n backgroundImageFn={backgroundImageFn}\n autoFocus\n emojiTooltip\n />\n\n <ModifierPicker\n active={modifierOpen}\n modifier={skinTone}\n onOpen={this.handleModifierOpen}\n onClose={this.handleModifierClose}\n onChange={this.handleModifierChange}\n />\n </div>\n );\n }\n\n}\n\nexport default @injectIntl\nclass EmojiPickerDropdown extends React.PureComponent {\n\n static propTypes = {\n custom_emojis: ImmutablePropTypes.list,\n frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n intl: PropTypes.object.isRequired,\n onPickEmoji: PropTypes.func.isRequired,\n onSkinTone: PropTypes.func.isRequired,\n skinTone: PropTypes.number.isRequired,\n };\n\n state = {\n active: false,\n loading: false,\n };\n\n setRef = (c) => {\n this.dropdown = c;\n }\n\n onShowDropdown = ({ target }) => {\n this.setState({ active: true });\n\n if (!EmojiPicker) {\n this.setState({ loading: true });\n\n EmojiPickerAsync().then(EmojiMart => {\n EmojiPicker = EmojiMart.Picker;\n Emoji = EmojiMart.Emoji;\n\n this.setState({ loading: false });\n }).catch(() => {\n this.setState({ loading: false });\n });\n }\n\n const { top } = target.getBoundingClientRect();\n this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n }\n\n onHideDropdown = () => {\n this.setState({ active: false });\n }\n\n onToggle = (e) => {\n if (!this.state.loading && (!e.key || e.key === 'Enter')) {\n if (this.state.active) {\n this.onHideDropdown();\n } else {\n this.onShowDropdown(e);\n }\n }\n }\n\n handleKeyDown = e => {\n if (e.key === 'Escape') {\n this.onHideDropdown();\n }\n }\n\n setTargetRef = c => {\n this.target = c;\n }\n\n findTarget = () => {\n return this.target;\n }\n\n render () {\n const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props;\n const title = intl.formatMessage(messages.emoji);\n const { active, loading, placement } = this.state;\n\n return (\n <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>\n <div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>\n <img\n className={classNames('emojione', { 'pulse-loading': active && loading })}\n alt='🙂'\n src={`${assetHost}/emoji/1f602.svg`}\n />\n </div>\n\n <Overlay show={active} placement={placement} target={this.findTarget}>\n <EmojiPickerMenu\n custom_emojis={this.props.custom_emojis}\n loading={loading}\n onClose={this.onHideDropdown}\n onPick={onPickEmoji}\n onSkinTone={onSkinTone}\n skinTone={skinTone}\n frequentlyUsedEmojis={frequentlyUsedEmojis}\n />\n </Overlay>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { length } from 'stringz';\n\nexport default class CharacterCounter extends React.PureComponent {\n\n static propTypes = {\n text: PropTypes.string.isRequired,\n max: PropTypes.number.isRequired,\n };\n\n checkRemainingText (diff) {\n if (diff < 0) {\n return <span className='character-counter character-counter--over'>{diff}</span>;\n }\n\n return <span className='character-counter'>{diff}</span>;\n }\n\n render () {\n const diff = this.props.max - length(this.props.text);\n return this.checkRemainingText(diff);\n }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from '../../../components/avatar';\nimport IconButton from '../../../components/icon_button';\nimport DisplayName from '../../../components/display_name';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { isRtl } from '../../../rtl';\n\nconst messages = defineMessages({\n cancel: { id: 'reply_indicator.cancel', defaultMessage: 'Cancel' },\n});\n\nexport default @injectIntl\nclass ReplyIndicator extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n onCancel: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleClick = () => {\n this.props.onCancel();\n }\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n }\n\n render () {\n const { status, intl } = this.props;\n\n if (!status) {\n return null;\n }\n\n const content = { __html: status.get('contentHtml') };\n const style = {\n direction: isRtl(status.get('search_index')) ? 'rtl' : 'ltr',\n };\n\n return (\n <div className='reply-indicator'>\n <div className='reply-indicator__header'>\n <div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} inverted /></div>\n\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='reply-indicator__display-name'>\n <div className='reply-indicator__display-avatar'><Avatar account={status.get('account')} size={24} /></div>\n <DisplayName account={status.get('account')} />\n </a>\n </div>\n\n <div className='reply-indicator__content' style={style} dangerouslySetInnerHTML={content} />\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { cancelReplyCompose } from '../../../actions/compose';\nimport { makeGetStatus } from '../../../selectors';\nimport ReplyIndicator from '../components/reply_indicator';\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const mapStateToProps = state => ({\n status: getStatus(state, { id: state.getIn(['compose', 'in_reply_to']) }),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n\n onCancel () {\n dispatch(cancelReplyCompose());\n },\n\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(ReplyIndicator);\n","import React from 'react';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class AutosuggestAccount extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n\n return (\n <div className='autosuggest-account' title={account.get('acct')}>\n <div className='autosuggest-account-icon'><Avatar account={account} size={18} /></div>\n <DisplayName account={account} />\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport AutosuggestAccount from '../components/autosuggest_account';\nimport { makeGetAccount } from '../../../selectors';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { id }) => ({\n account: getAccount(state, id),\n });\n\n return mapStateToProps;\n};\n\nexport default connect(makeMapStateToProps)(AutosuggestAccount);\n","import React from 'react';\nimport AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container';\nimport AutosuggestEmoji from './autosuggest_emoji';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { isRtl } from '../rtl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Textarea from 'react-textarea-autosize';\nimport classNames from 'classnames';\n\nconst textAtCursorMatchesToken = (str, caretPosition) => {\n let word;\n\n let left = str.slice(0, caretPosition).search(/\\S+$/);\n let right = str.slice(caretPosition).search(/\\s/);\n\n if (right < 0) {\n word = str.slice(left);\n } else {\n word = str.slice(left, right + caretPosition);\n }\n\n if (!word || word.trim().length < 3 || ['@', ':', '#'].indexOf(word[0]) === -1) {\n return [null, null];\n }\n\n word = word.trim().toLowerCase();\n\n if (word.length > 0) {\n return [left + 1, word];\n } else {\n return [null, null];\n }\n};\n\nexport default class AutosuggestTextarea extends ImmutablePureComponent {\n\n static propTypes = {\n value: PropTypes.string,\n suggestions: ImmutablePropTypes.list,\n disabled: PropTypes.bool,\n placeholder: PropTypes.string,\n onSuggestionSelected: PropTypes.func.isRequired,\n onSuggestionsClearRequested: PropTypes.func.isRequired,\n onSuggestionsFetchRequested: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onKeyUp: PropTypes.func,\n onKeyDown: PropTypes.func,\n onPaste: PropTypes.func.isRequired,\n autoFocus: PropTypes.bool,\n };\n\n static defaultProps = {\n autoFocus: true,\n };\n\n state = {\n suggestionsHidden: false,\n selectedSuggestion: 0,\n lastToken: null,\n tokenStart: 0,\n };\n\n onChange = (e) => {\n const [ tokenStart, token ] = textAtCursorMatchesToken(e.target.value, e.target.selectionStart);\n\n if (token !== null && this.state.lastToken !== token) {\n this.setState({ lastToken: token, selectedSuggestion: 0, tokenStart });\n this.props.onSuggestionsFetchRequested(token);\n } else if (token === null) {\n this.setState({ lastToken: null });\n this.props.onSuggestionsClearRequested();\n }\n\n this.props.onChange(e);\n }\n\n onKeyDown = (e) => {\n const { suggestions, disabled } = this.props;\n const { selectedSuggestion, suggestionsHidden } = this.state;\n\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (e.which === 229 || e.isComposing) {\n // Ignore key events during text composition\n // e.key may be a name of the physical key even in this case (e.x. Safari / Chrome on Mac)\n return;\n }\n\n switch(e.key) {\n case 'Escape':\n if (suggestions.size === 0 || suggestionsHidden) {\n document.querySelector('.ui').parentElement.focus();\n } else {\n e.preventDefault();\n this.setState({ suggestionsHidden: true });\n }\n\n break;\n case 'ArrowDown':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.min(selectedSuggestion + 1, suggestions.size - 1) });\n }\n\n break;\n case 'ArrowUp':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.max(selectedSuggestion - 1, 0) });\n }\n\n break;\n case 'Enter':\n case 'Tab':\n // Select suggestion\n if (this.state.lastToken !== null && suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n e.stopPropagation();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestions.get(selectedSuggestion));\n }\n\n break;\n }\n\n if (e.defaultPrevented || !this.props.onKeyDown) {\n return;\n }\n\n this.props.onKeyDown(e);\n }\n\n onBlur = () => {\n this.setState({ suggestionsHidden: true });\n }\n\n onSuggestionClick = (e) => {\n const suggestion = this.props.suggestions.get(e.currentTarget.getAttribute('data-index'));\n e.preventDefault();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestion);\n this.textarea.focus();\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.suggestions !== this.props.suggestions && nextProps.suggestions.size > 0 && this.state.suggestionsHidden) {\n this.setState({ suggestionsHidden: false });\n }\n }\n\n setTextarea = (c) => {\n this.textarea = c;\n }\n\n onPaste = (e) => {\n if (e.clipboardData && e.clipboardData.files.length === 1) {\n this.props.onPaste(e.clipboardData.files);\n e.preventDefault();\n }\n }\n\n renderSuggestion = (suggestion, i) => {\n const { selectedSuggestion } = this.state;\n let inner, key;\n\n if (typeof suggestion === 'object') {\n inner = <AutosuggestEmoji emoji={suggestion} />;\n key = suggestion.id;\n } else if (suggestion[0] === '#') {\n inner = suggestion;\n key = suggestion;\n } else {\n inner = <AutosuggestAccountContainer id={suggestion} />;\n key = suggestion;\n }\n\n return (\n <div role='button' tabIndex='0' key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}>\n {inner}\n </div>\n );\n }\n\n render () {\n const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus } = this.props;\n const { suggestionsHidden } = this.state;\n const style = { direction: 'ltr' };\n\n if (isRtl(value)) {\n style.direction = 'rtl';\n }\n\n return (\n <div className='autosuggest-textarea'>\n <label>\n <span style={{ display: 'none' }}>{placeholder}</span>\n\n <Textarea\n inputRef={this.setTextarea}\n className='autosuggest-textarea__textarea'\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n value={value}\n onChange={this.onChange}\n onKeyDown={this.onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={this.onBlur}\n onPaste={this.onPaste}\n style={style}\n aria-autocomplete='list'\n />\n </label>\n\n <div className={`autosuggest-textarea__suggestions ${suggestionsHidden || suggestions.isEmpty() ? '' : 'autosuggest-textarea__suggestions--visible'}`}>\n {suggestions.map(this.renderSuggestion)}\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport IconButton from '../../../components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add a poll' },\n remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' },\n});\n\nconst iconStyle = {\n height: null,\n lineHeight: '27px',\n};\n\nexport default\n@injectIntl\nclass PollButton extends React.PureComponent {\n\n static propTypes = {\n disabled: PropTypes.bool,\n unavailable: PropTypes.bool,\n active: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleClick = () => {\n this.props.onClick();\n }\n\n render () {\n const { intl, active, unavailable, disabled } = this.props;\n\n if (unavailable) {\n return null;\n }\n\n return (\n <div className='compose-form__poll-button'>\n <IconButton\n icon='tasks'\n title={intl.formatMessage(active ? messages.remove_poll : messages.add_poll)}\n disabled={disabled}\n onClick={this.handleClick}\n className={`compose-form__poll-button-icon ${active ? 'active' : ''}`}\n size={18}\n inverted\n style={iconStyle}\n />\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PollButton from '../components/poll_button';\nimport { addPoll, removePoll } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n unavailable: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0),\n active: state.getIn(['compose', 'poll']) !== null,\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch((_, getState) => {\n if (getState().getIn(['compose', 'poll'])) {\n dispatch(removePoll());\n } else {\n dispatch(addPoll());\n }\n });\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PollButton);\n","import React from 'react';\nimport IconButton from '../../../components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\nconst messages = defineMessages({\n upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' },\n});\n\nconst makeMapStateToProps = () => {\n const mapStateToProps = state => ({\n acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),\n });\n\n return mapStateToProps;\n};\n\nconst iconStyle = {\n height: null,\n lineHeight: '27px',\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass UploadButton extends ImmutablePureComponent {\n\n static propTypes = {\n disabled: PropTypes.bool,\n unavailable: PropTypes.bool,\n onSelectFile: PropTypes.func.isRequired,\n style: PropTypes.object,\n resetFileKey: PropTypes.number,\n acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleChange = (e) => {\n if (e.target.files.length > 0) {\n this.props.onSelectFile(e.target.files);\n }\n }\n\n handleClick = () => {\n this.fileElement.click();\n }\n\n setRef = (c) => {\n this.fileElement = c;\n }\n\n render () {\n const { intl, resetFileKey, unavailable, disabled, acceptContentTypes } = this.props;\n\n if (unavailable) {\n return null;\n }\n\n return (\n <div className='compose-form__upload-button'>\n <IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.upload)}</span>\n <input\n key={resetFileKey}\n ref={this.setRef}\n type='file'\n multiple\n accept={acceptContentTypes.toArray().join(',')}\n onChange={this.handleChange}\n disabled={disabled}\n style={{ display: 'none' }}\n />\n </label>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport UploadButton from '../components/upload_button';\nimport { uploadCompose } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')),\n unavailable: state.getIn(['compose', 'poll']) !== null,\n resetFileKey: state.getIn(['compose', 'resetFileKey']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onSelectFile (files) {\n dispatch(uploadCompose(files));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UploadButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport default class TextIconButton extends React.PureComponent {\n\n static propTypes = {\n label: PropTypes.string.isRequired,\n title: PropTypes.string,\n active: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n ariaControls: PropTypes.string,\n };\n\n handleClick = (e) => {\n e.preventDefault();\n this.props.onClick();\n }\n\n render () {\n const { label, title, active, ariaControls } = this.props;\n\n return (\n <button title={title} aria-label={title} className={`text-icon-button ${active ? 'active' : ''}`} aria-expanded={active} onClick={this.handleClick} aria-controls={ariaControls}>\n {label}\n </button>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport TextIconButton from '../components/text_icon_button';\nimport { changeComposeSpoilerness } from '../../../actions/compose';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nconst messages = defineMessages({\n marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },\n unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' },\n});\n\nconst mapStateToProps = (state, { intl }) => ({\n label: 'CW',\n title: intl.formatMessage(state.getIn(['compose', 'spoiler']) ? messages.marked : messages.unmarked),\n active: state.getIn(['compose', 'spoiler']),\n ariaControls: 'cw-spoiler-input',\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch(changeComposeSpoilerness());\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(TextIconButton));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport IconButton from '../../../components/icon_button';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport detectPassiveEvents from 'detect-passive-events';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },\n public_long: { id: 'privacy.public.long', defaultMessage: 'Post to public timelines' },\n unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },\n unlisted_long: { id: 'privacy.unlisted.long', defaultMessage: 'Do not show in public timelines' },\n private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },\n private_long: { id: 'privacy.private.long', defaultMessage: 'Post to followers only' },\n direct_short: { id: 'privacy.direct.short', defaultMessage: 'Direct' },\n direct_long: { id: 'privacy.direct.long', defaultMessage: 'Post to mentioned users only' },\n change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust status privacy' },\n});\n\nconst listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;\n\nclass PrivacyDropdownMenu extends React.PureComponent {\n\n static propTypes = {\n style: PropTypes.object,\n items: PropTypes.array.isRequired,\n value: PropTypes.string.isRequired,\n placement: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n state = {\n mounted: false,\n };\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n handleKeyDown = e => {\n const { items } = this.props;\n const value = e.currentTarget.getAttribute('data-index');\n const index = items.findIndex(item => {\n return (item.value === value);\n });\n let element;\n\n switch(e.key) {\n case 'Escape':\n this.props.onClose();\n break;\n case 'Enter':\n this.handleClick(e);\n break;\n case 'ArrowDown':\n element = this.node.childNodes[index + 1];\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'ArrowUp':\n element = this.node.childNodes[index - 1];\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'Home':\n element = this.node.firstChild;\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'End':\n element = this.node.lastChild;\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n }\n }\n\n handleClick = e => {\n const value = e.currentTarget.getAttribute('data-index');\n\n e.preventDefault();\n\n this.props.onClose();\n this.props.onChange(value);\n }\n\n componentDidMount () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n if (this.focusedItem) this.focusedItem.focus();\n this.setState({ mounted: true });\n }\n\n componentWillUnmount () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n setFocusRef = c => {\n this.focusedItem = c;\n }\n\n render () {\n const { mounted } = this.state;\n const { style, items, placement, value } = this.props;\n\n return (\n <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>\n {({ opacity, scaleX, scaleY }) => (\n // It should not be transformed when mounting because the resulting\n // size will be used to determine the coordinate of the menu by\n // react-overlays\n <div className={`privacy-dropdown__dropdown ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null }} role='listbox' ref={this.setRef}>\n {items.map(item => (\n <div role='option' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>\n <div className='privacy-dropdown__option__icon'>\n <Icon id={item.icon} fixedWidth />\n </div>\n\n <div className='privacy-dropdown__option__content'>\n <strong>{item.text}</strong>\n {item.meta}\n </div>\n </div>\n ))}\n </div>\n )}\n </Motion>\n );\n }\n\n}\n\nexport default @injectIntl\nclass PrivacyDropdown extends React.PureComponent {\n\n static propTypes = {\n isUserTouching: PropTypes.func,\n isModalOpen: PropTypes.bool.isRequired,\n onModalOpen: PropTypes.func,\n onModalClose: PropTypes.func,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n open: false,\n placement: 'bottom',\n };\n\n handleToggle = ({ target }) => {\n if (this.props.isUserTouching()) {\n if (this.state.open) {\n this.props.onModalClose();\n } else {\n this.props.onModalOpen({\n actions: this.options.map(option => ({ ...option, active: option.value === this.props.value })),\n onClick: this.handleModalActionClick,\n });\n }\n } else {\n const { top } = target.getBoundingClientRect();\n this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n this.setState({ open: !this.state.open });\n }\n }\n\n handleModalActionClick = (e) => {\n e.preventDefault();\n\n const { value } = this.options[e.currentTarget.getAttribute('data-index')];\n\n this.props.onModalClose();\n this.props.onChange(value);\n }\n\n handleKeyDown = e => {\n switch(e.key) {\n case 'Escape':\n this.handleClose();\n break;\n }\n }\n\n handleClose = () => {\n this.setState({ open: false });\n }\n\n handleChange = value => {\n this.props.onChange(value);\n }\n\n componentWillMount () {\n const { intl: { formatMessage } } = this.props;\n\n this.options = [\n { icon: 'globe', value: 'public', text: formatMessage(messages.public_short), meta: formatMessage(messages.public_long) },\n { icon: 'unlock', value: 'unlisted', text: formatMessage(messages.unlisted_short), meta: formatMessage(messages.unlisted_long) },\n { icon: 'lock', value: 'private', text: formatMessage(messages.private_short), meta: formatMessage(messages.private_long) },\n { icon: 'envelope', value: 'direct', text: formatMessage(messages.direct_short), meta: formatMessage(messages.direct_long) },\n ];\n }\n\n render () {\n const { value, intl } = this.props;\n const { open, placement } = this.state;\n\n const valueOption = this.options.find(item => item.value === value);\n\n return (\n <div className={classNames('privacy-dropdown', placement, { active: open })} onKeyDown={this.handleKeyDown}>\n <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === 0 })}>\n <IconButton\n className='privacy-dropdown__value-icon'\n icon={valueOption.icon}\n title={intl.formatMessage(messages.change_privacy)}\n size={18}\n expanded={open}\n active={open}\n inverted\n onClick={this.handleToggle}\n style={{ height: null, lineHeight: '27px' }}\n />\n </div>\n\n <Overlay show={open} placement={placement} target={this}>\n <PrivacyDropdownMenu\n items={this.options}\n value={value}\n onClose={this.handleClose}\n onChange={this.handleChange}\n placement={placement}\n />\n </Overlay>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PrivacyDropdown from '../components/privacy_dropdown';\nimport { changeComposeVisibility } from '../../../actions/compose';\nimport { openModal, closeModal } from '../../../actions/modal';\nimport { isUserTouching } from '../../../is_mobile';\n\nconst mapStateToProps = state => ({\n isModalOpen: state.get('modal').modalType === 'ACTIONS',\n value: state.getIn(['compose', 'privacy']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (value) {\n dispatch(changeComposeVisibility(value));\n },\n\n isUserTouching,\n onModalOpen: props => dispatch(openModal('ACTIONS', props)),\n onModalClose: () => dispatch(closeModal()),\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PrivacyDropdown);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport IconButton from '../../../components/icon_button';\nimport { changeComposeSensitivity } from '../../../actions/compose';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nconst messages = defineMessages({\n marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },\n unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },\n});\n\nconst mapStateToProps = state => ({\n visible: state.getIn(['compose', 'media_attachments']).size > 0,\n active: state.getIn(['compose', 'sensitive']),\n disabled: state.getIn(['compose', 'spoiler']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch(changeComposeSensitivity());\n },\n\n});\n\nclass SensitiveButton extends React.PureComponent {\n\n static propTypes = {\n visible: PropTypes.bool,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { visible, active, disabled, onClick, intl } = this.props;\n\n return (\n <Motion defaultStyle={{ scale: 0.87 }} style={{ scale: spring(visible ? 1 : 0.87, { stiffness: 200, damping: 3 }) }}>\n {({ scale }) => {\n const icon = active ? 'eye-slash' : 'eye';\n const className = classNames('compose-form__sensitive-button', {\n 'compose-form__sensitive-button--visible': visible,\n });\n return (\n <div className={className} style={{ transform: `scale(${scale})` }}>\n <IconButton\n className='compose-form__sensitive-button__icon'\n title={intl.formatMessage(active ? messages.marked : messages.unmarked)}\n icon={icon}\n onClick={onClick}\n size={18}\n active={active}\n disabled={disabled}\n style={{ lineHeight: null, height: null }}\n inverted\n />\n </div>\n );\n }}\n </Motion>\n );\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SensitiveButton));\n","import { connect } from 'react-redux';\nimport EmojiPickerDropdown from '../components/emoji_picker_dropdown';\nimport { changeSetting } from '../../../actions/settings';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\nimport { useEmoji } from '../../../actions/emojis';\n\nconst perLine = 8;\nconst lines = 2;\n\nconst DEFAULTS = [\n '+1',\n 'grinning',\n 'kissing_heart',\n 'heart_eyes',\n 'laughing',\n 'stuck_out_tongue_winking_eye',\n 'sweat_smile',\n 'joy',\n 'yum',\n 'disappointed',\n 'thinking_face',\n 'weary',\n 'sob',\n 'sunglasses',\n 'heart',\n 'ok_hand',\n];\n\nconst getFrequentlyUsedEmojis = createSelector([\n state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),\n], emojiCounters => {\n let emojis = emojiCounters\n .keySeq()\n .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))\n .reverse()\n .slice(0, perLine * lines)\n .toArray();\n\n if (emojis.length < DEFAULTS.length) {\n let uniqueDefaults = DEFAULTS.filter(emoji => !emojis.includes(emoji));\n emojis = emojis.concat(uniqueDefaults.slice(0, DEFAULTS.length - emojis.length));\n }\n\n return emojis;\n});\n\nconst getCustomEmojis = createSelector([\n state => state.get('custom_emojis'),\n], emojis => emojis.filter(e => e.get('visible_in_picker')).sort((a, b) => {\n const aShort = a.get('shortcode').toLowerCase();\n const bShort = b.get('shortcode').toLowerCase();\n\n if (aShort < bShort) {\n return -1;\n } else if (aShort > bShort ) {\n return 1;\n } else {\n return 0;\n }\n}));\n\nconst mapStateToProps = state => ({\n custom_emojis: getCustomEmojis(state),\n skinTone: state.getIn(['settings', 'skinTone']),\n frequentlyUsedEmojis: getFrequentlyUsedEmojis(state),\n});\n\nconst mapDispatchToProps = (dispatch, { onPickEmoji }) => ({\n onSkinTone: skinTone => {\n dispatch(changeSetting(['skinTone'], skinTone));\n },\n\n onPickEmoji: emoji => {\n dispatch(useEmoji(emoji));\n\n if (onPickEmoji) {\n onPickEmoji(emoji);\n }\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport IconButton from 'mastodon/components/icon_button';\nimport Icon from 'mastodon/components/icon';\nimport classNames from 'classnames';\n\nconst messages = defineMessages({\n option_placeholder: { id: 'compose_form.poll.option_placeholder', defaultMessage: 'Choice {number}' },\n add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add a choice' },\n remove_option: { id: 'compose_form.poll.remove_option', defaultMessage: 'Remove this choice' },\n poll_duration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' },\n minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },\n hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' },\n days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' },\n});\n\n@injectIntl\nclass Option extends React.PureComponent {\n\n static propTypes = {\n title: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n isPollMultiple: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n onToggleMultiple: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleOptionTitleChange = e => {\n this.props.onChange(this.props.index, e.target.value);\n };\n\n handleOptionRemove = () => {\n this.props.onRemove(this.props.index);\n };\n\n handleToggleMultiple = e => {\n this.props.onToggleMultiple();\n e.preventDefault();\n e.stopPropagation();\n };\n\n render () {\n const { isPollMultiple, title, index, intl } = this.props;\n\n return (\n <li>\n <label className='poll__text editable'>\n <span\n className={classNames('poll__input', { checkbox: isPollMultiple })}\n onClick={this.handleToggleMultiple}\n role='button'\n tabIndex='0'\n />\n\n <input\n type='text'\n placeholder={intl.formatMessage(messages.option_placeholder, { number: index + 1 })}\n maxLength={25}\n value={title}\n onChange={this.handleOptionTitleChange}\n />\n </label>\n\n <div className='poll__cancel'>\n <IconButton disabled={index <= 1} title={intl.formatMessage(messages.remove_option)} icon='times' onClick={this.handleOptionRemove} />\n </div>\n </li>\n );\n }\n\n}\n\nexport default\n@injectIntl\nclass PollForm extends ImmutablePureComponent {\n\n static propTypes = {\n options: ImmutablePropTypes.list,\n expiresIn: PropTypes.number,\n isMultiple: PropTypes.bool,\n onChangeOption: PropTypes.func.isRequired,\n onAddOption: PropTypes.func.isRequired,\n onRemoveOption: PropTypes.func.isRequired,\n onChangeSettings: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleAddOption = () => {\n this.props.onAddOption('');\n };\n\n handleSelectDuration = e => {\n this.props.onChangeSettings(e.target.value, this.props.isMultiple);\n };\n\n handleToggleMultiple = () => {\n this.props.onChangeSettings(this.props.expiresIn, !this.props.isMultiple);\n };\n\n render () {\n const { options, expiresIn, isMultiple, onChangeOption, onRemoveOption, intl } = this.props;\n\n if (!options) {\n return null;\n }\n\n return (\n <div className='compose-form__poll-wrapper'>\n <ul>\n {options.map((title, i) => <Option title={title} key={i} index={i} onChange={onChangeOption} onRemove={onRemoveOption} isPollMultiple={isMultiple} onToggleMultiple={this.handleToggleMultiple} />)}\n </ul>\n\n <div className='poll__footer'>\n {options.size < 4 && (\n <button className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button>\n )}\n\n <select value={expiresIn} onChange={this.handleSelectDuration}>\n <option value={300}>{intl.formatMessage(messages.minutes, { number: 5 })}</option>\n <option value={1800}>{intl.formatMessage(messages.minutes, { number: 30 })}</option>\n <option value={3600}>{intl.formatMessage(messages.hours, { number: 1 })}</option>\n <option value={21600}>{intl.formatMessage(messages.hours, { number: 6 })}</option>\n <option value={86400}>{intl.formatMessage(messages.days, { number: 1 })}</option>\n <option value={259200}>{intl.formatMessage(messages.days, { number: 3 })}</option>\n <option value={604800}>{intl.formatMessage(messages.days, { number: 7 })}</option>\n </select>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PollForm from '../components/poll_form';\nimport { addPollOption, removePollOption, changePollOption, changePollSettings } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n options: state.getIn(['compose', 'poll', 'options']),\n expiresIn: state.getIn(['compose', 'poll', 'expires_in']),\n isMultiple: state.getIn(['compose', 'poll', 'multiple']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onAddOption(title) {\n dispatch(addPollOption(title));\n },\n\n onRemoveOption(index) {\n dispatch(removePollOption(index));\n },\n\n onChangeOption(index, title) {\n dispatch(changePollOption(index, title));\n },\n\n onChangeSettings(expiresIn, isMultiple) {\n dispatch(changePollSettings(expiresIn, isMultiple));\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PollForm);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\n\nexport default class UploadProgress extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n progress: PropTypes.number,\n };\n\n render () {\n const { active, progress } = this.props;\n\n if (!active) {\n return null;\n }\n\n return (\n <div className='upload-progress'>\n <div className='upload-progress__icon'>\n <Icon id='upload' />\n </div>\n\n <div className='upload-progress__message'>\n <FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' />\n\n <div className='upload-progress__backdrop'>\n <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>\n {({ width }) =>\n <div className='upload-progress__tracker' style={{ width: `${width}%` }} />\n }\n </Motion>\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport UploadProgress from '../components/upload_progress';\n\nconst mapStateToProps = state => ({\n active: state.getIn(['compose', 'is_uploading']),\n progress: state.getIn(['compose', 'progress']),\n});\n\nexport default connect(mapStateToProps)(UploadProgress);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },\n});\n\nexport default @injectIntl\nclass Upload extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n media: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onUndo: PropTypes.func.isRequired,\n onDescriptionChange: PropTypes.func.isRequired,\n onOpenFocalPoint: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n };\n\n state = {\n hovered: false,\n focused: false,\n dirtyDescription: null,\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n this.handleSubmit();\n }\n }\n\n handleSubmit = () => {\n this.handleInputBlur();\n this.props.onSubmit(this.context.router.history);\n }\n\n handleUndoClick = e => {\n e.stopPropagation();\n this.props.onUndo(this.props.media.get('id'));\n }\n\n handleFocalPointClick = e => {\n e.stopPropagation();\n this.props.onOpenFocalPoint(this.props.media.get('id'));\n }\n\n handleInputChange = e => {\n this.setState({ dirtyDescription: e.target.value });\n }\n\n handleMouseEnter = () => {\n this.setState({ hovered: true });\n }\n\n handleMouseLeave = () => {\n this.setState({ hovered: false });\n }\n\n handleInputFocus = () => {\n this.setState({ focused: true });\n }\n\n handleClick = () => {\n this.setState({ focused: true });\n }\n\n handleInputBlur = () => {\n const { dirtyDescription } = this.state;\n\n this.setState({ focused: false, dirtyDescription: null });\n\n if (dirtyDescription !== null) {\n this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription);\n }\n }\n\n render () {\n const { intl, media } = this.props;\n const active = this.state.hovered || this.state.focused;\n const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || '';\n const focusX = media.getIn(['meta', 'focus', 'x']);\n const focusY = media.getIn(['meta', 'focus', 'y']);\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n\n return (\n <div className='compose-form__upload' tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'>\n <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>\n {({ scale }) => (\n <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>\n <div className={classNames('compose-form__upload__actions', { active })}>\n <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>\n {media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>}\n </div>\n\n <div className={classNames('compose-form__upload-description', { active })}>\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span>\n\n <textarea\n placeholder={intl.formatMessage(messages.description)}\n value={description}\n maxLength={420}\n onFocus={this.handleInputFocus}\n onChange={this.handleInputChange}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleKeyDown}\n />\n </label>\n </div>\n </div>\n )}\n </Motion>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport Upload from '../components/upload';\nimport { undoUploadCompose, changeUploadCompose } from '../../../actions/compose';\nimport { openModal } from '../../../actions/modal';\nimport { submitCompose } from '../../../actions/compose';\n\nconst mapStateToProps = (state, { id }) => ({\n media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onUndo: id => {\n dispatch(undoUploadCompose(id));\n },\n\n onDescriptionChange: (id, description) => {\n dispatch(changeUploadCompose(id, { description }));\n },\n\n onOpenFocalPoint: id => {\n dispatch(openModal('FOCAL_POINT', { id }));\n },\n\n onSubmit (router) {\n dispatch(submitCompose(router));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Upload);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport UploadProgressContainer from '../containers/upload_progress_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport UploadContainer from '../containers/upload_container';\n\nexport default class UploadForm extends ImmutablePureComponent {\n\n static propTypes = {\n mediaIds: ImmutablePropTypes.list.isRequired,\n };\n\n render () {\n const { mediaIds } = this.props;\n\n return (\n <div className='compose-form__upload-wrapper'>\n <UploadProgressContainer />\n\n <div className='compose-form__uploads-wrapper'>\n {mediaIds.map(id => (\n <UploadContainer id={id} key={id} />\n ))}\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport UploadForm from '../components/upload_form';\n\nconst mapStateToProps = state => ({\n mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')),\n});\n\nexport default connect(mapStateToProps)(UploadForm);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nexport default class Warning extends React.PureComponent {\n\n static propTypes = {\n message: PropTypes.node.isRequired,\n };\n\n render () {\n const { message } = this.props;\n\n return (\n <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>\n {({ opacity, scaleX, scaleY }) => (\n <div className='compose-form__warning' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>\n {message}\n </div>\n )}\n </Motion>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport Warning from '../components/warning';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport { me } from '../../../initial_state';\n\nconst APPROX_HASHTAG_RE = /(?:^|[^\\/\\)\\w])#(\\w*[a-zA-Z·]\\w*)/i;\n\nconst mapStateToProps = state => ({\n needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']),\n hashtagWarning: state.getIn(['compose', 'privacy']) !== 'public' && APPROX_HASHTAG_RE.test(state.getIn(['compose', 'text'])),\n directMessageWarning: state.getIn(['compose', 'privacy']) === 'direct',\n});\n\nconst WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning }) => {\n if (needsLockWarning) {\n return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <a href='/user-settings'><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></a> }} />} />;\n }\n\n if (hashtagWarning) {\n return <Warning message={<FormattedMessage id='compose_form.hashtag_warning' defaultMessage=\"This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.\" />} />;\n }\n\n if (directMessageWarning) {\n const message = (\n <span>\n <FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This toot will only be sent to all the mentioned users.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a>\n </span>\n );\n\n return <Warning message={message} />;\n }\n\n return null;\n};\n\nWarningWrapper.propTypes = {\n needsLockWarning: PropTypes.bool,\n hashtagWarning: PropTypes.bool,\n directMessageWarning: PropTypes.bool,\n};\n\nexport default connect(mapStateToProps)(WarningWrapper);\n","import React from 'react';\nimport CharacterCounter from './character_counter';\nimport Button from '../../../components/button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport ReplyIndicatorContainer from '../containers/reply_indicator_container';\nimport AutosuggestTextarea from '../../../components/autosuggest_textarea';\nimport PollButtonContainer from '../containers/poll_button_container';\nimport UploadButtonContainer from '../containers/upload_button_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport SpoilerButtonContainer from '../containers/spoiler_button_container';\nimport PrivacyDropdownContainer from '../containers/privacy_dropdown_container';\nimport SensitiveButtonContainer from '../containers/sensitive_button_container';\nimport EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';\nimport PollFormContainer from '../containers/poll_form_container';\nimport UploadFormContainer from '../containers/upload_form_container';\nimport WarningContainer from '../containers/warning_container';\nimport { isMobile } from '../../../is_mobile';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { length } from 'stringz';\nimport Icon from 'mastodon/components/icon';\nimport { maxChars } from '../../../initial_state';\n\nconst allowedAroundShortCode = '><\\u0085\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\u0009\\u000a\\u000b\\u000c\\u000d';\n\nconst messages = defineMessages({\n placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },\n spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },\n publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },\n publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' },\n});\n\nexport default @injectIntl\nclass ComposeForm extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n text: PropTypes.string.isRequired,\n suggestions: ImmutablePropTypes.list,\n spoiler: PropTypes.bool,\n privacy: PropTypes.string,\n spoilerText: PropTypes.string,\n focusDate: PropTypes.instanceOf(Date),\n caretPosition: PropTypes.number,\n preselectDate: PropTypes.instanceOf(Date),\n isSubmitting: PropTypes.bool,\n isChangingUpload: PropTypes.bool,\n isUploading: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClearSuggestions: PropTypes.func.isRequired,\n onFetchSuggestions: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n onChangeSpoilerText: PropTypes.func.isRequired,\n onPaste: PropTypes.func.isRequired,\n onPickEmoji: PropTypes.func.isRequired,\n showSearch: PropTypes.bool,\n anyMedia: PropTypes.bool,\n };\n\n static defaultProps = {\n showSearch: false,\n };\n\n handleChange = (e) => {\n this.props.onChange(e.target.value);\n }\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n this.handleSubmit();\n }\n }\n\n handleSubmit = () => {\n if (this.props.text !== this.autosuggestTextarea.textarea.value) {\n // Something changed the text inside the textarea (e.g. browser extensions like Grammarly)\n // Update the state to match the current text\n this.props.onChange(this.autosuggestTextarea.textarea.value);\n }\n\n // Submit disabled:\n const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;\n const fulltext = [this.props.spoilerText, this.props.text].join('');\n\n if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {\n return;\n }\n\n this.props.onSubmit(this.context.router ? this.context.router.history : null);\n }\n\n onSuggestionsClearRequested = () => {\n this.props.onClearSuggestions();\n }\n\n onSuggestionsFetchRequested = (token) => {\n this.props.onFetchSuggestions(token);\n }\n\n onSuggestionSelected = (tokenStart, token, value) => {\n this.props.onSuggestionSelected(tokenStart, token, value);\n }\n\n handleChangeSpoilerText = (e) => {\n this.props.onChangeSpoilerText(e.target.value);\n }\n\n componentDidUpdate (prevProps) {\n // This statement does several things:\n // - If we're beginning a reply, and,\n // - Replying to zero or one users, places the cursor at the end of the textbox.\n // - Replying to more than one user, selects any usernames past the first;\n // this provides a convenient shortcut to drop everyone else from the conversation.\n if (this.props.focusDate !== prevProps.focusDate) {\n let selectionEnd, selectionStart;\n\n if (this.props.preselectDate !== prevProps.preselectDate) {\n selectionEnd = this.props.text.length;\n selectionStart = this.props.text.search(/\\s/) + 1;\n } else if (typeof this.props.caretPosition === 'number') {\n selectionStart = this.props.caretPosition;\n selectionEnd = this.props.caretPosition;\n } else {\n selectionEnd = this.props.text.length;\n selectionStart = selectionEnd;\n }\n\n this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd);\n this.autosuggestTextarea.textarea.focus();\n } else if(prevProps.isSubmitting && !this.props.isSubmitting) {\n this.autosuggestTextarea.textarea.focus();\n } else if (this.props.spoiler !== prevProps.spoiler) {\n if (this.props.spoiler) {\n this.spoilerText.focus();\n } else {\n this.autosuggestTextarea.textarea.focus();\n }\n }\n }\n\n setAutosuggestTextarea = (c) => {\n this.autosuggestTextarea = c;\n }\n\n setSpoilerText = (c) => {\n this.spoilerText = c;\n }\n\n handleEmojiPick = (data) => {\n const { text } = this.props;\n const position = this.autosuggestTextarea.textarea.selectionStart;\n const needsSpace = data.custom && position > 0 && !allowedAroundShortCode.includes(text[position - 1]);\n\n this.props.onPickEmoji(position, data, needsSpace);\n }\n\n render () {\n const { intl, onPaste, showSearch, anyMedia } = this.props;\n const disabled = this.props.isSubmitting;\n const text = [this.props.spoilerText, this.props.text].join('');\n const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > maxChars || (text.length !== 0 && text.trim().length === 0 && !anyMedia);\n let publishText = '';\n\n if (this.props.privacy === 'private' || this.props.privacy === 'direct') {\n publishText = <span className='compose-form__publish-private'><Icon id='lock' /> {intl.formatMessage(messages.publish)}</span>;\n } else {\n publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);\n }\n\n return (\n <div className='compose-form'>\n <WarningContainer />\n\n <ReplyIndicatorContainer />\n\n <div className={`spoiler-input ${this.props.spoiler ? 'spoiler-input--visible' : ''}`}>\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.spoiler_placeholder)}</span>\n <input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoilerText} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} tabIndex={this.props.spoiler ? 0 : -1} type='text' className='spoiler-input__input' id='cw-spoiler-input' ref={this.setSpoilerText} />\n </label>\n </div>\n\n <div className='compose-form__autosuggest-wrapper'>\n <AutosuggestTextarea\n ref={this.setAutosuggestTextarea}\n placeholder={intl.formatMessage(messages.placeholder)}\n disabled={disabled}\n value={this.props.text}\n onChange={this.handleChange}\n suggestions={this.props.suggestions}\n onKeyDown={this.handleKeyDown}\n onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n onSuggestionSelected={this.onSuggestionSelected}\n onPaste={onPaste}\n autoFocus={!showSearch && !isMobile(window.innerWidth)}\n />\n\n <EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} />\n </div>\n\n <div className='compose-form__modifiers'>\n <UploadFormContainer />\n <PollFormContainer />\n </div>\n\n <div className='compose-form__buttons-wrapper'>\n <div className='compose-form__buttons'>\n <UploadButtonContainer />\n <PollButtonContainer />\n <PrivacyDropdownContainer />\n <SensitiveButtonContainer />\n <SpoilerButtonContainer />\n </div>\n <div className='character-counter__wrapper'><CharacterCounter max={maxChars} text={text} /></div>\n </div>\n\n <div className='compose-form__publish'>\n <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ComposeForm from '../components/compose_form';\nimport {\n changeCompose,\n submitCompose,\n clearComposeSuggestions,\n fetchComposeSuggestions,\n selectComposeSuggestion,\n changeComposeSpoilerText,\n insertEmojiCompose,\n uploadCompose,\n} from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n text: state.getIn(['compose', 'text']),\n suggestions: state.getIn(['compose', 'suggestions']),\n spoiler: state.getIn(['compose', 'spoiler']),\n spoilerText: state.getIn(['compose', 'spoiler_text']),\n privacy: state.getIn(['compose', 'privacy']),\n focusDate: state.getIn(['compose', 'focusDate']),\n caretPosition: state.getIn(['compose', 'caretPosition']),\n preselectDate: state.getIn(['compose', 'preselectDate']),\n is_submitting: state.getIn(['compose', 'is_submitting']),\n isChangingUpload: state.getIn(['compose', 'is_changing_upload']),\n isUploading: state.getIn(['compose', 'is_uploading']),\n showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n\n onChange (text) {\n dispatch(changeCompose(text));\n },\n\n onSubmit (router) {\n dispatch(submitCompose(router));\n },\n\n onClearSuggestions () {\n dispatch(clearComposeSuggestions());\n },\n\n onFetchSuggestions (token) {\n dispatch(fetchComposeSuggestions(token));\n },\n\n onSuggestionSelected (position, token, suggestion) {\n dispatch(selectComposeSuggestion(position, token, suggestion));\n },\n\n onChangeSpoilerText (checked) {\n dispatch(changeComposeSpoilerText(checked));\n },\n\n onPaste (files) {\n dispatch(uploadCompose(files));\n },\n\n onPickEmoji (position, data, needsSpace) {\n dispatch(insertEmojiCompose(position, data, needsSpace));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComposeForm);\n","import { connect } from 'react-redux';\nimport NavigationBar from '../components/navigation_bar';\nimport { me } from '../../../initial_state';\n\nconst mapStateToProps = state => {\n return {\n account: state.getIn(['accounts', me]),\n };\n};\n\nexport default connect(mapStateToProps)(NavigationBar);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { searchEnabled } from '../../../initial_state';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n placeholder: { id: 'search.placeholder', defaultMessage: 'Search' },\n});\n\nclass SearchPopout extends React.PureComponent {\n\n static propTypes = {\n style: PropTypes.object,\n };\n\n render () {\n const { style } = this.props;\n const extraInformation = searchEnabled ? <FormattedMessage id='search_popout.tips.full_text' defaultMessage='Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.' /> : <FormattedMessage id='search_popout.tips.text' defaultMessage='Simple text returns matching display names, usernames and hashtags' />;\n return (\n <div style={{ ...style, position: 'absolute', width: 315 }}>\n <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>\n {({ opacity, scaleX, scaleY }) => (\n <div className='search-popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>\n <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>\n\n <ul>\n <li><em>#example</em> <FormattedMessage id='search_popout.tips.hashtag' defaultMessage='hashtag' /></li>\n <li><em>@username@domain</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>\n <li><em>URL</em> <FormattedMessage id='search_popout.tips.user' defaultMessage='user' /></li>\n <li><em>URL</em> <FormattedMessage id='search_popout.tips.status' defaultMessage='status' /></li>\n </ul>\n\n {extraInformation}\n </div>\n )}\n </Motion>\n </div>\n );\n }\n\n}\n\nexport default @injectIntl\nclass Search extends React.PureComponent {\n\n static propTypes = {\n value: PropTypes.string.isRequired,\n submitted: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n onShow: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n expanded: false,\n };\n\n handleChange = (e) => {\n this.props.onChange(e.target.value);\n }\n\n handleClear = (e) => {\n e.preventDefault();\n\n if (this.props.value.length > 0 || this.props.submitted) {\n this.props.onClear();\n }\n }\n\n handleKeyUp = (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.props.onSubmit();\n } else if (e.key === 'Escape') {\n document.querySelector('.ui').parentElement.focus();\n }\n }\n\n handleFocus = () => {\n this.setState({ expanded: true });\n this.props.onShow();\n }\n\n handleBlur = () => {\n this.setState({ expanded: false });\n }\n\n render () {\n const { intl, value, submitted } = this.props;\n const { expanded } = this.state;\n const hasValue = value.length > 0 || submitted;\n\n return (\n <div className='search'>\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>\n <input\n className='search__input'\n type='text'\n placeholder={intl.formatMessage(messages.placeholder)}\n value={value}\n onChange={this.handleChange}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </label>\n\n <div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>\n <Icon id='search' className={hasValue ? '' : 'active'} />\n <Icon id='times-circle' className={hasValue ? 'active' : ''} aria-label={intl.formatMessage(messages.placeholder)} />\n </div>\n\n <Overlay show={expanded && !hasValue} placement='bottom' target={this}>\n <SearchPopout />\n </Overlay>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport {\n changeSearch,\n clearSearch,\n submitSearch,\n showSearch,\n} from '../../../actions/search';\nimport Search from '../components/search';\n\nconst mapStateToProps = state => ({\n value: state.getIn(['search', 'value']),\n submitted: state.getIn(['search', 'submitted']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (value) {\n dispatch(changeSearch(value));\n },\n\n onClear () {\n dispatch(clearSearch());\n },\n\n onSubmit () {\n dispatch(submitSearch());\n },\n\n onShow () {\n dispatch(showSearch());\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Search);\n","import React from 'react';\nimport { Sparklines, SparklinesCurve } from 'react-sparklines';\nimport { FormattedMessage } from 'react-intl';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Permalink from './permalink';\nimport { shortNumberFormat } from '../utils/numbers';\n\nconst Hashtag = ({ hashtag }) => (\n <div className='trends__item'>\n <div className='trends__item__name'>\n <Permalink href={hashtag.get('url')} to={`/timelines/tag/${hashtag.get('name')}`}>\n #<span>{hashtag.get('name')}</span>\n </Permalink>\n\n <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} />\n </div>\n\n <div className='trends__item__current'>\n {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']))}\n </div>\n\n <div className='trends__item__sparkline'>\n <Sparklines width={50} height={28} data={hashtag.get('history') && hashtag.get('history').reverse().map(day => day.get('uses')).toArray()}>\n <SparklinesCurve style={{ fill: 'none' }} />\n </Sparklines>\n </div>\n </div>\n);\n\nHashtag.propTypes = {\n hashtag: ImmutablePropTypes.map.isRequired,\n};\n\nexport default Hashtag;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport AccountContainer from '../../../containers/account_container';\nimport StatusContainer from '../../../containers/status_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Hashtag from '../../../components/hashtag';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n dismissSuggestion: { id: 'suggestions.dismiss', defaultMessage: 'Dismiss suggestion' },\n});\n\nexport default @injectIntl\nclass SearchResults extends ImmutablePureComponent {\n\n static propTypes = {\n results: ImmutablePropTypes.map.isRequired,\n suggestions: ImmutablePropTypes.list.isRequired,\n fetchSuggestions: PropTypes.func.isRequired,\n dismissSuggestion: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n this.props.fetchSuggestions();\n }\n\n render () {\n const { intl, results, suggestions, dismissSuggestion } = this.props;\n\n if (results.isEmpty() && !suggestions.isEmpty()) {\n return (\n <div className='search-results'>\n <div className='trends'>\n <div className='trends__header'>\n <Icon id='user-plus' fixedWidth />\n <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' />\n </div>\n\n {suggestions && suggestions.map(accountId => (\n <AccountContainer\n key={accountId}\n id={accountId}\n actionIcon='times'\n actionTitle={intl.formatMessage(messages.dismissSuggestion)}\n onActionClick={dismissSuggestion}\n />\n ))}\n </div>\n </div>\n );\n }\n\n let accounts, statuses, hashtags;\n let count = 0;\n\n if (results.get('accounts') && results.get('accounts').size > 0) {\n count += results.get('accounts').size;\n accounts = (\n <div className='search-results__section'>\n <h5><Icon id='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='People' /></h5>\n\n {results.get('accounts').map(accountId => <AccountContainer key={accountId} id={accountId} />)}\n </div>\n );\n }\n\n if (results.get('statuses') && results.get('statuses').size > 0) {\n count += results.get('statuses').size;\n statuses = (\n <div className='search-results__section'>\n <h5><Icon id='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5>\n\n {results.get('statuses').map(statusId => <StatusContainer key={statusId} id={statusId} />)}\n </div>\n );\n }\n\n if (results.get('hashtags') && results.get('hashtags').size > 0) {\n count += results.get('hashtags').size;\n hashtags = (\n <div className='search-results__section'>\n <h5><Icon id='hashtag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5>\n\n {results.get('hashtags').map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}\n </div>\n );\n }\n\n return (\n <div className='search-results'>\n <div className='search-results__header'>\n <Icon id='search' fixedWidth />\n <FormattedMessage id='search_results.total' defaultMessage='{count, number} {count, plural, one {result} other {results}}' values={{ count }} />\n </div>\n\n {accounts}\n {statuses}\n {hashtags}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport SearchResults from '../components/search_results';\nimport { fetchSuggestions, dismissSuggestion } from '../../../actions/suggestions';\n\nconst mapStateToProps = state => ({\n results: state.getIn(['search', 'results']),\n suggestions: state.getIn(['suggestions', 'items']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchSuggestions: () => dispatch(fetchSuggestions()),\n dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchResults);\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 '../../actions/compose';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport SearchContainer from './containers/search_container';\nimport Motion from '../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport SearchResultsContainer from './containers/search_results_container';\nimport { changeComposing } from '../../actions/compose';\nimport { mascot } from '../../initial_state';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n start: { 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: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },\n community: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },\n preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },\n compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new toot' },\n});\n\nconst mapStateToProps = (state, ownProps) => ({\n columns: state.getIn(['settings', 'columns']),\n showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage,\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Compose extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columns: ImmutablePropTypes.list.isRequired,\n multiColumn: PropTypes.bool,\n showSearch: PropTypes.bool,\n isSearchPage: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.dispatch(mountCompose());\n }\n }\n\n componentWillUnmount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.dispatch(unmountCompose());\n }\n }\n\n onFocus = () => {\n this.props.dispatch(changeComposing(true));\n }\n\n onBlur = () => {\n this.props.dispatch(changeComposing(false));\n }\n\n render () {\n const { multiColumn, showSearch, isSearchPage, intl } = this.props;\n\n let header = '';\n\n if (multiColumn) {\n const { columns } = this.props;\n header = (\n <nav className='drawer__header'>\n <Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)} aria-label={intl.formatMessage(messages.start)}><Icon id='bars' fixedWidth /></Link>\n {!columns.some(column => column.get('id') === 'HOME') && (\n <Link to='/timelines/home' className='drawer__tab' title={intl.formatMessage(messages.home_timeline)} aria-label={intl.formatMessage(messages.home_timeline)}><Icon id='home' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'NOTIFICATIONS') && (\n <Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)} aria-label={intl.formatMessage(messages.notifications)}><Icon id='bell' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'COMMUNITY') && (\n <Link to='/timelines/public/local' className='drawer__tab' title={intl.formatMessage(messages.community)} aria-label={intl.formatMessage(messages.community)}><Icon id='users' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'PUBLIC') && (\n <Link to='/timelines/public' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><Icon id='globe' fixedWidth /></Link>\n )}\n <a href='/user-settings' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><Icon id='cog' fixedWidth /></a>\n <a href='/auth/sign_out' className='drawer__tab' data-method='delete' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)}><Icon id='sign-out' fixedWidth /></a>\n </nav>\n );\n }\n\n return (\n <div className='drawer' role='region' aria-label={intl.formatMessage(messages.compose)}>\n {header}\n\n {(multiColumn || isSearchPage) && <SearchContainer /> }\n\n <div className='drawer__pager'>\n {!isSearchPage && <div className='drawer__inner' onFocus={this.onFocus}>\n <NavigationContainer onClose={this.onBlur} />\n <ComposeFormContainer />\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/mastodon/components/autosuggest_emoji.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/reply_indicator.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/reply_indicator_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/autosuggest_account.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/autosuggest_account_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/components/autosuggest_hashtag.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/components/autosuggest_textarea.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/components/autosuggest_input.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/poll_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/poll_button_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_button_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/text_icon_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/spoiler_button_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/privacy_dropdown.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/privacy_dropdown_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/poll_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/poll_form_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_progress_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/sensitive_button_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/upload_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/upload_form_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/warning.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/warning_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/components/compose_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/compose_form_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/containers/navigation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/compose/index.js"],"names":["assetHost","process","env","CDN_HOST","AutosuggestEmoji","render","url","emoji","this","props","custom","imageUrl","mapping","unicodeMapping","native","replace","filename","className","src","alt","colons","React","PureComponent","EmojiPicker","Emoji","messages","defineMessages","emoji_search","emoji_not_found","recent","search_results","people","nature","food","activity","travel","objects","symbols","flags","backgroundImageFn","listenerOptions","detectPassiveEvents","hasSupport","passive","ModifierPickerMenu","e","onSelect","currentTarget","getAttribute","node","contains","target","onClose","c","componentWillReceiveProps","nextProps","active","attachListeners","removeListeners","componentWillUnmount","document","addEventListener","handleDocumentClick","removeEventListener","style","display","ref","setRef","onClick","handleClick","data-index","set","size","sheetSize","skin","ModifierPicker","onOpen","modifier","onChange","handleSelect","EmojiPickerMenu","injectIntl","modifierOpen","placement","intl","search","formatMessage","notfound","categories","foods","places","onPick","setState","onSkinTone","componentDidMount","loading","custom_emojis","skinTone","frequentlyUsedEmojis","width","title","state","categoriesSort","splice","Array","from","categoriesFromEmojis","sort","classNames","selecting","perLine","emojiSize","buildCustomEmojis","color","i18n","getI18n","include","showPreview","autoFocus","emojiTooltip","handleModifierOpen","handleModifierClose","handleModifierChange","EmojiPickerDropdown","dropdown","EmojiPickerAsync","then","EmojiMart","Picker","catch","top","getBoundingClientRect","innerHeight","key","onHideDropdown","onShowDropdown","onPickEmoji","onKeyDown","handleKeyDown","setTargetRef","aria-label","aria-expanded","role","onToggle","tabIndex","show","findTarget","cancel","ReplyIndicator","onCancel","button","ctrlKey","metaKey","preventDefault","context","router","history","push","status","getIn","content","__html","get","direction","isRtl","icon","inverted","href","handleAccountClick","account","dangerouslySetInnerHTML","compact","media","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","func","isRequired","connect","getStatus","makeGetStatus","id","dispatch","cancelReplyCompose","AutosuggestAccount","getAccount","makeGetAccount","AutosuggestHashtag","tag","weeklyUses","shortNumberFormat","reduce","total","day","uses","name","undefined","defaultMessage","values","count","textAtCursorMatchesToken","str","caretPosition","word","left","slice","right","trim","length","indexOf","toLowerCase","AutosuggestTextarea","suggestionsHidden","focused","selectedSuggestion","lastToken","tokenStart","value","selectionStart","token","onSuggestionsFetchRequested","onSuggestionsClearRequested","suggestions","disabled","which","isComposing","querySelector","parentElement","focus","Math","min","max","stopPropagation","onSuggestionSelected","defaultPrevented","onFocus","suggestion","textarea","clipboardData","files","onPaste","i","inner","type","selected","onMouseDown","onSuggestionClick","placeholder","onKeyUp","children","inputRef","setTextarea","onBlur","aria-autocomplete","isEmpty","renderSuggestion","string","list","bool","searchTokens","AutosuggestInput","input","maxLength","setInput","arrayOf","number","ImmutableList","add_poll","remove_poll","iconStyle","height","lineHeight","PollButton","unavailable","_","getState","removePoll","addPoll","upload","UploadButton","acceptContentTypes","onSelectFile","fileElement","click","resetFileKey","formats","multiple","handleChange","listOf","some","m","includes","uploadCompose","TextIconButton","label","ariaControls","aria-controls","marked","unmarked","changeComposeSpoilerness","public_short","public_long","unlisted_short","unlisted_long","private_short","private_long","direct_short","direct_long","change_privacy","PrivacyDropdownMenu","mounted","element","items","index","findIndex","item","childNodes","shiftKey","lastChild","firstChild","focusedItem","defaultStyle","opacity","scaleX","scaleY","spring","damping","stiffness","transform","zIndex","aria-selected","setFocusRef","fixedWidth","text","meta","PrivacyDropdown","open","isUserTouching","onModalClose","onModalOpen","actions","options","option","handleModalActionClick","activeElement","handleClose","handleMouseDown","componentWillMount","valueOption","find","expanded","handleToggle","handleButtonKeyDown","isModalOpen","modalType","changeComposeVisibility","openModal","closeModal","DEFAULTS","getFrequentlyUsedEmojis","createSelector","ImmutableMap","emojiCounters","emojis","keySeq","a","b","reverse","toArray","uniqueDefaults","filter","concat","getCustomEmojis","aShort","bShort","changeSetting","useEmoji","option_placeholder","add_option","remove_option","poll_duration","minutes","hours","days","Option","onRemove","onToggleMultiple","onClearSuggestions","onFetchSuggestions","isPollMultiple","checkbox","handleToggleMultiple","handleOptionTitleChange","handleOptionRemove","PollForm","onAddOption","onChangeSettings","isMultiple","expiresIn","onChangeOption","onRemoveOption","other","handleAddOption","handleSelectDuration","addPollOption","removePollOption","changePollOption","changePollSettings","clearComposeSuggestions","fetchComposeSuggestions","position","accountId","path","selectComposeSuggestion","progress","UploadProgress","Upload","onUndo","onOpenFocalPoint","focusX","focusY","x","y","scale","backgroundImage","backgroundPosition","handleUndoClick","handleFocalPointClick","undoUploadCompose","onSubmit","submitCompose","SensitiveButton","checked","changeComposeSensitivity","UploadForm","mediaIds","message","Warning","APPROX_HASHTAG_RE","needsLockWarning","me","hashtagWarning","test","directMessageWarning","locked","allowedAroundShortCode","spoiler_placeholder","publish","publishLoud","ComposeForm","keyCode","handleSubmit","autosuggestTextarea","isSubmitting","isChangingUpload","isUploading","anyMedia","fulltext","spoilerText","join","maxChars","onChangeSpoilerText","composeForm","singleColumn","window","innerWidth","documentElement","clientWidth","scrollIntoView","data","needsSpace","componentDidUpdate","prevProps","selectionEnd","focusDate","preselectDate","setSelectionRange","spoiler","showSearch","disabledButton","publishText","privacy","handleChangeSpoilerText","setSpoilerText","onSpoilerSuggestionSelected","setAutosuggestTextarea","handleFocus","isMobile","handleEmojiPick","block","instanceOf","Date","changeCompose","changeComposeSpoilerText","insertEmojiCompose","logoutMessage","logoutConfirm","onLogout","confirm","onConfirm","logOut","NavigationBar","start","home_timeline","notifications","public","community","preferences","logout","compose","Compose","ownProps","columns","multiColumn","isSearchPage","changeComposing","mountCompose","unmountCompose","header","to","column","handleLogoutClick","draggable","mascot","elephantUIPlane","visibility"],"mappings":"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","file":"features/compose.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport unicodeMapping from '../features/emoji/emoji_unicode_mapping_light';\n\nconst assetHost = process.env.CDN_HOST || '';\n\nexport default class AutosuggestEmoji extends React.PureComponent {\n\n static propTypes = {\n emoji: PropTypes.object.isRequired,\n };\n\n render () {\n const { emoji } = this.props;\n let url;\n\n if (emoji.custom) {\n url = emoji.imageUrl;\n } else {\n const mapping = unicodeMapping[emoji.native] || unicodeMapping[emoji.native.replace(/\\uFE0F$/, '')];\n\n if (!mapping) {\n return null;\n }\n\n url = `${assetHost}/emoji/${mapping.filename}.svg`;\n }\n\n return (\n <div className='autosuggest-emoji'>\n <img\n className='emojione'\n src={url}\n alt={emoji.native || emoji.colons}\n />\n\n {emoji.colons}\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport detectPassiveEvents from 'detect-passive-events';\nimport { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji';\n\nconst messages = defineMessages({\n emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },\n emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' },\n emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' },\n custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },\n recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },\n search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' },\n people: { id: 'emoji_button.people', defaultMessage: 'People' },\n nature: { id: 'emoji_button.nature', defaultMessage: 'Nature' },\n food: { id: 'emoji_button.food', defaultMessage: 'Food & Drink' },\n activity: { id: 'emoji_button.activity', defaultMessage: 'Activity' },\n travel: { id: 'emoji_button.travel', defaultMessage: 'Travel & Places' },\n objects: { id: 'emoji_button.objects', defaultMessage: 'Objects' },\n symbols: { id: 'emoji_button.symbols', defaultMessage: 'Symbols' },\n flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' },\n});\n\nconst assetHost = process.env.CDN_HOST || '';\nlet EmojiPicker, Emoji; // load asynchronously\n\nconst backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;\nconst listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;\n\nclass ModifierPickerMenu extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n };\n\n handleClick = e => {\n this.props.onSelect(e.currentTarget.getAttribute('data-index') * 1);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.active) {\n this.attachListeners();\n } else {\n this.removeListeners();\n }\n }\n\n componentWillUnmount () {\n this.removeListeners();\n }\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n attachListeners () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n removeListeners () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n render () {\n const { active } = this.props;\n\n return (\n <div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>\n <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button>\n <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button>\n </div>\n );\n }\n\n}\n\nclass ModifierPicker extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n modifier: PropTypes.number,\n onChange: PropTypes.func,\n onClose: PropTypes.func,\n onOpen: PropTypes.func,\n };\n\n handleClick = () => {\n if (this.props.active) {\n this.props.onClose();\n } else {\n this.props.onOpen();\n }\n }\n\n handleSelect = modifier => {\n this.props.onChange(modifier);\n this.props.onClose();\n }\n\n render () {\n const { active, modifier } = this.props;\n\n return (\n <div className='emoji-picker-dropdown__modifiers'>\n <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />\n <ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} />\n </div>\n );\n }\n\n}\n\n@injectIntl\nclass EmojiPickerMenu extends React.PureComponent {\n\n static propTypes = {\n custom_emojis: ImmutablePropTypes.list,\n frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n loading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onPick: PropTypes.func.isRequired,\n style: PropTypes.object,\n placement: PropTypes.string,\n arrowOffsetLeft: PropTypes.string,\n arrowOffsetTop: PropTypes.string,\n intl: PropTypes.object.isRequired,\n skinTone: PropTypes.number.isRequired,\n onSkinTone: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n style: {},\n loading: true,\n frequentlyUsedEmojis: [],\n };\n\n state = {\n modifierOpen: false,\n placement: null,\n };\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n componentDidMount () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n componentWillUnmount () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n getI18n = () => {\n const { intl } = this.props;\n\n return {\n search: intl.formatMessage(messages.emoji_search),\n notfound: intl.formatMessage(messages.emoji_not_found),\n categories: {\n search: intl.formatMessage(messages.search_results),\n recent: intl.formatMessage(messages.recent),\n people: intl.formatMessage(messages.people),\n nature: intl.formatMessage(messages.nature),\n foods: intl.formatMessage(messages.food),\n activity: intl.formatMessage(messages.activity),\n places: intl.formatMessage(messages.travel),\n objects: intl.formatMessage(messages.objects),\n symbols: intl.formatMessage(messages.symbols),\n flags: intl.formatMessage(messages.flags),\n custom: intl.formatMessage(messages.custom),\n },\n };\n }\n\n handleClick = emoji => {\n if (!emoji.native) {\n emoji.native = emoji.colons;\n }\n\n this.props.onClose();\n this.props.onPick(emoji);\n }\n\n handleModifierOpen = () => {\n this.setState({ modifierOpen: true });\n }\n\n handleModifierClose = () => {\n this.setState({ modifierOpen: false });\n }\n\n handleModifierChange = modifier => {\n this.props.onSkinTone(modifier);\n }\n\n render () {\n const { loading, style, intl, custom_emojis, skinTone, frequentlyUsedEmojis } = this.props;\n\n if (loading) {\n return <div style={{ width: 299 }} />;\n }\n\n const title = intl.formatMessage(messages.emoji);\n\n const { modifierOpen } = this.state;\n\n const categoriesSort = [\n 'recent',\n 'people',\n 'nature',\n 'foods',\n 'activity',\n 'places',\n 'objects',\n 'symbols',\n 'flags',\n ];\n\n categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort());\n\n return (\n <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}>\n <EmojiPicker\n perLine={8}\n emojiSize={22}\n sheetSize={32}\n custom={buildCustomEmojis(custom_emojis)}\n color=''\n emoji=''\n set='twitter'\n title={title}\n i18n={this.getI18n()}\n onClick={this.handleClick}\n include={categoriesSort}\n recent={frequentlyUsedEmojis}\n skin={skinTone}\n showPreview={false}\n backgroundImageFn={backgroundImageFn}\n autoFocus\n emojiTooltip\n />\n\n <ModifierPicker\n active={modifierOpen}\n modifier={skinTone}\n onOpen={this.handleModifierOpen}\n onClose={this.handleModifierClose}\n onChange={this.handleModifierChange}\n />\n </div>\n );\n }\n\n}\n\nexport default @injectIntl\nclass EmojiPickerDropdown extends React.PureComponent {\n\n static propTypes = {\n custom_emojis: ImmutablePropTypes.list,\n frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n intl: PropTypes.object.isRequired,\n onPickEmoji: PropTypes.func.isRequired,\n onSkinTone: PropTypes.func.isRequired,\n skinTone: PropTypes.number.isRequired,\n };\n\n state = {\n active: false,\n loading: false,\n };\n\n setRef = (c) => {\n this.dropdown = c;\n }\n\n onShowDropdown = ({ target }) => {\n this.setState({ active: true });\n\n if (!EmojiPicker) {\n this.setState({ loading: true });\n\n EmojiPickerAsync().then(EmojiMart => {\n EmojiPicker = EmojiMart.Picker;\n Emoji = EmojiMart.Emoji;\n\n this.setState({ loading: false });\n }).catch(() => {\n this.setState({ loading: false });\n });\n }\n\n const { top } = target.getBoundingClientRect();\n this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n }\n\n onHideDropdown = () => {\n this.setState({ active: false });\n }\n\n onToggle = (e) => {\n if (!this.state.loading && (!e.key || e.key === 'Enter')) {\n if (this.state.active) {\n this.onHideDropdown();\n } else {\n this.onShowDropdown(e);\n }\n }\n }\n\n handleKeyDown = e => {\n if (e.key === 'Escape') {\n this.onHideDropdown();\n }\n }\n\n setTargetRef = c => {\n this.target = c;\n }\n\n findTarget = () => {\n return this.target;\n }\n\n render () {\n const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props;\n const title = intl.formatMessage(messages.emoji);\n const { active, loading, placement } = this.state;\n\n return (\n <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>\n <div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>\n <img\n className={classNames('emojione', { 'pulse-loading': active && loading })}\n alt='🙂'\n src={`${assetHost}/emoji/1f602.svg`}\n />\n </div>\n\n <Overlay show={active} placement={placement} target={this.findTarget}>\n <EmojiPickerMenu\n custom_emojis={this.props.custom_emojis}\n loading={loading}\n onClose={this.onHideDropdown}\n onPick={onPickEmoji}\n onSkinTone={onSkinTone}\n skinTone={skinTone}\n frequentlyUsedEmojis={frequentlyUsedEmojis}\n />\n </Overlay>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from '../../../components/avatar';\nimport IconButton from '../../../components/icon_button';\nimport DisplayName from '../../../components/display_name';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { isRtl } from '../../../rtl';\nimport AttachmentList from 'mastodon/components/attachment_list';\n\nconst messages = defineMessages({\n cancel: { id: 'reply_indicator.cancel', defaultMessage: 'Cancel' },\n});\n\nexport default @injectIntl\nclass ReplyIndicator extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n onCancel: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleClick = () => {\n this.props.onCancel();\n }\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n }\n\n render () {\n const { status, intl } = this.props;\n\n if (!status) {\n return null;\n }\n\n const content = { __html: status.get('contentHtml') };\n const style = {\n direction: isRtl(status.get('search_index')) ? 'rtl' : 'ltr',\n };\n\n return (\n <div className='reply-indicator'>\n <div className='reply-indicator__header'>\n <div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} inverted /></div>\n\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='reply-indicator__display-name'>\n <div className='reply-indicator__display-avatar'><Avatar account={status.get('account')} size={24} /></div>\n <DisplayName account={status.get('account')} />\n </a>\n </div>\n\n <div className='reply-indicator__content' style={style} dangerouslySetInnerHTML={content} />\n\n {status.get('media_attachments').size > 0 && (\n <AttachmentList\n compact\n media={status.get('media_attachments')}\n />\n )}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { cancelReplyCompose } from '../../../actions/compose';\nimport { makeGetStatus } from '../../../selectors';\nimport ReplyIndicator from '../components/reply_indicator';\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const mapStateToProps = state => ({\n status: getStatus(state, { id: state.getIn(['compose', 'in_reply_to']) }),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n\n onCancel () {\n dispatch(cancelReplyCompose());\n },\n\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(ReplyIndicator);\n","import React from 'react';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class AutosuggestAccount extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n\n return (\n <div className='autosuggest-account' title={account.get('acct')}>\n <div className='autosuggest-account-icon'><Avatar account={account} size={18} /></div>\n <DisplayName account={account} />\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport AutosuggestAccount from '../components/autosuggest_account';\nimport { makeGetAccount } from '../../../selectors';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { id }) => ({\n account: getAccount(state, id),\n });\n\n return mapStateToProps;\n};\n\nexport default connect(makeMapStateToProps)(AutosuggestAccount);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { shortNumberFormat } from 'mastodon/utils/numbers';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class AutosuggestHashtag extends React.PureComponent {\n\n static propTypes = {\n tag: PropTypes.shape({\n name: PropTypes.string.isRequired,\n url: PropTypes.string,\n history: PropTypes.array,\n }).isRequired,\n };\n\n render () {\n const { tag } = this.props;\n const weeklyUses = tag.history && shortNumberFormat(tag.history.reduce((total, day) => total + (day.uses * 1), 0));\n\n return (\n <div className='autosuggest-hashtag'>\n <div className='autosuggest-hashtag__name'>#<strong>{tag.name}</strong></div>\n {tag.history !== undefined && <div className='autosuggest-hashtag__uses'><FormattedMessage id='autosuggest_hashtag.per_week' defaultMessage='{count} per week' values={{ count: weeklyUses }} /></div>}\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container';\nimport AutosuggestEmoji from './autosuggest_emoji';\nimport AutosuggestHashtag from './autosuggest_hashtag';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { isRtl } from '../rtl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Textarea from 'react-textarea-autosize';\nimport classNames from 'classnames';\n\nconst textAtCursorMatchesToken = (str, caretPosition) => {\n let word;\n\n let left = str.slice(0, caretPosition).search(/\\S+$/);\n let right = str.slice(caretPosition).search(/\\s/);\n\n if (right < 0) {\n word = str.slice(left);\n } else {\n word = str.slice(left, right + caretPosition);\n }\n\n if (!word || word.trim().length < 3 || ['@', ':', '#'].indexOf(word[0]) === -1) {\n return [null, null];\n }\n\n word = word.trim().toLowerCase();\n\n if (word.length > 0) {\n return [left + 1, word];\n } else {\n return [null, null];\n }\n};\n\nexport default class AutosuggestTextarea extends ImmutablePureComponent {\n\n static propTypes = {\n value: PropTypes.string,\n suggestions: ImmutablePropTypes.list,\n disabled: PropTypes.bool,\n placeholder: PropTypes.string,\n onSuggestionSelected: PropTypes.func.isRequired,\n onSuggestionsClearRequested: PropTypes.func.isRequired,\n onSuggestionsFetchRequested: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onKeyUp: PropTypes.func,\n onKeyDown: PropTypes.func,\n onPaste: PropTypes.func.isRequired,\n autoFocus: PropTypes.bool,\n };\n\n static defaultProps = {\n autoFocus: true,\n };\n\n state = {\n suggestionsHidden: true,\n focused: false,\n selectedSuggestion: 0,\n lastToken: null,\n tokenStart: 0,\n };\n\n onChange = (e) => {\n const [ tokenStart, token ] = textAtCursorMatchesToken(e.target.value, e.target.selectionStart);\n\n if (token !== null && this.state.lastToken !== token) {\n this.setState({ lastToken: token, selectedSuggestion: 0, tokenStart });\n this.props.onSuggestionsFetchRequested(token);\n } else if (token === null) {\n this.setState({ lastToken: null });\n this.props.onSuggestionsClearRequested();\n }\n\n this.props.onChange(e);\n }\n\n onKeyDown = (e) => {\n const { suggestions, disabled } = this.props;\n const { selectedSuggestion, suggestionsHidden } = this.state;\n\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (e.which === 229 || e.isComposing) {\n // Ignore key events during text composition\n // e.key may be a name of the physical key even in this case (e.x. Safari / Chrome on Mac)\n return;\n }\n\n switch(e.key) {\n case 'Escape':\n if (suggestions.size === 0 || suggestionsHidden) {\n document.querySelector('.ui').parentElement.focus();\n } else {\n e.preventDefault();\n this.setState({ suggestionsHidden: true });\n }\n\n break;\n case 'ArrowDown':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.min(selectedSuggestion + 1, suggestions.size - 1) });\n }\n\n break;\n case 'ArrowUp':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.max(selectedSuggestion - 1, 0) });\n }\n\n break;\n case 'Enter':\n case 'Tab':\n // Select suggestion\n if (this.state.lastToken !== null && suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n e.stopPropagation();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestions.get(selectedSuggestion));\n }\n\n break;\n }\n\n if (e.defaultPrevented || !this.props.onKeyDown) {\n return;\n }\n\n this.props.onKeyDown(e);\n }\n\n onBlur = () => {\n this.setState({ suggestionsHidden: true, focused: false });\n }\n\n onFocus = (e) => {\n this.setState({ focused: true });\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n\n onSuggestionClick = (e) => {\n const suggestion = this.props.suggestions.get(e.currentTarget.getAttribute('data-index'));\n e.preventDefault();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestion);\n this.textarea.focus();\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.suggestions !== this.props.suggestions && nextProps.suggestions.size > 0 && this.state.suggestionsHidden && this.state.focused) {\n this.setState({ suggestionsHidden: false });\n }\n }\n\n setTextarea = (c) => {\n this.textarea = c;\n }\n\n onPaste = (e) => {\n if (e.clipboardData && e.clipboardData.files.length === 1) {\n this.props.onPaste(e.clipboardData.files);\n e.preventDefault();\n }\n }\n\n renderSuggestion = (suggestion, i) => {\n const { selectedSuggestion } = this.state;\n let inner, key;\n\n if (suggestion.type === 'emoji') {\n inner = <AutosuggestEmoji emoji={suggestion} />;\n key = suggestion.id;\n } else if (suggestion.type === 'hashtag') {\n inner = <AutosuggestHashtag tag={suggestion} />;\n key = suggestion.name;\n } else if (suggestion.type === 'account') {\n inner = <AutosuggestAccountContainer id={suggestion.id} />;\n key = suggestion.id;\n }\n\n return (\n <div role='button' tabIndex='0' key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}>\n {inner}\n </div>\n );\n }\n\n render () {\n const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, children } = this.props;\n const { suggestionsHidden } = this.state;\n const style = { direction: 'ltr' };\n\n if (isRtl(value)) {\n style.direction = 'rtl';\n }\n\n return [\n <div className='compose-form__autosuggest-wrapper' key='autosuggest-wrapper'>\n <div className='autosuggest-textarea'>\n <label>\n <span style={{ display: 'none' }}>{placeholder}</span>\n\n <Textarea\n inputRef={this.setTextarea}\n className='autosuggest-textarea__textarea'\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n value={value}\n onChange={this.onChange}\n onKeyDown={this.onKeyDown}\n onKeyUp={onKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onPaste={this.onPaste}\n style={style}\n aria-autocomplete='list'\n />\n </label>\n </div>\n {children}\n </div>,\n\n <div className='autosuggest-textarea__suggestions-wrapper' key='suggestions-wrapper'>\n <div className={`autosuggest-textarea__suggestions ${suggestionsHidden || suggestions.isEmpty() ? '' : 'autosuggest-textarea__suggestions--visible'}`}>\n {suggestions.map(this.renderSuggestion)}\n </div>\n </div>,\n ];\n }\n\n}\n","import React from 'react';\nimport AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container';\nimport AutosuggestEmoji from './autosuggest_emoji';\nimport AutosuggestHashtag from './autosuggest_hashtag';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { isRtl } from '../rtl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport classNames from 'classnames';\nimport { List as ImmutableList } from 'immutable';\n\nconst textAtCursorMatchesToken = (str, caretPosition, searchTokens) => {\n let word;\n\n let left = str.slice(0, caretPosition).search(/\\S+$/);\n let right = str.slice(caretPosition).search(/\\s/);\n\n if (right < 0) {\n word = str.slice(left);\n } else {\n word = str.slice(left, right + caretPosition);\n }\n\n if (!word || word.trim().length < 3 || searchTokens.indexOf(word[0]) === -1) {\n return [null, null];\n }\n\n word = word.trim().toLowerCase();\n\n if (word.length > 0) {\n return [left + 1, word];\n } else {\n return [null, null];\n }\n};\n\nexport default class AutosuggestInput extends ImmutablePureComponent {\n\n static propTypes = {\n value: PropTypes.string,\n suggestions: ImmutablePropTypes.list,\n disabled: PropTypes.bool,\n placeholder: PropTypes.string,\n onSuggestionSelected: PropTypes.func.isRequired,\n onSuggestionsClearRequested: PropTypes.func.isRequired,\n onSuggestionsFetchRequested: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onKeyUp: PropTypes.func,\n onKeyDown: PropTypes.func,\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n id: PropTypes.string,\n searchTokens: PropTypes.arrayOf(PropTypes.string),\n maxLength: PropTypes.number,\n };\n\n static defaultProps = {\n autoFocus: true,\n searchTokens: ImmutableList(['@', ':', '#']),\n };\n\n state = {\n suggestionsHidden: true,\n focused: false,\n selectedSuggestion: 0,\n lastToken: null,\n tokenStart: 0,\n };\n\n onChange = (e) => {\n const [ tokenStart, token ] = textAtCursorMatchesToken(e.target.value, e.target.selectionStart, this.props.searchTokens);\n\n if (token !== null && this.state.lastToken !== token) {\n this.setState({ lastToken: token, selectedSuggestion: 0, tokenStart });\n this.props.onSuggestionsFetchRequested(token);\n } else if (token === null) {\n this.setState({ lastToken: null });\n this.props.onSuggestionsClearRequested();\n }\n\n this.props.onChange(e);\n }\n\n onKeyDown = (e) => {\n const { suggestions, disabled } = this.props;\n const { selectedSuggestion, suggestionsHidden } = this.state;\n\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (e.which === 229 || e.isComposing) {\n // Ignore key events during text composition\n // e.key may be a name of the physical key even in this case (e.x. Safari / Chrome on Mac)\n return;\n }\n\n switch(e.key) {\n case 'Escape':\n if (suggestions.size === 0 || suggestionsHidden) {\n document.querySelector('.ui').parentElement.focus();\n } else {\n e.preventDefault();\n this.setState({ suggestionsHidden: true });\n }\n\n break;\n case 'ArrowDown':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.min(selectedSuggestion + 1, suggestions.size - 1) });\n }\n\n break;\n case 'ArrowUp':\n if (suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n this.setState({ selectedSuggestion: Math.max(selectedSuggestion - 1, 0) });\n }\n\n break;\n case 'Enter':\n case 'Tab':\n // Select suggestion\n if (this.state.lastToken !== null && suggestions.size > 0 && !suggestionsHidden) {\n e.preventDefault();\n e.stopPropagation();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestions.get(selectedSuggestion));\n }\n\n break;\n }\n\n if (e.defaultPrevented || !this.props.onKeyDown) {\n return;\n }\n\n this.props.onKeyDown(e);\n }\n\n onBlur = () => {\n this.setState({ suggestionsHidden: true, focused: false });\n }\n\n onFocus = () => {\n this.setState({ focused: true });\n }\n\n onSuggestionClick = (e) => {\n const suggestion = this.props.suggestions.get(e.currentTarget.getAttribute('data-index'));\n e.preventDefault();\n this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestion);\n this.input.focus();\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.suggestions !== this.props.suggestions && nextProps.suggestions.size > 0 && this.state.suggestionsHidden && this.state.focused) {\n this.setState({ suggestionsHidden: false });\n }\n }\n\n setInput = (c) => {\n this.input = c;\n }\n\n renderSuggestion = (suggestion, i) => {\n const { selectedSuggestion } = this.state;\n let inner, key;\n\n if (suggestion.type === 'emoji') {\n inner = <AutosuggestEmoji emoji={suggestion} />;\n key = suggestion.id;\n } else if (suggestion.type ==='hashtag') {\n inner = <AutosuggestHashtag tag={suggestion} />;\n key = suggestion.name;\n } else if (suggestion.type === 'account') {\n inner = <AutosuggestAccountContainer id={suggestion.id} />;\n key = suggestion.id;\n }\n\n return (\n <div role='button' tabIndex='0' key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}>\n {inner}\n </div>\n );\n }\n\n render () {\n const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength } = this.props;\n const { suggestionsHidden } = this.state;\n const style = { direction: 'ltr' };\n\n if (isRtl(value)) {\n style.direction = 'rtl';\n }\n\n return (\n <div className='autosuggest-input'>\n <label>\n <span style={{ display: 'none' }}>{placeholder}</span>\n\n <input\n type='text'\n ref={this.setInput}\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n value={value}\n onChange={this.onChange}\n onKeyDown={this.onKeyDown}\n onKeyUp={onKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n style={style}\n aria-autocomplete='list'\n id={id}\n className={className}\n maxLength={maxLength}\n />\n </label>\n\n <div className={`autosuggest-textarea__suggestions ${suggestionsHidden || suggestions.isEmpty() ? '' : 'autosuggest-textarea__suggestions--visible'}`}>\n {suggestions.map(this.renderSuggestion)}\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport IconButton from '../../../components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add a poll' },\n remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' },\n});\n\nconst iconStyle = {\n height: null,\n lineHeight: '27px',\n};\n\nexport default\n@injectIntl\nclass PollButton extends React.PureComponent {\n\n static propTypes = {\n disabled: PropTypes.bool,\n unavailable: PropTypes.bool,\n active: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleClick = () => {\n this.props.onClick();\n }\n\n render () {\n const { intl, active, unavailable, disabled } = this.props;\n\n if (unavailable) {\n return null;\n }\n\n return (\n <div className='compose-form__poll-button'>\n <IconButton\n icon='tasks'\n title={intl.formatMessage(active ? messages.remove_poll : messages.add_poll)}\n disabled={disabled}\n onClick={this.handleClick}\n className={`compose-form__poll-button-icon ${active ? 'active' : ''}`}\n size={18}\n inverted\n style={iconStyle}\n />\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PollButton from '../components/poll_button';\nimport { addPoll, removePoll } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n unavailable: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0),\n active: state.getIn(['compose', 'poll']) !== null,\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch((_, getState) => {\n if (getState().getIn(['compose', 'poll'])) {\n dispatch(removePoll());\n } else {\n dispatch(addPoll());\n }\n });\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PollButton);\n","import React from 'react';\nimport IconButton from '../../../components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\nconst messages = defineMessages({\n upload: { id: 'upload_button.label', defaultMessage: 'Add media ({formats})' },\n});\n\nconst SUPPORTED_FORMATS = 'JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC';\n\nconst makeMapStateToProps = () => {\n const mapStateToProps = state => ({\n acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),\n });\n\n return mapStateToProps;\n};\n\nconst iconStyle = {\n height: null,\n lineHeight: '27px',\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass UploadButton extends ImmutablePureComponent {\n\n static propTypes = {\n disabled: PropTypes.bool,\n unavailable: PropTypes.bool,\n onSelectFile: PropTypes.func.isRequired,\n style: PropTypes.object,\n resetFileKey: PropTypes.number,\n acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleChange = (e) => {\n if (e.target.files.length > 0) {\n this.props.onSelectFile(e.target.files);\n }\n }\n\n handleClick = () => {\n this.fileElement.click();\n }\n\n setRef = (c) => {\n this.fileElement = c;\n }\n\n render () {\n const { intl, resetFileKey, unavailable, disabled, acceptContentTypes } = this.props;\n\n if (unavailable) {\n return null;\n }\n\n return (\n <div className='compose-form__upload-button'>\n <IconButton icon='paperclip' title={intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })}</span>\n <input\n key={resetFileKey}\n ref={this.setRef}\n type='file'\n multiple\n onChange={this.handleChange}\n disabled={disabled}\n style={{ display: 'none' }}\n />\n </label>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport UploadButton from '../components/upload_button';\nimport { uploadCompose } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))),\n unavailable: state.getIn(['compose', 'poll']) !== null,\n resetFileKey: state.getIn(['compose', 'resetFileKey']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onSelectFile (files) {\n dispatch(uploadCompose(files));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UploadButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst iconStyle = {\n height: null,\n lineHeight: '27px',\n width: `${18 * 1.28571429}px`,\n};\n\nexport default class TextIconButton extends React.PureComponent {\n\n static propTypes = {\n label: PropTypes.string.isRequired,\n title: PropTypes.string,\n active: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n ariaControls: PropTypes.string,\n };\n\n handleClick = (e) => {\n e.preventDefault();\n this.props.onClick();\n }\n\n render () {\n const { label, title, active, ariaControls } = this.props;\n\n return (\n <button\n title={title}\n aria-label={title}\n className={`text-icon-button ${active ? 'active' : ''}`}\n aria-expanded={active}\n onClick={this.handleClick}\n aria-controls={ariaControls} style={iconStyle}\n >\n {label}\n </button>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport TextIconButton from '../components/text_icon_button';\nimport { changeComposeSpoilerness } from '../../../actions/compose';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nconst messages = defineMessages({\n marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },\n unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' },\n});\n\nconst mapStateToProps = (state, { intl }) => ({\n label: 'CW',\n title: intl.formatMessage(state.getIn(['compose', 'spoiler']) ? messages.marked : messages.unmarked),\n active: state.getIn(['compose', 'spoiler']),\n ariaControls: 'cw-spoiler-input',\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch(changeComposeSpoilerness());\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(TextIconButton));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport IconButton from '../../../components/icon_button';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport detectPassiveEvents from 'detect-passive-events';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },\n public_long: { id: 'privacy.public.long', defaultMessage: 'Post to public timelines' },\n unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },\n unlisted_long: { id: 'privacy.unlisted.long', defaultMessage: 'Do not show in public timelines' },\n private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },\n private_long: { id: 'privacy.private.long', defaultMessage: 'Post to followers only' },\n direct_short: { id: 'privacy.direct.short', defaultMessage: 'Direct' },\n direct_long: { id: 'privacy.direct.long', defaultMessage: 'Post to mentioned users only' },\n change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust status privacy' },\n});\n\nconst listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;\n\nclass PrivacyDropdownMenu extends React.PureComponent {\n\n static propTypes = {\n style: PropTypes.object,\n items: PropTypes.array.isRequired,\n value: PropTypes.string.isRequired,\n placement: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n state = {\n mounted: false,\n };\n\n handleDocumentClick = e => {\n if (this.node && !this.node.contains(e.target)) {\n this.props.onClose();\n }\n }\n\n handleKeyDown = e => {\n const { items } = this.props;\n const value = e.currentTarget.getAttribute('data-index');\n const index = items.findIndex(item => {\n return (item.value === value);\n });\n let element;\n\n switch(e.key) {\n case 'Escape':\n this.props.onClose();\n break;\n case 'Enter':\n this.handleClick(e);\n break;\n case 'ArrowDown':\n element = this.node.childNodes[index + 1];\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'ArrowUp':\n element = this.node.childNodes[index - 1];\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'Tab':\n if (e.shiftKey) {\n element = this.node.childNodes[index - 1] || this.node.lastChild;\n } else {\n element = this.node.childNodes[index + 1] || this.node.firstChild;\n }\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'Home':\n element = this.node.firstChild;\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n case 'End':\n element = this.node.lastChild;\n if (element) {\n element.focus();\n this.props.onChange(element.getAttribute('data-index'));\n }\n break;\n }\n }\n\n handleClick = e => {\n const value = e.currentTarget.getAttribute('data-index');\n\n e.preventDefault();\n\n this.props.onClose();\n this.props.onChange(value);\n }\n\n componentDidMount () {\n document.addEventListener('click', this.handleDocumentClick, false);\n document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n if (this.focusedItem) this.focusedItem.focus();\n this.setState({ mounted: true });\n }\n\n componentWillUnmount () {\n document.removeEventListener('click', this.handleDocumentClick, false);\n document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n }\n\n setRef = c => {\n this.node = c;\n }\n\n setFocusRef = c => {\n this.focusedItem = c;\n }\n\n render () {\n const { mounted } = this.state;\n const { style, items, placement, value } = this.props;\n\n return (\n <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>\n {({ opacity, scaleX, scaleY }) => (\n // It should not be transformed when mounting because the resulting\n // size will be used to determine the coordinate of the menu by\n // react-overlays\n <div className={`privacy-dropdown__dropdown ${placement}`} style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null, zIndex: 2 }} role='listbox' ref={this.setRef}>\n {items.map(item => (\n <div role='option' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>\n <div className='privacy-dropdown__option__icon'>\n <Icon id={item.icon} fixedWidth />\n </div>\n\n <div className='privacy-dropdown__option__content'>\n <strong>{item.text}</strong>\n {item.meta}\n </div>\n </div>\n ))}\n </div>\n )}\n </Motion>\n );\n }\n\n}\n\nexport default @injectIntl\nclass PrivacyDropdown extends React.PureComponent {\n\n static propTypes = {\n isUserTouching: PropTypes.func,\n isModalOpen: PropTypes.bool.isRequired,\n onModalOpen: PropTypes.func,\n onModalClose: PropTypes.func,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n open: false,\n placement: 'bottom',\n };\n\n handleToggle = ({ target }) => {\n if (this.props.isUserTouching()) {\n if (this.state.open) {\n this.props.onModalClose();\n } else {\n this.props.onModalOpen({\n actions: this.options.map(option => ({ ...option, active: option.value === this.props.value })),\n onClick: this.handleModalActionClick,\n });\n }\n } else {\n const { top } = target.getBoundingClientRect();\n if (this.state.open && this.activeElement) {\n this.activeElement.focus();\n }\n this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n this.setState({ open: !this.state.open });\n }\n }\n\n handleModalActionClick = (e) => {\n e.preventDefault();\n\n const { value } = this.options[e.currentTarget.getAttribute('data-index')];\n\n this.props.onModalClose();\n this.props.onChange(value);\n }\n\n handleKeyDown = e => {\n switch(e.key) {\n case 'Escape':\n this.handleClose();\n break;\n }\n }\n\n handleMouseDown = () => {\n if (!this.state.open) {\n this.activeElement = document.activeElement;\n }\n }\n\n handleButtonKeyDown = (e) => {\n switch(e.key) {\n case ' ':\n case 'Enter':\n this.handleMouseDown();\n break;\n }\n }\n\n handleClose = () => {\n if (this.state.open && this.activeElement) {\n this.activeElement.focus();\n }\n this.setState({ open: false });\n }\n\n handleChange = value => {\n this.props.onChange(value);\n }\n\n componentWillMount () {\n const { intl: { formatMessage } } = this.props;\n\n this.options = [\n { icon: 'globe', value: 'public', text: formatMessage(messages.public_short), meta: formatMessage(messages.public_long) },\n { icon: 'unlock', value: 'unlisted', text: formatMessage(messages.unlisted_short), meta: formatMessage(messages.unlisted_long) },\n { icon: 'lock', value: 'private', text: formatMessage(messages.private_short), meta: formatMessage(messages.private_long) },\n { icon: 'envelope', value: 'direct', text: formatMessage(messages.direct_short), meta: formatMessage(messages.direct_long) },\n ];\n }\n\n render () {\n const { value, intl } = this.props;\n const { open, placement } = this.state;\n\n const valueOption = this.options.find(item => item.value === value);\n\n return (\n <div className={classNames('privacy-dropdown', placement, { active: open })} onKeyDown={this.handleKeyDown}>\n <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === (placement === 'bottom' ? 0 : (this.options.length - 1)) })}>\n <IconButton\n className='privacy-dropdown__value-icon'\n icon={valueOption.icon}\n title={intl.formatMessage(messages.change_privacy)}\n size={18}\n expanded={open}\n active={open}\n inverted\n onClick={this.handleToggle}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleButtonKeyDown}\n style={{ height: null, lineHeight: '27px' }}\n />\n </div>\n\n <Overlay show={open} placement={placement} target={this}>\n <PrivacyDropdownMenu\n items={this.options}\n value={value}\n onClose={this.handleClose}\n onChange={this.handleChange}\n placement={placement}\n />\n </Overlay>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PrivacyDropdown from '../components/privacy_dropdown';\nimport { changeComposeVisibility } from '../../../actions/compose';\nimport { openModal, closeModal } from '../../../actions/modal';\nimport { isUserTouching } from '../../../is_mobile';\n\nconst mapStateToProps = state => ({\n isModalOpen: state.get('modal').modalType === 'ACTIONS',\n value: state.getIn(['compose', 'privacy']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (value) {\n dispatch(changeComposeVisibility(value));\n },\n\n isUserTouching,\n onModalOpen: props => dispatch(openModal('ACTIONS', props)),\n onModalClose: () => dispatch(closeModal()),\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PrivacyDropdown);\n","import { connect } from 'react-redux';\nimport EmojiPickerDropdown from '../components/emoji_picker_dropdown';\nimport { changeSetting } from '../../../actions/settings';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\nimport { useEmoji } from '../../../actions/emojis';\n\nconst perLine = 8;\nconst lines = 2;\n\nconst DEFAULTS = [\n '+1',\n 'grinning',\n 'kissing_heart',\n 'heart_eyes',\n 'laughing',\n 'stuck_out_tongue_winking_eye',\n 'sweat_smile',\n 'joy',\n 'yum',\n 'disappointed',\n 'thinking_face',\n 'weary',\n 'sob',\n 'sunglasses',\n 'heart',\n 'ok_hand',\n];\n\nconst getFrequentlyUsedEmojis = createSelector([\n state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),\n], emojiCounters => {\n let emojis = emojiCounters\n .keySeq()\n .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))\n .reverse()\n .slice(0, perLine * lines)\n .toArray();\n\n if (emojis.length < DEFAULTS.length) {\n let uniqueDefaults = DEFAULTS.filter(emoji => !emojis.includes(emoji));\n emojis = emojis.concat(uniqueDefaults.slice(0, DEFAULTS.length - emojis.length));\n }\n\n return emojis;\n});\n\nconst getCustomEmojis = createSelector([\n state => state.get('custom_emojis'),\n], emojis => emojis.filter(e => e.get('visible_in_picker')).sort((a, b) => {\n const aShort = a.get('shortcode').toLowerCase();\n const bShort = b.get('shortcode').toLowerCase();\n\n if (aShort < bShort) {\n return -1;\n } else if (aShort > bShort ) {\n return 1;\n } else {\n return 0;\n }\n}));\n\nconst mapStateToProps = state => ({\n custom_emojis: getCustomEmojis(state),\n skinTone: state.getIn(['settings', 'skinTone']),\n frequentlyUsedEmojis: getFrequentlyUsedEmojis(state),\n});\n\nconst mapDispatchToProps = (dispatch, { onPickEmoji }) => ({\n onSkinTone: skinTone => {\n dispatch(changeSetting(['skinTone'], skinTone));\n },\n\n onPickEmoji: emoji => {\n dispatch(useEmoji(emoji));\n\n if (onPickEmoji) {\n onPickEmoji(emoji);\n }\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport IconButton from 'mastodon/components/icon_button';\nimport Icon from 'mastodon/components/icon';\nimport AutosuggestInput from 'mastodon/components/autosuggest_input';\nimport classNames from 'classnames';\n\nconst messages = defineMessages({\n option_placeholder: { id: 'compose_form.poll.option_placeholder', defaultMessage: 'Choice {number}' },\n add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add a choice' },\n remove_option: { id: 'compose_form.poll.remove_option', defaultMessage: 'Remove this choice' },\n poll_duration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' },\n minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },\n hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' },\n days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' },\n});\n\n@injectIntl\nclass Option extends React.PureComponent {\n\n static propTypes = {\n title: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n isPollMultiple: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n onToggleMultiple: PropTypes.func.isRequired,\n suggestions: ImmutablePropTypes.list,\n onClearSuggestions: PropTypes.func.isRequired,\n onFetchSuggestions: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleOptionTitleChange = e => {\n this.props.onChange(this.props.index, e.target.value);\n };\n\n handleOptionRemove = () => {\n this.props.onRemove(this.props.index);\n };\n\n\n handleToggleMultiple = e => {\n this.props.onToggleMultiple();\n e.preventDefault();\n e.stopPropagation();\n };\n\n onSuggestionsClearRequested = () => {\n this.props.onClearSuggestions();\n }\n\n onSuggestionsFetchRequested = (token) => {\n this.props.onFetchSuggestions(token);\n }\n\n onSuggestionSelected = (tokenStart, token, value) => {\n this.props.onSuggestionSelected(tokenStart, token, value, ['poll', 'options', this.props.index]);\n }\n\n render () {\n const { isPollMultiple, title, index, intl } = this.props;\n\n return (\n <li>\n <label className='poll__text editable'>\n <span\n className={classNames('poll__input', { checkbox: isPollMultiple })}\n onClick={this.handleToggleMultiple}\n role='button'\n tabIndex='0'\n />\n\n <AutosuggestInput\n placeholder={intl.formatMessage(messages.option_placeholder, { number: index + 1 })}\n maxLength={25}\n value={title}\n onChange={this.handleOptionTitleChange}\n suggestions={this.props.suggestions}\n onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n onSuggestionSelected={this.onSuggestionSelected}\n searchTokens={[':']}\n />\n </label>\n\n <div className='poll__cancel'>\n <IconButton disabled={index <= 1} title={intl.formatMessage(messages.remove_option)} icon='times' onClick={this.handleOptionRemove} />\n </div>\n </li>\n );\n }\n\n}\n\nexport default\n@injectIntl\nclass PollForm extends ImmutablePureComponent {\n\n static propTypes = {\n options: ImmutablePropTypes.list,\n expiresIn: PropTypes.number,\n isMultiple: PropTypes.bool,\n onChangeOption: PropTypes.func.isRequired,\n onAddOption: PropTypes.func.isRequired,\n onRemoveOption: PropTypes.func.isRequired,\n onChangeSettings: PropTypes.func.isRequired,\n suggestions: ImmutablePropTypes.list,\n onClearSuggestions: PropTypes.func.isRequired,\n onFetchSuggestions: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleAddOption = () => {\n this.props.onAddOption('');\n };\n\n handleSelectDuration = e => {\n this.props.onChangeSettings(e.target.value, this.props.isMultiple);\n };\n\n handleToggleMultiple = () => {\n this.props.onChangeSettings(this.props.expiresIn, !this.props.isMultiple);\n };\n\n render () {\n const { options, expiresIn, isMultiple, onChangeOption, onRemoveOption, intl, ...other } = this.props;\n\n if (!options) {\n return null;\n }\n\n return (\n <div className='compose-form__poll-wrapper'>\n <ul>\n {options.map((title, i) => <Option title={title} key={i} index={i} onChange={onChangeOption} onRemove={onRemoveOption} isPollMultiple={isMultiple} onToggleMultiple={this.handleToggleMultiple} {...other} />)}\n </ul>\n\n <div className='poll__footer'>\n {options.size < 4 && (\n <button className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button>\n )}\n\n <select value={expiresIn} onChange={this.handleSelectDuration}>\n <option value={300}>{intl.formatMessage(messages.minutes, { number: 5 })}</option>\n <option value={1800}>{intl.formatMessage(messages.minutes, { number: 30 })}</option>\n <option value={3600}>{intl.formatMessage(messages.hours, { number: 1 })}</option>\n <option value={21600}>{intl.formatMessage(messages.hours, { number: 6 })}</option>\n <option value={86400}>{intl.formatMessage(messages.days, { number: 1 })}</option>\n <option value={259200}>{intl.formatMessage(messages.days, { number: 3 })}</option>\n <option value={604800}>{intl.formatMessage(messages.days, { number: 7 })}</option>\n </select>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport PollForm from '../components/poll_form';\nimport { addPollOption, removePollOption, changePollOption, changePollSettings } from '../../../actions/compose';\nimport {\n clearComposeSuggestions,\n fetchComposeSuggestions,\n selectComposeSuggestion,\n} from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n suggestions: state.getIn(['compose', 'suggestions']),\n options: state.getIn(['compose', 'poll', 'options']),\n expiresIn: state.getIn(['compose', 'poll', 'expires_in']),\n isMultiple: state.getIn(['compose', 'poll', 'multiple']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onAddOption(title) {\n dispatch(addPollOption(title));\n },\n\n onRemoveOption(index) {\n dispatch(removePollOption(index));\n },\n\n onChangeOption(index, title) {\n dispatch(changePollOption(index, title));\n },\n\n onChangeSettings(expiresIn, isMultiple) {\n dispatch(changePollSettings(expiresIn, isMultiple));\n },\n\n onClearSuggestions () {\n dispatch(clearComposeSuggestions());\n },\n\n onFetchSuggestions (token) {\n dispatch(fetchComposeSuggestions(token));\n },\n\n onSuggestionSelected (position, token, accountId, path) {\n dispatch(selectComposeSuggestion(position, token, accountId, path));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PollForm);\n","import { connect } from 'react-redux';\nimport UploadProgress from '../components/upload_progress';\n\nconst mapStateToProps = state => ({\n active: state.getIn(['compose', 'is_uploading']),\n progress: state.getIn(['compose', 'progress']),\n});\n\nexport default connect(mapStateToProps)(UploadProgress);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nexport default class Upload extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n media: ImmutablePropTypes.map.isRequired,\n onUndo: PropTypes.func.isRequired,\n onOpenFocalPoint: PropTypes.func.isRequired,\n };\n\n handleUndoClick = e => {\n e.stopPropagation();\n this.props.onUndo(this.props.media.get('id'));\n }\n\n handleFocalPointClick = e => {\n e.stopPropagation();\n this.props.onOpenFocalPoint(this.props.media.get('id'));\n }\n\n render () {\n const { media } = this.props;\n const focusX = media.getIn(['meta', 'focus', 'x']);\n const focusY = media.getIn(['meta', 'focus', 'y']);\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n\n return (\n <div className='compose-form__upload' tabIndex='0' role='button'>\n <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>\n {({ scale }) => (\n <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>\n <div className={classNames('compose-form__upload__actions', { active: true })}>\n <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>\n <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>\n </div>\n </div>\n )}\n </Motion>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport Upload from '../components/upload';\nimport { undoUploadCompose } from '../../../actions/compose';\nimport { openModal } from '../../../actions/modal';\nimport { submitCompose } from '../../../actions/compose';\n\nconst mapStateToProps = (state, { id }) => ({\n media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onUndo: id => {\n dispatch(undoUploadCompose(id));\n },\n\n onOpenFocalPoint: id => {\n dispatch(openModal('FOCAL_POINT', { id }));\n },\n\n onSubmit (router) {\n dispatch(submitCompose(router));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Upload);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { changeComposeSensitivity } from 'mastodon/actions/compose';\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl';\n\nconst messages = defineMessages({\n marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },\n unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },\n});\n\nconst mapStateToProps = state => ({\n active: state.getIn(['compose', 'sensitive']),\n disabled: state.getIn(['compose', 'spoiler']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onClick () {\n dispatch(changeComposeSensitivity());\n },\n\n});\n\nclass SensitiveButton extends React.PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { active, disabled, onClick, intl } = this.props;\n\n return (\n <div className='compose-form__sensitive-button'>\n <label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>\n <input\n name='mark-sensitive'\n type='checkbox'\n checked={active}\n onChange={onClick}\n disabled={disabled}\n />\n\n <span className={classNames('checkbox', { active })} />\n\n <FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' />\n </label>\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SensitiveButton));\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport UploadProgressContainer from '../containers/upload_progress_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport UploadContainer from '../containers/upload_container';\nimport SensitiveButtonContainer from '../containers/sensitive_button_container';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadForm extends ImmutablePureComponent {\n\n static propTypes = {\n mediaIds: ImmutablePropTypes.list.isRequired,\n };\n\n render () {\n const { mediaIds } = this.props;\n\n return (\n <div className='compose-form__upload-wrapper'>\n <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />\n\n <div className='compose-form__uploads-wrapper'>\n {mediaIds.map(id => (\n <UploadContainer id={id} key={id} />\n ))}\n </div>\n\n {!mediaIds.isEmpty() && <SensitiveButtonContainer />}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport UploadForm from '../components/upload_form';\n\nconst mapStateToProps = state => ({\n mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')),\n});\n\nexport default connect(mapStateToProps)(UploadForm);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\n\nexport default class Warning extends React.PureComponent {\n\n static propTypes = {\n message: PropTypes.node.isRequired,\n };\n\n render () {\n const { message } = this.props;\n\n return (\n <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>\n {({ opacity, scaleX, scaleY }) => (\n <div className='compose-form__warning' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>\n {message}\n </div>\n )}\n </Motion>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport Warning from '../components/warning';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport { me } from '../../../initial_state';\n\nconst APPROX_HASHTAG_RE = /(?:^|[^\\/\\)\\w])#(\\w*[a-zA-Z·]\\w*)/i;\n\nconst mapStateToProps = state => ({\n needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']),\n hashtagWarning: state.getIn(['compose', 'privacy']) !== 'public' && APPROX_HASHTAG_RE.test(state.getIn(['compose', 'text'])),\n directMessageWarning: state.getIn(['compose', 'privacy']) === 'direct',\n});\n\nconst WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning }) => {\n if (needsLockWarning) {\n return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <a href='/user-settings'><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></a> }} />} />;\n }\n\n if (hashtagWarning) {\n return <Warning message={<FormattedMessage id='compose_form.hashtag_warning' defaultMessage=\"This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.\" />} />;\n }\n\n if (directMessageWarning) {\n const message = (\n <span>\n <FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This toot will only be sent to all the mentioned users.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a>\n </span>\n );\n\n return <Warning message={message} />;\n }\n\n return null;\n};\n\nWarningWrapper.propTypes = {\n needsLockWarning: PropTypes.bool,\n hashtagWarning: PropTypes.bool,\n directMessageWarning: PropTypes.bool,\n};\n\nexport default connect(mapStateToProps)(WarningWrapper);\n","import React from 'react';\nimport CharacterCounter from './character_counter';\nimport Button from '../../../components/button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport ReplyIndicatorContainer from '../containers/reply_indicator_container';\nimport AutosuggestTextarea from '../../../components/autosuggest_textarea';\nimport AutosuggestInput from '../../../components/autosuggest_input';\nimport PollButtonContainer from '../containers/poll_button_container';\nimport UploadButtonContainer from '../containers/upload_button_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport SpoilerButtonContainer from '../containers/spoiler_button_container';\nimport PrivacyDropdownContainer from '../containers/privacy_dropdown_container';\nimport EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';\nimport PollFormContainer from '../containers/poll_form_container';\nimport UploadFormContainer from '../containers/upload_form_container';\nimport WarningContainer from '../containers/warning_container';\nimport { isMobile } from '../../../is_mobile';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { length } from 'stringz';\nimport Icon from 'mastodon/components/icon';\nimport { maxChars } from '../../../initial_state';\n\nconst allowedAroundShortCode = '><\\u0085\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\u0009\\u000a\\u000b\\u000c\\u000d';\n\nconst messages = defineMessages({\n placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },\n spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },\n publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },\n publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' },\n});\n\nexport default @injectIntl\nclass ComposeForm extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n text: PropTypes.string.isRequired,\n suggestions: ImmutablePropTypes.list,\n spoiler: PropTypes.bool,\n privacy: PropTypes.string,\n spoilerText: PropTypes.string,\n focusDate: PropTypes.instanceOf(Date),\n caretPosition: PropTypes.number,\n preselectDate: PropTypes.instanceOf(Date),\n isSubmitting: PropTypes.bool,\n isChangingUpload: PropTypes.bool,\n isUploading: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClearSuggestions: PropTypes.func.isRequired,\n onFetchSuggestions: PropTypes.func.isRequired,\n onSuggestionSelected: PropTypes.func.isRequired,\n onChangeSpoilerText: PropTypes.func.isRequired,\n onPaste: PropTypes.func.isRequired,\n onPickEmoji: PropTypes.func.isRequired,\n showSearch: PropTypes.bool,\n anyMedia: PropTypes.bool,\n singleColumn: PropTypes.bool,\n };\n\n static defaultProps = {\n showSearch: false,\n };\n\n handleChange = (e) => {\n this.props.onChange(e.target.value);\n }\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n this.handleSubmit();\n }\n }\n\n handleSubmit = () => {\n if (this.props.text !== this.autosuggestTextarea.textarea.value) {\n // Something changed the text inside the textarea (e.g. browser extensions like Grammarly)\n // Update the state to match the current text\n this.props.onChange(this.autosuggestTextarea.textarea.value);\n }\n\n // Submit disabled:\n const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;\n const fulltext = [this.props.spoilerText, this.props.text].join('');\n\n if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {\n return;\n }\n\n this.props.onSubmit(this.context.router ? this.context.router.history : null);\n }\n\n onSuggestionsClearRequested = () => {\n this.props.onClearSuggestions();\n }\n\n onSuggestionsFetchRequested = (token) => {\n this.props.onFetchSuggestions(token);\n }\n\n onSuggestionSelected = (tokenStart, token, value) => {\n this.props.onSuggestionSelected(tokenStart, token, value, ['text']);\n }\n\n onSpoilerSuggestionSelected = (tokenStart, token, value) => {\n this.props.onSuggestionSelected(tokenStart, token, value, ['spoiler_text']);\n }\n\n handleChangeSpoilerText = (e) => {\n this.props.onChangeSpoilerText(e.target.value);\n }\n\n handleFocus = () => {\n if (this.composeForm && !this.props.singleColumn) {\n const { left, right } = this.composeForm.getBoundingClientRect();\n if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) {\n this.composeForm.scrollIntoView();\n }\n }\n }\n\n componentDidUpdate (prevProps) {\n // This statement does several things:\n // - If we're beginning a reply, and,\n // - Replying to zero or one users, places the cursor at the end of the textbox.\n // - Replying to more than one user, selects any usernames past the first;\n // this provides a convenient shortcut to drop everyone else from the conversation.\n if (this.props.focusDate !== prevProps.focusDate) {\n let selectionEnd, selectionStart;\n\n if (this.props.preselectDate !== prevProps.preselectDate) {\n selectionEnd = this.props.text.length;\n selectionStart = this.props.text.search(/\\s/) + 1;\n } else if (typeof this.props.caretPosition === 'number') {\n selectionStart = this.props.caretPosition;\n selectionEnd = this.props.caretPosition;\n } else {\n selectionEnd = this.props.text.length;\n selectionStart = selectionEnd;\n }\n\n this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd);\n this.autosuggestTextarea.textarea.focus();\n } else if(prevProps.isSubmitting && !this.props.isSubmitting) {\n this.autosuggestTextarea.textarea.focus();\n } else if (this.props.spoiler !== prevProps.spoiler) {\n if (this.props.spoiler) {\n this.spoilerText.input.focus();\n } else {\n this.autosuggestTextarea.textarea.focus();\n }\n }\n }\n\n setAutosuggestTextarea = (c) => {\n this.autosuggestTextarea = c;\n }\n\n setSpoilerText = (c) => {\n this.spoilerText = c;\n }\n\n setRef = c => {\n this.composeForm = c;\n };\n\n handleEmojiPick = (data) => {\n const { text } = this.props;\n const position = this.autosuggestTextarea.textarea.selectionStart;\n const needsSpace = data.custom && position > 0 && !allowedAroundShortCode.includes(text[position - 1]);\n\n this.props.onPickEmoji(position, data, needsSpace);\n }\n\n render () {\n const { intl, onPaste, showSearch, anyMedia } = this.props;\n const disabled = this.props.isSubmitting;\n const text = [this.props.spoilerText, this.props.text].join('');\n const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > maxChars || (text.length !== 0 && text.trim().length === 0 && !anyMedia);\n let publishText = '';\n\n if (this.props.privacy === 'private' || this.props.privacy === 'direct') {\n publishText = <span className='compose-form__publish-private'><Icon id='lock' /> {intl.formatMessage(messages.publish)}</span>;\n } else {\n publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);\n }\n\n return (\n <div className='compose-form'>\n <WarningContainer />\n\n <ReplyIndicatorContainer />\n\n <div className={`spoiler-input ${this.props.spoiler ? 'spoiler-input--visible' : ''}`} ref={this.setRef}>\n <AutosuggestInput\n placeholder={intl.formatMessage(messages.spoiler_placeholder)}\n value={this.props.spoilerText}\n onChange={this.handleChangeSpoilerText}\n onKeyDown={this.handleKeyDown}\n disabled={!this.props.spoiler}\n ref={this.setSpoilerText}\n suggestions={this.props.suggestions}\n onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n onSuggestionSelected={this.onSpoilerSuggestionSelected}\n searchTokens={[':']}\n id='cw-spoiler-input'\n className='spoiler-input__input'\n />\n </div>\n\n <AutosuggestTextarea\n ref={this.setAutosuggestTextarea}\n placeholder={intl.formatMessage(messages.placeholder)}\n disabled={disabled}\n value={this.props.text}\n onChange={this.handleChange}\n suggestions={this.props.suggestions}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n onSuggestionSelected={this.onSuggestionSelected}\n onPaste={onPaste}\n autoFocus={!showSearch && !isMobile(window.innerWidth)}\n >\n <EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} />\n <div className='compose-form__modifiers'>\n <UploadFormContainer />\n <PollFormContainer />\n </div>\n </AutosuggestTextarea>\n\n <div className='compose-form__buttons-wrapper'>\n <div className='compose-form__buttons'>\n <UploadButtonContainer />\n <PollButtonContainer />\n <PrivacyDropdownContainer />\n <SpoilerButtonContainer />\n </div>\n <div className='character-counter__wrapper'><CharacterCounter max={maxChars} text={text} /></div>\n </div>\n\n <div className='compose-form__publish'>\n <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ComposeForm from '../components/compose_form';\nimport {\n changeCompose,\n submitCompose,\n clearComposeSuggestions,\n fetchComposeSuggestions,\n selectComposeSuggestion,\n changeComposeSpoilerText,\n insertEmojiCompose,\n uploadCompose,\n} from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n text: state.getIn(['compose', 'text']),\n suggestions: state.getIn(['compose', 'suggestions']),\n spoiler: state.getIn(['compose', 'spoiler']),\n spoilerText: state.getIn(['compose', 'spoiler_text']),\n privacy: state.getIn(['compose', 'privacy']),\n focusDate: state.getIn(['compose', 'focusDate']),\n caretPosition: state.getIn(['compose', 'caretPosition']),\n preselectDate: state.getIn(['compose', 'preselectDate']),\n isSubmitting: state.getIn(['compose', 'is_submitting']),\n isChangingUpload: state.getIn(['compose', 'is_changing_upload']),\n isUploading: state.getIn(['compose', 'is_uploading']),\n showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n\n onChange (text) {\n dispatch(changeCompose(text));\n },\n\n onSubmit (router) {\n dispatch(submitCompose(router));\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 (checked) {\n dispatch(changeComposeSpoilerText(checked));\n },\n\n onPaste (files) {\n dispatch(uploadCompose(files));\n },\n\n onPickEmoji (position, data, needsSpace) {\n dispatch(insertEmojiCompose(position, data, needsSpace));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComposeForm);\n","import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport NavigationBar from '../components/navigation_bar';\nimport { logOut } from 'mastodon/utils/log_out';\nimport { openModal } from 'mastodon/actions/modal';\nimport { me } from '../../../initial_state';\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 account: state.getIn(['accounts', me]),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\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)(NavigationBar));\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 '../../actions/compose';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, defineMessages } from 'react-intl';\nimport SearchContainer from './containers/search_container';\nimport Motion from '../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport SearchResultsContainer from './containers/search_results_container';\nimport { changeComposing } from '../../actions/compose';\nimport { openModal } from 'mastodon/actions/modal';\nimport { mascot } from '../../initial_state';\nimport Icon from 'mastodon/components/icon';\nimport { logOut } from 'mastodon/utils/log_out';\n\nconst messages = defineMessages({\n start: { 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: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },\n community: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },\n preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },\n compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new toot' },\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, ownProps) => ({\n columns: state.getIn(['settings', 'columns']),\n showSearch: ownProps.multiColumn ? state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']) : ownProps.isSearchPage,\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Compose extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n columns: ImmutablePropTypes.list.isRequired,\n multiColumn: PropTypes.bool,\n showSearch: PropTypes.bool,\n isSearchPage: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.dispatch(mountCompose());\n }\n }\n\n componentWillUnmount () {\n const { isSearchPage } = this.props;\n\n if (!isSearchPage) {\n this.props.dispatch(unmountCompose());\n }\n }\n\n handleLogoutClick = e => {\n const { dispatch, intl } = this.props;\n\n e.preventDefault();\n e.stopPropagation();\n\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.logoutMessage),\n confirm: intl.formatMessage(messages.logoutConfirm),\n onConfirm: () => logOut(),\n }));\n\n return false;\n }\n\n onFocus = () => {\n this.props.dispatch(changeComposing(true));\n }\n\n onBlur = () => {\n this.props.dispatch(changeComposing(false));\n }\n\n render () {\n const { multiColumn, showSearch, isSearchPage, intl } = this.props;\n\n let header = '';\n\n if (multiColumn) {\n const { columns } = this.props;\n header = (\n <nav className='drawer__header'>\n <Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)} aria-label={intl.formatMessage(messages.start)}><Icon id='bars' fixedWidth /></Link>\n {!columns.some(column => column.get('id') === 'HOME') && (\n <Link to='/timelines/home' className='drawer__tab' title={intl.formatMessage(messages.home_timeline)} aria-label={intl.formatMessage(messages.home_timeline)}><Icon id='home' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'NOTIFICATIONS') && (\n <Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)} aria-label={intl.formatMessage(messages.notifications)}><Icon id='bell' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'COMMUNITY') && (\n <Link to='/timelines/public/local' className='drawer__tab' title={intl.formatMessage(messages.community)} aria-label={intl.formatMessage(messages.community)}><Icon id='users' fixedWidth /></Link>\n )}\n {!columns.some(column => column.get('id') === 'PUBLIC') && (\n <Link to='/timelines/public' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><Icon id='globe' fixedWidth /></Link>\n )}\n <a href='/user-settings' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><Icon id='cog' fixedWidth /></a>\n <a href='/auth/sign_out' className='drawer__tab' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)} onClick={this.handleLogoutClick}><Icon id='sign-out' fixedWidth /></a>\n </nav>\n );\n }\n\n return (\n <div className='drawer' role='region' aria-label={intl.formatMessage(messages.compose)}>\n {header}\n\n {(multiColumn || isSearchPage) && <SearchContainer /> }\n\n <div className='drawer__pager'>\n {!isSearchPage && <div className='drawer__inner' onFocus={this.onFocus}>\n <NavigationContainer onClose={this.onBlur} />\n\n <ComposeFormContainer />\n\n <div className='drawer__inner__mastodon'>\n <img alt='' draggable='false' src={mascot || elephantUIPlane} />\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/features/direct_timeline.js b/priv/static/packs/features/direct_timeline.js index f42cf1ecd..9121e25b9 100644 --- a/priv/static/packs/features/direct_timeline.js +++ b/priv/static/packs/features/direct_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{695:function(e,t,n){"use strict";n.r(t);var i=n(0),c=n(2),r=n(6),s=n(1),o=n(3),u=n.n(o),a=n(21),d=n(633),l=n(628),p=n(102),h=n(222),b=n(7),f=n(635),v=n(43),j=n(68),O=n(56),M=n.n(O),g=n(5),m=n.n(g),y=n(26),I=n.n(y),w=n(25),k=n(903),C=function(o){function e(){for(var a,e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return a=o.call.apply(o,[this].concat(t))||this,Object(s.a)(Object(c.a)(a),"handleClick",function(){if(a.context.router){var e=a.props,t=e.lastStatusId,n=e.unread,o=e.markRead;n&&o(),a.context.router.history.push("/statuses/"+t)}}),Object(s.a)(Object(c.a)(a),"handleHotkeyMoveUp",function(){a.props.onMoveUp(a.props.conversationId)}),Object(s.a)(Object(c.a)(a),"handleHotkeyMoveDown",function(){a.props.onMoveDown(a.props.conversationId)}),a}return Object(r.a)(e,o),e.prototype.render=function(){var e=this.props,t=e.accounts,n=e.lastStatusId,o=e.unread;return null===n?null:Object(i.a)(k.a,{id:n,unread:o,otherAccounts:t,onMoveUp:this.handleHotkeyMoveUp,onMoveDown:this.handleHotkeyMoveDown,onClick:this.handleClick})},e}(w.a);Object(s.a)(C,"contextTypes",{router:m.a.object}),Object(s.a)(C,"propTypes",{conversationId:m.a.string.isRequired,accounts:I.a.list.isRequired,lastStatusId:m.a.string,unread:m.a.bool.isRequired,onMoveUp:m.a.func,onMoveDown:m.a.func,markRead:m.a.func.isRequired});var L=Object(a.connect)(function(t,e){var n=e.conversationId,o=t.getIn(["conversations","items"]).find(function(e){return e.get("id")===n});return{accounts:o.get("accounts").map(function(e){return t.getIn(["accounts",e],null)}),unread:o.get("unread"),lastStatusId:o.get("last_status",null)}},function(e,t){var n=t.conversationId;return{markRead:function(){return e(Object(p.i)(n))}}})(C),R=n(893),U=function(a){function e(){for(var n,e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return n=a.call.apply(a,[this].concat(t))||this,Object(s.a)(Object(c.a)(n),"getCurrentIndex",function(t){return n.props.conversations.findIndex(function(e){return e.get("id")===t})}),Object(s.a)(Object(c.a)(n),"handleMoveUp",function(e){var t=n.getCurrentIndex(e)-1;n._selectChild(t)}),Object(s.a)(Object(c.a)(n),"handleMoveDown",function(e){var t=n.getCurrentIndex(e)+1;n._selectChild(t)}),Object(s.a)(Object(c.a)(n),"setRef",function(e){n.node=e}),Object(s.a)(Object(c.a)(n),"handleLoadOlder",M()(function(){var e=n.props.conversations.last();e&&e.get("last_status")&&n.props.onLoadMore(e.get("last_status"))},300,{leading:!0})),n}Object(r.a)(e,a);var t=e.prototype;return t._selectChild=function(e){var t=this.node.node.querySelector("article:nth-of-type("+(e+1)+") .focusable");t&&t.focus()},t.render=function(){var t=this,e=this.props,n=e.conversations,o=e.onLoadMore,a=Object(j.a)(e,["conversations","onLoadMore"]);return u.a.createElement(R.a,Object(v.a)({},a,{onLoadMore:o&&this.handleLoadOlder,scrollKey:"direct",ref:this.setRef}),n.map(function(e){return Object(i.a)(L,{conversationId:e.get("id"),onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown},e.get("id"))}))},e}(w.a);Object(s.a)(U,"propTypes",{conversations:I.a.list.isRequired,hasMore:m.a.bool,isLoading:m.a.bool,onLoadMore:m.a.func,shouldUpdateScroll:m.a.func});var D,x=Object(a.connect)(function(e){return{conversations:e.getIn(["conversations","items"]),isLoading:e.getIn(["conversations","isLoading"],!0),hasMore:e.getIn(["conversations","hasMore"],!1)}},function(t){return{onLoadMore:function(e){return t(Object(p.h)({maxId:e}))}}})(U);n.d(t,"default",function(){return _});var S=Object(b.f)({title:{id:"column.direct",defaultMessage:"Direct messages"}}),_=Object(a.connect)()(D=Object(b.g)(D=function(a){function e(){for(var o,e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return o=a.call.apply(a,[this].concat(t))||this,Object(s.a)(Object(c.a)(o),"handlePin",function(){var e=o.props,t=e.columnId,n=e.dispatch;n(t?Object(h.h)(t):Object(h.e)("DIRECT",{}))}),Object(s.a)(Object(c.a)(o),"handleMove",function(e){var t=o.props,n=t.columnId;(0,t.dispatch)(Object(h.g)(n,e))}),Object(s.a)(Object(c.a)(o),"handleHeaderClick",function(){o.column.scrollTop()}),Object(s.a)(Object(c.a)(o),"setRef",function(e){o.column=e}),Object(s.a)(Object(c.a)(o),"handleLoadMore",function(e){o.props.dispatch(Object(p.h)({maxId:e}))}),o}Object(r.a)(e,a);var t=e.prototype;return t.componentDidMount=function(){var e=this.props.dispatch;e(Object(p.j)()),e(Object(p.h)()),this.disconnect=e(Object(f.b)())},t.componentWillUnmount=function(){this.props.dispatch(Object(p.k)()),this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,t=e.intl,n=e.hasUnread,o=e.columnId,a=e.multiColumn,c=e.shouldUpdateScroll,r=!!o;return u.a.createElement(d.a,{ref:this.setRef,label:t.formatMessage(S.title)},Object(i.a)(l.a,{icon:"envelope",active:n,title:t.formatMessage(S.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:r,multiColumn:a}),Object(i.a)(x,{trackScroll:!r,scrollKey:"direct_timeline-"+o,timelineId:"direct",onLoadMore:this.handleLoadMore,emptyMessage:Object(i.a)(b.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."}),shouldUpdateScroll:c}))},e}(u.a.PureComponent))||D)||D}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{742:function(e,t,n){"use strict";n.r(t);var a,o,s,c=n(0),i=n(2),r=n(7),l=n(1),d=n(3),u=n.n(d),p=n(12),h=n(669),b=n(665),f=n(111),v=n(245),m=n(6),j=n(672),O=n(22),g=n(31),M=n(63),y=n.n(M),_=n(5),w=n.n(_),C=n(18),k=n.n(C),I=n(19),R=n(223),x=n(276),S=n(637),D=n(685),L=n(286),T=n(51),U=n(100),H=n(287),N=Object(m.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"}}),A=Object(m.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(l.a)(Object(i.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(i.a)(t),"handleMarkAsRead",function(){t.props.markRead()}),Object(l.a)(Object(i.a)(t),"handleReply",function(){t.props.reply(t.props.lastStatus,t.context.router.history)}),Object(l.a)(Object(i.a)(t),"handleDelete",function(){t.props.delete()}),Object(l.a)(Object(i.a)(t),"handleHotkeyMoveUp",function(){t.props.onMoveUp(t.props.conversationId)}),Object(l.a)(Object(i.a)(t),"handleHotkeyMoveDown",function(){t.props.onMoveDown(t.props.conversationId)}),Object(l.a)(Object(i.a)(t),"handleConversationMute",function(){t.props.onMute(t.props.lastStatus)}),Object(l.a)(Object(i.a)(t),"handleShowMore",function(){t.props.onToggleHidden(t.props.lastStatus)}),t}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.accounts,n=e.lastStatus,a=e.unread,o=e.intl;if(null===n)return null;var s=[{text:o.formatMessage(N.open),action:this.handleClick},null];s.push({text:o.formatMessage(n.get("muted")?N.unmuteConversation:N.muteConversation),action:this.handleConversationMute}),a&&(s.push({text:o.formatMessage(N.markAsRead),action:this.handleMarkAsRead}),s.push(null)),s.push({text:o.formatMessage(N.delete),action:this.handleDelete});var i=t.map(function(e){return Object(c.a)(L.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]}),r={reply:this.handleReply,open:this.handleClick,moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,toggleHidden:this.handleShowMore};return Object(c.a)(H.HotKeys,{handlers:r},void 0,Object(c.a)("div",{className:"conversation focusable muted",tabIndex:"0"},void 0,Object(c.a)("div",{className:"conversation__avatar"},void 0,Object(c.a)(D.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,Object(c.a)(U.default,{timestamp:n.get("created_at")})),Object(c.a)("div",{className:"conversation__content__names"},void 0,Object(c.a)(m.b,{id:"conversation.with",defaultMessage:"With {names}",values:{names:Object(c.a)("span",{},void 0,i)}}))),Object(c.a)(R.a,{status:n,onClick:this.handleClick,expanded:!n.get("hidden"),onExpandedToggle:this.handleShowMore,collapsable:!0}),n.get("media_attachments").size>0&&Object(c.a)(x.a,{compact:!0,media:n.get("media_attachments")}),Object(c.a)("div",{className:"status__action-bar"},void 0,Object(c.a)(T.a,{className:"status__action-bar-button",title:o.formatMessage(N.reply),icon:"reply",onClick:this.handleReply}),Object(c.a)("div",{className:"status__action-bar-dropdown"},void 0,Object(c.a)(S.a,{status:n,items:s,icon:"ellipsis-h",size:18,direction:"right",title:o.formatMessage(N.more)}))))))},t}(I.a),Object(l.a)(o,"contextTypes",{router:w.a.object}),Object(l.a)(o,"propTypes",{conversationId:w.a.string.isRequired,accounts:k.a.list.isRequired,lastStatus:k.a.map,unread:w.a.bool.isRequired,onMoveUp:w.a.func,onMoveDown:w.a.func,markRead:w.a.func.isRequired,intl:w.a.object.isRequired}),a=s))||a,q=n(204),E=n(21),P=n(47),z=n(93),K=Object(m.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?"}}),V=Object(m.g)(Object(p.connect)(function(){var e=Object(q.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(f.j)(a))},reply:function(t,a){e(function(o,s){0!==s().getIn(["compose","text"]).trim().length?e(Object(P.d)("CONFIRM",{message:n.formatMessage(K.replyMessage),confirm:n.formatMessage(K.replyConfirm),onConfirm:function(){return e(Object(E.gb)(t,a))}})):e(Object(E.gb)(t,a))})},delete:function(){e(Object(f.h)(a))},onMute:function(t){t.get("muted")?e(Object(z.l)(t.get("id"))):e(Object(z.j)(t.get("id")))},onToggleHidden:function(t){t.get("hidden")?e(Object(z.k)(t.get("id"))):e(Object(z.i)(t.get("id")))}}})(A)),W=n(964),J=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(i.a)(t),"getCurrentIndex",function(e){return t.props.conversations.findIndex(function(t){return t.get("id")===e})}),Object(l.a)(Object(i.a)(t),"handleMoveUp",function(e){var n=t.getCurrentIndex(e)-1;t._selectChild(n,!0)}),Object(l.a)(Object(i.a)(t),"handleMoveDown",function(e){var n=t.getCurrentIndex(e)+1;t._selectChild(n,!1)}),Object(l.a)(Object(i.a)(t),"setRef",function(e){t.node=e}),Object(l.a)(Object(i.a)(t),"handleLoadOlder",y()(function(){var e=t.props.conversations.last();e&&e.get("last_status")&&t.props.onLoadMore(e.get("last_status"))},300,{leading:!0})),t}Object(r.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(g.default)(t,["conversations","onLoadMore"]);return u.a.createElement(W.a,Object(O.a)({},o,{onLoadMore:a&&this.handleLoadOlder,scrollKey:"direct",ref:this.setRef}),n.map(function(t){return Object(c.a)(V,{conversationId:t.get("id"),onMoveUp:e.handleMoveUp,onMoveDown:e.handleMoveDown},t.get("id"))}))},t}(I.a);Object(l.a)(J,"propTypes",{conversations:k.a.list.isRequired,hasMore:w.a.bool,isLoading:w.a.bool,onLoadMore:w.a.func,shouldUpdateScroll:w.a.func});var F,Y=Object(p.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(f.i)({maxId:t}))}}})(J);n.d(t,"default",function(){return G});var B=Object(m.f)({title:{id:"column.direct",defaultMessage:"Direct messages"}}),G=Object(p.connect)()(F=Object(m.g)(F=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(i.a)(t),"handlePin",function(){var e=t.props,n=e.columnId,a=e.dispatch;a(n?Object(v.h)(n):Object(v.e)("DIRECT",{}))}),Object(l.a)(Object(i.a)(t),"handleMove",function(e){var n=t.props,a=n.columnId;(0,n.dispatch)(Object(v.g)(a,e))}),Object(l.a)(Object(i.a)(t),"handleHeaderClick",function(){t.column.scrollTop()}),Object(l.a)(Object(i.a)(t),"setRef",function(e){t.column=e}),Object(l.a)(Object(i.a)(t),"handleLoadMore",function(e){t.props.dispatch(Object(f.i)({maxId:e}))}),t}Object(r.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this.props.dispatch;e(Object(f.k)()),e(Object(f.i)()),this.disconnect=e(Object(j.b)())},n.componentWillUnmount=function(){this.props.dispatch(Object(f.l)()),this.disconnect&&(this.disconnect(),this.disconnect=null)},n.render=function(){var e=this.props,t=e.intl,n=e.hasUnread,a=e.columnId,o=e.multiColumn,s=e.shouldUpdateScroll,i=!!a;return u.a.createElement(h.a,{bindToDocument:!o,ref:this.setRef,label:t.formatMessage(B.title)},Object(c.a)(b.a,{icon:"envelope",active:n,title:t.formatMessage(B.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:i,multiColumn:o}),Object(c.a)(Y,{trackScroll:!i,scrollKey:"direct_timeline-"+a,timelineId:"direct",onLoadMore:this.handleLoadMore,emptyMessage:Object(c.a)(m.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."}),shouldUpdateScroll:s}))},t}(u.a.PureComponent))||F)||F}}]); //# sourceMappingURL=direct_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/direct_timeline.js.map b/priv/static/packs/features/direct_timeline.js.map index 3c895e08b..b5a02599d 100644 --- a/priv/static/packs/features/direct_timeline.js.map +++ b/priv/static/packs/features/direct_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/components/conversation.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/containers/conversations_list_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/index.js"],"names":["Conversation","_this","context","router","_this$props","props","lastStatusId","unread","markRead","history","push","onMoveUp","conversationId","onMoveDown","render","_this$props2","this","accounts","Object","jsx","status_container","id","otherAccounts","handleHotkeyMoveUp","handleHotkeyMoveDown","onClick","handleClick","ImmutablePureComponent","PropTypes","object","string","isRequired","ImmutablePropTypes","list","bool","func","connect","state","_ref","conversation","getIn","find","x","get","map","accountId","dispatch","_ref2","markConversationRead","ConversationsList","conversations","findIndex","elementIndex","getCurrentIndex","_selectChild","c","node","debounce_default","last","onLoadMore","leading","index","element","querySelector","focus","_this2","other","objectWithoutPropertiesLoose","react_default","a","createElement","scrollable_list","esm_extends","handleLoadOlder","scrollKey","ref","setRef","item","conversation_container","handleMoveUp","handleMoveDown","hasMore","isLoading","shouldUpdateScroll","maxId","expandConversations","messages","defineMessages","title","defaultMessage","DirectTimeline","injectIntl","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","componentDidMount","mountConversations","disconnect","connectDirectStream","componentWillUnmount","unmountConversations","_this$props3","intl","hasUnread","multiColumn","pinned","label","formatMessage","column_header","icon","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","conversations_list_container","trackScroll","timelineId","handleLoadMore","emptyMessage","index_es","React","PureComponent"],"mappings":"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","file":"features/direct_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport StatusContainer from '../../../containers/status_container';\n\nexport default class 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 lastStatusId: PropTypes.string,\n unread:PropTypes.bool.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n markRead: PropTypes.func.isRequired,\n };\n\n handleClick = () => {\n if (!this.context.router) {\n return;\n }\n\n const { lastStatusId, unread, markRead } = this.props;\n\n if (unread) {\n markRead();\n }\n\n this.context.router.history.push(`/statuses/${lastStatusId}`);\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 render () {\n const { accounts, lastStatusId, unread } = this.props;\n\n if (lastStatusId === null) {\n return null;\n }\n\n return (\n <StatusContainer\n id={lastStatusId}\n unread={unread}\n otherAccounts={accounts}\n onMoveUp={this.handleHotkeyMoveUp}\n onMoveDown={this.handleHotkeyMoveDown}\n onClick={this.handleClick}\n />\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport Conversation from '../components/conversation';\nimport { markConversationRead } from '../../../actions/conversations';\n\nconst mapStateToProps = (state, { conversationId }) => {\n const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId);\n\n return {\n accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)),\n unread: conversation.get('unread'),\n lastStatusId: conversation.get('last_status', null),\n };\n};\n\nconst mapDispatchToProps = (dispatch, { conversationId }) => ({\n markRead: () => dispatch(markConversationRead(conversationId)),\n});\n\nexport default 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 '../../../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 shouldUpdateScroll: 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);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.getCurrentIndex(id) + 1;\n this._selectChild(elementIndex);\n }\n\n _selectChild (index) {\n const element = this.node.node.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\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 '../../../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 Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { mountConversations, unmountConversations, expandConversations } from '../../actions/conversations';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connectDirectStream } from '../../actions/streaming';\nimport ConversationsListContainer from './containers/conversations_list_container';\n\nconst messages = defineMessages({\n title: { id: 'column.direct', defaultMessage: 'Direct messages' },\n});\n\nexport default @connect()\n@injectIntl\nclass DirectTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n columnId: PropTypes.string,\n intl: PropTypes.object.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('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 } = this.props;\n\n dispatch(mountConversations());\n dispatch(expandConversations());\n this.disconnect = dispatch(connectDirectStream());\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 handleLoadMore = maxId => {\n this.props.dispatch(expandConversations({ maxId }));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, shouldUpdateScroll } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column 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\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 shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/features/direct_timeline/components/conversation.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/containers/conversations_list_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/direct_timeline/index.js"],"names":["messages","defineMessages","more","open","reply","markAsRead","delete","muteConversation","unmuteConversation","Conversation","injectIntl","context","router","props","lastStatus","unread","markRead","history","push","get","onMoveUp","conversationId","onMoveDown","onMute","onToggleHidden","render","this","accounts","intl","menu","text","formatMessage","action","handleClick","handleConversationMute","handleMarkAsRead","handleDelete","names","map","a","to","href","title","className","dangerouslySetInnerHTML","__html","reduce","prev","cur","handlers","handleReply","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","toggleHidden","handleShowMore","tabIndex","size","timestamp","id","defaultMessage","values","status","onClick","expanded","onExpandedToggle","collapsable","compact","media","icon","items","direction","ImmutablePureComponent","PropTypes","object","string","isRequired","ImmutablePropTypes","list","bool","func","replyConfirm","replyMessage","connect","getStatus","makeGetStatus","state","conversation","getIn","find","x","lastStatusId","accountId","dispatch","markConversationRead","_","getState","trim","length","openModal","message","confirm","onConfirm","replyCompose","deleteConversation","unmuteStatus","muteStatus","revealStatus","hideStatus","ConversationsList","conversations","findIndex","elementIndex","getCurrentIndex","_selectChild","c","node","last","onLoadMore","leading","index","align_top","container","element","querySelector","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","other","handleLoadOlder","scrollKey","ref","setRef","item","handleMoveUp","handleMoveDown","hasMore","isLoading","shouldUpdateScroll","maxId","expandConversations","DirectTimeline","columnId","removeColumn","addColumn","dir","moveColumn","column","componentDidMount","mountConversations","disconnect","connectDirectStream","componentWillUnmount","unmountConversations","hasUnread","multiColumn","pinned","bindToDocument","label","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","trackScroll","timelineId","handleLoadMore","emptyMessage","React","PureComponent"],"mappings":"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","file":"features/direct_timeline.js","sourcesContent":["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 'mastodon/components/status_content';\nimport AttachmentList from 'mastodon/components/attachment_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container';\nimport AvatarComposite from 'mastodon/components/avatar_composite';\nimport Permalink from 'mastodon/components/permalink';\nimport IconButton from 'mastodon/components/icon_button';\nimport RelativeTimestamp from 'mastodon/components/relative_timestamp';\nimport { HotKeys } from 'react-hotkeys';\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 intl: PropTypes.object.isRequired,\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 this.props.onToggleHidden(this.props.lastStatus);\n }\n\n render () {\n const { accounts, lastStatus, unread, intl } = this.props;\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 return (\n <HotKeys handlers={handlers}>\n <div className='conversation focusable muted' 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 <RelativeTimestamp timestamp={lastStatus.get('created_at')} />\n </div>\n\n <div className='conversation__content__names'>\n <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} />\n </div>\n </div>\n\n <StatusContent\n status={lastStatus}\n onClick={this.handleClick}\n expanded={!lastStatus.get('hidden')}\n onExpandedToggle={this.handleShowMore}\n collapsable\n />\n\n {lastStatus.get('media_attachments').size > 0 && (\n <AttachmentList\n compact\n media={lastStatus.get('media_attachments')}\n />\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 'mastodon/actions/conversations';\nimport { makeGetStatus } from 'mastodon/selectors';\nimport { replyCompose } from 'mastodon/actions/compose';\nimport { openModal } from 'mastodon/actions/modal';\nimport { muteStatus, unmuteStatus, hideStatus, revealStatus } from 'mastodon/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 '../../../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 shouldUpdateScroll: 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 '../../../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 Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { mountConversations, unmountConversations, expandConversations } from '../../actions/conversations';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connectDirectStream } from '../../actions/streaming';\nimport ConversationsListContainer from './containers/conversations_list_container';\n\nconst messages = defineMessages({\n title: { id: 'column.direct', defaultMessage: 'Direct messages' },\n});\n\nexport default @connect()\n@injectIntl\nclass DirectTimeline extends React.PureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n columnId: PropTypes.string,\n intl: PropTypes.object.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('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 } = this.props;\n\n dispatch(mountConversations());\n dispatch(expandConversations());\n this.disconnect = dispatch(connectDirectStream());\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 handleLoadMore = maxId => {\n this.props.dispatch(expandConversations({ maxId }));\n }\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, shouldUpdateScroll } = this.props;\n const pinned = !!columnId;\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\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 shouldUpdateScroll={shouldUpdateScroll}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/directory.js b/priv/static/packs/features/directory.js new file mode 100644 index 000000000..401928316 --- /dev/null +++ b/priv/static/packs/features/directory.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{761:function(e,t,a){"use strict";a.r(t);var o,n,c,i,r,s,l,d=a(0),u=a(2),b=a(7),m=a(1),j=a(3),f=a.n(j),g=a(12),h=a(6),p=a(5),O=a.n(p),v=a(669),_=a(665),M=a(245),w=a(202),y=a(4),k=a(19),C=a(18),I=a.n(C),N=a(204),L=a(107),E=a(116),R=a(286),P=a(100),q=a(51),A=a(20),F=a(408),T=a(26),U=a(47),B=a(206),D=Object(h.f)({follow:{id:"account.follow",defaultMessage:"Follow"},unfollow:{id:"account.unfollow",defaultMessage:"Unfollow"},requested:{id:"account.requested",defaultMessage:"Awaiting approval"},unblock:{id:"account.unblock",defaultMessage:"Unblock @{name}"},unmute:{id:"account.unmute",defaultMessage:"Unmute @{name}"}}),S=(o=Object(g.connect)(function(){var e=Object(N.d)();return function(t,a){var o=a.id;return{account:e(t,o)}}},function(e,t){var a=t.intl;return{onFollow:function(t){t.getIn(["relationship","following"])||t.getIn(["relationship","requested"])?A.u?e(Object(U.d)("CONFIRM",{message:Object(d.a)(h.b,{id:"confirmations.unfollow.message",defaultMessage:"Are you sure you want to unfollow {name}?",values:{name:Object(d.a)("strong",{},void 0,"@",t.get("acct"))}}),confirm:a.formatMessage(D.unfollowConfirm),onConfirm:function(){return e(Object(T.K)(t.get("id")))}})):e(Object(T.K)(t.get("id"))):e(Object(T.F)(t.get("id")))},onBlock:function(t){t.getIn(["relationship","blocking"])?e(Object(T.J)(t.get("id"))):e(Object(T.w)(t.get("id")))},onMute:function(t){t.getIn(["relationship","muting"])?e(Object(T.L)(t.get("id"))):e(Object(B.g)(t))}}}),Object(h.g)(n=o((i=c=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(m.a)(Object(u.a)(t),"handleEmojiMouseEnter",function(e){var t=e.target;t.src=t.getAttribute("data-original")}),Object(m.a)(Object(u.a)(t),"handleEmojiMouseLeave",function(e){var t=e.target;t.src=t.getAttribute("data-static")}),Object(m.a)(Object(u.a)(t),"handleFollow",function(){t.props.onFollow(t.props.account)}),Object(m.a)(Object(u.a)(t),"handleBlock",function(){t.props.onBlock(t.props.account)}),Object(m.a)(Object(u.a)(t),"handleMute",function(){t.props.onMute(t.props.account)}),Object(m.a)(Object(u.a)(t),"setRef",function(e){t.node=e}),t}Object(b.a)(t,e);var a=t.prototype;return a._updateEmojis=function(){var e=this.node;if(e&&!A.a)for(var t=e.querySelectorAll(".custom-emoji"),a=0;a<t.length;a++){var o=t[a];o.classList.contains("status-emoji")||(o.classList.add("status-emoji"),o.addEventListener("mouseenter",this.handleEmojiMouseEnter,!1),o.addEventListener("mouseleave",this.handleEmojiMouseLeave,!1))}},a.componentDidMount=function(){this._updateEmojis()},a.componentDidUpdate=function(){this._updateEmojis()},a.render=function(){var e,t=this.props,a=t.account,o=t.intl;if(a.get("id")!==A.m&&null!==a.get("relationship",null)){var n=a.getIn(["relationship","following"]),c=a.getIn(["relationship","requested"]),i=a.getIn(["relationship","blocking"]),r=a.getIn(["relationship","muting"]);c?e=Object(d.a)(q.a,{disabled:!0,icon:"hourglass",title:o.formatMessage(D.requested)}):i?e=Object(d.a)(q.a,{active:!0,icon:"unlock",title:o.formatMessage(D.unblock,{name:a.get("username")}),onClick:this.handleBlock}):r?e=Object(d.a)(q.a,{active:!0,icon:"volume-up",title:o.formatMessage(D.unmute,{name:a.get("username")}),onClick:this.handleMute}):a.get("moved")&&!n||(e=Object(d.a)(q.a,{icon:n?"user-times":"user-plus",title:o.formatMessage(n?D.unfollow:D.follow),onClick:this.handleFollow,active:n}))}return Object(d.a)("div",{className:"directory__card"},void 0,Object(d.a)("div",{className:"directory__card__img"},void 0,Object(d.a)("img",{src:A.a?a.get("header"):a.get("header_static"),alt:""})),Object(d.a)("div",{className:"directory__card__bar"},void 0,Object(d.a)(R.a,{className:"directory__card__bar__name",href:a.get("url"),to:"/accounts/"+a.get("id")},void 0,Object(d.a)(L.a,{account:a,size:48}),Object(d.a)(E.a,{account:a})),Object(d.a)("div",{className:"directory__card__bar__relationship account__relationship"},void 0,e)),f.a.createElement("div",{className:"directory__card__extra",ref:this.setRef},Object(d.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:{__html:a.get("note_emojified")}})),Object(d.a)("div",{className:"directory__card__extra"},void 0,Object(d.a)("div",{className:"accounts-table__count"},void 0,Object(F.a)(a.get("statuses_count"))," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.posts",defaultMessage:"Toots"}))),Object(d.a)("div",{className:"accounts-table__count"},void 0,Object(F.a)(a.get("followers_count"))," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.followers",defaultMessage:"Followers"}))),Object(d.a)("div",{className:"accounts-table__count"},void 0,null===a.get("last_status_at")?Object(d.a)(h.b,{id:"account.never_active",defaultMessage:"Never"}):Object(d.a)(P.default,{timestamp:a.get("last_status_at")})," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.last_status",defaultMessage:"Last active"})))))},t}(k.a),Object(m.a)(c,"propTypes",{account:I.a.map.isRequired,intl:O.a.object.isRequired,onFollow:O.a.func.isRequired,onBlock:O.a.func.isRequired,onMute:O.a.func.isRequired}),n=i))||n)||n),x=a(10),H=a.n(x),J=function(e){function t(){return e.apply(this,arguments)||this}return Object(b.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.name,a=e.value,o=e.checked,n=e.onChange,c=e.label;return Object(d.a)("label",{className:"radio-button"},void 0,Object(d.a)("input",{name:t,type:"radio",value:a,checked:o,onChange:n}),Object(d.a)("span",{className:H()("radio-button__input",{checked:o})}),Object(d.a)("span",{},void 0,c))},t}(f.a.PureComponent),K=a(994),z=a(460);a.d(t,"default",function(){return G});var Y=Object(h.f)({title:{id:"column.directory",defaultMessage:"Browse profiles"},recentlyActive:{id:"directory.recently_active",defaultMessage:"Recently active"},newArrivals:{id:"directory.new_arrivals",defaultMessage:"New arrivals"},local:{id:"directory.local",defaultMessage:"From {domain} only"},federated:{id:"directory.federated",defaultMessage:"From known fediverse"}}),G=Object(g.connect)(function(e){return{accountIds:e.getIn(["user_lists","directory","items"],Object(y.List)()),isLoading:e.getIn(["user_lists","directory","isLoading"],!0),domain:e.getIn(["meta","domain"])}})(r=Object(h.g)((l=s=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(m.a)(Object(u.a)(t),"state",{order:null,local:null}),Object(m.a)(Object(u.a)(t),"handlePin",function(){var e=t.props,a=e.columnId,o=e.dispatch;o(a?Object(M.h)(a):Object(M.e)("DIRECTORY",t.getParams(t.props,t.state)))}),Object(m.a)(Object(u.a)(t),"getParams",function(e,t){return{order:null===t.order?e.params.order||"active":t.order,local:null===t.local?e.params.local||!1:t.local}}),Object(m.a)(Object(u.a)(t),"handleMove",function(e){var a=t.props,o=a.columnId;(0,a.dispatch)(Object(M.g)(o,e))}),Object(m.a)(Object(u.a)(t),"handleHeaderClick",function(){t.column.scrollTop()}),Object(m.a)(Object(u.a)(t),"setRef",function(e){t.column=e}),Object(m.a)(Object(u.a)(t),"handleChangeOrder",function(e){var a=t.props,o=a.dispatch,n=a.columnId;n?o(Object(M.f)(n,["order"],e.target.value)):t.setState({order:e.target.value})}),Object(m.a)(Object(u.a)(t),"handleChangeLocal",function(e){var a=t.props,o=a.dispatch,n=a.columnId;n?o(Object(M.f)(n,["local"],"1"===e.target.value)):t.setState({local:"1"===e.target.value})}),Object(m.a)(Object(u.a)(t),"handleLoadMore",function(){(0,t.props.dispatch)(Object(w.g)(t.getParams(t.props,t.state)))}),t}Object(b.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){(0,this.props.dispatch)(Object(w.h)(this.getParams(this.props,this.state)))},a.componentDidUpdate=function(e,t){var a=this.props.dispatch,o=this.getParams(e,t),n=this.getParams(this.props,this.state);o.order===n.order&&o.local===n.local||a(Object(w.h)(n))},a.render=function(){var e=this.props,t=e.isLoading,a=e.accountIds,o=e.intl,n=e.columnId,c=e.multiColumn,i=e.domain,r=e.shouldUpdateScroll,s=this.getParams(this.props,this.state),l=s.order,u=s.local,b=!!n,m=Object(d.a)("div",{className:"scrollable",style:{background:"transparent"}},void 0,Object(d.a)("div",{className:"filter-form"},void 0,Object(d.a)("div",{className:"filter-form__column",role:"group"},void 0,Object(d.a)(J,{name:"order",value:"active",label:o.formatMessage(Y.recentlyActive),checked:"active"===l,onChange:this.handleChangeOrder}),Object(d.a)(J,{name:"order",value:"new",label:o.formatMessage(Y.newArrivals),checked:"new"===l,onChange:this.handleChangeOrder})),Object(d.a)("div",{className:"filter-form__column",role:"group"},void 0,Object(d.a)(J,{name:"local",value:"1",label:o.formatMessage(Y.local,{domain:i}),checked:u,onChange:this.handleChangeLocal}),Object(d.a)(J,{name:"local",value:"0",label:o.formatMessage(Y.federated),checked:!u,onChange:this.handleChangeLocal}))),Object(d.a)("div",{className:H()("directory__list",{loading:t})},void 0,a.map(function(e){return Object(d.a)(S,{id:e},e)})),Object(d.a)(K.a,{onClick:this.handleLoadMore,visible:!t}));return f.a.createElement(v.a,{bindToDocument:!c,ref:this.setRef,label:o.formatMessage(Y.title)},Object(d.a)(_.a,{icon:"address-book-o",title:o.formatMessage(Y.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:b,multiColumn:c}),c&&!b?Object(d.a)(z.a,{scrollKey:"directory",shouldUpdateScroll:r},void 0,m):m)},t}(f.a.PureComponent),Object(m.a)(s,"contextTypes",{router:O.a.object}),r=l))||r)||r}}]); +//# sourceMappingURL=directory.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/directory.js.map b/priv/static/packs/features/directory.js.map new file mode 100644 index 000000000..9e9a3887b --- /dev/null +++ b/priv/static/packs/features/directory.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/directory/components/account_card.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/components/radio_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/directory/index.js"],"names":["messages","defineMessages","follow","unfollow","requested","unblock","unmute","AccountCard","connect","getAccount","makeGetAccount","state","id","account","dispatch","intl","onFollow","getIn","unfollowModal","openModal","message","defaultMessage","values","name","get","confirm","formatMessage","unfollowConfirm","onConfirm","unfollowAccount","followAccount","onBlock","unblockAccount","blockAccount","onMute","unmuteAccount","initMuteModal","injectIntl","target","src","getAttribute","props","c","node","_updateEmojis","this","autoPlayGif","emojis","querySelectorAll","i","length","emoji","classList","contains","add","addEventListener","handleEmojiMouseEnter","handleEmojiMouseLeave","componentDidMount","componentDidUpdate","render","buttons","me","following","blocking","muting","disabled","icon","title","active","onClick","handleBlock","handleMute","handleFollow","className","alt","href","to","size","ref","setRef","dangerouslySetInnerHTML","__html","shortNumberFormat","timestamp","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","RadioButton","value","checked","onChange","label","type","classNames","React","PureComponent","recentlyActive","newArrivals","local","federated","Directory","accountIds","ImmutableList","isLoading","domain","order","columnId","removeColumn","addColumn","getParams","params","dir","moveColumn","column","scrollTop","e","changeColumnParams","setState","expandDirectory","fetchDirectory","prevProps","prevState","paramsOld","paramsNew","multiColumn","shouldUpdateScroll","pinned","scrollableArea","style","background","role","handleChangeOrder","handleChangeLocal","loading","accountId","handleLoadMore","visible","bindToDocument","onPin","handlePin","onMove","handleMove","handleHeaderClick","scrollKey","router"],"mappings":"kWAkBMA,EAAWC,YAAe,CAC9BC,OAAO,CAAD,6CACNC,SAAS,CAAD,iDACRC,UAAU,CAAD,2DACTC,QAAQ,CAAD,uDACPC,OAAO,CAAD,uDAmDFC,G,EADLC,kBA/C2B,WAC1B,IAAMC,EAAaC,cAMnB,OAJwB,SAACC,EAAD,OAAUC,EAAV,EAAUA,GAAV,MAAoB,CAC1CC,QAASJ,EAAWE,EAAOC,MAMJ,SAACE,EAAD,OAAaC,EAAb,EAAaA,KAAb,MAAyB,CAElDC,SAFkD,SAExCH,GACJA,EAAQI,MAAM,CAAC,eAAgB,eAAiBJ,EAAQI,MAAM,CAAC,eAAgB,cAC7EC,IACFJ,EAASK,YAAU,UAAW,CAC5BC,QAAS,YAAC,IAAD,CAAkBR,GAAG,iCAAiCS,eAAe,4CAA4CC,OAAQ,CAAEC,KAAM,mCAAUV,EAAQW,IAAI,YAChKC,QAASV,EAAKW,cAAc1B,EAAS2B,iBACrCC,UAAW,kBAAMd,EAASe,YAAgBhB,EAAQW,IAAI,YAGxDV,EAASe,YAAgBhB,EAAQW,IAAI,QAGvCV,EAASgB,YAAcjB,EAAQW,IAAI,SAIvCO,QAlBkD,SAkBzClB,GACHA,EAAQI,MAAM,CAAC,eAAgB,aACjCH,EAASkB,YAAenB,EAAQW,IAAI,QAEpCV,EAASmB,YAAapB,EAAQW,IAAI,SAItCU,OA1BkD,SA0B1CrB,GACFA,EAAQI,MAAM,CAAC,eAAgB,WACjCH,EAASqB,YAActB,EAAQW,IAAI,QAEnCV,EAASsB,YAAcvB,QAMbwB,Y,+MAyCU,YAAiB,IAAdC,EAAa,EAAbA,OACzBA,EAAOC,IAAMD,EAAOE,aAAa,mB,mDAGX,YAAiB,IAAdF,EAAa,EAAbA,OACzBA,EAAOC,IAAMD,EAAOE,aAAa,iB,0CAGpB,WACb,EAAKC,MAAMzB,SAAS,EAAKyB,MAAM5B,W,yCAGnB,WACZ,EAAK4B,MAAMV,QAAQ,EAAKU,MAAM5B,W,wCAGnB,WACX,EAAK4B,MAAMP,OAAO,EAAKO,MAAM5B,W,oCAGtB,SAAC6B,GACR,EAAKC,KAAOD,I,8CAlDdE,cAAA,WACE,IAAMD,EAAOE,KAAKF,KAElB,GAAKA,IAAQG,IAMb,IAFA,IAAMC,EAASJ,EAAKK,iBAAiB,iBAE5BC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,IAAK,CACtC,IAAIE,EAAQJ,EAAOE,GACfE,EAAMC,UAAUC,SAAS,kBAG7BF,EAAMC,UAAUE,IAAI,gBAEpBH,EAAMI,iBAAiB,aAAcV,KAAKW,uBAAuB,GACjEL,EAAMI,iBAAiB,aAAcV,KAAKY,uBAAuB,M,EAIrEC,kBAAA,WACEb,KAAKD,iB,EAGPe,mBAAA,WACEd,KAAKD,iB,EA2BPgB,OAAA,WAAW,IAGLC,EAHI,EACkBhB,KAAKJ,MAAvB5B,EADA,EACAA,QAASE,EADT,EACSA,KAIjB,GAAIF,EAAQW,IAAI,QAAUsC,KAA4C,OAAtCjD,EAAQW,IAAI,eAAgB,MAAgB,CAC1E,IAAMuC,EAAYlD,EAAQI,MAAM,CAAC,eAAgB,cAC3Cb,EAAYS,EAAQI,MAAM,CAAC,eAAgB,cAC3C+C,EAAYnD,EAAQI,MAAM,CAAC,eAAgB,aAC3CgD,EAAYpD,EAAQI,MAAM,CAAC,eAAgB,WAE7Cb,EACFyD,EAAU,YAAC,IAAD,CAAYK,UAAQ,EAACC,KAAK,YAAYC,MAAOrD,EAAKW,cAAc1B,EAASI,aAC1E4D,EACTH,EAAU,YAAC,IAAD,CAAYQ,QAAM,EAACF,KAAK,SAASC,MAAOrD,EAAKW,cAAc1B,EAASK,QAAS,CAAEkB,KAAMV,EAAQW,IAAI,cAAgB8C,QAASzB,KAAK0B,cAChIN,EACTJ,EAAU,YAAC,IAAD,CAAYQ,QAAM,EAACF,KAAK,YAAYC,MAAOrD,EAAKW,cAAc1B,EAASM,OAAQ,CAAEiB,KAAMV,EAAQW,IAAI,cAAgB8C,QAASzB,KAAK2B,aACjI3D,EAAQW,IAAI,WAAYuC,IAClCF,EAAU,YAAC,IAAD,CAAYM,KAAMJ,EAAY,aAAe,YAAaK,MAAOrD,EAAKW,cAAcqC,EAAY/D,EAASG,SAAWH,EAASE,QAASoE,QAASzB,KAAK4B,aAAcJ,OAAQN,KAIxL,OACE,mBAAKW,UAAU,wBAAf,EACE,mBAAKA,UAAU,6BAAf,EACE,mBAAKnC,IAAKO,IAAcjC,EAAQW,IAAI,UAAYX,EAAQW,IAAI,iBAAkBmD,IAAI,MAGpF,mBAAKD,UAAU,6BAAf,EACE,YAAC,IAAD,CAAWA,UAAU,6BAA6BE,KAAM/D,EAAQW,IAAI,OAAQqD,GAAE,aAAehE,EAAQW,IAAI,YAAzG,EACE,YAAC,IAAD,CAAQX,QAASA,EAASiE,KAAM,KAChC,YAAC,IAAD,CAAajE,QAASA,KAGxB,mBAAK6D,UAAU,iEAAf,EACGb,IAIL,yBAAKa,UAAU,yBAAyBK,IAAKlC,KAAKmC,QAChD,mBAAKN,UAAU,2BAA2BO,wBAAyB,CAAEC,OAAQrE,EAAQW,IAAI,sBAG3F,mBAAKkD,UAAU,+BAAf,EACE,mBAAKA,UAAU,8BAAf,EAAwCS,YAAkBtE,EAAQW,IAAI,mBAAtE,IAA0F,8BAAO,YAAC,IAAD,CAAkBZ,GAAG,gBAAgBS,eAAe,YACrJ,mBAAKqD,UAAU,8BAAf,EAAwCS,YAAkBtE,EAAQW,IAAI,oBAAtE,IAA2F,8BAAO,YAAC,IAAD,CAAkBZ,GAAG,oBAAoBS,eAAe,gBAC1J,mBAAKqD,UAAU,8BAAf,EAA0E,OAAlC7D,EAAQW,IAAI,kBAA6B,YAAC,IAAD,CAAkBZ,GAAG,uBAAuBS,eAAe,UAAa,YAAC,UAAD,CAAmB+D,UAAWvE,EAAQW,IAAI,oBAAnM,IAA0N,8BAAO,YAAC,IAAD,CAAkBZ,GAAG,sBAAsBS,eAAe,qB,GA7G3QgE,K,0BAEL,CACjBxE,QAASyE,IAAmBC,IAAIC,WAChCzE,KAAM0E,IAAUC,OAAOF,WACvBxE,SAAUyE,IAAUE,KAAKH,WACzBzD,QAAS0D,IAAUE,KAAKH,WACxBtD,OAAQuD,IAAUE,KAAKH,a,+BC7ENI,E,kGAUnBhC,OAAA,WAAW,IAAD,EAC0Cf,KAAKJ,MAA/ClB,EADA,EACAA,KAAMsE,EADN,EACMA,MAAOC,EADb,EACaA,QAASC,EADtB,EACsBA,SAAUC,EADhC,EACgCA,MAExC,OACE,qBAAOtB,UAAU,qBAAjB,EACE,qBACEnD,KAAMA,EACN0E,KAAK,QACLJ,MAAOA,EACPC,QAASA,EACTC,SAAUA,IAGZ,oBAAMrB,UAAWwB,IAAW,sBAAuB,CAAEJ,cAErD,6BAAOE,K,GAzB0BG,IAAMC,e,wDCY/C,IAAMpG,EAAWC,YAAe,CAC9BmE,MAAM,CAAD,wDACLiC,eAAe,CAAD,iEACdC,YAAY,CAAD,2DACXC,MAAM,CAAD,0DACLC,UAAU,CAAD,kEAWLC,EAFUjG,kBANQ,SAAAG,GAAK,MAAK,CAChC+F,WAAY/F,EAAMM,MAAM,CAAC,aAAc,YAAa,SAAU0F,kBAC9DC,UAAWjG,EAAMM,MAAM,CAAC,aAAc,YAAa,cAAc,GACjE4F,OAAQlG,EAAMM,MAAM,CAAC,OAAQ,a,GAI9BoB,a,0LAsBS,CACNyE,MAAO,KACPP,MAAO,O,uCAGG,WAAO,IAAD,EACe,EAAK9D,MAA5BsE,EADQ,EACRA,SAAUjG,EADF,EACEA,SAGhBA,EADEiG,EACOC,YAAaD,GAEbE,YAAU,YAAa,EAAKC,UAAU,EAAKzE,MAAO,EAAK9B,W,uCAIxD,SAAC8B,EAAO9B,GAAR,MAAmB,CAC7BmG,MAAuB,OAAhBnG,EAAMmG,MAAkBrE,EAAM0E,OAAOL,OAAS,SAAYnG,EAAMmG,MACvEP,MAAuB,OAAhB5F,EAAM4F,MAAkB9D,EAAM0E,OAAOZ,QAAS,EAAS5F,EAAM4F,S,wCAGzD,SAAAa,GAAQ,IAAD,EACa,EAAK3E,MAA5BsE,EADU,EACVA,UACRjG,EAFkB,EACAA,UACTuG,YAAWN,EAAUK,M,+CAGZ,WAClB,EAAKE,OAAOC,c,oCAkBL,SAAA7E,GACP,EAAK4E,OAAS5E,I,+CAGI,SAAA8E,GAAM,IAAD,EACQ,EAAK/E,MAA5B3B,EADe,EACfA,SAAUiG,EADK,EACLA,SAEdA,EACFjG,EAAS2G,YAAmBV,EAAU,CAAC,SAAUS,EAAElF,OAAOuD,QAE1D,EAAK6B,SAAS,CAAEZ,MAAOU,EAAElF,OAAOuD,U,+CAIhB,SAAA2B,GAAM,IAAD,EACQ,EAAK/E,MAA5B3B,EADe,EACfA,SAAUiG,EADK,EACLA,SAEdA,EACFjG,EAAS2G,YAAmBV,EAAU,CAAC,SAA6B,MAAnBS,EAAElF,OAAOuD,QAE1D,EAAK6B,SAAS,CAAEnB,MAA0B,MAAnBiB,EAAElF,OAAOuD,U,4CAInB,YAEf/E,EADqB,EAAK2B,MAAlB3B,UACC6G,YAAgB,EAAKT,UAAU,EAAKzE,MAAO,EAAK9B,W,8CAzC3D+C,kBAAA,YAEE5C,EADqB+B,KAAKJ,MAAlB3B,UACC8G,YAAe/E,KAAKqE,UAAUrE,KAAKJ,MAAOI,KAAKlC,U,EAG1DgD,mBAAA,SAAoBkE,EAAWC,GAAY,IACjChH,EAAa+B,KAAKJ,MAAlB3B,SACFiH,EAAYlF,KAAKqE,UAAUW,EAAWC,GACtCE,EAAYnF,KAAKqE,UAAUrE,KAAKJ,MAAOI,KAAKlC,OAE9CoH,EAAUjB,QAAUkB,EAAUlB,OAASiB,EAAUxB,QAAUyB,EAAUzB,OACvEzF,EAAS8G,YAAeI,K,EAiC5BpE,OAAA,WAAW,IAAD,EACmFf,KAAKJ,MAAxFmE,EADA,EACAA,UAAWF,EADX,EACWA,WAAY3F,EADvB,EACuBA,KAAMgG,EAD7B,EAC6BA,SAAUkB,EADvC,EACuCA,YAAapB,EADpD,EACoDA,OAAQqB,EAD5D,EAC4DA,mBAD5D,EAEkBrF,KAAKqE,UAAUrE,KAAKJ,MAAOI,KAAKlC,OAAlDmG,EAFA,EAEAA,MAAOP,EAFP,EAEOA,MACT4B,IAAWpB,EAEXqB,EACJ,mBAAK1D,UAAU,aAAa2D,MAAO,CAAEC,WAAY,qBAAjD,EACE,mBAAK5D,UAAU,oBAAf,EACE,mBAAKA,UAAU,sBAAsB6D,KAAK,cAA1C,EACE,YAAC,EAAD,CAAahH,KAAK,QAAQsE,MAAM,SAASG,MAAOjF,EAAKW,cAAc1B,EAASqG,gBAAiBP,QAAmB,WAAVgB,EAAoBf,SAAUlD,KAAK2F,oBACzI,YAAC,EAAD,CAAajH,KAAK,QAAQsE,MAAM,MAAMG,MAAOjF,EAAKW,cAAc1B,EAASsG,aAAcR,QAAmB,QAAVgB,EAAiBf,SAAUlD,KAAK2F,qBAGlI,mBAAK9D,UAAU,sBAAsB6D,KAAK,cAA1C,EACE,YAAC,EAAD,CAAahH,KAAK,QAAQsE,MAAM,IAAIG,MAAOjF,EAAKW,cAAc1B,EAASuG,MAAO,CAAEM,WAAWf,QAASS,EAAOR,SAAUlD,KAAK4F,oBAC1H,YAAC,EAAD,CAAalH,KAAK,QAAQsE,MAAM,IAAIG,MAAOjF,EAAKW,cAAc1B,EAASwG,WAAYV,SAAUS,EAAOR,SAAUlD,KAAK4F,sBAIvH,mBAAK/D,UAAWwB,IAAW,kBAAmB,CAAEwC,QAAS9B,UAAzD,EACGF,EAAWnB,IAAI,SAAAoD,GAAS,OAAI,YAAC,EAAD,CAAa/H,GAAI+H,GAAgBA,MAGhE,YAAC,IAAD,CAAUrE,QAASzB,KAAK+F,eAAgBC,SAAUjC,KAItD,OACE,kBAAC,IAAD,CAAQkC,gBAAiBb,EAAalD,IAAKlC,KAAKmC,OAAQgB,MAAOjF,EAAKW,cAAc1B,EAASoE,QACzF,YAAC,IAAD,CACED,KAAK,iBACLC,MAAOrD,EAAKW,cAAc1B,EAASoE,OACnC2E,MAAOlG,KAAKmG,UACZC,OAAQpG,KAAKqG,WACb5E,QAASzB,KAAKsG,kBACdhB,OAAQA,EACRF,YAAaA,IAGdA,IAAgBE,EAAS,YAAC,IAAD,CAAiBiB,UAAU,YAAYlB,mBAAoBA,QAA3D,EAAgFE,GAAoCA,I,GArI9HjC,IAAMC,e,6BAEN,CACpBiD,OAAQ5D,IAAUC,S","file":"features/directory.js","sourcesContent":["import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'mastodon/selectors';\nimport Avatar from 'mastodon/components/avatar';\nimport DisplayName from 'mastodon/components/display_name';\nimport Permalink from 'mastodon/components/permalink';\nimport RelativeTimestamp from 'mastodon/components/relative_timestamp';\nimport IconButton from 'mastodon/components/icon_button';\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\nimport { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state';\nimport { shortNumberFormat } from 'mastodon/utils/numbers';\nimport { followAccount, unfollowAccount, blockAccount, unblockAccount, unmuteAccount } from 'mastodon/actions/accounts';\nimport { openModal } from 'mastodon/actions/modal';\nimport { initMuteModal } from 'mastodon/actions/mutes';\n\nconst messages = defineMessages({\n follow: { id: 'account.follow', defaultMessage: 'Follow' },\n unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },\n requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' },\n unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n});\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { id }) => ({\n account: getAccount(state, id),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onFollow (account) {\n if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {\n if (unfollowModal) {\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n confirm: intl.formatMessage(messages.unfollowConfirm),\n onConfirm: () => dispatch(unfollowAccount(account.get('id'))),\n }));\n } else {\n dispatch(unfollowAccount(account.get('id')));\n }\n } else {\n dispatch(followAccount(account.get('id')));\n }\n },\n\n onBlock (account) {\n if (account.getIn(['relationship', 'blocking'])) {\n dispatch(unblockAccount(account.get('id')));\n } else {\n dispatch(blockAccount(account.get('id')));\n }\n },\n\n onMute (account) {\n if (account.getIn(['relationship', 'muting'])) {\n dispatch(unmuteAccount(account.get('id')));\n } else {\n dispatch(initMuteModal(account));\n }\n },\n\n});\n\nexport default @injectIntl\n@connect(makeMapStateToProps, mapDispatchToProps)\nclass AccountCard extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onFollow: PropTypes.func.isRequired,\n onBlock: PropTypes.func.isRequired,\n onMute: PropTypes.func.isRequired,\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 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 handleFollow = () => {\n this.props.onFollow(this.props.account);\n }\n\n handleBlock = () => {\n this.props.onBlock(this.props.account);\n }\n\n handleMute = () => {\n this.props.onMute(this.props.account);\n }\n\n setRef = (c) => {\n this.node = c;\n }\n\n render () {\n const { account, intl } = this.props;\n\n let buttons;\n\n if (account.get('id') !== me && account.get('relationship', null) !== null) {\n const following = account.getIn(['relationship', 'following']);\n const requested = account.getIn(['relationship', 'requested']);\n const blocking = account.getIn(['relationship', 'blocking']);\n const muting = account.getIn(['relationship', 'muting']);\n\n if (requested) {\n buttons = <IconButton disabled icon='hourglass' title={intl.formatMessage(messages.requested)} />;\n } else if (blocking) {\n buttons = <IconButton active icon='unlock' title={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.handleBlock} />;\n } else if (muting) {\n buttons = <IconButton active icon='volume-up' title={intl.formatMessage(messages.unmute, { name: account.get('username') })} onClick={this.handleMute} />;\n } else if (!account.get('moved') || following) {\n buttons = <IconButton icon={following ? 'user-times' : 'user-plus'} title={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={this.handleFollow} active={following} />;\n }\n }\n\n return (\n <div className='directory__card'>\n <div className='directory__card__img'>\n <img src={autoPlayGif ? account.get('header') : account.get('header_static')} alt='' />\n </div>\n\n <div className='directory__card__bar'>\n <Permalink className='directory__card__bar__name' href={account.get('url')} to={`/accounts/${account.get('id')}`}>\n <Avatar account={account} size={48} />\n <DisplayName account={account} />\n </Permalink>\n\n <div className='directory__card__bar__relationship account__relationship'>\n {buttons}\n </div>\n </div>\n\n <div className='directory__card__extra' ref={this.setRef}>\n <div className='account__header__content' dangerouslySetInnerHTML={{ __html: account.get('note_emojified') }} />\n </div>\n\n <div className='directory__card__extra'>\n <div className='accounts-table__count'>{shortNumberFormat(account.get('statuses_count'))} <small><FormattedMessage id='account.posts' defaultMessage='Toots' /></small></div>\n <div className='accounts-table__count'>{shortNumberFormat(account.get('followers_count'))} <small><FormattedMessage id='account.followers' defaultMessage='Followers' /></small></div>\n <div className='accounts-table__count'>{account.get('last_status_at') === null ? <FormattedMessage id='account.never_active' defaultMessage='Never' /> : <RelativeTimestamp timestamp={account.get('last_status_at')} />} <small><FormattedMessage id='account.last_status' defaultMessage='Last active' /></small></div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nexport default class RadioButton extends React.PureComponent {\n\n static propTypes = {\n value: PropTypes.string.isRequired,\n checked: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n label: PropTypes.node.isRequired,\n };\n\n render () {\n const { name, value, checked, onChange, label } = this.props;\n\n return (\n <label className='radio-button'>\n <input\n name={name}\n type='radio'\n value={value}\n checked={checked}\n onChange={onChange}\n />\n\n <span className={classNames('radio-button__input', { checked })} />\n\n <span>{label}</span>\n </label>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from 'mastodon/components/column';\nimport ColumnHeader from 'mastodon/components/column_header';\nimport { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns';\nimport { fetchDirectory, expandDirectory } from 'mastodon/actions/directory';\nimport { List as ImmutableList } from 'immutable';\nimport AccountCard from './components/account_card';\nimport RadioButton from 'mastodon/components/radio_button';\nimport classNames from 'classnames';\nimport LoadMore from 'mastodon/components/load_more';\nimport { ScrollContainer } from 'react-router-scroll-4';\n\nconst messages = defineMessages({\n title: { id: 'column.directory', defaultMessage: 'Browse profiles' },\n recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' },\n newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' },\n local: { id: 'directory.local', defaultMessage: 'From {domain} only' },\n federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()),\n isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Directory extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n isLoading: PropTypes.bool,\n accountIds: ImmutablePropTypes.list.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n params: PropTypes.shape({\n order: PropTypes.string,\n local: PropTypes.bool,\n }),\n };\n\n state = {\n order: null,\n local: null,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state)));\n }\n }\n\n getParams = (props, state) => ({\n order: state.order === null ? (props.params.order || 'active') : state.order,\n local: state.local === null ? (props.params.local || false) : state.local,\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 dispatch(fetchDirectory(this.getParams(this.props, this.state)));\n }\n\n componentDidUpdate (prevProps, prevState) {\n const { dispatch } = this.props;\n const paramsOld = this.getParams(prevProps, prevState);\n const paramsNew = this.getParams(this.props, this.state);\n\n if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) {\n dispatch(fetchDirectory(paramsNew));\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleChangeOrder = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['order'], e.target.value));\n } else {\n this.setState({ order: e.target.value });\n }\n }\n\n handleChangeLocal = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1'));\n } else {\n this.setState({ local: e.target.value === '1' });\n }\n }\n\n handleLoadMore = () => {\n const { dispatch } = this.props;\n dispatch(expandDirectory(this.getParams(this.props, this.state)));\n }\n\n render () {\n const { isLoading, accountIds, intl, columnId, multiColumn, domain, shouldUpdateScroll } = this.props;\n const { order, local } = this.getParams(this.props, this.state);\n const pinned = !!columnId;\n\n const scrollableArea = (\n <div className='scrollable' style={{ background: 'transparent' }}>\n <div className='filter-form'>\n <div className='filter-form__column' role='group'>\n <RadioButton name='order' value='active' label={intl.formatMessage(messages.recentlyActive)} checked={order === 'active'} onChange={this.handleChangeOrder} />\n <RadioButton name='order' value='new' label={intl.formatMessage(messages.newArrivals)} checked={order === 'new'} onChange={this.handleChangeOrder} />\n </div>\n\n <div className='filter-form__column' role='group'>\n <RadioButton name='local' value='1' label={intl.formatMessage(messages.local, { domain })} checked={local} onChange={this.handleChangeLocal} />\n <RadioButton name='local' value='0' label={intl.formatMessage(messages.federated)} checked={!local} onChange={this.handleChangeLocal} />\n </div>\n </div>\n\n <div className={classNames('directory__list', { loading: isLoading })}>\n {accountIds.map(accountId => <AccountCard id={accountId} key={accountId} />)}\n </div>\n\n <LoadMore onClick={this.handleLoadMore} visible={!isLoading} />\n </div>\n );\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='address-book-o'\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\n {multiColumn && !pinned ? <ScrollContainer scrollKey='directory' shouldUpdateScroll={shouldUpdateScroll}>{scrollableArea}</ScrollContainer> : scrollableArea}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/domain_blocks.js b/priv/static/packs/features/domain_blocks.js index d690fbab2..5a7f3d729 100644 --- a/priv/static/packs/features/domain_blocks.js +++ b/priv/static/packs/features/domain_blocks.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{711:function(n,e,o){"use strict";o.r(e);var a,t,i,c,r,s,d=o(0),l=o(2),u=o(6),m=o(1),b=o(56),f=o.n(b),p=(o(3),o(21)),j=o(7),O=o(25),h=o(5),g=o.n(h),k=o(26),v=o.n(k),M=o(272),y=o(626),_=o(634),w=o(187),D=o(67),U=Object(j.f)({unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),R=Object(j.g)((i=t=function(t){function n(){for(var n,e=arguments.length,o=new Array(e),a=0;a<e;a++)o[a]=arguments[a];return n=t.call.apply(t,[this].concat(o))||this,Object(m.a)(Object(l.a)(n),"handleDomainUnblock",function(){n.props.onUnblockDomain(n.props.domain)}),n}return Object(u.a)(n,t),n.prototype.render=function(){var n=this.props,e=n.domain,o=n.intl;return Object(d.a)("div",{className:"domain"},void 0,Object(d.a)("div",{className:"domain__wrapper"},void 0,Object(d.a)("span",{className:"domain__domain-name"},void 0,Object(d.a)("strong",{},void 0,e)),Object(d.a)("div",{className:"domain__buttons"},void 0,Object(d.a)(D.a,{active:!0,icon:"unlock",title:o.formatMessage(U.unblockDomain,{domain:e}),onClick:this.handleDomainUnblock}))))},n}(O.a),Object(m.a)(t,"propTypes",{domain:g.a.string,onUnblockDomain:g.a.func.isRequired,intl:g.a.object.isRequired}),a=i))||a,q=o(57),C=Object(j.f)({blockDomainConfirm:{id:"confirmations.domain_block.confirm",defaultMessage:"Hide entire domain"}}),N=Object(j.g)(Object(p.connect)(function(){return function(){return{}}},function(e,n){var o=n.intl;return{onBlockDomain:function(n){e(Object(q.d)("CONFIRM",{message:Object(d.a)(j.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(d.a)("strong",{},void 0,n)}}),confirm:o.formatMessage(C.blockDomainConfirm),onConfirm:function(){return e(Object(w.e)(n))}}))},onUnblockDomain:function(n){e(Object(w.h)(n))}}})(R)),I=o(893);o.d(e,"default",function(){return A});var S=Object(j.f)({heading:{id:"column.domain_blocks",defaultMessage:"Hidden domains"},unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),A=Object(p.connect)(function(n){return{domains:n.getIn(["domain_lists","blocks","items"]),hasMore:!!n.getIn(["domain_lists","blocks","next"])}})(c=Object(j.g)((s=r=function(t){function n(){for(var n,e=arguments.length,o=new Array(e),a=0;a<e;a++)o[a]=arguments[a];return n=t.call.apply(t,[this].concat(o))||this,Object(m.a)(Object(l.a)(n),"handleLoadMore",f()(function(){n.props.dispatch(Object(w.f)())},300,{leading:!0})),n}Object(u.a)(n,t);var e=n.prototype;return e.componentWillMount=function(){this.props.dispatch(Object(w.g)())},e.render=function(){var n=this.props,e=n.intl,o=n.domains,a=n.shouldUpdateScroll,t=n.hasMore;if(!o)return Object(d.a)(y.a,{},void 0,Object(d.a)(M.a,{}));var i=Object(d.a)(j.b,{id:"empty_column.domain_blocks",defaultMessage:"There are no hidden domains yet."});return Object(d.a)(y.a,{icon:"minus-circle",heading:e.formatMessage(S.heading)},void 0,Object(d.a)(_.a,{}),Object(d.a)(I.a,{scrollKey:"domain_blocks",onLoadMore:this.handleLoadMore,hasMore:t,shouldUpdateScroll:a,emptyMessage:i},void 0,o.map(function(n){return Object(d.a)(N,{domain:n},n)})))},n}(O.a),Object(m.a)(r,"propTypes",{params:g.a.object.isRequired,dispatch:g.a.func.isRequired,shouldUpdateScroll:g.a.func,hasMore:g.a.bool,domains:v.a.orderedSet,intl:g.a.object.isRequired}),c=s))||c)||c}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{758:function(n,e,o){"use strict";o.r(e);var a,t,i,c,r,s,d=o(0),l=o(2),u=o(7),m=o(1),b=o(63),f=o.n(b),p=(o(3),o(12)),j=o(6),O=o(19),h=o(5),g=o.n(h),k=o(18),v=o.n(k),M=o(294),y=o(663),_=o(670),D=o(81),w=o(51),U=Object(j.f)({unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),C=Object(j.g)((i=t=function(n){function e(){for(var e,o=arguments.length,a=new Array(o),t=0;t<o;t++)a[t]=arguments[t];return e=n.call.apply(n,[this].concat(a))||this,Object(m.a)(Object(l.a)(e),"handleDomainUnblock",function(){e.props.onUnblockDomain(e.props.domain)}),e}return Object(u.a)(e,n),e.prototype.render=function(){var n=this.props,e=n.domain,o=n.intl;return Object(d.a)("div",{className:"domain"},void 0,Object(d.a)("div",{className:"domain__wrapper"},void 0,Object(d.a)("span",{className:"domain__domain-name"},void 0,Object(d.a)("strong",{},void 0,e)),Object(d.a)("div",{className:"domain__buttons"},void 0,Object(d.a)(w.a,{active:!0,icon:"unlock",title:o.formatMessage(U.unblockDomain,{domain:e}),onClick:this.handleDomainUnblock}))))},e}(O.a),Object(m.a)(t,"propTypes",{domain:g.a.string,onUnblockDomain:g.a.func.isRequired,intl:g.a.object.isRequired}),a=i))||a,R=o(47),q=Object(j.f)({blockDomainConfirm:{id:"confirmations.domain_block.confirm",defaultMessage:"Hide entire domain"}}),N=Object(j.g)(Object(p.connect)(function(){return function(){return{}}},function(n,e){var o=e.intl;return{onBlockDomain:function(e){n(Object(R.d)("CONFIRM",{message:Object(d.a)(j.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(d.a)("strong",{},void 0,e)}}),confirm:o.formatMessage(q.blockDomainConfirm),onConfirm:function(){return n(Object(D.e)(e))}}))},onUnblockDomain:function(e){n(Object(D.h)(e))}}})(C)),T=o(964);o.d(e,"default",function(){return S});var I=Object(j.f)({heading:{id:"column.domain_blocks",defaultMessage:"Hidden domains"},unblockDomain:{id:"account.unblock_domain",defaultMessage:"Unhide {domain}"}}),S=Object(p.connect)(function(n){return{domains:n.getIn(["domain_lists","blocks","items"]),hasMore:!!n.getIn(["domain_lists","blocks","next"])}})(c=Object(j.g)((s=r=function(n){function e(){for(var e,o=arguments.length,a=new Array(o),t=0;t<o;t++)a[t]=arguments[t];return e=n.call.apply(n,[this].concat(a))||this,Object(m.a)(Object(l.a)(e),"handleLoadMore",f()(function(){e.props.dispatch(Object(D.f)())},300,{leading:!0})),e}Object(u.a)(e,n);var o=e.prototype;return o.componentWillMount=function(){this.props.dispatch(Object(D.g)())},o.render=function(){var n=this.props,e=n.intl,o=n.domains,a=n.shouldUpdateScroll,t=n.hasMore,i=n.multiColumn;if(!o)return Object(d.a)(y.a,{},void 0,Object(d.a)(M.a,{}));var c=Object(d.a)(j.b,{id:"empty_column.domain_blocks",defaultMessage:"There are no hidden domains yet."});return Object(d.a)(y.a,{bindToDocument:!i,icon:"minus-circle",heading:e.formatMessage(I.heading)},void 0,Object(d.a)(_.a,{}),Object(d.a)(T.a,{scrollKey:"domain_blocks",onLoadMore:this.handleLoadMore,hasMore:t,shouldUpdateScroll:a,emptyMessage:c,bindToDocument:!i},void 0,o.map(function(n){return Object(d.a)(N,{domain:n},n)})))},e}(O.a),Object(m.a)(r,"propTypes",{params:g.a.object.isRequired,dispatch:g.a.func.isRequired,shouldUpdateScroll:g.a.func,hasMore:g.a.bool,domains:v.a.orderedSet,intl:g.a.object.isRequired,multiColumn:g.a.bool}),c=s))||c)||c}}]); //# sourceMappingURL=domain_blocks.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/domain_blocks.js.map b/priv/static/packs/features/domain_blocks.js.map index 33cdac061..f1e7caa38 100644 --- a/priv/static/packs/features/domain_blocks.js.map +++ b/priv/static/packs/features/domain_blocks.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/components/domain.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/containers/domain_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/domain_blocks/index.js"],"names":["messages","defineMessages","unblockDomain","id","defaultMessage","Account","injectIntl","_this","props","onUnblockDomain","domain","render","_this$props","this","intl","Object","jsx","className","icon_button","active","icon","title","formatMessage","onClick","handleDomainUnblock","ImmutablePureComponent","PropTypes","string","func","isRequired","object","blockDomainConfirm","connect","dispatch","_ref","onBlockDomain","openModal","message","index_es","values","confirm","onConfirm","blockDomain","Domain","heading","Blocks","state","domains","getIn","hasMore","debounce_default","expandDomainBlocks","leading","componentWillMount","fetchDomainBlocks","shouldUpdateScroll","column","loading_indicator","emptyMessage","column_back_button_slim","scrollable_list","scrollKey","onLoadMore","handleLoadMore","map","domain_container","params","bool","ImmutablePropTypes","orderedSet"],"mappings":"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","file":"features/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 = () => ({});\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","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\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 ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\n hasMore: PropTypes.bool,\n domains: ImmutablePropTypes.orderedSet,\n intl: PropTypes.object.isRequired,\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, shouldUpdateScroll, hasMore } = 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 icon='minus-circle' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='domain_blocks'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/components/domain.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/containers/domain_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/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","dispatch","onBlockDomain","openModal","message","id","defaultMessage","values","confirm","onConfirm","blockDomain","Domain","heading","Blocks","state","domains","getIn","hasMore","expandDomainBlocks","leading","componentWillMount","fetchDomainBlocks","shouldUpdateScroll","multiColumn","emptyMessage","bindToDocument","scrollKey","onLoadMore","handleLoadMore","map","params","bool","ImmutablePropTypes","orderedSet"],"mappings":"yQAMMA,EAAWC,YAAe,CAC9BC,cAAc,CAAD,gEAITC,EADUC,a,wMASQ,WACpB,EAAKC,MAAMC,gBAAgB,EAAKD,MAAME,U,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,+EAuBLpB,cAAWqB,kBApBE,WAG1B,OAFwB,iBAAO,KAKN,SAACC,EAAD,OAAahB,EAAb,EAAaA,KAAb,MAAyB,CAClDiB,cADkD,SACnCpB,GACbmB,EAASE,YAAU,UAAW,CAC5BC,QAAS,YAAC,IAAD,CAAkBC,GAAG,qCAAqCC,eAAe,iJAAiJC,OAAQ,CAAEzB,OAAQ,+BAASA,MAC9P0B,QAASvB,EAAKK,cAAcf,EAASwB,oBACrCU,UAAW,kBAAMR,EAASS,YAAY5B,SAI1CD,gBATkD,SASjCC,GACfmB,EAASxB,YAAcK,OAIDkB,CAAiDW,I,+CCjB3E,IAAMpC,EAAWC,YAAe,CAC9BoC,QAAQ,CAAD,2DACPnC,cAAc,CAAD,gEAUToC,EAFUb,kBALQ,SAAAc,GAAK,MAAK,CAChCC,QAASD,EAAME,MAAM,CAAC,eAAgB,SAAU,UAChDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,SAAU,W,GAInDrC,a,mMAiBkB,IAAS,WACxB,EAAKC,MAAMqB,SAASiB,gBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEpC,KAAKJ,MAAMqB,SAASoB,gB,EAOtBtC,OAAA,WAAW,IAAD,EAC4DC,KAAKJ,MAAjEK,EADA,EACAA,KAAM8B,EADN,EACMA,QAASO,EADf,EACeA,mBAAoBL,EADnC,EACmCA,QAASM,EAD5C,EAC4CA,YAEpD,IAAKR,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMS,EAAe,YAAC,IAAD,CAAkBnB,GAAG,6BAA6BC,eAAe,qCAEtF,OACE,YAAC,IAAD,CAAQmB,gBAAiBF,EAAanC,KAAK,eAAewB,QAAS3B,EAAKK,cAAcf,EAASqC,eAA/F,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEc,UAAU,gBACVC,WAAY3C,KAAK4C,eACjBX,QAASA,EACTK,mBAAoBA,EACpBE,aAAcA,EACdC,gBAAiBF,QANnB,EAQGR,EAAQc,IAAI,SAAA/C,GAAM,OACjB,YAAC,EAAD,CAA8BA,OAAQA,GAAhBA,Q,GA7CbW,K,0BAEA,CACjBqC,OAAQpC,IAAUI,OAAOD,WACzBI,SAAUP,IAAUE,KAAKC,WACzByB,mBAAoB5B,IAAUE,KAC9BqB,QAASvB,IAAUqC,KACnBhB,QAASiB,IAAmBC,WAC5BhD,KAAMS,IAAUI,OAAOD,WACvB0B,YAAa7B,IAAUqC,O","file":"features/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 = () => ({});\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","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\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 ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\n hasMore: PropTypes.bool,\n domains: ImmutablePropTypes.orderedSet,\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, shouldUpdateScroll, 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 shouldUpdateScroll={shouldUpdateScroll}\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/features/favourited_statuses.js b/priv/static/packs/features/favourited_statuses.js index 361bb76c5..72d487bc8 100644 --- a/priv/static/packs/features/favourited_statuses.js +++ b/priv/static/packs/features/favourited_statuses.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{684:function(t,e,a){"use strict";a.r(e),a.d(e,"default",function(){return C});var o,n,s,r=a(0),i=a(2),c=a(6),u=a(1),l=a(56),d=a.n(l),h=a(3),p=a.n(h),f=a(21),b=a(5),j=a.n(b),O=a(26),g=a.n(O),m=a(190),v=a(626),M=a(628),I=a(222),w=a(914),y=a(7),L=a(25),k=Object(y.f)({heading:{id:"column.favourites",defaultMessage:"Favourites"}}),C=Object(f.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"])}})(o=Object(y.g)((s=n=function(n){function t(){for(var o,t=arguments.length,e=new Array(t),a=0;a<t;a++)e[a]=arguments[a];return o=n.call.apply(n,[this].concat(e))||this,Object(u.a)(Object(i.a)(o),"handlePin",function(){var t=o.props,e=t.columnId,a=t.dispatch;a(e?Object(I.h)(e):Object(I.e)("FAVOURITES",{}))}),Object(u.a)(Object(i.a)(o),"handleMove",function(t){var e=o.props,a=e.columnId;(0,e.dispatch)(Object(I.g)(a,t))}),Object(u.a)(Object(i.a)(o),"handleHeaderClick",function(){o.column.scrollTop()}),Object(u.a)(Object(i.a)(o),"setRef",function(t){o.column=t}),Object(u.a)(Object(i.a)(o),"handleLoadMore",d()(function(){o.props.dispatch(Object(m.g)())},300,{leading:!0})),o}Object(c.a)(t,n);var e=t.prototype;return e.componentWillMount=function(){this.props.dispatch(Object(m.h)())},e.render=function(){var t=this.props,e=t.intl,a=t.shouldUpdateScroll,o=t.statusIds,n=t.columnId,s=t.multiColumn,i=t.hasMore,c=t.isLoading,u=!!n,l=Object(r.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 p.a.createElement(v.a,{ref:this.setRef,label:e.formatMessage(k.heading)},Object(r.a)(M.a,{icon:"star",title:e.formatMessage(k.heading),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:u,multiColumn:s,showBackButton:!0}),Object(r.a)(w.a,{trackScroll:!u,statusIds:o,scrollKey:"favourited_statuses-"+n,hasMore:i,isLoading:c,onLoadMore:this.handleLoadMore,shouldUpdateScroll:a,emptyMessage:l}))},t}(L.a),Object(u.a)(n,"propTypes",{dispatch:j.a.func.isRequired,shouldUpdateScroll:j.a.func,statusIds:g.a.list.isRequired,intl:j.a.object.isRequired,columnId:j.a.string,multiColumn:j.a.bool,hasMore:j.a.bool,isLoading:j.a.bool}),o=s))||o)||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{731:function(t,e,a){"use strict";a.r(e),a.d(e,"default",function(){return C});var o,n,s,i=a(0),c=a(2),u=a(7),l=a(1),r=a(63),d=a.n(r),h=a(3),p=a.n(h),b=a(12),f=a(5),j=a.n(f),O=a(18),m=a.n(O),g=a(203),v=a(663),M=a(665),I=a(245),w=a(995),y=a(6),L=a(19),k=Object(y.f)({heading:{id:"column.favourites",defaultMessage:"Favourites"}}),C=Object(b.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"])}})(o=Object(y.g)((s=n=function(t){function e(){for(var e,a=arguments.length,o=new Array(a),n=0;n<a;n++)o[n]=arguments[n];return e=t.call.apply(t,[this].concat(o))||this,Object(l.a)(Object(c.a)(e),"handlePin",function(){var t=e.props,a=t.columnId,o=t.dispatch;o(a?Object(I.h)(a):Object(I.e)("FAVOURITES",{}))}),Object(l.a)(Object(c.a)(e),"handleMove",function(t){var a=e.props,o=a.columnId;(0,a.dispatch)(Object(I.g)(o,t))}),Object(l.a)(Object(c.a)(e),"handleHeaderClick",function(){e.column.scrollTop()}),Object(l.a)(Object(c.a)(e),"setRef",function(t){e.column=t}),Object(l.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.shouldUpdateScroll,o=t.statusIds,n=t.columnId,s=t.multiColumn,c=t.hasMore,u=t.isLoading,l=!!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 p.a.createElement(v.a,{bindToDocument:!s,ref:this.setRef,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:l,multiColumn:s,showBackButton:!0}),Object(i.a)(w.a,{trackScroll:!l,statusIds:o,scrollKey:"favourited_statuses-"+n,hasMore:c,isLoading:u,onLoadMore:this.handleLoadMore,shouldUpdateScroll:a,emptyMessage:r,bindToDocument:!s}))},e}(L.a),Object(l.a)(n,"propTypes",{dispatch:j.a.func.isRequired,shouldUpdateScroll:j.a.func,statusIds:m.a.list.isRequired,intl:j.a.object.isRequired,columnId:j.a.string,multiColumn:j.a.bool,hasMore:j.a.bool,isLoading:j.a.bool}),o=s))||o)||o}}]); //# sourceMappingURL=favourited_statuses.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/favourited_statuses.js.map b/priv/static/packs/features/favourited_statuses.js.map index 0e8169f55..92b2d9003 100644 --- a/priv/static/packs/features/favourited_statuses.js.map +++ b/priv/static/packs/features/favourited_statuses.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/favourited_statuses/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","Favourites","connect","state","statusIds","getIn","isLoading","hasMore","injectIntl","_this$props","_this","props","columnId","dispatch","removeColumn","addColumn","dir","_this$props2","moveColumn","column","scrollTop","c","lodash_debounce__WEBPACK_IMPORTED_MODULE_4___default","expandFavouritedStatuses","leading","componentWillMount","this","fetchFavouritedStatuses","render","_this$props3","intl","shouldUpdateScroll","multiColumn","pinned","emptyMessage","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","react_intl__WEBPACK_IMPORTED_MODULE_14__","react__WEBPACK_IMPORTED_MODULE_5___default","a","createElement","_ui_components_column__WEBPACK_IMPORTED_MODULE_10__","ref","setRef","label","formatMessage","_components_column_header__WEBPACK_IMPORTED_MODULE_11__","icon","title","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","_components_status_list__WEBPACK_IMPORTED_MODULE_13__","trackScroll","scrollKey","onLoadMore","handleLoadMore","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","string","bool"],"mappings":"oTAaMA,EAAWC,YAAe,CAC9BC,QAAO,CAAAC,GAAA,oBAAAC,eAAA,gBAWHC,EAFUC,kBANQ,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,cAIvDG,2MAkBa,WAAM,IAAAC,EACeC,EAAKC,MAA5BC,EADQH,EACRG,SAAUC,EADFJ,EACEI,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,aAAc,+CAIxB,SAACC,GAAQ,IAAAC,EACWP,EAAKC,MAA5BC,EADYK,EACZL,UACRC,EAFoBI,EACFJ,UACTK,YAAWN,EAAUI,qDAGZ,WAClBN,EAAKS,OAAOC,kDAGL,SAAAC,GACPX,EAAKS,OAASE,gDAGCC,IAAS,WACxBZ,EAAKC,MAAME,SAASU,gBACnB,IAAK,CAAEC,SAAS,mDA7BnBC,mBAAA,WACEC,KAAKf,MAAME,SAASc,kBA8BtBC,OAAA,WAAU,IAAAC,EACmFH,KAAKf,MAAxFmB,EADAD,EACAC,KAAMC,EADNF,EACME,mBAAoB3B,EAD1ByB,EAC0BzB,UAAWQ,EADrCiB,EACqCjB,SAAUoB,EAD/CH,EAC+CG,YAAazB,EAD5DsB,EAC4DtB,QAASD,EADrEuB,EACqEvB,UACvE2B,IAAWrB,EAEXsB,EAAeC,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,CAAkBtC,GAAG,mCAAmCC,eAAe,0FAE5F,OACEsC,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAQC,IAAKhB,KAAKiB,OAAQC,MAAOd,EAAKe,cAAcjD,EAASE,UAC3DqC,OAAAC,EAAA,EAAAD,CAACW,EAAA,EAAD,CACEC,KAAK,OACLC,MAAOlB,EAAKe,cAAcjD,EAASE,SACnCmD,MAAOvB,KAAKwB,UACZC,OAAQzB,KAAK0B,WACbC,QAAS3B,KAAK4B,kBACdrB,OAAQA,EACRD,YAAaA,EACbuB,gBAAc,IAGhBpB,OAAAC,EAAA,EAAAD,CAACqB,EAAA,EAAD,CACEC,aAAcxB,EACd7B,UAAWA,EACXsD,UAAS,uBAAyB9C,EAClCL,QAASA,EACTD,UAAWA,EACXqD,WAAYjC,KAAKkC,eACjB7B,mBAAoBA,EACpBG,aAAcA,SAvEC2B,+BAEJ,CACjBhD,SAAUiD,IAAUC,KAAKC,WACzBjC,mBAAoB+B,IAAUC,KAC9B3D,UAAW6D,IAAmBC,KAAKF,WACnClC,KAAMgC,IAAUK,OAAOH,WACvBpD,SAAUkD,IAAUM,OACpBpC,YAAa8B,IAAUO,KACvB9D,QAASuD,IAAUO,KACnB/D,UAAWwD,IAAUO","file":"features/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 { fetchFavouritedStatuses, expandFavouritedStatuses } from '../../actions/favourites';\nimport Column from '../ui/components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport StatusList from '../../components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { debounce } from 'lodash';\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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, 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 ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/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","shouldUpdateScroll","multiColumn","pinned","emptyMessage","id","defaultMessage","bindToDocument","ref","setRef","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":"oTAaMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,sDAWHC,EAFUC,kBANQ,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,W,GAIvDG,a,8LAkBa,WAAO,IAAD,EACe,EAAKC,MAA5BC,EADQ,EACRA,SAAUC,EADF,EACEA,SAGhBA,EADED,EACOE,YAAaF,GAEbG,YAAU,aAAc,O,wCAIxB,SAACC,GAAS,IAAD,EACW,EAAKL,MAA5BC,EADY,EACZA,UACRC,EAFoB,EACFA,UACTI,YAAWL,EAAUI,M,+CAGZ,WAClB,EAAKE,OAAOC,c,oCAGL,SAAAC,GACP,EAAKF,OAASE,I,4CAGC,IAAS,WACxB,EAAKT,MAAME,SAASQ,gBACnB,IAAK,CAAEC,SAAS,K,8CA7BnBC,mBAAA,WACEC,KAAKb,MAAME,SAASY,gB,EA8BtBC,OAAA,WAAW,IAAD,EACmFF,KAAKb,MAAxFgB,EADA,EACAA,KAAMC,EADN,EACMA,mBAAoBtB,EAD1B,EAC0BA,UAAWM,EADrC,EACqCA,SAAUiB,EAD/C,EAC+CA,YAAapB,EAD5D,EAC4DA,QAASD,EADrE,EACqEA,UACvEsB,IAAWlB,EAEXmB,EAAe,YAAC,IAAD,CAAkBC,GAAG,mCAAmCC,eAAe,0FAE5F,OACE,kBAAC,IAAD,CAAQC,gBAAiBL,EAAaM,IAAKX,KAAKY,OAAQC,MAAOV,EAAKW,cAActC,EAASE,UACzF,YAAC,IAAD,CACEqC,KAAK,OACLC,MAAOb,EAAKW,cAActC,EAASE,SACnCuC,MAAOjB,KAAKkB,UACZC,OAAQnB,KAAKoB,WACbC,QAASrB,KAAKsB,kBACdhB,OAAQA,EACRD,YAAaA,EACbkB,gBAAc,IAGhB,YAAC,IAAD,CACEC,aAAclB,EACdxB,UAAWA,EACX2C,UAAS,uBAAyBrC,EAClCH,QAASA,EACTD,UAAWA,EACX0C,WAAY1B,KAAK2B,eACjBvB,mBAAoBA,EACpBG,aAAcA,EACdG,gBAAiBL,M,GAxEFuB,K,0BAEJ,CACjBvC,SAAUwC,IAAUC,KAAKC,WACzB3B,mBAAoByB,IAAUC,KAC9BhD,UAAWkD,IAAmBC,KAAKF,WACnC5B,KAAM0B,IAAUK,OAAOH,WACvB3C,SAAUyC,IAAUM,OACpB9B,YAAawB,IAAUO,KACvBnD,QAAS4C,IAAUO,KACnBpD,UAAW6C,IAAUO,O","file":"features/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 { fetchFavouritedStatuses, expandFavouritedStatuses } from '../../actions/favourites';\nimport Column from '../ui/components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport StatusList from '../../components/status_list';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { debounce } from 'lodash';\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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, 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} 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 shouldUpdateScroll={shouldUpdateScroll}\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/features/favourites.js b/priv/static/packs/features/favourites.js index 49c02d636..6da39e9d8 100644 --- a/priv/static/packs/features/favourites.js +++ b/priv/static/packs/features/favourites.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{682:function(t,a,e){"use strict";e.r(a),e.d(a,"default",function(){return y});var s,o,n,r=e(0),c=e(6),i=e(1),u=(e(3),e(21)),p=e(25),d=e(5),l=e.n(d),h=e(26),f=e.n(h),b=e(272),m=e(58),j=e(7),v=e(895),O=e(626),I=e(629),w=e(893),y=Object(u.connect)(function(t,a){return{accountIds:t.getIn(["user_lists","favourited_by",a.params.statusId])}})((n=o=function(t){function a(){return t.apply(this,arguments)||this}Object(c.a)(a,t);var e=a.prototype;return e.componentWillMount=function(){this.props.dispatch(Object(m.l)(this.props.params.statusId))},e.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(m.l)(t.params.statusId))},e.render=function(){var t=this.props,a=t.shouldUpdateScroll,e=t.accountIds;if(!e)return Object(r.a)(O.a,{},void 0,Object(r.a)(b.a,{}));var s=Object(r.a)(j.b,{id:"empty_column.favourites",defaultMessage:"No one has favourited this toot yet. When someone does, they will show up here."});return Object(r.a)(O.a,{},void 0,Object(r.a)(I.a,{}),Object(r.a)(w.a,{scrollKey:"favourites",shouldUpdateScroll:a,emptyMessage:s},void 0,e.map(function(t){return Object(r.a)(v.a,{id:t,withNote:!1},t)})))},a}(p.a),Object(i.a)(o,"propTypes",{params:l.a.object.isRequired,dispatch:l.a.func.isRequired,shouldUpdateScroll:l.a.func,accountIds:f.a.list}),s=n))||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{729:function(t,a,s){"use strict";s.r(a),s.d(a,"default",function(){return y});var e,o,n,u=s(0),r=s(7),c=s(1),i=(s(3),s(12)),p=s(19),d=s(5),l=s.n(d),h=s(18),m=s.n(h),b=s(294),f=s(66),j=s(6),v=s(966),O=s(663),I=s(666),w=s(964),y=Object(i.connect)(function(t,a){return{accountIds:t.getIn(["user_lists","favourited_by",a.params.statusId])}})((n=o=function(t){function a(){return t.apply(this,arguments)||this}Object(r.a)(a,t);var s=a.prototype;return s.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(f.l)(this.props.params.statusId))},s.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(f.l)(t.params.statusId))},s.render=function(){var t=this.props,a=t.shouldUpdateScroll,s=t.accountIds,e=t.multiColumn;if(!s)return Object(u.a)(O.a,{},void 0,Object(u.a)(b.a,{}));var o=Object(u.a)(j.b,{id:"empty_column.favourites",defaultMessage:"No one has favourited this toot yet. When someone does, they will show up here."});return Object(u.a)(O.a,{},void 0,Object(u.a)(I.a,{multiColumn:e}),Object(u.a)(w.a,{scrollKey:"favourites",shouldUpdateScroll:a,emptyMessage:o,bindToDocument:!e},void 0,s.map(function(t){return Object(u.a)(v.a,{id:t,withNote:!1},t)})))},a}(p.a),Object(c.a)(o,"propTypes",{params:l.a.object.isRequired,dispatch:l.a.func.isRequired,shouldUpdateScroll:l.a.func,accountIds:m.a.list,multiColumn:l.a.bool}),e=n))||e}}]); //# sourceMappingURL=favourites.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/favourites.js.map b/priv/static/packs/features/favourites.js.map index eac45aebd..1b80a3742 100644 --- a/priv/static/packs/features/favourites.js.map +++ b/priv/static/packs/features/favourites.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/favourites/index.js"],"names":["Favourites","connect","state","props","accountIds","getIn","params","statusId","componentWillMount","this","dispatch","fetchFavourites","componentWillReceiveProps","nextProps","render","_this$props","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_12__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_8__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_10__","id","defaultMessage","_components_column_back_button__WEBPACK_IMPORTED_MODULE_13__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_14__","scrollKey","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_11__","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list"],"mappings":"2RAkBMA,EADUC,kBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,gBAAiBF,EAAMG,OAAOC,6HAarEC,mBAAA,WACEC,KAAKN,MAAMO,SAASC,YAAgBF,KAAKN,MAAMG,OAAOC,cAGxDK,0BAAA,SAA2BC,GACrBA,EAAUP,OAAOC,WAAaE,KAAKN,MAAMG,OAAOC,UAAYM,EAAUP,OAAOC,UAC/EE,KAAKN,MAAMO,SAASC,YAAgBE,EAAUP,OAAOC,cAIzDO,OAAA,WAAU,IAAAC,EACmCN,KAAKN,MAAxCa,EADAD,EACAC,mBAAoBZ,EADpBW,EACoBX,WAE5B,IAAKA,EACH,OACEa,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAMC,EAAeJ,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAkBC,GAAG,0BAA0BC,eAAe,oFAEnF,OACEP,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACQ,EAAA,EAAD,IAEAR,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,CACEC,UAAU,aACVX,mBAAoBA,EACpBK,aAAcA,QAHhB,EAKGjB,EAAWwB,IAAI,SAAAL,GAAE,OAChBN,OAAAC,EAAA,EAAAD,CAACY,EAAA,EAAD,CAA2BN,GAAIA,EAAIO,UAAU,GAAtBP,WA1CVQ,+BAEJ,CACjBzB,OAAQ0B,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzBlB,mBAAoBgB,IAAUG,KAC9B/B,WAAYgC,IAAmBC","file":"features/favourites.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport { fetchFavourites } from '../../actions/interactions';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchFavourites(this.props.params.statusId));\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 render () {\n const { shouldUpdateScroll, accountIds } = 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>\n <ColumnBackButton />\n\n <ScrollableList\n scrollKey='favourites'\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/favourites/index.js"],"names":["Favourites","connect","state","props","accountIds","getIn","params","statusId","componentWillMount","this","dispatch","fetchFavourites","componentWillReceiveProps","nextProps","render","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"2RAkBMA,EADUC,kBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,gBAAiBF,EAAMG,OAAOC,a,gHAcrEC,mBAAA,WACOC,KAAKN,MAAMC,YACdK,KAAKN,MAAMO,SAASC,YAAgBF,KAAKN,MAAMG,OAAOC,Y,EAI1DK,0BAAA,SAA2BC,GACrBA,EAAUP,OAAOC,WAAaE,KAAKN,MAAMG,OAAOC,UAAYM,EAAUP,OAAOC,UAC/EE,KAAKN,MAAMO,SAASC,YAAgBE,EAAUP,OAAOC,Y,EAIzDO,OAAA,WAAW,IAAD,EACgDL,KAAKN,MAArDY,EADA,EACAA,mBAAoBX,EADpB,EACoBA,WAAYY,EADhC,EACgCA,YAExC,IAAKZ,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMa,EAAe,YAAC,IAAD,CAAkBC,GAAG,0BAA0BC,eAAe,oFAEnF,OACE,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBH,YAAaA,IAE/B,YAAC,IAAD,CACEI,UAAU,aACVL,mBAAoBA,EACpBE,aAAcA,EACdI,gBAAiBL,QAJnB,EAMGZ,EAAWkB,IAAI,SAAAJ,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIK,UAAU,GAAtBL,Q,GA9CVM,K,0BAEJ,CACjBlB,OAAQmB,IAAUC,OAAOC,WACzBjB,SAAUe,IAAUG,KAAKD,WACzBZ,mBAAoBU,IAAUG,KAC9BxB,WAAYyB,IAAmBC,KAC/Bd,YAAaS,IAAUM,O","file":"features/favourites.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport { fetchFavourites } from '../../actions/interactions';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\nclass Favourites extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\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 render () {\n const { shouldUpdateScroll, 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>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='favourites'\n shouldUpdateScroll={shouldUpdateScroll}\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/features/follow_requests.js b/priv/static/packs/features/follow_requests.js index 6a04ba6b4..80cb512e2 100644 --- a/priv/static/packs/features/follow_requests.js +++ b/priv/static/packs/features/follow_requests.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{710:function(e,t,a){"use strict";a.r(t);var o,c,n,i,r,s,u=a(0),l=a(2),d=a(6),j=a(1),p=a(56),b=a.n(p),f=(a(3),a(21)),h=a(7),O=a(25),v=a(5),_=a.n(v),m=a(26),g=a.n(m),w=a(272),M=a(626),q=a(634),y=a(200),z=a(379),R=a(194),N=a(195),I=a(67),k=Object(h.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),A=Object(h.g)((n=c=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,c=e.onReject,n={__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)(z.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)(R.a,{account:a,size:48})),Object(u.a)(N.a,{account:a})),Object(u.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:n})),Object(u.a)("div",{className:"account--panel"},void 0,Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(I.a,{title:t.formatMessage(k.authorize),icon:"check",onClick:o})),Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(I.a,{title:t.formatMessage(k.reject),icon:"times",onClick:c}))))},t}(O.a),Object(j.a)(c,"propTypes",{account:g.a.map.isRequired,onAuthorize:_.a.func.isRequired,onReject:_.a.func.isRequired,intl:_.a.object.isRequired}),o=n))||o,L=a(27),S=Object(f.connect)(function(){var a=Object(y.d)();return function(e,t){return{account:a(e,t.id)}}},function(e,t){var a=t.id;return{onAuthorize:function(){e(Object(L.v)(a))},onReject:function(){e(Object(L.I)(a))}}})(A),T=a(893);a.d(t,"default",function(){return x});var U=Object(h.f)({heading:{id:"column.follow_requests",defaultMessage:"Follow requests"}}),x=Object(f.connect)(function(e){return{accountIds:e.getIn(["user_lists","follow_requests","items"]),hasMore:!!e.getIn(["user_lists","follow_requests","next"])}})(i=Object(h.g)((s=r=function(c){function e(){for(var e,t=arguments.length,a=new Array(t),o=0;o<t;o++)a[o]=arguments[o];return e=c.call.apply(c,[this].concat(a))||this,Object(j.a)(Object(l.a)(e),"handleLoadMore",b()(function(){e.props.dispatch(Object(L.x)())},300,{leading:!0})),e}Object(d.a)(e,c);var t=e.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(L.B)())},t.render=function(){var e=this.props,t=e.intl,a=e.shouldUpdateScroll,o=e.accountIds,c=e.hasMore;if(!o)return Object(u.a)(M.a,{},void 0,Object(u.a)(w.a,{}));var n=Object(u.a)(h.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)(M.a,{icon:"users",heading:t.formatMessage(U.heading)},void 0,Object(u.a)(q.a,{}),Object(u.a)(T.a,{scrollKey:"follow_requests",onLoadMore:this.handleLoadMore,hasMore:c,shouldUpdateScroll:a,emptyMessage:n},void 0,o.map(function(e){return Object(u.a)(S,{id:e},e)})))},e}(O.a),Object(j.a)(r,"propTypes",{params:_.a.object.isRequired,dispatch:_.a.func.isRequired,shouldUpdateScroll:_.a.func,hasMore:_.a.bool,accountIds:g.a.list,intl:_.a.object.isRequired}),i=s))||i)||i}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{757:function(e,t,a){"use strict";a.r(t);var o,c,n,i,r,s,u=a(0),l=a(2),d=a(7),b=a(1),j=a(63),p=a.n(j),f=(a(3),a(12)),h=a(6),O=a(19),m=a(5),v=a.n(m),_=a(18),g=a.n(_),w=a(294),M=a(663),q=a(670),y=a(204),z=a(286),R=a(107),N=a(116),I=a(51),k=Object(h.f)({authorize:{id:"follow_request.authorize",defaultMessage:"Authorize"},reject:{id:"follow_request.reject",defaultMessage:"Reject"}}),A=Object(h.g)((n=c=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,c=e.onReject,n={__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)(z.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)(R.a,{account:a,size:48})),Object(u.a)(N.a,{account:a})),Object(u.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:n})),Object(u.a)("div",{className:"account--panel"},void 0,Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(I.a,{title:t.formatMessage(k.authorize),icon:"check",onClick:o})),Object(u.a)("div",{className:"account--panel__button"},void 0,Object(u.a)(I.a,{title:t.formatMessage(k.reject),icon:"times",onClick:c}))))},t}(O.a),Object(b.a)(c,"propTypes",{account:g.a.map.isRequired,onAuthorize:v.a.func.isRequired,onReject:v.a.func.isRequired,intl:v.a.object.isRequired}),o=n))||o,T=a(26),C=Object(f.connect)(function(){var e=Object(y.d)();return function(t,a){return{account:e(t,a.id)}}},function(e,t){var a=t.id;return{onAuthorize:function(){e(Object(T.v)(a))},onReject:function(){e(Object(T.I)(a))}}})(A),L=a(964);a.d(t,"default",function(){return U});var S=Object(h.f)({heading:{id:"column.follow_requests",defaultMessage:"Follow requests"}}),U=Object(f.connect)(function(e){return{accountIds:e.getIn(["user_lists","follow_requests","items"]),hasMore:!!e.getIn(["user_lists","follow_requests","next"])}})(i=Object(h.g)((s=r=function(e){function t(){for(var t,a=arguments.length,o=new Array(a),c=0;c<a;c++)o[c]=arguments[c];return t=e.call.apply(e,[this].concat(o))||this,Object(b.a)(Object(l.a)(t),"handleLoadMore",p()(function(){t.props.dispatch(Object(T.x)())},300,{leading:!0})),t}Object(d.a)(t,e);var a=t.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(T.B)())},a.render=function(){var e=this.props,t=e.intl,a=e.shouldUpdateScroll,o=e.accountIds,c=e.hasMore,n=e.multiColumn;if(!o)return Object(u.a)(M.a,{},void 0,Object(u.a)(w.a,{}));var i=Object(u.a)(h.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)(M.a,{bindToDocument:!n,icon:"user-plus",heading:t.formatMessage(S.heading)},void 0,Object(u.a)(q.a,{}),Object(u.a)(L.a,{scrollKey:"follow_requests",onLoadMore:this.handleLoadMore,hasMore:c,shouldUpdateScroll:a,emptyMessage:i,bindToDocument:!n},void 0,o.map(function(e){return Object(u.a)(C,{id:e},e)})))},t}(O.a),Object(b.a)(r,"propTypes",{params:v.a.object.isRequired,dispatch:v.a.func.isRequired,shouldUpdateScroll:v.a.func,hasMore:v.a.bool,accountIds:g.a.list,intl:v.a.object.isRequired,multiColumn:v.a.bool}),i=s))||i)||i}}]); //# sourceMappingURL=follow_requests.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/follow_requests.js.map b/priv/static/packs/features/follow_requests.js.map index 0a29c804b..5c703ec0a 100644 --- a/priv/static/packs/features/follow_requests.js.map +++ b/priv/static/packs/features/follow_requests.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/follow_requests/components/account_authorize.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/follow_requests/containers/account_authorize_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/follow_requests/index.js"],"names":["messages","defineMessages","authorize","id","defaultMessage","reject","AccountAuthorize","injectIntl","render","_this$props","this","props","intl","account","onAuthorize","onReject","content","__html","get","Object","jsx","className","permalink","href","to","avatar","size","display_name","dangerouslySetInnerHTML","icon_button","title","formatMessage","icon","onClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","func","object","connect","getAccount","makeGetAccount","state","dispatch","_ref","authorizeFollowRequest","rejectFollowRequest","heading","FollowRequests","accountIds","getIn","hasMore","debounce_default","_this","expandFollowRequests","leading","componentWillMount","fetchFollowRequests","shouldUpdateScroll","column","loading_indicator","emptyMessage","index_es","column_back_button_slim","scrollable_list","scrollKey","onLoadMore","handleLoadMore","account_authorize_container","params","bool","list"],"mappings":"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","file":"features/follow_requests.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Permalink from '../../../components/permalink';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport IconButton from '../../../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 '../../../selectors';\nimport AccountAuthorize from '../components/account_authorize';\nimport { authorizeFollowRequest, rejectFollowRequest } from '../../../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 { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport AccountAuthorizeContainer from './containers/account_authorize_container';\nimport { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts';\nimport ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\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, shouldUpdateScroll, accountIds, hasMore } = this.props;\n\n if (!accountIds) {\n return (\n <Column>\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 icon='users' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='follow_requests'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/follow_requests/components/account_authorize.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/follow_requests/containers/account_authorize_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/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","shouldUpdateScroll","multiColumn","emptyMessage","defaultMessage","bindToDocument","scrollKey","onLoadMore","handleLoadMore","params","bool","list"],"mappings":"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","file":"features/follow_requests.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Permalink from '../../../components/permalink';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport IconButton from '../../../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 '../../../selectors';\nimport AccountAuthorize from '../components/account_authorize';\nimport { authorizeFollowRequest, rejectFollowRequest } from '../../../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 { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport AccountAuthorizeContainer from './containers/account_authorize_container';\nimport { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts';\nimport ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, 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.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} icon='user-plus' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='follow_requests'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\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 diff --git a/priv/static/packs/features/followers.js b/priv/static/packs/features/followers.js index c35d1db36..75d8ee7c3 100644 --- a/priv/static/packs/features/followers.js +++ b/priv/static/packs/features/followers.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{679:function(a,t,o){"use strict";o.r(t),o.d(t,"default",function(){return _});var c,e,s,n=o(0),r=o(2),p=o(6),i=o(1),u=o(56),d=o.n(u),l=(o(3),o(21)),b=o(25),h=o(5),f=o.n(h),j=o(26),m=o.n(j),I=o(272),O=o(27),y=o(7),w=o(895),v=o(626),M=o(917),g=o(629),k=o(893),A=o(897),_=Object(l.connect)(function(a,t){return{isAccount:!!a.getIn(["accounts",t.params.accountId]),accountIds:a.getIn(["user_lists","followers",t.params.accountId,"items"]),hasMore:!!a.getIn(["user_lists","followers",t.params.accountId,"next"]),blockedBy:a.getIn(["relationships",t.params.accountId,"blocked_by"],!1)}})((s=e=function(e){function a(){for(var a,t=arguments.length,o=new Array(t),c=0;c<t;c++)o[c]=arguments[c];return a=e.call.apply(e,[this].concat(o))||this,Object(i.a)(Object(r.a)(a),"handleLoadMore",d()(function(){a.props.dispatch(Object(O.y)(a.props.params.accountId))},300,{leading:!0})),a}Object(p.a)(a,e);var t=a.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(O.A)(this.props.params.accountId)),this.props.dispatch(Object(O.C)(this.props.params.accountId))},t.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(O.A)(a.params.accountId)),this.props.dispatch(Object(O.C)(a.params.accountId)))},t.render=function(){var a=this.props,t=a.shouldUpdateScroll,o=a.accountIds,c=a.hasMore,e=a.blockedBy;if(!a.isAccount)return Object(n.a)(v.a,{},void 0,Object(n.a)(A.a,{}));if(!o)return Object(n.a)(v.a,{},void 0,Object(n.a)(I.a,{}));var s=e?Object(n.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(n.a)(y.b,{id:"account.followers.empty",defaultMessage:"No one follows this user yet."});return Object(n.a)(v.a,{},void 0,Object(n.a)(g.a,{}),Object(n.a)(k.a,{scrollKey:"followers",hasMore:c,onLoadMore:this.handleLoadMore,shouldUpdateScroll:t,prepend:Object(n.a)(M.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:s},void 0,e?[]:o.map(function(a){return Object(n.a)(w.a,{id:a,withNote:!1},a)})))},a}(b.a),Object(i.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,shouldUpdateScroll:f.a.func,accountIds:m.a.list,hasMore:f.a.bool,blockedBy:f.a.bool,isAccount:f.a.bool}),c=s))||c}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{726:function(a,t,o){"use strict";o.r(t),o.d(t,"default",function(){return C});var c,e,s,n=o(0),r=o(2),p=o(7),i=o(1),u=o(63),d=o.n(u),l=(o(3),o(12)),b=o(19),h=o(5),m=o.n(h),f=o(18),j=o.n(f),I=o(294),O=o(26),y=o(6),w=o(966),v=o(663),M=o(998),g=o(666),k=o(964),A=o(970),C=Object(l.connect)(function(a,t){return{isAccount:!!a.getIn(["accounts",t.params.accountId]),accountIds:a.getIn(["user_lists","followers",t.params.accountId,"items"]),hasMore:!!a.getIn(["user_lists","followers",t.params.accountId,"next"]),blockedBy:a.getIn(["relationships",t.params.accountId,"blocked_by"],!1)}})((s=e=function(a){function t(){for(var t,o=arguments.length,c=new Array(o),e=0;e<o;e++)c[e]=arguments[e];return t=a.call.apply(a,[this].concat(c))||this,Object(i.a)(Object(r.a)(t),"handleLoadMore",d()(function(){t.props.dispatch(Object(O.y)(t.props.params.accountId))},300,{leading:!0})),t}Object(p.a)(t,a);var o=t.prototype;return o.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(O.A)(this.props.params.accountId)),this.props.dispatch(Object(O.C)(this.props.params.accountId)))},o.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(O.A)(a.params.accountId)),this.props.dispatch(Object(O.C)(a.params.accountId)))},o.render=function(){var a=this.props,t=a.shouldUpdateScroll,o=a.accountIds,c=a.hasMore,e=a.blockedBy,s=a.isAccount,r=a.multiColumn;if(!s)return Object(n.a)(v.a,{},void 0,Object(n.a)(A.a,{}));if(!o)return Object(n.a)(v.a,{},void 0,Object(n.a)(I.a,{}));var p=e?Object(n.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(n.a)(y.b,{id:"account.followers.empty",defaultMessage:"No one follows this user yet."});return Object(n.a)(v.a,{},void 0,Object(n.a)(g.a,{multiColumn:r}),Object(n.a)(k.a,{scrollKey:"followers",hasMore:c,onLoadMore:this.handleLoadMore,shouldUpdateScroll:t,prepend:Object(n.a)(M.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:p,bindToDocument:!r},void 0,e?[]:o.map(function(a){return Object(n.a)(w.a,{id:a,withNote:!1},a)})))},t}(b.a),Object(i.a)(e,"propTypes",{params:m.a.object.isRequired,dispatch:m.a.func.isRequired,shouldUpdateScroll:m.a.func,accountIds:j.a.list,hasMore:m.a.bool,blockedBy:m.a.bool,isAccount:m.a.bool,multiColumn:m.a.bool}),c=s))||c}}]); //# sourceMappingURL=followers.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/followers.js.map b/priv/static/packs/features/followers.js.map index ae12dd7b1..e6d405410 100644 --- a/priv/static/packs/features/followers.js.map +++ b/priv/static/packs/features/followers.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/followers/index.js"],"names":["Followers","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","blockedBy","lodash_debounce__WEBPACK_IMPORTED_MODULE_4___default","_this","dispatch","expandFollowers","leading","componentWillMount","this","fetchAccount","fetchFollowers","componentWillReceiveProps","nextProps","render","_this$props","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_14__","mastodon_components_missing_indicator__WEBPACK_IMPORTED_MODULE_18__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_10__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_12__","id","defaultMessage","_components_column_back_button__WEBPACK_IMPORTED_MODULE_16__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_17__","scrollKey","onLoadMore","handleLoadMore","prepend","_account_timeline_containers_header_container__WEBPACK_IMPORTED_MODULE_15__","hideTabs","alwaysPrepend","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_13__","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"qUA4BMA,EADUC,kBAPQ,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,SAC3EG,UAAWR,EAAMG,MAAM,CAAC,gBAAiBF,EAAMG,OAAOC,UAAW,eAAe,0MA4B/DI,IAAS,WACxBC,EAAKT,MAAMU,SAASC,YAAgBF,EAAKT,MAAMG,OAAOC,aACrD,IAAK,CAAEQ,SAAS,mDAdnBC,mBAAA,WACEC,KAAKd,MAAMU,SAASK,YAAaD,KAAKd,MAAMG,OAAOC,YACnDU,KAAKd,MAAMU,SAASM,YAAeF,KAAKd,MAAMG,OAAOC,eAGvDa,0BAAA,SAA2BC,GACrBA,EAAUf,OAAOC,YAAcU,KAAKd,MAAMG,OAAOC,WAAac,EAAUf,OAAOC,YACjFU,KAAKd,MAAMU,SAASK,YAAaG,EAAUf,OAAOC,YAClDU,KAAKd,MAAMU,SAASM,YAAeE,EAAUf,OAAOC,gBAQxDe,OAAA,WAAU,IAAAC,EACkEN,KAAKd,MAAvEqB,EADAD,EACAC,mBAAoBhB,EADpBe,EACoBf,WAAYC,EADhCc,EACgCd,QAASC,EADzCa,EACyCb,UAEjD,IAHQa,EACoDnB,UAG1D,OACEqB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAKpB,EACH,OACEiB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACI,EAAA,EAAD,KAKN,IAAMC,EAAepB,EAAYe,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,mCAAmCC,eAAe,wBAA2BR,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,0BAA0BC,eAAe,kCAEjM,OACER,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,IAEAT,OAAAC,EAAA,EAAAD,CAACU,EAAA,EAAD,CACEC,UAAU,YACV3B,QAASA,EACT4B,WAAYpB,KAAKqB,eACjBd,mBAAoBA,EACpBe,QAASd,OAAAC,EAAA,EAAAD,CAACe,EAAA,EAAD,CAAiBjC,UAAWU,KAAKd,MAAMG,OAAOC,UAAWkC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,QAPhB,EASGpB,EAAY,GAAKF,EAAWmC,IAAI,SAAAX,GAAE,OACjCP,OAAAC,EAAA,EAAAD,CAACmB,EAAA,EAAD,CAA2BZ,GAAIA,EAAIa,UAAU,GAAtBb,WA/DXc,+BAEH,CACjBxC,OAAQyC,IAAUC,OAAOC,WACzBpC,SAAUkC,IAAUG,KAAKD,WACzBzB,mBAAoBuB,IAAUG,KAC9B1C,WAAY2C,IAAmBC,KAC/B3C,QAASsC,IAAUM,KACnB3C,UAAWqC,IAAUM,KACrBjD,UAAW2C,IAAUM","file":"features/followers.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowers,\n expandFollowers,\n} from '../../actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\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 blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n blockedBy: PropTypes.bool,\n isAccount: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowers(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(fetchFollowers(nextProps.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }, 300, { leading: true });\n\n render () {\n const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = 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 = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;\n\n return (\n <Column>\n <ColumnBackButton />\n\n <ScrollableList\n scrollKey='followers'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n >\n {blockedBy ? [] : 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/mastodon/features/followers/index.js"],"names":["Followers","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","blockedBy","dispatch","expandFollowers","leading","componentWillMount","this","fetchAccount","fetchFollowers","componentWillReceiveProps","nextProps","render","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"qUA4BMA,EADUC,kBAPQ,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,SAC3EG,UAAWR,EAAMG,MAAM,CAAC,gBAAiBF,EAAMG,OAAOC,UAAW,eAAe,K,qMA+B/D,IAAS,WACxB,EAAKJ,MAAMQ,SAASC,YAAgB,EAAKT,MAAMG,OAAOC,aACrD,IAAK,CAAEM,SAAS,K,8CAhBnBC,mBAAA,WACOC,KAAKZ,MAAMK,aACdO,KAAKZ,MAAMQ,SAASK,YAAaD,KAAKZ,MAAMG,OAAOC,YACnDQ,KAAKZ,MAAMQ,SAASM,YAAeF,KAAKZ,MAAMG,OAAOC,c,EAIzDW,0BAAA,SAA2BC,GACrBA,EAAUb,OAAOC,YAAcQ,KAAKZ,MAAMG,OAAOC,WAAaY,EAAUb,OAAOC,YACjFQ,KAAKZ,MAAMQ,SAASK,YAAaG,EAAUb,OAAOC,YAClDQ,KAAKZ,MAAMQ,SAASM,YAAeE,EAAUb,OAAOC,c,EAQxDa,OAAA,WAAW,IAAD,EAC+EL,KAAKZ,MAApFkB,EADA,EACAA,mBAAoBb,EADpB,EACoBA,WAAYC,EADhC,EACgCA,QAASC,EADzC,EACyCA,UAAWN,EADpD,EACoDA,UAAWkB,EAD/D,EAC+DA,YAEvE,IAAKlB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMe,EAAeb,EAAY,YAAC,IAAD,CAAkBc,GAAG,mCAAmCC,eAAe,wBAA2B,YAAC,IAAD,CAAkBD,GAAG,0BAA0BC,eAAe,kCAEjM,OACE,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBH,YAAaA,IAE/B,YAAC,IAAD,CACEI,UAAU,YACVjB,QAASA,EACTkB,WAAYZ,KAAKa,eACjBP,mBAAoBA,EACpBQ,QAAS,YAAC,IAAD,CAAiBtB,UAAWQ,KAAKZ,MAAMG,OAAOC,UAAWuB,UAAQ,IAC1EC,eAAa,EACbR,aAAcA,EACdS,gBAAiBV,QARnB,EAUGZ,EAAY,GAAKF,EAAWyB,IAAI,SAAAT,GAAE,OACjC,YAAC,IAAD,CAA2BA,GAAIA,EAAIU,UAAU,GAAtBV,Q,GAnEXW,K,0BAEH,CACjB7B,OAAQ8B,IAAUC,OAAOC,WACzB3B,SAAUyB,IAAUG,KAAKD,WACzBjB,mBAAoBe,IAAUG,KAC9B/B,WAAYgC,IAAmBC,KAC/BhC,QAAS2B,IAAUM,KACnBhC,UAAW0B,IAAUM,KACrBtC,UAAWgC,IAAUM,KACrBpB,YAAac,IAAUM,O","file":"features/followers.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowers,\n expandFollowers,\n} from '../../actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\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 blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n blockedBy: 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 handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowers(this.props.params.accountId));\n }, 300, { leading: true });\n\n render () {\n const { shouldUpdateScroll, accountIds, hasMore, blockedBy, 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 = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;\n\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='followers'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {blockedBy ? [] : 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/features/following.js b/priv/static/packs/features/following.js index e0da43eec..227bf99f2 100644 --- a/priv/static/packs/features/following.js +++ b/priv/static/packs/features/following.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{680:function(a,t,o){"use strict";o.r(t),o.d(t,"default",function(){return _});var c,e,n,s=o(0),r=o(2),p=o(6),i=o(1),u=o(56),d=o.n(u),l=(o(3),o(21)),b=o(25),h=o(5),f=o.n(h),j=o(26),m=o.n(j),I=o(272),O=o(27),y=o(7),w=o(895),g=o(626),v=o(917),M=o(629),k=o(893),A=o(897),_=Object(l.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"]),blockedBy:a.getIn(["relationships",t.params.accountId,"blocked_by"],!1)}})((n=e=function(e){function a(){for(var a,t=arguments.length,o=new Array(t),c=0;c<t;c++)o[c]=arguments[c];return a=e.call.apply(e,[this].concat(o))||this,Object(i.a)(Object(r.a)(a),"handleLoadMore",d()(function(){a.props.dispatch(Object(O.z)(a.props.params.accountId))},300,{leading:!0})),a}Object(p.a)(a,e);var t=a.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(O.A)(this.props.params.accountId)),this.props.dispatch(Object(O.D)(this.props.params.accountId))},t.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(O.A)(a.params.accountId)),this.props.dispatch(Object(O.D)(a.params.accountId)))},t.render=function(){var a=this.props,t=a.shouldUpdateScroll,o=a.accountIds,c=a.hasMore,e=a.blockedBy;if(!a.isAccount)return Object(s.a)(g.a,{},void 0,Object(s.a)(A.a,{}));if(!o)return Object(s.a)(g.a,{},void 0,Object(s.a)(I.a,{}));var n=e?Object(s.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(s.a)(y.b,{id:"account.follows.empty",defaultMessage:"This user doesn't follow anyone yet."});return Object(s.a)(g.a,{},void 0,Object(s.a)(M.a,{}),Object(s.a)(k.a,{scrollKey:"following",hasMore:c,onLoadMore:this.handleLoadMore,shouldUpdateScroll:t,prepend:Object(s.a)(v.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:n},void 0,e?[]:o.map(function(a){return Object(s.a)(w.a,{id:a,withNote:!1},a)})))},a}(b.a),Object(i.a)(e,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,shouldUpdateScroll:f.a.func,accountIds:m.a.list,hasMore:f.a.bool,blockedBy:f.a.bool,isAccount:f.a.bool}),c=n))||c}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{727:function(a,t,o){"use strict";o.r(t),o.d(t,"default",function(){return _});var c,e,n,s=o(0),r=o(2),i=o(7),p=o(1),u=o(63),d=o.n(u),l=(o(3),o(12)),b=o(19),h=o(5),m=o.n(h),f=o(18),j=o.n(f),I=o(294),O=o(26),y=o(6),w=o(966),g=o(663),v=o(998),M=o(666),k=o(964),A=o(970),_=Object(l.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"]),blockedBy:a.getIn(["relationships",t.params.accountId,"blocked_by"],!1)}})((n=e=function(a){function t(){for(var t,o=arguments.length,c=new Array(o),e=0;e<o;e++)c[e]=arguments[e];return t=a.call.apply(a,[this].concat(c))||this,Object(p.a)(Object(r.a)(t),"handleLoadMore",d()(function(){t.props.dispatch(Object(O.z)(t.props.params.accountId))},300,{leading:!0})),t}Object(i.a)(t,a);var o=t.prototype;return o.componentWillMount=function(){this.props.accountIds||(this.props.dispatch(Object(O.A)(this.props.params.accountId)),this.props.dispatch(Object(O.D)(this.props.params.accountId)))},o.componentWillReceiveProps=function(a){a.params.accountId!==this.props.params.accountId&&a.params.accountId&&(this.props.dispatch(Object(O.A)(a.params.accountId)),this.props.dispatch(Object(O.D)(a.params.accountId)))},o.render=function(){var a=this.props,t=a.shouldUpdateScroll,o=a.accountIds,c=a.hasMore,e=a.blockedBy,n=a.isAccount,r=a.multiColumn;if(!n)return Object(s.a)(g.a,{},void 0,Object(s.a)(A.a,{}));if(!o)return Object(s.a)(g.a,{},void 0,Object(s.a)(I.a,{}));var i=e?Object(s.a)(y.b,{id:"empty_column.account_unavailable",defaultMessage:"Profile unavailable"}):Object(s.a)(y.b,{id:"account.follows.empty",defaultMessage:"This user doesn't follow anyone yet."});return Object(s.a)(g.a,{},void 0,Object(s.a)(M.a,{multiColumn:r}),Object(s.a)(k.a,{scrollKey:"following",hasMore:c,onLoadMore:this.handleLoadMore,shouldUpdateScroll:t,prepend:Object(s.a)(v.a,{accountId:this.props.params.accountId,hideTabs:!0}),alwaysPrepend:!0,emptyMessage:i,bindToDocument:!r},void 0,e?[]:o.map(function(a){return Object(s.a)(w.a,{id:a,withNote:!1},a)})))},t}(b.a),Object(p.a)(e,"propTypes",{params:m.a.object.isRequired,dispatch:m.a.func.isRequired,shouldUpdateScroll:m.a.func,accountIds:j.a.list,hasMore:m.a.bool,blockedBy:m.a.bool,isAccount:m.a.bool,multiColumn:m.a.bool}),c=n))||c}}]); //# sourceMappingURL=following.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/following.js.map b/priv/static/packs/features/following.js.map index 66d13ac66..077d90c1c 100644 --- a/priv/static/packs/features/following.js.map +++ b/priv/static/packs/features/following.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/following/index.js"],"names":["Following","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","blockedBy","lodash_debounce__WEBPACK_IMPORTED_MODULE_4___default","_this","dispatch","expandFollowing","leading","componentWillMount","this","fetchAccount","fetchFollowing","componentWillReceiveProps","nextProps","render","_this$props","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_14__","mastodon_components_missing_indicator__WEBPACK_IMPORTED_MODULE_18__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_10__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_12__","id","defaultMessage","_components_column_back_button__WEBPACK_IMPORTED_MODULE_16__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_17__","scrollKey","onLoadMore","handleLoadMore","prepend","_account_timeline_containers_header_container__WEBPACK_IMPORTED_MODULE_15__","hideTabs","alwaysPrepend","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_13__","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"qUA4BMA,EADUC,kBAPQ,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,SAC3EG,UAAWR,EAAMG,MAAM,CAAC,gBAAiBF,EAAMG,OAAOC,UAAW,eAAe,0MA4B/DI,IAAS,WACxBC,EAAKT,MAAMU,SAASC,YAAgBF,EAAKT,MAAMG,OAAOC,aACrD,IAAK,CAAEQ,SAAS,mDAdnBC,mBAAA,WACEC,KAAKd,MAAMU,SAASK,YAAaD,KAAKd,MAAMG,OAAOC,YACnDU,KAAKd,MAAMU,SAASM,YAAeF,KAAKd,MAAMG,OAAOC,eAGvDa,0BAAA,SAA2BC,GACrBA,EAAUf,OAAOC,YAAcU,KAAKd,MAAMG,OAAOC,WAAac,EAAUf,OAAOC,YACjFU,KAAKd,MAAMU,SAASK,YAAaG,EAAUf,OAAOC,YAClDU,KAAKd,MAAMU,SAASM,YAAeE,EAAUf,OAAOC,gBAQxDe,OAAA,WAAU,IAAAC,EACkEN,KAAKd,MAAvEqB,EADAD,EACAC,mBAAoBhB,EADpBe,EACoBf,WAAYC,EADhCc,EACgCd,QAASC,EADzCa,EACyCb,UAEjD,IAHQa,EACoDnB,UAG1D,OACEqB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAKpB,EACH,OACEiB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACI,EAAA,EAAD,KAKN,IAAMC,EAAepB,EAAYe,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,mCAAmCC,eAAe,wBAA2BR,OAAAC,EAAA,EAAAD,CAACM,EAAA,EAAD,CAAkBC,GAAG,wBAAwBC,eAAe,yCAE/L,OACER,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,IAEAT,OAAAC,EAAA,EAAAD,CAACU,EAAA,EAAD,CACEC,UAAU,YACV3B,QAASA,EACT4B,WAAYpB,KAAKqB,eACjBd,mBAAoBA,EACpBe,QAASd,OAAAC,EAAA,EAAAD,CAACe,EAAA,EAAD,CAAiBjC,UAAWU,KAAKd,MAAMG,OAAOC,UAAWkC,UAAQ,IAC1EC,eAAa,EACbZ,aAAcA,QAPhB,EASGpB,EAAY,GAAKF,EAAWmC,IAAI,SAAAX,GAAE,OACjCP,OAAAC,EAAA,EAAAD,CAACmB,EAAA,EAAD,CAA2BZ,GAAIA,EAAIa,UAAU,GAAtBb,WA/DXc,+BAEH,CACjBxC,OAAQyC,IAAUC,OAAOC,WACzBpC,SAAUkC,IAAUG,KAAKD,WACzBzB,mBAAoBuB,IAAUG,KAC9B1C,WAAY2C,IAAmBC,KAC/B3C,QAASsC,IAAUM,KACnB3C,UAAWqC,IAAUM,KACrBjD,UAAW2C,IAAUM","file":"features/following.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowing,\n expandFollowing,\n} from '../../actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\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 blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n blockedBy: PropTypes.bool,\n isAccount: PropTypes.bool,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(fetchFollowing(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(fetchFollowing(nextProps.params.accountId));\n }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }, 300, { leading: true });\n\n render () {\n const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = 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 = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='account.follows.empty' defaultMessage=\"This user doesn't follow anyone yet.\" />;\n\n return (\n <Column>\n <ColumnBackButton />\n\n <ScrollableList\n scrollKey='following'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n >\n {blockedBy ? [] : 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/mastodon/features/following/index.js"],"names":["Following","connect","state","props","isAccount","getIn","params","accountId","accountIds","hasMore","blockedBy","dispatch","expandFollowing","leading","componentWillMount","this","fetchAccount","fetchFollowing","componentWillReceiveProps","nextProps","render","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","scrollKey","onLoadMore","handleLoadMore","prepend","hideTabs","alwaysPrepend","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"qUA4BMA,EADUC,kBAPQ,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,SAC3EG,UAAWR,EAAMG,MAAM,CAAC,gBAAiBF,EAAMG,OAAOC,UAAW,eAAe,K,qMA+B/D,IAAS,WACxB,EAAKJ,MAAMQ,SAASC,YAAgB,EAAKT,MAAMG,OAAOC,aACrD,IAAK,CAAEM,SAAS,K,8CAhBnBC,mBAAA,WACOC,KAAKZ,MAAMK,aACdO,KAAKZ,MAAMQ,SAASK,YAAaD,KAAKZ,MAAMG,OAAOC,YACnDQ,KAAKZ,MAAMQ,SAASM,YAAeF,KAAKZ,MAAMG,OAAOC,c,EAIzDW,0BAAA,SAA2BC,GACrBA,EAAUb,OAAOC,YAAcQ,KAAKZ,MAAMG,OAAOC,WAAaY,EAAUb,OAAOC,YACjFQ,KAAKZ,MAAMQ,SAASK,YAAaG,EAAUb,OAAOC,YAClDQ,KAAKZ,MAAMQ,SAASM,YAAeE,EAAUb,OAAOC,c,EAQxDa,OAAA,WAAW,IAAD,EAC+EL,KAAKZ,MAApFkB,EADA,EACAA,mBAAoBb,EADpB,EACoBA,WAAYC,EADhC,EACgCA,QAASC,EADzC,EACyCA,UAAWN,EADpD,EACoDA,UAAWkB,EAD/D,EAC+DA,YAEvE,IAAKlB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAKI,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMe,EAAeb,EAAY,YAAC,IAAD,CAAkBc,GAAG,mCAAmCC,eAAe,wBAA2B,YAAC,IAAD,CAAkBD,GAAG,wBAAwBC,eAAe,yCAE/L,OACE,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBH,YAAaA,IAE/B,YAAC,IAAD,CACEI,UAAU,YACVjB,QAASA,EACTkB,WAAYZ,KAAKa,eACjBP,mBAAoBA,EACpBQ,QAAS,YAAC,IAAD,CAAiBtB,UAAWQ,KAAKZ,MAAMG,OAAOC,UAAWuB,UAAQ,IAC1EC,eAAa,EACbR,aAAcA,EACdS,gBAAiBV,QARnB,EAUGZ,EAAY,GAAKF,EAAWyB,IAAI,SAAAT,GAAE,OACjC,YAAC,IAAD,CAA2BA,GAAIA,EAAIU,UAAU,GAAtBV,Q,GAnEXW,K,0BAEH,CACjB7B,OAAQ8B,IAAUC,OAAOC,WACzB3B,SAAUyB,IAAUG,KAAKD,WACzBjB,mBAAoBe,IAAUG,KAC9B/B,WAAYgC,IAAmBC,KAC/BhC,QAAS2B,IAAUM,KACnBhC,UAAW0B,IAAUM,KACrBtC,UAAWgC,IAAUM,KACrBpB,YAAac,IAAUM,O","file":"features/following.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport {\n fetchAccount,\n fetchFollowing,\n expandFollowing,\n} from '../../actions/accounts';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\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 blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),\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 shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n blockedBy: 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 handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowing(this.props.params.accountId));\n }, 300, { leading: true });\n\n render () {\n const { shouldUpdateScroll, accountIds, hasMore, blockedBy, 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 = blockedBy ? <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' /> : <FormattedMessage id='account.follows.empty' defaultMessage=\"This user doesn't follow anyone yet.\" />;\n\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='following'\n hasMore={hasMore}\n onLoadMore={this.handleLoadMore}\n shouldUpdateScroll={shouldUpdateScroll}\n prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}\n alwaysPrepend\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {blockedBy ? [] : 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/features/generic_not_found.js b/priv/static/packs/features/generic_not_found.js index f3cae9eae..6420222f1 100644 --- a/priv/static/packs/features/generic_not_found.js +++ b/priv/static/packs/features/generic_not_found.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{683:function(n,a,t){"use strict";t.r(a);var c=t(0),e=(t(3),t(626)),o=t(897);a.default=function(){return Object(c.a)(e.a,{},void 0,Object(c.a)(o.a,{}))}}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{730:function(n,a,t){"use strict";t.r(a);var c=t(0),e=(t(3),t(663)),o=t(970);a.default=function(){return Object(c.a)(e.a,{},void 0,Object(c.a)(o.a,{}))}}}]); //# sourceMappingURL=generic_not_found.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/generic_not_found.js.map b/priv/static/packs/features/generic_not_found.js.map index 9b7fa4703..454a41cd8 100644 --- a/priv/static/packs/features/generic_not_found.js.map +++ b/priv/static/packs/features/generic_not_found.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/generic_not_found/index.js"],"names":["GenericNotFound","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_2__","_components_missing_indicator__WEBPACK_IMPORTED_MODULE_3__"],"mappings":"sIAUeA,UANS,kBACtBC,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD","file":"features/generic_not_found.js","sourcesContent":["import React from 'react';\nimport Column from '../ui/components/column';\nimport MissingIndicator from '../../components/missing_indicator';\n\nconst GenericNotFound = () => (\n <Column>\n <MissingIndicator />\n </Column>\n);\n\nexport default GenericNotFound;\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/features/generic_not_found/index.js"],"names":["GenericNotFound"],"mappings":"sIAUeA,UANS,kBACtB,YAAC,IAAD,UACE,YAAC,IAAD","file":"features/generic_not_found.js","sourcesContent":["import React from 'react';\nimport Column from '../ui/components/column';\nimport MissingIndicator from '../../components/missing_indicator';\n\nconst GenericNotFound = () => (\n <Column>\n <MissingIndicator />\n </Column>\n);\n\nexport default GenericNotFound;\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/getting_started.js b/priv/static/packs/features/getting_started.js index abb1f86ee..a804f737e 100644 --- a/priv/static/packs/features/getting_started.js +++ b/priv/static/packs/features/getting_started.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{675:function(e,t,a){"use strict";a.r(t),a.d(t,"default",function(){return P});var s,i,o,b=a(0),n=a(2),r=a(6),c=a(1),f=(a(3),a(626)),m=a(988),h=a(989),_=a(7),l=a(21),u=a(5),d=a.n(u),g=a(26),p=a.n(g),v=a(25),j=a(24),O=a(27),M=a(183),w=a(4),y=a(358),k=a(992),x=a(30),q=Object(_.f)({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"},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"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},follow_requests:{id:"navigation_bar.follow_requests",defaultMessage:"Follow requests"},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"},pins:{id:"navigation_bar.pins",defaultMessage:"Pinned toots"},lists:{id:"navigation_bar.lists",defaultMessage:"Lists"},discover:{id:"navigation_bar.discover",defaultMessage:"Discover"},personal:{id:"navigation_bar.personal",defaultMessage:"Personal"},security:{id:"navigation_bar.security",defaultMessage:"Security"},menu:{id:"getting_started.heading",defaultMessage:"Getting started"},profile_directory:{id:"getting_started.directory",defaultMessage:"Profile directory"},switch_to_glitch:{id:"navigation_bar.switch_to_glitch",defaultMessage:"Switch to Glitch Flavour"}}),P=Object(l.connect)(function(e){return{myAccount:e.getIn(["accounts",j.k]),unreadFollowRequests:e.getIn(["user_lists","follow_requests","items"],Object(w.List)()).size,customPanelEnabled:e.getIn(["custom_panel","enabled"]),customPanel:e.getIn(["custom_panel","panel"])}},function(e){return{fetchFollowRequests:function(){return e(Object(O.B)())},fetchPanel:function(){return e(Object(M.c)())},fetchPleromaConfig:function(){return e(Object(M.d)())},switchFlavour:function(){return e(Object(M.e)())}}})(s=Object(_.g)((o=i=function(i){function e(){for(var t,e=arguments.length,a=new Array(e),s=0;s<e;s++)a[s]=arguments[s];return t=i.call.apply(i,[this].concat(a))||this,Object(c.a)(Object(n.a)(t),"switch_flavour_glitch",function(e){t.props.switchFlavour("glitch")}),t}Object(r.a)(e,i);var t=e.prototype;return t.componentDidMount=function(){var e=this.props,t=e.myAccount,a=e.fetchFollowRequests,s=e.fetchPleromaConfig,i=e.fetchPanel;t.get("locked")&&a(),s(),i()},t.render=function(){var e,t,a=this.props,s=a.intl,i=a.myAccount,o=a.multiColumn,n=a.unreadFollowRequests,r=a.customPanelEnabled,c=a.customPanel,l=[],u=1,d=o?0:60;o?(l.push(Object(b.a)(h.a,{text:s.formatMessage(q.discover)},u++),Object(b.a)(m.a,{icon:"users",text:s.formatMessage(q.community_timeline),to:"/timelines/public/local"},u++),Object(b.a)(m.a,{icon:"globe",text:s.formatMessage(q.public_timeline),to:"/timelines/public"},u++)),d+=130,j.l&&(l.push(Object(b.a)(m.a,{icon:"address-book",text:s.formatMessage(q.profile_directory),href:"/explore"},u++)),d+=48),l.push(Object(b.a)(h.a,{text:s.formatMessage(q.personal)},u++)),d+=34):j.l&&(l.push(Object(b.a)(m.a,{icon:"address-book",text:s.formatMessage(q.profile_directory),href:"/explore"},u++)),d+=48),l.push(Object(b.a)(m.a,{icon:"envelope",text:s.formatMessage(q.direct),to:"/timelines/direct"},u++),Object(b.a)(m.a,{icon:"star",text:s.formatMessage(q.favourites),to:"/favourites"},u++),Object(b.a)(m.a,{icon:"list-ul",text:s.formatMessage(q.lists),to:"/lists"},u++),Object(b.a)("a",{href:"#",onClick:this.switch_flavour_glitch,className:"column-link",tabIndex:"0"},u++,Object(b.a)("i",{className:"fa fa-fw fa-exchange column-link__icon"}),s.formatMessage(q.switch_to_glitch))),d+=144,i.get("locked")&&(l.push(Object(b.a)(m.a,{icon:"users",text:s.formatMessage(q.follow_requests),badge:(e=n,t=40,0===e?void 0:t&&t<=e?t+"+":e),to:"/follow_requests"},u++)),d+=48),o||(l.push(Object(b.a)(h.a,{text:s.formatMessage(q.settings_subheading)},u++),Object(b.a)(m.a,{icon:"gears",text:s.formatMessage(q.preferences),href:"/user-settings"},u++)),d+=82);var g=r?Object(b.a)("div",{className:"getting-started getting-started__panel scrollable",dangerouslySetInnerHTML:{__html:c}}):null;return Object(b.a)(f.a,{label:s.formatMessage(q.menu)},void 0,o&&Object(b.a)("div",{className:"column-header__wrapper"},void 0,Object(b.a)("h1",{className:"column-header"},void 0,Object(b.a)("button",{},void 0,Object(b.a)(x.a,{id:"bars",className:"column-header__icon",fixedWidth:!0}),Object(b.a)(_.b,{id:"getting_started.heading",defaultMessage:"Getting started"})))),Object(b.a)("div",{className:"getting-started"},void 0,Object(b.a)("div",{className:"getting-started__wrapper scrollable",style:{height:d}},void 0,!o&&Object(b.a)(k.a,{account:i}),l),!o&&Object(b.a)("div",{className:"flex-spacer"}),g,!o&&Object(b.a)("div",{className:"flex-spacer"}),Object(b.a)("div",{className:"getting-started__footer scrollable"},void 0,Object(b.a)("ul",{},void 0,j.h&&Object(b.a)("li",{},void 0,Object(b.a)("a",{href:"/invites",target:"_blank"},void 0,Object(b.a)(_.b,{id:"getting_started.invite",defaultMessage:"Invite people"}))," · "),o&&Object(b.a)("li",{},void 0,Object(b.a)(y.a,{to:"/keyboard-shortcuts"},void 0,Object(b.a)(_.b,{id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Hotkeys"}))," · "),Object(b.a)("li",{},void 0,Object(b.a)("a",{href:"/auth/sign_out","data-method":"delete"},void 0,Object(b.a)(_.b,{id:"navigation_bar.logout",defaultMessage:"Logout"})))),Object(b.a)("p",{},void 0,Object(b.a)(_.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(b.a)("a",{href:"https://git.pleroma.social/pleroma/mastofe",rel:"noopener",target:"_blank"},void 0,"Mastofe"),glitchsoc:Object(b.a)("a",{href:"https://github.com/glitch-soc/mastodon",rel:"noopener",target:"_blank"},void 0,"glitch-soc"),mastodon:Object(b.a)("a",{href:"https://github.com/tootsuite/mastodon",rel:"noopener",target:"_blank"},void 0,"Mastodon"),pleroma:Object(b.a)("a",{href:"https://pleroma.social",rel:"noopener",target:"_blank"},void 0,"Pleroma")}}),Object(b.a)(_.b,{id:"getting_started.vanilla_support_warning",defaultMessage:"Please be warned that the vanilla flavour isn’t as supported as the glitch one, expect bugs related to the API"})))))},e}(v.a),Object(c.a)(i,"propTypes",{intl:d.a.object.isRequired,myAccount:p.a.map.isRequired,columns:p.a.list,multiColumn:d.a.bool,fetchFollowRequests:d.a.func.isRequired,fetchPanel:d.a.func.isRequired,fetchPleromaConfig:d.a.func.isRequired,switchFlavour:d.a.func.isRequired,unreadFollowRequests:d.a.number,unreadNotifications:d.a.number,customPanelEnabled:d.a.bool,customPanel:d.a.string.isRequired}),s=o))||s)||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{694:function(e,t,a){"use strict";a.d(t,"a",function(){return j});var i,s,o=a(0),n=a(2),r=a(7),c=a(1),u=a(12),d=a(3),l=a.n(d),b=a(6),g=a(310),f=a(20),p=a(638),m=a(47),v=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"}}),j=(i=Object(u.connect)(null,function(e,t){var a=t.intl;return{onLogout:function(){e(Object(m.d)("CONFIRM",{message:a.formatMessage(v.logoutMessage),confirm:a.formatMessage(v.logoutConfirm),onConfirm:function(){return Object(p.a)()}}))}}}),Object(b.g)(s=i(s=function(e){function t(){for(var t,a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return t=e.call.apply(e,[this].concat(i))||this,Object(c.a)(Object(n.a)(t),"handleLogoutClick",function(e){return e.preventDefault(),e.stopPropagation(),t.props.onLogout(),!1}),t}return Object(r.a)(t,e),t.prototype.render=function(){var e=this.props.withHotkeys;return Object(o.a)("div",{className:"getting-started__footer"},void 0,Object(o.a)("ul",{},void 0,f.i&&Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/invites",target:"_blank"},void 0,Object(o.a)(b.b,{id:"getting_started.invite",defaultMessage:"Invite people"}))," · "),e&&Object(o.a)("li",{},void 0,Object(o.a)(g.a,{to:"/keyboard-shortcuts"},void 0,Object(o.a)(b.b,{id:"navigation_bar.keyboard_shortcuts",defaultMessage:"Hotkeys"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/auth/edit"},void 0,Object(o.a)(b.b,{id:"getting_started.security",defaultMessage:"Security"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/about/more",target:"_blank"},void 0,Object(o.a)(b.b,{id:"navigation_bar.info",defaultMessage:"About this server"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"https://joinmastodon.org/apps",target:"_blank"},void 0,Object(o.a)(b.b,{id:"navigation_bar.apps",defaultMessage:"Mobile apps"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/terms",target:"_blank"},void 0,Object(o.a)(b.b,{id:"getting_started.terms",defaultMessage:"Terms of service"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/settings/applications",target:"_blank"},void 0,Object(o.a)(b.b,{id:"getting_started.developers",defaultMessage:"Developers"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"https://docs.joinmastodon.org",target:"_blank"},void 0,Object(o.a)(b.b,{id:"getting_started.documentation",defaultMessage:"Documentation"}))," · "),Object(o.a)("li",{},void 0,Object(o.a)("a",{href:"/auth/sign_out",onClick:this.handleLogoutClick},void 0,Object(o.a)(b.b,{id:"navigation_bar.logout",defaultMessage:"Logout"})))),Object(o.a)("p",{},void 0,Object(o.a)(b.b,{id:"getting_started.open_source_notice",defaultMessage:"Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",values:{github:Object(o.a)("span",{},void 0,Object(o.a)("a",{href:f.s,rel:"noopener",target:"_blank"},void 0,f.p)," (v",f.x,")")}})))},t}(l.a.PureComponent))||s)||s)},722:function(e,t,a){"use strict";a.r(t),a.d(t,"default",function(){return x});var i,s,o,n=a(0),r=a(7),c=a(1),u=(a(3),a(663)),d=a(1093),l=a(1094),b=a(6),g=a(12),f=a(5),p=a.n(f),m=a(18),v=a.n(m),j=a(19),O=a(20),h=a(26),_=a(4),M=a(688),y=a(27),w=a(694),k=a(770),q=Object(b.f)({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"},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"},preferences:{id:"navigation_bar.preferences",defaultMessage:"Preferences"},follow_requests:{id:"navigation_bar.follow_requests",defaultMessage:"Follow requests"},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"},pins:{id:"navigation_bar.pins",defaultMessage:"Pinned toots"},lists:{id:"navigation_bar.lists",defaultMessage:"Lists"},discover:{id:"navigation_bar.discover",defaultMessage:"Discover"},personal:{id:"navigation_bar.personal",defaultMessage:"Personal"},security:{id:"navigation_bar.security",defaultMessage:"Security"},menu:{id:"getting_started.heading",defaultMessage:"Getting started"},profile_directory:{id:"getting_started.directory",defaultMessage:"Profile directory"}}),x=Object(g.connect)(function(e){return{myAccount:e.getIn(["accounts",O.m]),unreadFollowRequests:e.getIn(["user_lists","follow_requests","items"],Object(_.List)()).size}},function(e){return{fetchFollowRequests:function(){return e(Object(h.B)())}}})(i=Object(b.g)((o=s=function(e){function t(){return e.apply(this,arguments)||this}Object(r.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){var e=this.props,t=e.fetchFollowRequests;!e.multiColumn&&window.innerWidth>=1190?this.context.router.history.replace("/timelines/home"):t()},a.render=function(){var e,t,a=this.props,i=a.intl,s=a.myAccount,o=a.multiColumn,r=a.unreadFollowRequests,c=[],g=1,f=o?0:60;return o?(c.push(Object(n.a)(l.a,{text:i.formatMessage(q.discover)},g++),Object(n.a)(d.a,{icon:"users",text:i.formatMessage(q.community_timeline),to:"/timelines/public/local"},g++),Object(n.a)(d.a,{icon:"globe",text:i.formatMessage(q.public_timeline),to:"/timelines/public"},g++)),f+=130,O.n&&(c.push(Object(n.a)(d.a,{icon:"address-book",text:i.formatMessage(q.profile_directory),to:"/directory"},g++)),f+=48),c.push(Object(n.a)(l.a,{text:i.formatMessage(q.personal)},g++)),f+=34):O.n&&(c.push(Object(n.a)(d.a,{icon:"address-book",text:i.formatMessage(q.profile_directory),to:"/directory"},g++)),f+=48),c.push(Object(n.a)(d.a,{icon:"envelope",text:i.formatMessage(q.direct),to:"/timelines/direct"},g++),Object(n.a)(d.a,{icon:"star",text:i.formatMessage(q.favourites),to:"/favourites"},g++),Object(n.a)(d.a,{icon:"list-ul",text:i.formatMessage(q.lists),to:"/lists"},g++)),f+=144,(s.get("locked")||r>0)&&(c.push(Object(n.a)(d.a,{icon:"user-plus",text:i.formatMessage(q.follow_requests),badge:(e=r,t=40,0===e?void 0:t&&e>=t?t+"+":e),to:"/follow_requests"},g++)),f+=48),o||(c.push(Object(n.a)(l.a,{text:i.formatMessage(q.settings_subheading)},g++),Object(n.a)(d.a,{icon:"gears",text:i.formatMessage(q.preferences),href:"/settings/preferences"},g++)),f+=82),Object(n.a)(u.a,{bindToDocument:!o,label:i.formatMessage(q.menu)},void 0,o&&Object(n.a)("div",{className:"column-header__wrapper"},void 0,Object(n.a)("h1",{className:"column-header"},void 0,Object(n.a)("button",{},void 0,Object(n.a)(y.a,{id:"bars",className:"column-header__icon",fixedWidth:!0}),Object(n.a)(b.b,{id:"getting_started.heading",defaultMessage:"Getting started"})))),Object(n.a)("div",{className:"getting-started"},void 0,Object(n.a)("div",{className:"getting-started__wrapper",style:{height:f}},void 0,!o&&Object(n.a)(M.a,{account:s}),c),!o&&Object(n.a)("div",{className:"flex-spacer"}),Object(n.a)(w.a,{withHotkeys:o})),o&&O.r&&Object(n.a)(k.a,{}))},t}(j.a),Object(c.a)(s,"contextTypes",{router:p.a.object.isRequired}),Object(c.a)(s,"propTypes",{intl:p.a.object.isRequired,myAccount:v.a.map.isRequired,columns:v.a.list,multiColumn:p.a.bool,fetchFollowRequests:p.a.func.isRequired,unreadFollowRequests:p.a.number,unreadNotifications:p.a.number}),i=o))||i)||i},770:function(e,t,a){"use strict";var i=a(12),s=a(258),o=a(0),n=a(7),r=a(1),c=(a(3),a(19)),u=a(5),d=a.n(u),l=a(18),b=a.n(l),g=a(676),f=a(6),p=function(e){function t(){return e.apply(this,arguments)||this}Object(n.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){var e=this;this.props.fetchTrends(),this.refreshInterval=setInterval(function(){return e.props.fetchTrends()},9e5)},a.componentWillUnmount=function(){this.refreshInterval&&clearInterval(this.refreshInterval)},a.render=function(){var e=this.props.trends;return!e||e.isEmpty()?null:Object(o.a)("div",{className:"getting-started__trends"},void 0,Object(o.a)("h4",{},void 0,Object(o.a)(f.b,{id:"trends.trending_now",defaultMessage:"Trending now"})),e.take(3).map(function(e){return Object(o.a)(g.a,{hashtag:e},e.get("name"))}))},t}(c.a);Object(r.a)(p,"defaultProps",{loading:!1}),Object(r.a)(p,"propTypes",{trends:b.a.list,fetchTrends:d.a.func.isRequired});t.a=Object(i.connect)(function(e){return{trends:e.getIn(["trends","items"])}},function(e){return{fetchTrends:function(){return e(Object(s.d)())}}})(p)}}]); //# sourceMappingURL=getting_started.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/getting_started.js.map b/priv/static/packs/features/getting_started.js.map index 1d9bf5983..ed2b30df7 100644 --- a/priv/static/packs/features/getting_started.js.map +++ b/priv/static/packs/features/getting_started.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/getting_started/index.js"],"names":["messages","defineMessages","home_timeline","id","defaultMessage","notifications","public_timeline","settings_subheading","community_timeline","direct","preferences","follow_requests","favourites","blocks","domain_blocks","mutes","pins","lists","discover","personal","security","menu","profile_directory","switch_to_glitch","GettingStarted","connect","state","myAccount","getIn","me","unreadFollowRequests","ImmutableList","size","customPanelEnabled","customPanel","dispatch","fetchFollowRequests","fetchPanel","fetchPleromaConfig","switchFlavour","injectIntl","e","_this","props","componentDidMount","_this$props","this","get","render","number","limit","_this$props2","intl","multiColumn","navItems","i","height","push","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column_subheading__WEBPACK_IMPORTED_MODULE_7__","text","formatMessage","_ui_components_column_link__WEBPACK_IMPORTED_MODULE_6__","icon","to","href","onClick","switch_flavour_glitch","className","tabIndex","badge","instance_panel","dangerouslySetInnerHTML","__html","_ui_components_column__WEBPACK_IMPORTED_MODULE_5__","label","mastodon_components_icon__WEBPACK_IMPORTED_MODULE_19__","fixedWidth","react_intl__WEBPACK_IMPORTED_MODULE_8__","style","_compose_components_navigation_bar__WEBPACK_IMPORTED_MODULE_18__","account","invitesEnabled","target","react_router_dom__WEBPACK_IMPORTED_MODULE_17__","data-method","values","mastofe","rel","glitchsoc","mastodon","pleroma","ImmutablePureComponent","PropTypes","object","isRequired","ImmutablePropTypes","map","columns","list","bool","func","unreadNotifications","string"],"mappings":"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","file":"features/getting_started.js","sourcesContent":["import React from 'react';\nimport Column from '../ui/components/column';\nimport ColumnLink from '../ui/components/column_link';\nimport ColumnSubheading from '../ui/components/column_subheading';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, invitesEnabled, profile_directory, repository, source_url } from '../../initial_state';\nimport { fetchFollowRequests } from '../../actions/accounts';\nimport { fetchPanel, fetchPleromaConfig, switchFlavour } from 'mastodon/actions/pleroma';\nimport { List as ImmutableList } from 'immutable';\nimport { Link } from 'react-router-dom';\nimport NavigationBar from '../compose/components/navigation_bar';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\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 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 preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\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 pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },\n personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },\n security: { id: 'navigation_bar.security', defaultMessage: 'Security' },\n menu: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n profile_directory: { id: 'getting_started.directory', defaultMessage: 'Profile directory' },\n switch_to_glitch: { id: 'navigation_bar.switch_to_glitch', defaultMessage: 'Switch to Glitch Flavour' },\n});\n\nconst mapStateToProps = state => ({\n myAccount: state.getIn(['accounts', me]),\n unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n customPanelEnabled: state.getIn(['custom_panel', 'enabled']),\n customPanel: state.getIn(['custom_panel', 'panel']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchFollowRequests: () => dispatch(fetchFollowRequests()),\n fetchPanel: () => dispatch(fetchPanel()),\n fetchPleromaConfig: () => dispatch(fetchPleromaConfig()),\n switchFlavour: () => dispatch(switchFlavour()),\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\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass GettingStarted extends ImmutablePureComponent {\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 fetchPanel: PropTypes.func.isRequired,\n fetchPleromaConfig: PropTypes.func.isRequired,\n switchFlavour: PropTypes.func.isRequired,\n unreadFollowRequests: PropTypes.number,\n unreadNotifications: PropTypes.number,\n customPanelEnabled: PropTypes.bool,\n customPanel: PropTypes.string.isRequired,\n };\n\n switch_flavour_glitch = (e) => {\n this.props.switchFlavour('glitch');\n }\n\n componentDidMount () {\n const { myAccount, fetchFollowRequests, fetchPleromaConfig, fetchPanel } = this.props;\n\n if (myAccount.get('locked')) {\n fetchFollowRequests();\n }\n\n fetchPleromaConfig();\n fetchPanel();\n }\n\n render () {\n const { intl, myAccount, multiColumn, unreadFollowRequests, customPanelEnabled, customPanel } = this.props;\n\n const navItems = [];\n let i = 1;\n let height = (multiColumn) ? 0 : 60;\n\n if (multiColumn) {\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.discover)} />,\n <ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />,\n <ColumnLink key={i++} icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />,\n );\n\n height += 34 + 48*2;\n\n if (profile_directory) {\n navItems.push(\n <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} href='/explore' />\n );\n\n height += 48;\n }\n\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.personal)} />\n );\n\n height += 34;\n } else if (profile_directory) {\n navItems.push(\n <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} href='/explore' />\n );\n\n height += 48;\n }\n\n navItems.push(\n <ColumnLink key={i++} icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />,\n <ColumnLink key={i++} icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />,\n <ColumnLink key={i++} icon='list-ul' text={intl.formatMessage(messages.lists)} to='/lists' />,\n <a key={i++} href='#' onClick={this.switch_flavour_glitch} className='column-link' tabIndex='0'><i className={`fa fa-fw fa-exchange column-link__icon`} />{intl.formatMessage(messages.switch_to_glitch)}</a>\n );\n\n height += 48*3;\n\n if (myAccount.get('locked')) {\n navItems.push(<ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);\n height += 48;\n }\n\n if (!multiColumn) {\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.settings_subheading)} />,\n <ColumnLink key={i++} icon='gears' text={intl.formatMessage(messages.preferences)} href='/user-settings' />,\n );\n\n height += 34 + 48;\n }\n\n const instance_panel = (customPanelEnabled ? <div className='getting-started getting-started__panel scrollable' dangerouslySetInnerHTML={{__html: customPanel}} /> : null);\n\n return (\n <Column label={intl.formatMessage(messages.menu)}>\n {multiColumn && <div className='column-header__wrapper'>\n <h1 className='column-header'>\n <button>\n <Icon id='bars' className='column-header__icon' fixedWidth />\n <FormattedMessage id='getting_started.heading' defaultMessage='Getting started' />\n </button>\n </h1>\n </div>}\n\n <div className='getting-started'>\n <div className='getting-started__wrapper scrollable' style={{ height }}>\n {!multiColumn && <NavigationBar account={myAccount} />}\n {navItems}\n </div>\n\n {!multiColumn && <div className='flex-spacer' />}\n\n {instance_panel}\n\n {!multiColumn && <div className='flex-spacer' />}\n\n <div className='getting-started__footer scrollable'>\n <ul>\n {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>}\n {multiColumn && <li><Link to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link> · </li>}\n <li><a href='/auth/sign_out' data-method='delete'><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li>\n </ul>\n\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' target='_blank'>Mastofe</a>,\n glitchsoc: <a href='https://github.com/glitch-soc/mastodon' rel='noopener' target='_blank'>glitch-soc</a>,\n mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener' target='_blank'>Mastodon</a>,\n pleroma: <a href='https://pleroma.social' rel='noopener' target='_blank'>Pleroma</a>,\n }}\n />\n <FormattedMessage\n id='getting_started.vanilla_support_warning'\n defaultMessage='Please be warned that the vanilla flavour isn’t as supported as the glitch one, expect bugs related to the API'\n />\n </p>\n </div>\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/mastodon/features/ui/components/link_footer.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/getting_started/index.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/getting_started/components/trends.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/getting_started/containers/trends_container.js"],"names":["messages","defineMessages","logoutMessage","logoutConfirm","LinkFooter","connect","dispatch","intl","onLogout","openModal","message","formatMessage","confirm","onConfirm","logOut","injectIntl","e","preventDefault","stopPropagation","props","render","withHotkeys","this","className","invitesEnabled","href","target","id","defaultMessage","to","onClick","handleLogoutClick","values","github","source_url","rel","repository","version","React","PureComponent","home_timeline","notifications","public_timeline","settings_subheading","community_timeline","direct","preferences","follow_requests","favourites","blocks","domain_blocks","mutes","pins","lists","discover","personal","security","menu","profile_directory","GettingStarted","state","myAccount","getIn","me","unreadFollowRequests","ImmutableList","size","fetchFollowRequests","componentDidMount","multiColumn","window","innerWidth","context","router","history","replace","number","limit","navItems","i","height","push","text","icon","get","badge","bindToDocument","label","fixedWidth","style","account","showTrends","ImmutablePureComponent","PropTypes","object","isRequired","ImmutablePropTypes","map","columns","list","bool","func","unreadNotifications","Trends","fetchTrends","refreshInterval","setInterval","componentWillUnmount","clearInterval","trends","isEmpty","take","hashtag","loading"],"mappings":"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","file":"features/getting_started.js","sourcesContent":["import { connect } from 'react-redux';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { invitesEnabled, version, repository, source_url } from 'mastodon/initial_state';\nimport { logOut } from 'mastodon/utils/log_out';\nimport { openModal } from 'mastodon/actions/modal';\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 mapDispatchToProps = (dispatch, { intl }) => ({\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\n@connect(null, mapDispatchToProps)\nclass LinkFooter extends React.PureComponent {\n\n static propTypes = {\n withHotkeys: PropTypes.bool,\n onLogout: PropTypes.func.isRequired,\n intl: PropTypes.object.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 { withHotkeys } = this.props;\n\n return (\n <div className='getting-started__footer'>\n <ul>\n {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>}\n {withHotkeys && <li><Link to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link> · </li>}\n <li><a href='/auth/edit'><FormattedMessage id='getting_started.security' defaultMessage='Security' /></a> · </li>\n <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this server' /></a> · </li>\n <li><a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='navigation_bar.apps' defaultMessage='Mobile apps' /></a> · </li>\n <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li>\n <li><a href='/settings/applications' target='_blank'><FormattedMessage id='getting_started.developers' defaultMessage='Developers' /></a> · </li>\n <li><a href='https://docs.joinmastodon.org' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li>\n <li><a href='/auth/sign_out' onClick={this.handleLogoutClick}><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li>\n </ul>\n\n <p>\n <FormattedMessage\n id='getting_started.open_source_notice'\n defaultMessage='Mastodon is open source software. You can contribute or report issues on GitHub at {github}.'\n values={{ github: <span><a href={source_url} rel='noopener' target='_blank'>{repository}</a> (v{version})</span> }}\n />\n </p>\n </div>\n );\n }\n\n};\n","import React from 'react';\nimport Column from '../ui/components/column';\nimport ColumnLink from '../ui/components/column_link';\nimport ColumnSubheading from '../ui/components/column_subheading';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, profile_directory, showTrends } from '../../initial_state';\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { List as ImmutableList } from 'immutable';\nimport NavigationBar from '../compose/components/navigation_bar';\nimport Icon from 'mastodon/components/icon';\nimport LinkFooter from 'mastodon/features/ui/components/link_footer';\nimport TrendsContainer from './containers/trends_container';\n\nconst messages = defineMessages({\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 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 preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\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 pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },\n personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },\n security: { id: 'navigation_bar.security', defaultMessage: 'Security' },\n menu: { id: 'getting_started.heading', defaultMessage: 'Getting started' },\n profile_directory: { id: 'getting_started.directory', defaultMessage: 'Profile directory' },\n});\n\nconst mapStateToProps = state => ({\n myAccount: state.getIn(['accounts', me]),\n unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchFollowRequests: () => dispatch(fetchFollowRequests()),\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\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass 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 };\n\n componentDidMount () {\n const { fetchFollowRequests, multiColumn } = 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\n render () {\n const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props;\n\n const navItems = [];\n let i = 1;\n let height = (multiColumn) ? 0 : 60;\n\n if (multiColumn) {\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.discover)} />,\n <ColumnLink key={i++} icon='users' text={intl.formatMessage(messages.community_timeline)} to='/timelines/public/local' />,\n <ColumnLink key={i++} icon='globe' text={intl.formatMessage(messages.public_timeline)} to='/timelines/public' />,\n );\n\n height += 34 + 48*2;\n\n if (profile_directory) {\n navItems.push(\n <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />\n );\n\n height += 48;\n }\n\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.personal)} />\n );\n\n height += 34;\n } else if (profile_directory) {\n navItems.push(\n <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />\n );\n\n height += 48;\n }\n\n navItems.push(\n <ColumnLink key={i++} icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />,\n <ColumnLink key={i++} icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />,\n <ColumnLink key={i++} icon='list-ul' text={intl.formatMessage(messages.lists)} to='/lists' />\n );\n\n height += 48*3;\n\n if (myAccount.get('locked') || unreadFollowRequests > 0) {\n navItems.push(<ColumnLink key={i++} icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);\n height += 48;\n }\n\n if (!multiColumn) {\n navItems.push(\n <ColumnSubheading key={i++} text={intl.formatMessage(messages.settings_subheading)} />,\n <ColumnLink key={i++} icon='gears' text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />,\n );\n\n height += 34 + 48;\n }\n\n return (\n <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.menu)}>\n {multiColumn && <div className='column-header__wrapper'>\n <h1 className='column-header'>\n <button>\n <Icon id='bars' className='column-header__icon' fixedWidth />\n <FormattedMessage id='getting_started.heading' defaultMessage='Getting started' />\n </button>\n </h1>\n </div>}\n\n <div className='getting-started'>\n <div className='getting-started__wrapper' style={{ height }}>\n {!multiColumn && <NavigationBar account={myAccount} />}\n {navItems}\n </div>\n\n {!multiColumn && <div className='flex-spacer' />}\n\n <LinkFooter withHotkeys={multiColumn} />\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 'mastodon/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 diff --git a/priv/static/packs/features/glitch/async/directory.js b/priv/static/packs/features/glitch/async/directory.js new file mode 100644 index 000000000..934c1e75a --- /dev/null +++ b/priv/static/packs/features/glitch/async/directory.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{754:function(e,t,a){"use strict";a.r(t);var o,n,c,i,s,r,l,d=a(0),u=a(2),b=a(7),m=a(1),j=a(3),f=a.n(j),g=a(12),h=a(6),p=a(5),O=a.n(p),v=a(667),_=a(664),M=a(243),w=a(199),y=a(4),k=a(19),C=a(18),I=a.n(C),N=a(148),L=a(92),E=a(94),R=a(218),P=a(97),q=a(40),A=a(15),F=a(407),S=a(23),T=a(42),U=a(117),B=Object(h.f)({follow:{id:"account.follow",defaultMessage:"Follow"},unfollow:{id:"account.unfollow",defaultMessage:"Unfollow"},requested:{id:"account.requested",defaultMessage:"Awaiting approval"},unblock:{id:"account.unblock",defaultMessage:"Unblock @{name}"},unmute:{id:"account.unmute",defaultMessage:"Unmute @{name}"}}),D=(o=Object(g.connect)(function(){var e=Object(N.d)();return function(t,a){var o=a.id;return{account:e(t,o)}}},function(e,t){var a=t.intl;return{onFollow:function(t){t.getIn(["relationship","following"])||t.getIn(["relationship","requested"])?A.s?e(Object(T.d)("CONFIRM",{message:Object(d.a)(h.b,{id:"confirmations.unfollow.message",defaultMessage:"Are you sure you want to unfollow {name}?",values:{name:Object(d.a)("strong",{},void 0,"@",t.get("acct"))}}),confirm:a.formatMessage(B.unfollowConfirm),onConfirm:function(){return e(Object(S.S)(t.get("id")))}})):e(Object(S.S)(t.get("id"))):e(Object(S.M)(t.get("id")))},onBlock:function(t){t.getIn(["relationship","blocking"])?e(Object(S.R)(t.get("id"))):e(Object(S.z)(t.get("id")))},onMute:function(t){t.getIn(["relationship","muting"])?e(Object(S.T)(t.get("id"))):e(Object(U.g)(t))}}}),Object(h.g)(n=o((i=c=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(m.a)(Object(u.a)(t),"handleEmojiMouseEnter",function(e){var t=e.target;t.src=t.getAttribute("data-original")}),Object(m.a)(Object(u.a)(t),"handleEmojiMouseLeave",function(e){var t=e.target;t.src=t.getAttribute("data-static")}),Object(m.a)(Object(u.a)(t),"handleFollow",function(){t.props.onFollow(t.props.account)}),Object(m.a)(Object(u.a)(t),"handleBlock",function(){t.props.onBlock(t.props.account)}),Object(m.a)(Object(u.a)(t),"handleMute",function(){t.props.onMute(t.props.account)}),Object(m.a)(Object(u.a)(t),"setRef",function(e){t.node=e}),t}Object(b.a)(t,e);var a=t.prototype;return a._updateEmojis=function(){var e=this.node;if(e&&!A.a)for(var t=e.querySelectorAll(".custom-emoji"),a=0;a<t.length;a++){var o=t[a];o.classList.contains("status-emoji")||(o.classList.add("status-emoji"),o.addEventListener("mouseenter",this.handleEmojiMouseEnter,!1),o.addEventListener("mouseleave",this.handleEmojiMouseLeave,!1))}},a.componentDidMount=function(){this._updateEmojis()},a.componentDidUpdate=function(){this._updateEmojis()},a.render=function(){var e,t=this.props,a=t.account,o=t.intl;if(a.get("id")!==A.m&&null!==a.get("relationship",null)){var n=a.getIn(["relationship","following"]),c=a.getIn(["relationship","requested"]),i=a.getIn(["relationship","blocking"]),s=a.getIn(["relationship","muting"]);c?e=Object(d.a)(q.a,{disabled:!0,icon:"hourglass",title:o.formatMessage(B.requested)}):i?e=Object(d.a)(q.a,{active:!0,icon:"unlock",title:o.formatMessage(B.unblock,{name:a.get("username")}),onClick:this.handleBlock}):s?e=Object(d.a)(q.a,{active:!0,icon:"volume-up",title:o.formatMessage(B.unmute,{name:a.get("username")}),onClick:this.handleMute}):a.get("moved")&&!n||(e=Object(d.a)(q.a,{icon:n?"user-times":"user-plus",title:o.formatMessage(n?B.unfollow:B.follow),onClick:this.handleFollow,active:n}))}return Object(d.a)("div",{className:"directory__card"},void 0,Object(d.a)("div",{className:"directory__card__img"},void 0,Object(d.a)("img",{src:A.a?a.get("header"):a.get("header_static"),alt:""})),Object(d.a)("div",{className:"directory__card__bar"},void 0,Object(d.a)(R.a,{className:"directory__card__bar__name",href:a.get("url"),to:"/accounts/"+a.get("id")},void 0,Object(d.a)(L.a,{account:a,size:48}),Object(d.a)(E.a,{account:a})),Object(d.a)("div",{className:"directory__card__bar__relationship account__relationship"},void 0,e)),f.a.createElement("div",{className:"directory__card__extra",ref:this.setRef},Object(d.a)("div",{className:"account__header__content",dangerouslySetInnerHTML:{__html:a.get("note_emojified")}})),Object(d.a)("div",{className:"directory__card__extra"},void 0,Object(d.a)("div",{className:"accounts-table__count"},void 0,Object(F.a)(a.get("statuses_count"))," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.posts",defaultMessage:"Toots"}))),Object(d.a)("div",{className:"accounts-table__count"},void 0,a.get("followers_count")<0?"-":Object(F.a)(a.get("followers_count"))," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.followers",defaultMessage:"Followers"}))),Object(d.a)("div",{className:"accounts-table__count"},void 0,null===a.get("last_status_at")?Object(d.a)(h.b,{id:"account.never_active",defaultMessage:"Never"}):Object(d.a)(P.default,{timestamp:a.get("last_status_at")})," ",Object(d.a)("small",{},void 0,Object(d.a)(h.b,{id:"account.last_status",defaultMessage:"Last active"})))))},t}(k.a),Object(m.a)(c,"propTypes",{account:I.a.map.isRequired,intl:O.a.object.isRequired,onFollow:O.a.func.isRequired,onBlock:O.a.func.isRequired,onMute:O.a.func.isRequired}),n=i))||n)||n),x=a(10),H=a.n(x),z=function(e){function t(){return e.apply(this,arguments)||this}return Object(b.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.name,a=e.value,o=e.checked,n=e.onChange,c=e.label;return Object(d.a)("label",{className:"radio-button"},void 0,Object(d.a)("input",{name:t,type:"radio",value:a,checked:o,onChange:n}),Object(d.a)("span",{className:H()("radio-button__input",{checked:o})}),Object(d.a)("span",{},void 0,c))},t}(f.a.PureComponent),J=a(991),K=a(460);a.d(t,"default",function(){return G});var Y=Object(h.f)({title:{id:"column.directory",defaultMessage:"Browse profiles"},recentlyActive:{id:"directory.recently_active",defaultMessage:"Recently active"},newArrivals:{id:"directory.new_arrivals",defaultMessage:"New arrivals"},local:{id:"directory.local",defaultMessage:"From {domain} only"},federated:{id:"directory.federated",defaultMessage:"From known fediverse"}}),G=Object(g.connect)(function(e){return{accountIds:e.getIn(["user_lists","directory","items"],Object(y.List)()),isLoading:e.getIn(["user_lists","directory","isLoading"],!0),domain:e.getIn(["meta","domain"])}})(s=Object(h.g)((l=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(m.a)(Object(u.a)(t),"state",{order:null,local:null}),Object(m.a)(Object(u.a)(t),"handlePin",function(){var e=t.props,a=e.columnId,o=e.dispatch;o(a?Object(M.h)(a):Object(M.e)("DIRECTORY",t.getParams(t.props,t.state)))}),Object(m.a)(Object(u.a)(t),"getParams",function(e,t){return{order:null===t.order?e.params.order||"active":t.order,local:null===t.local?e.params.local||!1:t.local}}),Object(m.a)(Object(u.a)(t),"handleMove",function(e){var a=t.props,o=a.columnId;(0,a.dispatch)(Object(M.g)(o,e))}),Object(m.a)(Object(u.a)(t),"handleHeaderClick",function(){t.column.scrollTop()}),Object(m.a)(Object(u.a)(t),"setRef",function(e){t.column=e}),Object(m.a)(Object(u.a)(t),"handleChangeOrder",function(e){var a=t.props,o=a.dispatch,n=a.columnId;n?o(Object(M.f)(n,["order"],e.target.value)):t.setState({order:e.target.value})}),Object(m.a)(Object(u.a)(t),"handleChangeLocal",function(e){var a=t.props,o=a.dispatch,n=a.columnId;n?o(Object(M.f)(n,["local"],"1"===e.target.value)):t.setState({local:"1"===e.target.value})}),Object(m.a)(Object(u.a)(t),"handleLoadMore",function(){(0,t.props.dispatch)(Object(w.g)(t.getParams(t.props,t.state)))}),t}Object(b.a)(t,e);var a=t.prototype;return a.componentDidMount=function(){(0,this.props.dispatch)(Object(w.h)(this.getParams(this.props,this.state)))},a.componentDidUpdate=function(e,t){var a=this.props.dispatch,o=this.getParams(e,t),n=this.getParams(this.props,this.state);o.order===n.order&&o.local===n.local||a(Object(w.h)(n))},a.render=function(){var e=this.props,t=e.isLoading,a=e.accountIds,o=e.intl,n=e.columnId,c=e.multiColumn,i=e.domain,s=e.shouldUpdateScroll,r=this.getParams(this.props,this.state),l=r.order,u=r.local,b=!!n,m=Object(d.a)("div",{className:"scrollable",style:{background:"transparent"}},void 0,Object(d.a)("div",{className:"filter-form"},void 0,Object(d.a)("div",{className:"filter-form__column",role:"group"},void 0,Object(d.a)(z,{name:"order",value:"active",label:o.formatMessage(Y.recentlyActive),checked:"active"===l,onChange:this.handleChangeOrder}),Object(d.a)(z,{name:"order",value:"new",label:o.formatMessage(Y.newArrivals),checked:"new"===l,onChange:this.handleChangeOrder})),Object(d.a)("div",{className:"filter-form__column",role:"group"},void 0,Object(d.a)(z,{name:"local",value:"1",label:o.formatMessage(Y.local,{domain:i}),checked:u,onChange:this.handleChangeLocal}),Object(d.a)(z,{name:"local",value:"0",label:o.formatMessage(Y.federated),checked:!u,onChange:this.handleChangeLocal}))),Object(d.a)("div",{className:H()("directory__list",{loading:t})},void 0,a.map(function(e){return Object(d.a)(D,{id:e},e)})),Object(d.a)(J.a,{onClick:this.handleLoadMore,visible:!t}));return f.a.createElement(v.a,{bindToDocument:!c,ref:this.setRef,label:o.formatMessage(Y.title)},Object(d.a)(_.a,{icon:"address-book-o",title:o.formatMessage(Y.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:b,multiColumn:c}),c&&!b?Object(d.a)(K.a,{scrollKey:"directory",shouldUpdateScroll:s},void 0,m):m)},t}(f.a.PureComponent),Object(m.a)(r,"contextTypes",{router:O.a.object}),s=l))||s)||s}}]); +//# sourceMappingURL=directory.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/glitch/async/directory.js.map b/priv/static/packs/features/glitch/async/directory.js.map new file mode 100644 index 000000000..34a293e4c --- /dev/null +++ b/priv/static/packs/features/glitch/async/directory.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/directory/components/account_card.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/components/radio_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/directory/index.js"],"names":["messages","defineMessages","follow","unfollow","requested","unblock","unmute","AccountCard","connect","getAccount","makeGetAccount","state","id","account","dispatch","intl","onFollow","getIn","unfollowModal","openModal","message","defaultMessage","values","name","get","confirm","formatMessage","unfollowConfirm","onConfirm","unfollowAccount","followAccount","onBlock","unblockAccount","blockAccount","onMute","unmuteAccount","initMuteModal","injectIntl","target","src","getAttribute","props","c","node","_updateEmojis","this","autoPlayGif","emojis","querySelectorAll","i","length","emoji","classList","contains","add","addEventListener","handleEmojiMouseEnter","handleEmojiMouseLeave","componentDidMount","componentDidUpdate","render","buttons","me","following","blocking","muting","disabled","icon","title","active","onClick","handleBlock","handleMute","handleFollow","className","alt","href","to","size","ref","setRef","dangerouslySetInnerHTML","__html","shortNumberFormat","timestamp","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","RadioButton","value","checked","onChange","label","type","classNames","React","PureComponent","recentlyActive","newArrivals","local","federated","Directory","accountIds","ImmutableList","isLoading","domain","order","columnId","removeColumn","addColumn","getParams","params","dir","moveColumn","column","scrollTop","e","changeColumnParams","setState","expandDirectory","fetchDirectory","prevProps","prevState","paramsOld","paramsNew","multiColumn","shouldUpdateScroll","pinned","scrollableArea","style","background","role","handleChangeOrder","handleChangeLocal","loading","accountId","handleLoadMore","visible","bindToDocument","onPin","handlePin","onMove","handleMove","handleHeaderClick","scrollKey","router"],"mappings":"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","file":"features/glitch/async/directory.js","sourcesContent":["import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from 'flavours/glitch/selectors';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';\nimport IconButton from 'flavours/glitch/components/icon_button';\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\nimport { autoPlayGif, me, unfollowModal } from 'flavours/glitch/util/initial_state';\nimport { shortNumberFormat } from 'flavours/glitch/util/numbers';\nimport { followAccount, unfollowAccount, blockAccount, unblockAccount, unmuteAccount } from 'flavours/glitch/actions/accounts';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { initMuteModal } from 'flavours/glitch/actions/mutes';\n\nconst messages = defineMessages({\n follow: { id: 'account.follow', defaultMessage: 'Follow' },\n unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },\n requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' },\n unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n});\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { id }) => ({\n account: getAccount(state, id),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onFollow (account) {\n if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {\n if (unfollowModal) {\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n confirm: intl.formatMessage(messages.unfollowConfirm),\n onConfirm: () => dispatch(unfollowAccount(account.get('id'))),\n }));\n } else {\n dispatch(unfollowAccount(account.get('id')));\n }\n } else {\n dispatch(followAccount(account.get('id')));\n }\n },\n\n onBlock (account) {\n if (account.getIn(['relationship', 'blocking'])) {\n dispatch(unblockAccount(account.get('id')));\n } else {\n dispatch(blockAccount(account.get('id')));\n }\n },\n\n onMute (account) {\n if (account.getIn(['relationship', 'muting'])) {\n dispatch(unmuteAccount(account.get('id')));\n } else {\n dispatch(initMuteModal(account));\n }\n },\n\n});\n\nexport default @injectIntl\n@connect(makeMapStateToProps, mapDispatchToProps)\nclass AccountCard extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onFollow: PropTypes.func.isRequired,\n onBlock: PropTypes.func.isRequired,\n onMute: PropTypes.func.isRequired,\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 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 handleFollow = () => {\n this.props.onFollow(this.props.account);\n }\n\n handleBlock = () => {\n this.props.onBlock(this.props.account);\n }\n\n handleMute = () => {\n this.props.onMute(this.props.account);\n }\n\n setRef = (c) => {\n this.node = c;\n }\n\n render () {\n const { account, intl } = this.props;\n\n let buttons;\n\n if (account.get('id') !== me && account.get('relationship', null) !== null) {\n const following = account.getIn(['relationship', 'following']);\n const requested = account.getIn(['relationship', 'requested']);\n const blocking = account.getIn(['relationship', 'blocking']);\n const muting = account.getIn(['relationship', 'muting']);\n\n if (requested) {\n buttons = <IconButton disabled icon='hourglass' title={intl.formatMessage(messages.requested)} />;\n } else if (blocking) {\n buttons = <IconButton active icon='unlock' title={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.handleBlock} />;\n } else if (muting) {\n buttons = <IconButton active icon='volume-up' title={intl.formatMessage(messages.unmute, { name: account.get('username') })} onClick={this.handleMute} />;\n } else if (!account.get('moved') || following) {\n buttons = <IconButton icon={following ? 'user-times' : 'user-plus'} title={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={this.handleFollow} active={following} />;\n }\n }\n\n return (\n <div className='directory__card'>\n <div className='directory__card__img'>\n <img src={autoPlayGif ? account.get('header') : account.get('header_static')} alt='' />\n </div>\n\n <div className='directory__card__bar'>\n <Permalink className='directory__card__bar__name' href={account.get('url')} to={`/accounts/${account.get('id')}`}>\n <Avatar account={account} size={48} />\n <DisplayName account={account} />\n </Permalink>\n\n <div className='directory__card__bar__relationship account__relationship'>\n {buttons}\n </div>\n </div>\n\n <div className='directory__card__extra' ref={this.setRef}>\n <div className='account__header__content' dangerouslySetInnerHTML={{ __html: account.get('note_emojified') }} />\n </div>\n\n <div className='directory__card__extra'>\n <div className='accounts-table__count'>{shortNumberFormat(account.get('statuses_count'))} <small><FormattedMessage id='account.posts' defaultMessage='Toots' /></small></div>\n <div className='accounts-table__count'>{account.get('followers_count') < 0 ? '-' : shortNumberFormat(account.get('followers_count'))} <small><FormattedMessage id='account.followers' defaultMessage='Followers' /></small></div>\n <div className='accounts-table__count'>{account.get('last_status_at') === null ? <FormattedMessage id='account.never_active' defaultMessage='Never' /> : <RelativeTimestamp timestamp={account.get('last_status_at')} />} <small><FormattedMessage id='account.last_status' defaultMessage='Last active' /></small></div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nexport default class RadioButton extends React.PureComponent {\n\n static propTypes = {\n value: PropTypes.string.isRequired,\n checked: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n label: PropTypes.node.isRequired,\n };\n\n render () {\n const { name, value, checked, onChange, label } = this.props;\n\n return (\n <label className='radio-button'>\n <input\n name={name}\n type='radio'\n value={value}\n checked={checked}\n onChange={onChange}\n />\n\n <span className={classNames('radio-button__input', { checked })} />\n\n <span>{label}</span>\n </label>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\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 { addColumn, removeColumn, moveColumn, changeColumnParams } from 'flavours/glitch/actions/columns';\nimport { fetchDirectory, expandDirectory } from 'flavours/glitch/actions/directory';\nimport { List as ImmutableList } from 'immutable';\nimport AccountCard from './components/account_card';\nimport RadioButton from 'flavours/glitch/components/radio_button';\nimport classNames from 'classnames';\nimport LoadMore from 'flavours/glitch/components/load_more';\nimport { ScrollContainer } from 'react-router-scroll-4';\n\nconst messages = defineMessages({\n title: { id: 'column.directory', defaultMessage: 'Browse profiles' },\n recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' },\n newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' },\n local: { id: 'directory.local', defaultMessage: 'From {domain} only' },\n federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()),\n isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Directory extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n isLoading: PropTypes.bool,\n accountIds: ImmutablePropTypes.list.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n params: PropTypes.shape({\n order: PropTypes.string,\n local: PropTypes.bool,\n }),\n };\n\n state = {\n order: null,\n local: null,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state)));\n }\n }\n\n getParams = (props, state) => ({\n order: state.order === null ? (props.params.order || 'active') : state.order,\n local: state.local === null ? (props.params.local || false) : state.local,\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 dispatch(fetchDirectory(this.getParams(this.props, this.state)));\n }\n\n componentDidUpdate (prevProps, prevState) {\n const { dispatch } = this.props;\n const paramsOld = this.getParams(prevProps, prevState);\n const paramsNew = this.getParams(this.props, this.state);\n\n if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) {\n dispatch(fetchDirectory(paramsNew));\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleChangeOrder = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['order'], e.target.value));\n } else {\n this.setState({ order: e.target.value });\n }\n }\n\n handleChangeLocal = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1'));\n } else {\n this.setState({ local: e.target.value === '1' });\n }\n }\n\n handleLoadMore = () => {\n const { dispatch } = this.props;\n dispatch(expandDirectory(this.getParams(this.props, this.state)));\n }\n\n render () {\n const { isLoading, accountIds, intl, columnId, multiColumn, domain, shouldUpdateScroll } = this.props;\n const { order, local } = this.getParams(this.props, this.state);\n const pinned = !!columnId;\n\n const scrollableArea = (\n <div className='scrollable' style={{ background: 'transparent' }}>\n <div className='filter-form'>\n <div className='filter-form__column' role='group'>\n <RadioButton name='order' value='active' label={intl.formatMessage(messages.recentlyActive)} checked={order === 'active'} onChange={this.handleChangeOrder} />\n <RadioButton name='order' value='new' label={intl.formatMessage(messages.newArrivals)} checked={order === 'new'} onChange={this.handleChangeOrder} />\n </div>\n\n <div className='filter-form__column' role='group'>\n <RadioButton name='local' value='1' label={intl.formatMessage(messages.local, { domain })} checked={local} onChange={this.handleChangeLocal} />\n <RadioButton name='local' value='0' label={intl.formatMessage(messages.federated)} checked={!local} onChange={this.handleChangeLocal} />\n </div>\n </div>\n\n <div className={classNames('directory__list', { loading: isLoading })}>\n {accountIds.map(accountId => <AccountCard id={accountId} key={accountId} />)}\n </div>\n\n <LoadMore onClick={this.handleLoadMore} visible={!isLoading} />\n </div>\n );\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='address-book-o'\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\n {multiColumn && !pinned ? <ScrollContainer scrollKey='directory' shouldUpdateScroll={shouldUpdateScroll}>{scrollableArea}</ScrollContainer> : scrollableArea}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/glitch/async/list_adder.js b/priv/static/packs/features/glitch/async/list_adder.js index 1964046c2..c0c8dc3d9 100644 --- a/priv/static/packs/features/glitch/async/list_adder.js +++ b/priv/static/packs/features/glitch/async/list_adder.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{700:function(t,e,n){"use strict";n.r(e);var i,a,c,o,s,r,d,u,l,p=n(0),f=n(6),b=n(1),v=(n(3),n(5)),j=n.n(v),O=n(26),m=n.n(O),_=n(21),R=n(25),g=n(7),I=n(31),h=n(61),N=n(48),q=Object(g.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),y=Object(_.connect)(function(t,e){var n=e.listId,i=e.added;return{list:t.get("lists").get(n),added:void 0===i?t.getIn(["listAdder","lists","items"]).includes(n):i}},function(t,e){var n=e.listId;return{onRemove:function(){return t(Object(I.J)(n))},onAdd:function(){return t(Object(I.A)(n))}}})(i=Object(g.g)((c=a=function(t){function e(){return t.apply(this,arguments)||this}return Object(f.a)(e,t),e.prototype.render=function(){var t,e=this.props,n=e.list,i=e.intl,a=e.onRemove,c=e.onAdd;return t=e.added?Object(p.a)(N.a,{icon:"times",title:i.formatMessage(q.remove),onClick:a}):Object(p.a)(N.a,{icon:"plus",title:i.formatMessage(q.add),onClick:c}),Object(p.a)("div",{className:"list"},void 0,Object(p.a)("div",{className:"list__wrapper"},void 0,Object(p.a)("div",{className:"list__display-name"},void 0,Object(p.a)("i",{className:"fa fa-fw fa-list-ul column-link__icon"}),n.get("title")),Object(p.a)("div",{className:"account__relationship"},void 0,t)))},e}(R.a),Object(b.a)(a,"propTypes",{list:m.a.map.isRequired,intl:j.a.object.isRequired,onRemove:j.a.func.isRequired,onAdd:j.a.func.isRequired,added:j.a.bool}),Object(b.a)(a,"defaultProps",{added:!1}),i=c))||i)||i,w=n(191),A=n(97),k=n(98),M=Object(_.connect)(function(){var i=Object(w.d)();return function(t,e){var n=e.accountId;return{account:i(t,n)}}})(o=Object(g.g)((r=s=function(t){function e(){return t.apply(this,arguments)||this}return Object(f.a)(e,t),e.prototype.render=function(){var t=this.props.account;return Object(p.a)("div",{className:"account"},void 0,Object(p.a)("div",{className:"account__wrapper"},void 0,Object(p.a)("div",{className:"account__display-name"},void 0,Object(p.a)("div",{className:"account__avatar-wrapper"},void 0,Object(p.a)(A.a,{account:t,size:36})),Object(p.a)(k.a,{account:t}))))},e}(R.a),Object(b.a)(s,"propTypes",{account:m.a.map.isRequired}),o=r))||o)||o,z=n(980);n.d(e,"default",function(){return J});var C=Object(h.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}),J=Object(_.connect)(function(t){return{listIds:C(t).map(function(t){return t.get("id")})}},function(e){return{onInitialize:function(t){return e(Object(I.N)(t))},onReset:function(){return e(Object(I.L)())}}})(d=Object(g.g)((l=u=function(t){function e(){return t.apply(this,arguments)||this}Object(f.a)(e,t);var n=e.prototype;return n.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.accountId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var t=this.props,e=t.accountId,n=t.listIds;return Object(p.a)("div",{className:"modal-root__modal list-adder"},void 0,Object(p.a)("div",{className:"list-adder__account"},void 0,Object(p.a)(M,{accountId:e})),Object(p.a)(z.a,{}),Object(p.a)("div",{className:"list-adder__lists"},void 0,n.map(function(t){return Object(p.a)(y,{listId:t},t)})))},e}(R.a),Object(b.a)(u,"propTypes",{accountId:j.a.string.isRequired,onClose:j.a.func.isRequired,intl:j.a.object.isRequired,onInitialize:j.a.func.isRequired,onReset:j.a.func.isRequired,listIds:m.a.list.isRequired}),d=l))||d)||d}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{753:function(t,e,n){"use strict";n.r(e);var i,a,c,o,s,r,d,u,l,p=n(0),b=n(7),f=n(1),v=(n(3),n(5)),j=n.n(v),O=n(18),m=n.n(O),_=n(12),R=n(19),g=n(6),I=n(29),h=n(53),N=n(40),q=n(25),y=Object(g.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),w=Object(_.connect)(function(t,e){var n=e.listId,i=e.added;return{list:t.get("lists").get(n),added:void 0===i?t.getIn(["listAdder","lists","items"]).includes(n):i}},function(t,e){var n=e.listId;return{onRemove:function(){return t(Object(I.J)(n))},onAdd:function(){return t(Object(I.A)(n))}}})(i=Object(g.g)((c=a=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t,e=this.props,n=e.list,i=e.intl,a=e.onRemove,c=e.onAdd;return t=e.added?Object(p.a)(N.a,{icon:"times",title:i.formatMessage(y.remove),onClick:a}):Object(p.a)(N.a,{icon:"plus",title:i.formatMessage(y.add),onClick:c}),Object(p.a)("div",{className:"list"},void 0,Object(p.a)("div",{className:"list__wrapper"},void 0,Object(p.a)("div",{className:"list__display-name"},void 0,Object(p.a)(q.a,{id:"list-ul",className:"column-link__icon",fixedWidth:!0}),n.get("title")),Object(p.a)("div",{className:"account__relationship"},void 0,t)))},e}(R.a),Object(f.a)(a,"propTypes",{list:m.a.map.isRequired,intl:j.a.object.isRequired,onRemove:j.a.func.isRequired,onAdd:j.a.func.isRequired,added:j.a.bool}),Object(f.a)(a,"defaultProps",{added:!1}),i=c))||i)||i,A=n(148),k=n(92),M=n(94),z=Object(_.connect)(function(){var t=Object(A.d)();return function(e,n){var i=n.accountId;return{account:t(e,i)}}})(o=Object(g.g)((r=s=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t=this.props.account;return Object(p.a)("div",{className:"account"},void 0,Object(p.a)("div",{className:"account__wrapper"},void 0,Object(p.a)("div",{className:"account__display-name"},void 0,Object(p.a)("div",{className:"account__avatar-wrapper"},void 0,Object(p.a)(k.a,{account:t,size:36})),Object(p.a)(M.a,{account:t}))))},e}(R.a),Object(f.a)(s,"propTypes",{account:m.a.map.isRequired}),o=r))||o)||o,C=n(1072);n.d(e,"default",function(){return T});var J=Object(h.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(_.connect)(function(t){return{listIds:J(t).map(function(t){return t.get("id")})}},function(t){return{onInitialize:function(e){return t(Object(I.N)(e))},onReset:function(){return t(Object(I.L)())}}})(d=Object(g.g)((l=u=function(t){function e(){return t.apply(this,arguments)||this}Object(b.a)(e,t);var n=e.prototype;return n.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.accountId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var t=this.props,e=t.accountId,n=t.listIds;return Object(p.a)("div",{className:"modal-root__modal list-adder"},void 0,Object(p.a)("div",{className:"list-adder__account"},void 0,Object(p.a)(z,{accountId:e})),Object(p.a)(C.a,{}),Object(p.a)("div",{className:"list-adder__lists"},void 0,n.map(function(t){return Object(p.a)(w,{listId:t},t)})))},e}(R.a),Object(f.a)(u,"propTypes",{accountId:j.a.string.isRequired,onClose:j.a.func.isRequired,intl:j.a.object.isRequired,onInitialize:j.a.func.isRequired,onReset:j.a.func.isRequired,listIds:m.a.list.isRequired}),d=l))||d)||d}}]); //# sourceMappingURL=list_adder.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/glitch/async/list_adder.js.map b/priv/static/packs/features/glitch/async/list_adder.js.map index f15894a57..bf8221a97 100644 --- a/priv/static/packs/features/glitch/async/list_adder.js.map +++ b/priv/static/packs/features/glitch/async/list_adder.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/list_adder/components/list.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/list_adder/components/account.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/list_adder/index.js"],"names":["messages","defineMessages","remove","id","defaultMessage","add","List","connect","state","_ref","listId","added","list","get","getIn","includes","dispatch","_ref2","onRemove","removeFromListAdder","onAdd","addToListAdder","injectIntl","render","button","_this$props","this","props","intl","Object","jsx","icon_button","icon","title","formatMessage","onClick","className","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","Account","getAccount","makeGetAccount","accountId","account","avatar","size","display_name","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","ListAdder","listIds","onInitialize","setupListAdder","onReset","resetListAdder","componentDidMount","componentWillUnmount","_this$props2","account_Account","new_list_form","ListId","list_List","string","onClose"],"mappings":"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","file":"features/glitch/async/list_adder.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListAdder, addToListAdder } from '../../../actions/lists';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\n\nconst MapStateToProps = (state, { listId, added }) => ({\n list: state.get('lists').get(listId),\n added: typeof added === 'undefined' ? state.getIn(['listAdder', 'lists', 'items']).includes(listId) : added,\n});\n\nconst mapDispatchToProps = (dispatch, { listId }) => ({\n onRemove: () => dispatch(removeFromListAdder(listId)),\n onAdd: () => dispatch(addToListAdder(listId)),\n});\n\nexport default @connect(MapStateToProps, mapDispatchToProps)\n@injectIntl\nclass List extends ImmutablePureComponent {\n\n static propTypes = {\n list: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { list, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='list'>\n <div className='list__wrapper'>\n <div className='list__display-name'>\n <i className='fa fa-fw fa-list-ul column-link__icon' />\n {list.get('title')}\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport { injectIntl } from 'react-intl';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId }) => ({\n account: getAccount(state, accountId),\n });\n\n return mapStateToProps;\n};\n\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n </div>\n </div>\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 { setupListAdder, resetListAdder } from '../../actions/lists';\nimport { createSelector } from 'reselect';\nimport List from './components/list';\nimport Account from './components/account';\nimport NewListForm from '../lists/components/new_list_form';\n// hack\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 listIds: getOrderedLists(state).map(list=>list.get('id')),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: accountId => dispatch(setupListAdder(accountId)),\n onReset: () => dispatch(resetListAdder()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListAdder extends ImmutablePureComponent {\n\n static propTypes = {\n accountId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n listIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, accountId } = this.props;\n onInitialize(accountId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountId, listIds } = this.props;\n\n return (\n <div className='modal-root__modal list-adder'>\n <div className='list-adder__account'>\n <Account accountId={accountId} />\n </div>\n\n <NewListForm />\n\n\n <div className='list-adder__lists'>\n {listIds.map(ListId => <List key={ListId} listId={ListId} />)}\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_adder/components/list.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_adder/components/account.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/list_adder/index.js"],"names":["messages","defineMessages","remove","add","List","connect","state","listId","added","list","get","getIn","includes","dispatch","onRemove","removeFromListAdder","onAdd","addToListAdder","injectIntl","render","button","this","props","intl","icon","title","formatMessage","onClick","className","id","fixedWidth","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","Account","getAccount","makeGetAccount","accountId","account","size","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","ListAdder","listIds","onInitialize","setupListAdder","onReset","resetListAdder","componentDidMount","componentWillUnmount","ListId","string","onClose"],"mappings":"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","file":"features/glitch/async/list_adder.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListAdder, addToListAdder } from '../../../actions/lists';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\n\nconst MapStateToProps = (state, { listId, added }) => ({\n list: state.get('lists').get(listId),\n added: typeof added === 'undefined' ? state.getIn(['listAdder', 'lists', 'items']).includes(listId) : added,\n});\n\nconst mapDispatchToProps = (dispatch, { listId }) => ({\n onRemove: () => dispatch(removeFromListAdder(listId)),\n onAdd: () => dispatch(addToListAdder(listId)),\n});\n\nexport default @connect(MapStateToProps, mapDispatchToProps)\n@injectIntl\nclass List extends ImmutablePureComponent {\n\n static propTypes = {\n list: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { list, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='list'>\n <div className='list__wrapper'>\n <div className='list__display-name'>\n <Icon id='list-ul' className='column-link__icon' fixedWidth />\n {list.get('title')}\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport { injectIntl } from 'react-intl';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId }) => ({\n account: getAccount(state, accountId),\n });\n\n return mapStateToProps;\n};\n\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n </div>\n </div>\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 { setupListAdder, resetListAdder } from '../../actions/lists';\nimport { createSelector } from 'reselect';\nimport List from './components/list';\nimport Account from './components/account';\nimport NewListForm from '../lists/components/new_list_form';\n// hack\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 listIds: getOrderedLists(state).map(list=>list.get('id')),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: accountId => dispatch(setupListAdder(accountId)),\n onReset: () => dispatch(resetListAdder()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListAdder extends ImmutablePureComponent {\n\n static propTypes = {\n accountId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n listIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, accountId } = this.props;\n onInitialize(accountId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountId, listIds } = this.props;\n\n return (\n <div className='modal-root__modal list-adder'>\n <div className='list-adder__account'>\n <Account accountId={accountId} />\n </div>\n\n <NewListForm />\n\n\n <div className='list-adder__lists'>\n {listIds.map(ListId => <List key={ListId} listId={ListId} />)}\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/glitch/async/search.js b/priv/static/packs/features/glitch/async/search.js new file mode 100644 index 000000000..a75fc6bcd --- /dev/null +++ b/priv/static/packs/features/glitch/async/search.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{716:function(a,e,c){"use strict";c.r(e);var r=c(0),d=(c(3),c(678)),i=c(1096);e.default=function(){return Object(r.a)("div",{className:"column search-page"},void 0,Object(r.a)(d.a,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,Object(r.a)("div",{className:"drawer__inner darker"},void 0,Object(r.a)(i.a,{}))))}}}]); +//# sourceMappingURL=search.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/glitch/async/search.js.map b/priv/static/packs/features/glitch/async/search.js.map new file mode 100644 index 000000000..6f99ce16c --- /dev/null +++ b/priv/static/packs/features/glitch/async/search.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/search/index.js"],"names":["Search","className"],"mappings":"uIAgBeA,UAZA,kBACb,mBAAKC,UAAU,2BAAf,EACE,YAAC,IAAD,IAEA,mBAAKA,UAAU,sBAAf,EACE,mBAAKA,UAAU,6BAAf,EACE,YAAC,IAAD","file":"features/glitch/async/search.js","sourcesContent":["import React from 'react';\nimport SearchContainer from 'flavours/glitch/features/compose/containers/search_container';\nimport SearchResultsContainer from 'flavours/glitch/features/compose/containers/search_results_container';\n\nconst Search = () => (\n <div className='column search-page'>\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner darker'>\n <SearchResultsContainer />\n </div>\n </div>\n </div>\n);\n\nexport default Search;\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/hashtag_timeline.js b/priv/static/packs/features/hashtag_timeline.js index 82dee7cd8..8d5173918 100644 --- a/priv/static/packs/features/hashtag_timeline.js +++ b/priv/static/packs/features/hashtag_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{104:function(t,e){var n=Array.isArray;t.exports=n},136:function(t,e,n){var r=n(436),o=n(439);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},248:function(t,e,n){var r=n(452),o=n(453),a=n(454),i=n(455),s=n(456);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},249:function(t,e,n){var r=n(377);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},250:function(t,e,n){var r=n(136)(Object,"create");t.exports=r},251:function(t,e,n){var r=n(470);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},281:function(t,e,n){var r=n(136)(n(72),"Map");t.exports=r},283:function(t,e){t.exports=function(t){return"number"==typeof t&&-1<t&&t%1==0&&t<=9007199254740991}},284:function(t,e,n){var r=n(462),o=n(469),a=n(471),i=n(472),s=n(473);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},342:function(t,e,n){var r=n(440),o=n(447),a=n(451);t.exports=function(t){return a(t)?r(t):o(t)}},373:function(t,e,n){var r=n(137),o=n(89);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},374:function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},375:function(t,s,c){(function(t){var e=c(72),n=c(443),r=s&&!s.nodeType&&s,o=r&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===r?e.Buffer:void 0,i=(a?a.isBuffer:void 0)||n;t.exports=i}).call(this,c(235)(t))},376:function(t,e,n){var r=n(444),o=n(445),a=n(446),i=a&&a.isTypedArray,s=i?o(i):r;t.exports=s},377:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},378:function(t,e,n){var b=n(475),g=n(478),_=n(479);t.exports=function(t,e,n,r,o,a){var i=1&n,s=t.length,c=e.length;if(s!=c&&!(i&&s<c))return!1;var u=a.get(t);if(u&&a.get(e))return u==e;var p=-1,f=!0,l=2&n?new b:void 0;for(a.set(t,e),a.set(e,t);++p<s;){var h=t[p],d=e[p];if(r)var v=i?r(d,h,p,e,t,a):r(h,d,p,t,e,a);if(void 0!==v){if(v)continue;f=!1;break}if(l){if(!g(e,function(t,e){if(!_(l,e)&&(h===t||o(h,t,n,r,a)))return l.push(e)})){f=!1;break}}else if(h!==d&&!o(h,d,n,r,a)){f=!1;break}}return a.delete(t),a.delete(e),f}},380:function(t,e,n){var r=n(442),o=n(138),a=Object.prototype,i=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&i.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},381:function(t,e){var r=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&r.test(t))&&-1<t&&t%1==0&&t<e}},382:function(t,e,n){var r=n(248),o=n(457),a=n(458),i=n(459),s=n(460),c=n(461);function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=s,u.prototype.set=c,t.exports=u},383:function(t,e,n){var i=n(474),s=n(138);t.exports=function t(e,n,r,o,a){return e===n||(null==e||null==n||!s(e)&&!s(n)?e!=e&&n!=n:i(e,n,r,o,t,a))}},436:function(t,e,n){var r=n(373),o=n(437),a=n(89),i=n(374),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,p=c.toString,f=u.hasOwnProperty,l=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||o(t))&&(r(t)?l:s).test(i(t))}},437:function(t,e,n){var r,o=n(438),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},438:function(t,e,n){var r=n(72)["__core-js_shared__"];t.exports=r},439:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},440:function(t,e,n){var p=n(441),f=n(380),l=n(104),h=n(375),d=n(381),v=n(376),b=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=l(t),r=!n&&f(t),o=!n&&!r&&h(t),a=!n&&!r&&!o&&v(t),i=n||r||o||a,s=i?p(t.length,String):[],c=s.length;for(var u in t)!e&&!b.call(t,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||d(u,c))||s.push(u);return s}},441:function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},442:function(t,e,n){var r=n(137),o=n(138);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},443:function(t,e){t.exports=function(){return!1}},444:function(t,e,n){var r=n(137),o=n(283),a=n(138),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&o(t.length)&&!!i[r(t)]}},445:function(t,e){t.exports=function(e){return function(t){return e(t)}}},446:function(t,i,s){(function(t){var e=s(252),n=i&&!i.nodeType&&i,r=n&&"object"==typeof t&&t&&!t.nodeType&&t,o=r&&r.exports===n&&e.process,a=function(){try{var t=r&&r.require&&r.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=a}).call(this,s(235)(t))},447:function(t,e,n){var r=n(448),o=n(449),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},448:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},449:function(t,e,n){var r=n(450)(Object.keys,Object);t.exports=r},450:function(t,e){t.exports=function(e,n){return function(t){return e(n(t))}}},451:function(t,e,n){var r=n(373),o=n(283);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},452:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},453:function(t,e,n){var r=n(249),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():o.call(e,n,1),--this.size,0))}},454:function(t,e,n){var r=n(249);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},455:function(t,e,n){var r=n(249);t.exports=function(t){return-1<r(this.__data__,t)}},456:function(t,e,n){var o=n(249);t.exports=function(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}},457:function(t,e,n){var r=n(248);t.exports=function(){this.__data__=new r,this.size=0}},458:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},459:function(t,e){t.exports=function(t){return this.__data__.get(t)}},460:function(t,e){t.exports=function(t){return this.__data__.has(t)}},461:function(t,e,n){var o=n(248),a=n(281),i=n(284);t.exports=function(t,e){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!a||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(r)}return n.set(t,e),this.size=n.size,this}},462:function(t,e,n){var r=n(463),o=n(248),a=n(281);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},463:function(t,e,n){var r=n(464),o=n(465),a=n(466),i=n(467),s=n(468);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},464:function(t,e,n){var r=n(250);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},465:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},466:function(t,e,n){var r=n(250),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},467:function(t,e,n){var r=n(250),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},468:function(t,e,n){var r=n(250);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},469:function(t,e,n){var r=n(251);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},470:function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},471:function(t,e,n){var r=n(251);t.exports=function(t){return r(this,t).get(t)}},472:function(t,e,n){var r=n(251);t.exports=function(t){return r(this,t).has(t)}},473:function(t,e,n){var o=n(251);t.exports=function(t,e){var n=o(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}},474:function(t,e,n){var g=n(382),_=n(378),j=n(480),y=n(484),m=n(491),O=n(104),x=n(375),w=n(376),A="[object Arguments]",M="[object Array]",S="[object Object]",z=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,r,o,a){var i=O(t),s=O(e),c=i?M:m(t),u=s?M:m(e),p=(c=c==A?S:c)==S,f=(u=u==A?S:u)==S,l=c==u;if(l&&x(t)){if(!x(e))return!1;p=!(i=!0)}if(l&&!p)return a||(a=new g),i||w(t)?_(t,e,n,r,o,a):j(t,e,c,n,r,o,a);if(!(1&n)){var h=p&&z.call(t,"__wrapped__"),d=f&&z.call(e,"__wrapped__");if(h||d){var v=h?t.value():t,b=d?e.value():e;return a||(a=new g),o(v,b,n,r,a)}}return!!l&&(a||(a=new g),y(t,e,n,r,o,a))}},475:function(t,e,n){var r=n(284),o=n(476),a=n(477);function i(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}i.prototype.add=i.prototype.push=o,i.prototype.has=a,t.exports=i},476:function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},477:function(t,e){t.exports=function(t){return this.__data__.has(t)}},478:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},479:function(t,e){t.exports=function(t,e){return t.has(e)}},480:function(t,e,n){var r=n(141),f=n(481),l=n(377),h=n(378),d=n(482),v=n(483),o=r?r.prototype:void 0,b=o?o.valueOf:void 0;t.exports=function(t,e,n,r,o,a,i){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new f(t),new f(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return l(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var s=d;case"[object Set]":var c=1&r;if(s||(s=v),t.size!=e.size&&!c)return!1;var u=i.get(t);if(u)return u==e;r|=2,i.set(t,e);var p=h(s(t),s(e),r,o,a,i);return i.delete(t),p;case"[object Symbol]":if(b)return b.call(t)==b.call(e)}return!1}},481:function(t,e,n){var r=n(72).Uint8Array;t.exports=r},482:function(t,e){t.exports=function(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}},483:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}},484:function(t,e,n){var j=n(485),y=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,r,o,a){var i=1&n,s=j(t),c=s.length;if(c!=j(e).length&&!i)return!1;for(var u=c;u--;){var p=s[u];if(!(i?p in e:y.call(e,p)))return!1}var f=a.get(t);if(f&&a.get(e))return f==e;var l=!0;a.set(t,e),a.set(e,t);for(var h=i;++u<c;){var d=t[p=s[u]],v=e[p];if(r)var b=i?r(v,d,p,e,t,a):r(d,v,p,t,e,a);if(!(void 0===b?d===v||o(d,v,n,r,a):b)){l=!1;break}h||(h="constructor"==p)}if(l&&!h){var g=t.constructor,_=e.constructor;g!=_&&"constructor"in t&&"constructor"in e&&!("function"==typeof g&&g instanceof g&&"function"==typeof _&&_ instanceof _)&&(l=!1)}return a.delete(t),a.delete(e),l}},485:function(t,e,n){var r=n(486),o=n(488),a=n(342);t.exports=function(t){return r(t,a,o)}},486:function(t,e,n){var o=n(487),a=n(104);t.exports=function(t,e,n){var r=e(t);return a(t)?r:o(r,n(t))}},487:function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},488:function(t,e,n){var r=n(489),o=n(490),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(e){return null==e?[]:(e=Object(e),r(i(e),function(t){return a.call(e,t)}))}:o;t.exports=s},489:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,a=[];++n<r;){var i=t[n];e(i,n,t)&&(a[o++]=i)}return a}},490:function(t,e){t.exports=function(){return[]}},491:function(t,e,n){var r=n(492),o=n(281),a=n(493),i=n(494),s=n(495),c=n(137),u=n(374),p="[object Map]",f="[object Promise]",l="[object Set]",h="[object WeakMap]",d="[object DataView]",v=u(r),b=u(o),g=u(a),_=u(i),j=u(s),y=c;(r&&y(new r(new ArrayBuffer(1)))!=d||o&&y(new o)!=p||a&&y(a.resolve())!=f||i&&y(new i)!=l||s&&y(new s)!=h)&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case v:return d;case b:return p;case g:return f;case _:return l;case j:return h}return e}),t.exports=y},492:function(t,e,n){var r=n(136)(n(72),"DataView");t.exports=r},493:function(t,e,n){var r=n(136)(n(72),"Promise");t.exports=r},494:function(t,e,n){var r=n(136)(n(72),"Set");t.exports=r},495:function(t,e,n){var r=n(136)(n(72),"WeakMap");t.exports=r},707:function(t,e,n){"use strict";n.r(e);var r,o,s=n(0),a=n(2),i=n(6),c=n(1),u=n(970),p=n.n(u),f=n(3),l=n.n(f),h=n(21),d=n(904),v=n(633),b=n(628),g=n(7),_=n(362),j=n.n(_),y=n(971),m=n.n(y),O=Object(g.f)({placeholder:{id:"hashtag.column_settings.select.placeholder",defaultMessage:"Enter hashtags…"},noOptions:{id:"hashtag.column_settings.select.no_options_message",defaultMessage:"No suggestions found"}}),x=Object(g.g)(r=function(o){function t(){for(var n,t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return n=o.call.apply(o,[this].concat(e))||this,Object(c.a)(Object(a.a)(n),"state",{open:n.hasTags()}),Object(c.a)(Object(a.a)(n),"onSelect",function(e){return function(t){return n.props.onChange(["tags",e],t)}}),Object(c.a)(Object(a.a)(n),"onToggle",function(){n.state.open&&n.hasTags()&&n.props.onChange("tags",{}),n.setState({open:!n.state.open})}),Object(c.a)(Object(a.a)(n),"noOptionsMessage",function(){return n.props.intl.formatMessage(O.noOptions)}),n}Object(i.a)(t,o);var e=t.prototype;return e.hasTags=function(){var e=this;return["all","any","none"].map(function(t){return 0<e.tags(t).length}).includes(!0)},e.tags=function(t){var e=this.props.settings.getIn(["tags",t])||[];return e.toJSON?e.toJSON():e},e.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)(m.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(O.placeholder),noOptionsMessage:this.noOptionsMessage}))},e.modeLabel=function(t){switch(t){case"any":return Object(s.a)(g.b,{id:"hashtag.column_settings.tag_mode.any",defaultMessage:"Any of these"});case"all":return Object(s.a)(g.b,{id:"hashtag.column_settings.tag_mode.all",defaultMessage:"All of these"});case"none":return Object(s.a)(g.b,{id:"hashtag.column_settings.tag_mode.none",defaultMessage:"None of these"});default:return""}},e.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)(j.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)(g.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")))},t}(l.a.PureComponent))||r,w=n(222),A=n(9),M=Object(h.connect)(function(t,e){var n=e.columnId,r=t.getIn(["settings","columns"]),o=r.findIndex(function(t){return t.get("uuid")===n});return n&&0<=o?{settings:r.get(o).get("params")}:{}},function(n,t){var r=t.columnId;return{onChange:function(t,e){n(Object(w.f)(r,t,e))},onLoad:function(t){return Object(A.a)().get("/api/v2/search",{params:{q:t}}).then(function(t){return(t.data.hashtags||[]).map(function(t){return{value:t.name,label:"#"+t.name}})})}}})(x),S=n(35),z=n(635);n.d(e,"default",function(){return P});var P=Object(h.connect)(function(t,e){return{hasUnread:0<t.getIn(["timelines","hashtag:"+e.params.id,"unread"])}})(o=function(r){function t(){for(var o,t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return o=r.call.apply(r,[this].concat(e))||this,Object(c.a)(Object(a.a)(o),"disconnects",[]),Object(c.a)(Object(a.a)(o),"handlePin",function(){var t=o.props,e=t.columnId,n=t.dispatch;n(e?Object(w.h)(e):Object(w.e)("HASHTAG",{id:o.props.params.id}))}),Object(c.a)(Object(a.a)(o),"title",function(){var t=[o.props.params.id];return o.additionalFor("any")&&t.push(" ",Object(s.a)(g.b,{id:"hashtag.column_header.tag_mode.any",values:{additional:o.additionalFor("any")},defaultMessage:"or {additional}"},"any")),o.additionalFor("all")&&t.push(" ",Object(s.a)(g.b,{id:"hashtag.column_header.tag_mode.all",values:{additional:o.additionalFor("all")},defaultMessage:"and {additional}"},"all")),o.additionalFor("none")&&t.push(" ",Object(s.a)(g.b,{id:"hashtag.column_header.tag_mode.none",values:{additional:o.additionalFor("none")},defaultMessage:"without {additional}"},"none")),t}),Object(c.a)(Object(a.a)(o),"additionalFor",function(t){var e=o.props.params.tags;return e&&0<(e[t]||[]).length?e[t].map(function(t){return t.value}).join("/"):""}),Object(c.a)(Object(a.a)(o),"handleMove",function(t){var e=o.props,n=e.columnId;(0,e.dispatch)(Object(w.g)(n,t))}),Object(c.a)(Object(a.a)(o),"handleHeaderClick",function(){o.column.scrollTop()}),Object(c.a)(Object(a.a)(o),"setRef",function(t){o.column=t}),Object(c.a)(Object(a.a)(o),"handleLoadMore",function(t){var e=o.props.params,n=e.id,r=e.tags;o.props.dispatch(Object(S.r)(n,{maxId:t,tags:r}))}),o}Object(i.a)(t,r);var e=t.prototype;return e._subscribe=function(e,n,t){var r=this;void 0===t&&(t={});var o=(t.any||[]).map(function(t){return t.value}),a=(t.all||[]).map(function(t){return t.value}),i=(t.none||[]).map(function(t){return t.value});[n].concat(o).map(function(t){r.disconnects.push(e(Object(z.c)(n,t,function(t){var e=t.tags.map(function(t){return t.name});return a.filter(function(t){return e.includes(t)}).length===a.length&&0===i.filter(function(t){return e.includes(t)}).length})))})},e._unsubscribe=function(){this.disconnects.map(function(t){return t()}),this.disconnects=[]},e.componentDidMount=function(){var t=this.props.dispatch,e=this.props.params,n=e.id,r=e.tags;this._subscribe(t,n,r),t(Object(S.r)(n,{tags:r}))},e.componentWillReceiveProps=function(t){var e=this.props,n=e.dispatch,r=e.params,o=t.params,a=o.id,i=o.tags;a===r.id&&p()(i,r.tags)||(this._unsubscribe(),this._subscribe(n,a,i),this.props.dispatch(Object(S.j)("hashtag:"+a)),this.props.dispatch(Object(S.r)(a,{tags:i})))},e.componentWillUnmount=function(){this._unsubscribe()},e.render=function(){var t=this.props,e=t.shouldUpdateScroll,n=t.hasUnread,r=t.columnId,o=t.multiColumn,a=this.props.params.id,i=!!r;return l.a.createElement(v.a,{ref:this.setRef,label:"#"+a},Object(s.a)(b.a,{icon:"hashtag",active:n,title:this.title(),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:i,multiColumn:o,showBackButton:!0},void 0,r&&Object(s.a)(M,{columnId:r})),Object(s.a)(d.a,{trackScroll:!i,scrollKey:"hashtag_timeline-"+r,timelineId:"hashtag:"+a,onLoadMore:this.handleLoadMore,emptyMessage:Object(s.a)(g.b,{id:"empty_column.hashtag",defaultMessage:"There is nothing in this hashtag yet."}),shouldUpdateScroll:e}))},t}(l.a.PureComponent))||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{115:function(t,e){var n=Array.isArray;t.exports=n},151:function(t,e,n){var r=n(469),o=n(472);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},269:function(t,e,n){var r=n(485),o=n(486),a=n(487),i=n(488),s=n(489);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},270:function(t,e,n){var r=n(401);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},271:function(t,e,n){var r=n(151)(Object,"create");t.exports=r},272:function(t,e,n){var r=n(503);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},315:function(t,e,n){var r=n(151)(n(77),"Map");t.exports=r},317:function(t,e){var n=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}},318:function(t,e,n){var r=n(495),o=n(502),a=n(504),i=n(505),s=n(506);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},375:function(t,e,n){var r=n(473),o=n(480),a=n(484);t.exports=function(t){return a(t)?r(t):o(t)}},397:function(t,e,n){var r=n(152),o=n(96),a="[object AsyncFunction]",i="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!o(t))return!1;var e=r(t);return e==i||e==s||e==a||e==c}},398:function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},399:function(t,e,n){(function(t){var r=n(77),o=n(476),a=e&&!e.nodeType&&e,i=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||o;t.exports=c}).call(this,n(226)(t))},400:function(t,e,n){var r=n(477),o=n(478),a=n(479),i=a&&a.isTypedArray,s=i?o(i):r;t.exports=s},401:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},402:function(t,e,n){var r=n(508),o=n(511),a=n(512),i=1,s=2;t.exports=function(t,e,n,c,u,p){var f=n&i,l=t.length,h=e.length;if(l!=h&&!(f&&h>l))return!1;var d=p.get(t);if(d&&p.get(e))return d==e;var b=-1,v=!0,g=n&s?new r:void 0;for(p.set(t,e),p.set(e,t);++b<l;){var _=t[b],j=e[b];if(c)var y=f?c(j,_,b,e,t,p):c(_,j,b,t,e,p);if(void 0!==y){if(y)continue;v=!1;break}if(g){if(!o(e,function(t,e){if(!a(g,e)&&(_===t||u(_,t,n,c,p)))return g.push(e)})){v=!1;break}}else if(_!==j&&!u(_,j,n,c,p)){v=!1;break}}return p.delete(t),p.delete(e),v}},403:function(t,e,n){var r=n(475),o=n(153),a=Object.prototype,i=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&i.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},404:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var o=typeof t;return!!(e=null==e?n:e)&&("number"==o||"symbol"!=o&&r.test(t))&&t>-1&&t%1==0&&t<e}},405:function(t,e,n){var r=n(269),o=n(490),a=n(491),i=n(492),s=n(493),c=n(494);function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=s,u.prototype.set=c,t.exports=u},406:function(t,e,n){var r=n(507),o=n(153);t.exports=function t(e,n,a,i,s){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,a,i,t,s))}},469:function(t,e,n){var r=n(397),o=n(470),a=n(96),i=n(398),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,p=c.toString,f=u.hasOwnProperty,l=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||o(t))&&(r(t)?l:s).test(i(t))}},470:function(t,e,n){var r,o=n(471),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},471:function(t,e,n){var r=n(77)["__core-js_shared__"];t.exports=r},472:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},473:function(t,e,n){var r=n(474),o=n(403),a=n(115),i=n(399),s=n(404),c=n(400),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),p=!n&&o(t),f=!n&&!p&&i(t),l=!n&&!p&&!f&&c(t),h=n||p||f||l,d=h?r(t.length,String):[],b=d.length;for(var v in t)!e&&!u.call(t,v)||h&&("length"==v||f&&("offset"==v||"parent"==v)||l&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||s(v,b))||d.push(v);return d}},474:function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},475:function(t,e,n){var r=n(152),o=n(153),a="[object Arguments]";t.exports=function(t){return o(t)&&r(t)==a}},476:function(t,e){t.exports=function(){return!1}},477:function(t,e,n){var r=n(152),o=n(317),a=n(153),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&o(t.length)&&!!i[r(t)]}},478:function(t,e){t.exports=function(t){return function(e){return t(e)}}},479:function(t,e,n){(function(t){var r=n(273),o=e&&!e.nodeType&&e,a=o&&"object"==typeof t&&t&&!t.nodeType&&t,i=a&&a.exports===o&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||i&&i.binding&&i.binding("util")}catch(t){}}();t.exports=s}).call(this,n(226)(t))},480:function(t,e,n){var r=n(481),o=n(482),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},481:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},482:function(t,e,n){var r=n(483)(Object.keys,Object);t.exports=r},483:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},484:function(t,e,n){var r=n(397),o=n(317);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},485:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},486:function(t,e,n){var r=n(270),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},487:function(t,e,n){var r=n(270);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},488:function(t,e,n){var r=n(270);t.exports=function(t){return r(this.__data__,t)>-1}},489:function(t,e,n){var r=n(270);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},490:function(t,e,n){var r=n(269);t.exports=function(){this.__data__=new r,this.size=0}},491:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},492:function(t,e){t.exports=function(t){return this.__data__.get(t)}},493:function(t,e){t.exports=function(t){return this.__data__.has(t)}},494:function(t,e,n){var r=n(269),o=n(315),a=n(318),i=200;t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<i-1)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(s)}return n.set(t,e),this.size=n.size,this}},495:function(t,e,n){var r=n(496),o=n(269),a=n(315);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},496:function(t,e,n){var r=n(497),o=n(498),a=n(499),i=n(500),s=n(501);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=a,c.prototype.has=i,c.prototype.set=s,t.exports=c},497:function(t,e,n){var r=n(271);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},498:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},499:function(t,e,n){var r=n(271),o="__lodash_hash_undefined__",a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return n===o?void 0:n}return a.call(e,t)?e[t]:void 0}},500:function(t,e,n){var r=n(271),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},501:function(t,e,n){var r=n(271),o="__lodash_hash_undefined__";t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?o:e,this}},502:function(t,e,n){var r=n(272);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},503:function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},504:function(t,e,n){var r=n(272);t.exports=function(t){return r(this,t).get(t)}},505:function(t,e,n){var r=n(272);t.exports=function(t){return r(this,t).has(t)}},506:function(t,e,n){var r=n(272);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},507:function(t,e,n){var r=n(405),o=n(402),a=n(513),i=n(517),s=n(524),c=n(115),u=n(399),p=n(400),f=1,l="[object Arguments]",h="[object Array]",d="[object Object]",b=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,v,g,_){var j=c(t),y=c(e),m=j?h:s(t),O=y?h:s(e),x=(m=m==l?d:m)==d,w=(O=O==l?d:O)==d,M=m==O;if(M&&u(t)){if(!u(e))return!1;j=!0,x=!1}if(M&&!x)return _||(_=new r),j||p(t)?o(t,e,n,v,g,_):a(t,e,m,n,v,g,_);if(!(n&f)){var A=x&&b.call(t,"__wrapped__"),S=w&&b.call(e,"__wrapped__");if(A||S){var z=A?t.value():t,P=S?e.value():e;return _||(_=new r),g(z,P,n,v,_)}}return!!M&&(_||(_=new r),i(t,e,n,v,g,_))}},508:function(t,e,n){var r=n(318),o=n(509),a=n(510);function i(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}i.prototype.add=i.prototype.push=o,i.prototype.has=a,t.exports=i},509:function(t,e){var n="__lodash_hash_undefined__";t.exports=function(t){return this.__data__.set(t,n),this}},510:function(t,e){t.exports=function(t){return this.__data__.has(t)}},511:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},512:function(t,e){t.exports=function(t,e){return t.has(e)}},513:function(t,e,n){var r=n(155),o=n(514),a=n(401),i=n(402),s=n(515),c=n(516),u=1,p=2,f="[object Boolean]",l="[object Date]",h="[object Error]",d="[object Map]",b="[object Number]",v="[object RegExp]",g="[object Set]",_="[object String]",j="[object Symbol]",y="[object ArrayBuffer]",m="[object DataView]",O=r?r.prototype:void 0,x=O?O.valueOf:void 0;t.exports=function(t,e,n,r,O,w,M){switch(n){case m:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case y:return!(t.byteLength!=e.byteLength||!w(new o(t),new o(e)));case f:case l:case b:return a(+t,+e);case h:return t.name==e.name&&t.message==e.message;case v:case _:return t==e+"";case d:var A=s;case g:var S=r&u;if(A||(A=c),t.size!=e.size&&!S)return!1;var z=M.get(t);if(z)return z==e;r|=p,M.set(t,e);var P=i(A(t),A(e),r,O,w,M);return M.delete(t),P;case j:if(x)return x.call(t)==x.call(e)}return!1}},514:function(t,e,n){var r=n(77).Uint8Array;t.exports=r},515:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}},516:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}},517:function(t,e,n){var r=n(518),o=1,a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,s,c){var u=n&o,p=r(t),f=p.length;if(f!=r(e).length&&!u)return!1;for(var l=f;l--;){var h=p[l];if(!(u?h in e:a.call(e,h)))return!1}var d=c.get(t);if(d&&c.get(e))return d==e;var b=!0;c.set(t,e),c.set(e,t);for(var v=u;++l<f;){var g=t[h=p[l]],_=e[h];if(i)var j=u?i(_,g,h,e,t,c):i(g,_,h,t,e,c);if(!(void 0===j?g===_||s(g,_,n,i,c):j)){b=!1;break}v||(v="constructor"==h)}if(b&&!v){var y=t.constructor,m=e.constructor;y!=m&&"constructor"in t&&"constructor"in e&&!("function"==typeof y&&y instanceof y&&"function"==typeof m&&m instanceof m)&&(b=!1)}return c.delete(t),c.delete(e),b}},518:function(t,e,n){var r=n(519),o=n(521),a=n(375);t.exports=function(t){return r(t,a,o)}},519:function(t,e,n){var r=n(520),o=n(115);t.exports=function(t,e,n){var a=e(t);return o(t)?a:r(a,n(t))}},520:function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},521:function(t,e,n){var r=n(522),o=n(523),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(t){return null==t?[]:(t=Object(t),r(i(t),function(e){return a.call(t,e)}))}:o;t.exports=s},522:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,a=[];++n<r;){var i=t[n];e(i,n,t)&&(a[o++]=i)}return a}},523:function(t,e){t.exports=function(){return[]}},524:function(t,e,n){var r=n(525),o=n(315),a=n(526),i=n(527),s=n(528),c=n(152),u=n(398),p=u(r),f=u(o),l=u(a),h=u(i),d=u(s),b=c;(r&&"[object DataView]"!=b(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=b(new o)||a&&"[object Promise]"!=b(a.resolve())||i&&"[object Set]"!=b(new i)||s&&"[object WeakMap]"!=b(new s))&&(b=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case p:return"[object DataView]";case f:return"[object Map]";case l:return"[object Promise]";case h:return"[object Set]";case d:return"[object WeakMap]"}return e}),t.exports=b},525:function(t,e,n){var r=n(151)(n(77),"DataView");t.exports=r},526:function(t,e,n){var r=n(151)(n(77),"Promise");t.exports=r},527:function(t,e,n){var r=n(151)(n(77),"Set");t.exports=r},528:function(t,e,n){var r=n(151)(n(77),"WeakMap");t.exports=r},756:function(t,e,n){"use strict";n.r(e);var r,o,a=n(0),i=n(2),s=n(7),c=n(1),u=n(1062),p=n.n(u),f=n(3),l=n.n(f),h=n(12),d=n(977),b=n(669),v=n(665),g=n(6),_=n(295),j=n.n(_),y=n(1063),m=n.n(y),O=Object(g.f)({placeholder:{id:"hashtag.column_settings.select.placeholder",defaultMessage:"Enter hashtags…"},noOptions:{id:"hashtag.column_settings.select.no_options_message",defaultMessage:"No suggestions found"}}),x=Object(g.g)(r=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return e=t.call.apply(t,[this].concat(r))||this,Object(c.a)(Object(i.a)(e),"state",{open:e.hasTags()}),Object(c.a)(Object(i.a)(e),"onSelect",function(t){return function(n){return e.props.onChange(["tags",t],n)}}),Object(c.a)(Object(i.a)(e),"onToggle",function(){e.state.open&&e.hasTags()&&e.props.onChange("tags",{}),e.setState({open:!e.state.open})}),Object(c.a)(Object(i.a)(e),"noOptionsMessage",function(){return e.props.intl.formatMessage(O.noOptions)}),e}Object(s.a)(e,t);var n=e.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(a.a)("div",{className:"column-settings__row"},void 0,Object(a.a)("span",{className:"column-settings__section"},void 0,this.modeLabel(t)),Object(a.a)(m.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(O.placeholder),noOptionsMessage:this.noOptionsMessage}))},n.modeLabel=function(t){switch(t){case"any":return Object(a.a)(g.b,{id:"hashtag.column_settings.tag_mode.any",defaultMessage:"Any of these"});case"all":return Object(a.a)(g.b,{id:"hashtag.column_settings.tag_mode.all",defaultMessage:"All of these"});case"none":return Object(a.a)(g.b,{id:"hashtag.column_settings.tag_mode.none",defaultMessage:"None of these"});default:return""}},n.render=function(){return Object(a.a)("div",{},void 0,Object(a.a)("div",{className:"column-settings__row"},void 0,Object(a.a)("div",{className:"setting-toggle"},void 0,Object(a.a)(j.a,{id:"hashtag.column_settings.tag_toggle",onChange:this.onToggle,checked:this.state.open}),Object(a.a)("span",{className:"setting-toggle__label"},void 0,Object(a.a)(g.b,{id:"hashtag.column_settings.tag_toggle",defaultMessage:"Include additional tags in this column"})))),this.state.open&&Object(a.a)("div",{className:"column-settings__hashtags"},void 0,this.modeSelect("any"),this.modeSelect("all"),this.modeSelect("none")))},e}(l.a.PureComponent))||r,w=n(245),M=n(9),A=Object(h.connect)(function(t,e){var n=e.columnId,r=t.getIn(["settings","columns"]),o=r.findIndex(function(t){return t.get("uuid")===n});return n&&o>=0?{settings:r.get(o).get("params")}:{}},function(t,e){var n=e.columnId;return{onChange:function(e,r){t(Object(w.f)(n,e,r))},onLoad:function(t){return Object(M.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}})})}}})(x),S=n(35),z=n(672);n.d(e,"default",function(){return P});var P=Object(h.connect)(function(t,e){return{hasUnread:t.getIn(["timelines","hashtag:"+e.params.id,"unread"])>0}})(o=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return e=t.call.apply(t,[this].concat(r))||this,Object(c.a)(Object(i.a)(e),"disconnects",[]),Object(c.a)(Object(i.a)(e),"handlePin",function(){var t=e.props,n=t.columnId,r=t.dispatch;r(n?Object(w.h)(n):Object(w.e)("HASHTAG",{id:e.props.params.id}))}),Object(c.a)(Object(i.a)(e),"title",function(){var t=[e.props.params.id];return e.additionalFor("any")&&t.push(" ",Object(a.a)(g.b,{id:"hashtag.column_header.tag_mode.any",values:{additional:e.additionalFor("any")},defaultMessage:"or {additional}"},"any")),e.additionalFor("all")&&t.push(" ",Object(a.a)(g.b,{id:"hashtag.column_header.tag_mode.all",values:{additional:e.additionalFor("all")},defaultMessage:"and {additional}"},"all")),e.additionalFor("none")&&t.push(" ",Object(a.a)(g.b,{id:"hashtag.column_header.tag_mode.none",values:{additional:e.additionalFor("none")},defaultMessage:"without {additional}"},"none")),t}),Object(c.a)(Object(i.a)(e),"additionalFor",function(t){var n=e.props.params.tags;return n&&(n[t]||[]).length>0?n[t].map(function(t){return t.value}).join("/"):""}),Object(c.a)(Object(i.a)(e),"handleMove",function(t){var n=e.props,r=n.columnId;(0,n.dispatch)(Object(w.g)(r,t))}),Object(c.a)(Object(i.a)(e),"handleHeaderClick",function(){e.column.scrollTop()}),Object(c.a)(Object(i.a)(e),"setRef",function(t){e.column=t}),Object(c.a)(Object(i.a)(e),"handleLoadMore",function(t){var n=e.props.params,r=n.id,o=n.tags;e.props.dispatch(Object(S.s)(r,{maxId:t,tags:o}))}),e}Object(s.a)(e,t);var n=e.prototype;return n._subscribe=function(t,e,n){var r=this;void 0===n&&(n={});var o=(n.any||[]).map(function(t){return t.value}),a=(n.all||[]).map(function(t){return t.value}),i=(n.none||[]).map(function(t){return t.value});[e].concat(o).map(function(n){r.disconnects.push(t(Object(z.c)(e,n,function(t){var e=t.tags.map(function(t){return t.name});return a.filter(function(t){return e.includes(t)}).length===a.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,n=e.id,r=e.tags;this._subscribe(t,n,r),t(Object(S.s)(n,{tags:r}))},n.componentWillReceiveProps=function(t){var e=this.props,n=e.dispatch,r=e.params,o=t.params,a=o.id,i=o.tags;a===r.id&&p()(i,r.tags)||(this._unsubscribe(),this._subscribe(n,a,i),this.props.dispatch(Object(S.k)("hashtag:"+a)),this.props.dispatch(Object(S.s)(a,{tags:i})))},n.componentWillUnmount=function(){this._unsubscribe()},n.render=function(){var t=this.props,e=t.shouldUpdateScroll,n=t.hasUnread,r=t.columnId,o=t.multiColumn,i=this.props.params.id,s=!!r;return l.a.createElement(b.a,{bindToDocument:!o,ref:this.setRef,label:"#"+i},Object(a.a)(v.a,{icon:"hashtag",active:n,title:this.title(),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:s,multiColumn:o,showBackButton:!0},void 0,r&&Object(a.a)(A,{columnId:r})),Object(a.a)(d.a,{trackScroll:!s,scrollKey:"hashtag_timeline-"+r,timelineId:"hashtag:"+i,onLoadMore:this.handleLoadMore,emptyMessage:Object(a.a)(g.b,{id:"empty_column.hashtag",defaultMessage:"There is nothing in this hashtag yet."}),shouldUpdateScroll:e,bindToDocument:!o}))},e}(l.a.PureComponent))||o}}]); //# sourceMappingURL=hashtag_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/hashtag_timeline.js.map b/priv/static/packs/features/hashtag_timeline.js.map index d3b0cb48b..6f209c8fb 100644 --- a/priv/static/packs/features/hashtag_timeline.js.map +++ b/priv/static/packs/features/hashtag_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/index.js"],"names":["isArray","Array","module","exports","baseIsNative","__webpack_require__","getValue","object","key","value","undefined","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","index","length","this","clear","entry","set","prototype","get","has","eq","array","nativeCreate","getNative","Object","isKeyable","map","data","__data__","Map","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayLikeKeys","baseKeys","isArrayLike","baseGetTag","isObject","tag","funcToString","Function","toString","func","call","e","root","stubFalse","freeExports","nodeType","freeModule","Buffer","isBuffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","other","SetCache","arraySome","cacheHas","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","result","seen","arrValue","othValue","compared","othIndex","push","baseIsArguments","isObjectLike","objectProto","hasOwnProperty","propertyIsEnumerable","isArguments","arguments","reIsUint","type","test","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","size","baseIsEqualDeep","baseIsEqual","isFunction","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","RegExp","replace","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","baseTimes","isIndex","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","n","iteratee","isLength","typedArrayTags","freeGlobal","freeProcess","process","types","require","binding","isPrototype","nativeKeys","Ctor","constructor","overArg","transform","arg","assocIndexOf","splice","pop","pairs","LARGE_ARRAY_SIZE","Hash","hash","string","hashClear","hashDelete","hashGet","hashHas","hashSet","getMapData","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","setCacheAdd","setCacheHas","values","add","predicate","cache","Symbol","Uint8Array","mapToArray","setToArray","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","forEach","getAllKeys","objProps","objLength","skipCtor","objValue","objCtor","othCtor","baseGetAllKeys","getSymbols","arrayPush","keysFunc","symbolsFunc","offset","arrayFilter","stubArray","nativeGetSymbols","getOwnPropertySymbols","symbol","resIndex","DataView","Promise","Set","WeakMap","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","resolve","ctorString","messages","defineMessages","placeholder","id","defaultMessage","noOptions","ColumnSettings","injectIntl","open","_this","hasTags","mode","props","onChange","state","setState","intl","formatMessage","_this2","tags","includes","settings","getIn","toJSON","modeSelect","jsx","className","modeLabel","Async_default","a","isMulti","autoFocus","onSelect","loadOptions","onLoad","classNamePrefix","noOptionsMessage","index_es","render","component_default","onToggle","checked","React","PureComponent","connect","_ref","columnId","columns","findIndex","c","dispatch","_ref2","changeColumnParams","api","params","q","then","response","hashtags","label","HashtagTimeline","hasUnread","_this$props","removeColumn","addColumn","title","additionalFor","additional","join","dir","_this$props2","moveColumn","column","scrollTop","maxId","_this$props$params","expandHashtagTimeline","_subscribe","any","all","none","concat","disconnects","connectHashtagStream","status","filter","_unsubscribe","disconnect","componentDidMount","_this$props$params2","componentWillReceiveProps","nextProps","_this$props3","_nextProps$params","isEqual_default","clearTimeline","componentWillUnmount","_this$props4","shouldUpdateScroll","multiColumn","pinned","react_default","createElement","ref","setRef","column_header","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","column_settings_container","status_list_container","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage"],"mappings":"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","file":"features/hashtag_timeline.js","sourcesContent":["/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\nmodule.exports = isArray;","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nmodule.exports = ListCache;","var eq = require('./eq');\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n\nmodule.exports = assocIndexOf;","var getNative = require('./_getNative');\n/* Built-in method references that are verified to be native. */\n\n\nvar nativeCreate = getNative(Object, 'create');\nmodule.exports = nativeCreate;","var isKeyable = require('./_isKeyable');\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\n\nmodule.exports = getMapData;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Map = getNative(root, 'Map');\nmodule.exports = Map;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nmodule.exports = MapCache;","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n/** `Object#toString` result references. */\n\n\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n\nmodule.exports = toSource;","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? root.Buffer : undefined;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\nvar isBuffer = nativeIsBuffer || stubFalse;\nmodule.exports = isBuffer;","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n/* Node.js helper references. */\n\n\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nmodule.exports = isTypedArray;","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n\nmodule.exports = eq;","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(array);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\nvar isArguments = baseIsArguments(function () {\n return arguments;\n}()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\nmodule.exports = isArguments;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n} // Add methods to `Stack`.\n\n\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nmodule.exports = Stack;","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\n\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;","var coreJsData = require('./_coreJsData');\n/** Used to detect methods masquerading as native. */\n\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n\nmodule.exports = isMasked;","var root = require('./_root');\n/** Used to detect overreaching core-js shims. */\n\n\nvar coreJsData = root['__core-js_shared__'];\nmodule.exports = coreJsData;","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayLikeKeys;","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n\nmodule.exports = baseTimes;","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;","var freeGlobal = require('./_freeGlobal');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && freeGlobal.process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n\nmodule.exports = nodeUtil;","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = baseKeys;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n\nmodule.exports = isPrototype;","var overArg = require('./_overArg');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeKeys = overArg(Object.keys, Object);\nmodule.exports = nativeKeys;","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\n\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;","var assocIndexOf = require('./_assocIndexOf');\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype;\n/** Built-in value references. */\n\nvar splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n}\n\nmodule.exports = listCacheSet;","var ListCache = require('./_ListCache');\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\nfunction stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n}\n\nmodule.exports = stackClear;","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n/** Used as the size to enable large array optimizations. */\n\n\nvar LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n\nmodule.exports = mapCacheClear;","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nmodule.exports = Hash;","var nativeCreate = require('./_nativeCreate');\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;","var nativeCreate = require('./_nativeCreate');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;","var getMapData = require('./_getMapData');\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n\nmodule.exports = isKeyable;","var getMapData = require('./_getMapData');\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;","var getMapData = require('./_getMapData');\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;","var getMapData = require('./_getMapData');\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\n\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n} // Add methods to `SetCache`.\n\n\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\nmodule.exports = SetCache;","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n}\n\nmodule.exports = setCacheAdd;","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n}\n\nmodule.exports = arraySome;","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */\n\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n}\n\nmodule.exports = equalByTag;","var root = require('./_root');\n/** Built-in value references. */\n\n\nvar Uint8Array = root.Uint8Array;\nmodule.exports = Uint8Array;","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;","var getAllKeys = require('./_getAllKeys');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n\nmodule.exports = arrayPush;","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\nmodule.exports = getSymbols;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayFilter;","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n/** `Object#toString` result references. */\n\n\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nmodule.exports = getTag;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar DataView = getNative(root, 'DataView');\nmodule.exports = DataView;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Promise = getNative(root, 'Promise');\nmodule.exports = Promise;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Set = getNative(root, 'Set');\nmodule.exports = Set;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar WeakMap = getNative(root, 'WeakMap');\nmodule.exports = WeakMap;","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/lib/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 '../../../actions/columns';\nimport api from '../../../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 } }).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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { expandHashtagTimeline, clearTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { FormattedMessage } from 'react-intl';\nimport { connectHashtagStream } from '../../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 shouldUpdateScroll: PropTypes.func,\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 { shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} 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 >\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 shouldUpdateScroll={shouldUpdateScroll}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"sources":["webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/hashtag_timeline/index.js"],"names":["isArray","Array","module","exports","baseIsNative","getValue","object","key","value","undefined","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","index","length","this","clear","entry","set","prototype","get","has","eq","array","nativeCreate","getNative","Object","isKeyable","map","data","__data__","Map","MAX_SAFE_INTEGER","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayLikeKeys","baseKeys","isArrayLike","baseGetTag","isObject","asyncTag","funcTag","genTag","proxyTag","tag","funcToString","Function","toString","func","call","e","stubFalse","freeExports","nodeType","freeModule","Buffer","root","isBuffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","other","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","result","seen","arrValue","othValue","compared","othIndex","push","baseIsArguments","isObjectLike","objectProto","hasOwnProperty","propertyIsEnumerable","isArguments","arguments","reIsUint","type","test","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","size","baseIsEqualDeep","baseIsEqual","isFunction","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","RegExp","replace","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","baseTimes","isIndex","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","n","iteratee","argsTag","isLength","typedArrayTags","freeProcess","freeGlobal","process","types","require","binding","isPrototype","nativeKeys","Ctor","constructor","overArg","transform","arg","assocIndexOf","splice","pop","LARGE_ARRAY_SIZE","pairs","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","HASH_UNDEFINED","getMapData","equalArrays","equalByTag","equalObjects","getTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","setCacheAdd","setCacheHas","values","add","predicate","cache","Symbol","Uint8Array","mapToArray","setToArray","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","forEach","getAllKeys","objProps","objLength","skipCtor","objValue","objCtor","othCtor","baseGetAllKeys","getSymbols","arrayPush","keysFunc","symbolsFunc","offset","arrayFilter","stubArray","nativeGetSymbols","getOwnPropertySymbols","symbol","resIndex","DataView","Promise","Set","WeakMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","resolve","ctorString","messages","defineMessages","placeholder","noOptions","ColumnSettings","injectIntl","open","hasTags","mode","props","onChange","state","setState","intl","formatMessage","tags","includes","settings","getIn","toJSON","modeSelect","className","modeLabel","isMulti","autoFocus","onSelect","loadOptions","onLoad","classNamePrefix","noOptionsMessage","id","defaultMessage","render","onToggle","checked","React","PureComponent","connect","columnId","columns","findIndex","c","dispatch","changeColumnParams","api","params","q","then","response","hashtags","label","HashtagTimeline","hasUnread","removeColumn","addColumn","title","additionalFor","additional","join","dir","moveColumn","column","scrollTop","maxId","expandHashtagTimeline","_subscribe","any","all","none","disconnects","connectHashtagStream","status","filter","_unsubscribe","disconnect","componentDidMount","componentWillReceiveProps","nextProps","clearTimeline","componentWillUnmount","shouldUpdateScroll","multiColumn","pinned","bindToDocument","ref","setRef","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","showBackButton","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage"],"mappings":"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","file":"features/hashtag_timeline.js","sourcesContent":["/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\nmodule.exports = isArray;","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nmodule.exports = ListCache;","var eq = require('./eq');\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n\nmodule.exports = assocIndexOf;","var getNative = require('./_getNative');\n/* Built-in method references that are verified to be native. */\n\n\nvar nativeCreate = getNative(Object, 'create');\nmodule.exports = nativeCreate;","var isKeyable = require('./_isKeyable');\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\n\nmodule.exports = getMapData;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Map = getNative(root, 'Map');\nmodule.exports = Map;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nmodule.exports = MapCache;","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n/** `Object#toString` result references. */\n\n\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n\nmodule.exports = toSource;","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? root.Buffer : undefined;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\nvar isBuffer = nativeIsBuffer || stubFalse;\nmodule.exports = isBuffer;","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n/* Node.js helper references. */\n\n\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nmodule.exports = isTypedArray;","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n\nmodule.exports = eq;","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(array);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\nvar isArguments = baseIsArguments(function () {\n return arguments;\n}()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\nmodule.exports = isArguments;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n} // Add methods to `Stack`.\n\n\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nmodule.exports = Stack;","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\n\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;","var coreJsData = require('./_coreJsData');\n/** Used to detect methods masquerading as native. */\n\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n\nmodule.exports = isMasked;","var root = require('./_root');\n/** Used to detect overreaching core-js shims. */\n\n\nvar coreJsData = root['__core-js_shared__'];\nmodule.exports = coreJsData;","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayLikeKeys;","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n\nmodule.exports = baseTimes;","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;","var freeGlobal = require('./_freeGlobal');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && freeGlobal.process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n\nmodule.exports = nodeUtil;","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = baseKeys;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n\nmodule.exports = isPrototype;","var overArg = require('./_overArg');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeKeys = overArg(Object.keys, Object);\nmodule.exports = nativeKeys;","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\n\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;","var assocIndexOf = require('./_assocIndexOf');\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype;\n/** Built-in value references. */\n\nvar splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n}\n\nmodule.exports = listCacheSet;","var ListCache = require('./_ListCache');\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\nfunction stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n}\n\nmodule.exports = stackClear;","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n/** Used as the size to enable large array optimizations. */\n\n\nvar LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n\nmodule.exports = mapCacheClear;","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nmodule.exports = Hash;","var nativeCreate = require('./_nativeCreate');\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;","var nativeCreate = require('./_nativeCreate');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;","var getMapData = require('./_getMapData');\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n\nmodule.exports = isKeyable;","var getMapData = require('./_getMapData');\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;","var getMapData = require('./_getMapData');\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;","var getMapData = require('./_getMapData');\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\n\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n} // Add methods to `SetCache`.\n\n\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\nmodule.exports = SetCache;","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n}\n\nmodule.exports = setCacheAdd;","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n}\n\nmodule.exports = arraySome;","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */\n\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n}\n\nmodule.exports = equalByTag;","var root = require('./_root');\n/** Built-in value references. */\n\n\nvar Uint8Array = root.Uint8Array;\nmodule.exports = Uint8Array;","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;","var getAllKeys = require('./_getAllKeys');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n\nmodule.exports = arrayPush;","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\nmodule.exports = getSymbols;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayFilter;","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n/** `Object#toString` result references. */\n\n\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nmodule.exports = getTag;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar DataView = getNative(root, 'DataView');\nmodule.exports = DataView;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Promise = getNative(root, 'Promise');\nmodule.exports = Promise;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Set = getNative(root, 'Set');\nmodule.exports = Set;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar WeakMap = getNative(root, 'WeakMap');\nmodule.exports = WeakMap;","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/lib/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 '../../../actions/columns';\nimport api from '../../../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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { expandHashtagTimeline, clearTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { FormattedMessage } from 'react-intl';\nimport { connectHashtagStream } from '../../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 shouldUpdateScroll: PropTypes.func,\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 { shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} 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 >\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 shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/home_timeline.js b/priv/static/packs/features/home_timeline.js index 4f20571dd..8e72862bd 100644 --- a/priv/static/packs/features/home_timeline.js +++ b/priv/static/packs/features/home_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{702:function(e,t,n){"use strict";n.r(t);var o,i,c=n(0),a=n(2),s=n(6),l=n(1),r=n(3),u=n.n(r),h=n(21),d=n(35),p=n(904),m=n(633),b=n(628),f=n(222),g=n(7),O=n(933),j=Object(g.g)(o=function(e){function t(){return e.apply(this,arguments)||this}return Object(s.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange;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.basic",defaultMessage:"Basic"})),Object(c.a)("div",{className:"column-settings__row"},void 0,Object(c.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reblog"],onChange:n,label:Object(c.a)(g.b,{id:"home.column_settings.show_reblogs",defaultMessage:"Show boosts"})})),Object(c.a)("div",{className:"column-settings__row"},void 0,Object(c.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reply"],onChange:n,label:Object(c.a)(g.b,{id:"home.column_settings.show_replies",defaultMessage:"Show replies"})})))},t}(u.a.PureComponent))||o,v=n(70),_=Object(h.connect)(function(e){return{settings:e.getIn(["settings","home"])}},function(n){return{onChange:function(e,t){n(Object(v.c)(["home"].concat(e),t))},onSave:function(){n(Object(v.d)())}}})(j),M=n(358);n.d(t,"default",function(){return P});var w=Object(g.f)({title:{id:"column.home",defaultMessage:"Home"}}),P=Object(h.connect)(function(e){return{hasUnread:0<e.getIn(["timelines","home","unread"]),isPartial:e.getIn(["timelines","home","isPartial"])}})(i=Object(g.g)(i=function(i){function e(){for(var o,e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return o=i.call.apply(i,[this].concat(t))||this,Object(l.a)(Object(a.a)(o),"handlePin",function(){var e=o.props,t=e.columnId,n=e.dispatch;n(t?Object(f.h)(t):Object(f.e)("HOME",{}))}),Object(l.a)(Object(a.a)(o),"handleMove",function(e){var t=o.props,n=t.columnId;(0,t.dispatch)(Object(f.g)(n,e))}),Object(l.a)(Object(a.a)(o),"handleHeaderClick",function(){o.column.scrollTop()}),Object(l.a)(Object(a.a)(o),"setRef",function(e){o.column=e}),Object(l.a)(Object(a.a)(o),"handleLoadMore",function(e){o.props.dispatch(Object(d.s)({maxId:e}))}),o}Object(s.a)(e,i);var t=e.prototype;return t.componentDidMount=function(){this._checkIfReloadNeeded(!1,this.props.isPartial)},t.componentDidUpdate=function(e){this._checkIfReloadNeeded(e.isPartial,this.props.isPartial)},t.componentWillUnmount=function(){this._stopPolling()},t._checkIfReloadNeeded=function(e,t){var n=this.props.dispatch;e!==t&&(!e&&t?this.polling=setInterval(function(){n(Object(d.s)())},3e3):e&&!t&&this._stopPolling())},t._stopPolling=function(){this.polling&&(clearInterval(this.polling),this.polling=null)},t.render=function(){var e=this.props,t=e.intl,n=e.shouldUpdateScroll,o=e.hasUnread,i=e.columnId,a=e.multiColumn,s=!!i;return u.a.createElement(m.a,{ref:this.setRef,label:t.formatMessage(w.title)},Object(c.a)(b.a,{icon:"home",active:o,title:t.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:s,multiColumn:a},void 0,Object(c.a)(_,{})),Object(c.a)(p.a,{trackScroll:!s,scrollKey:"home_timeline-"+i,onLoadMore:this.handleLoadMore,timelineId:"home",emptyMessage:Object(c.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(c.a)(M.a,{to:"/timelines/public"},void 0,Object(c.a)(g.b,{id:"empty_column.home.public_timeline",defaultMessage:"the public timeline"}))}}),shouldUpdateScroll:n}))},e}(u.a.PureComponent))||i)||i}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{755:function(e,t,n){"use strict";n.r(t);var o,i,a=n(0),c=n(2),s=n(7),l=n(1),r=n(3),u=n.n(r),h=n(12),d=n(35),m=n(977),p=n(669),b=n(665),f=n(245),g=n(6),O=n(1023),j=Object(g.g)(o=function(e){function t(){return e.apply(this,arguments)||this}return Object(s.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.settings,n=e.onChange;return Object(a.a)("div",{},void 0,Object(a.a)("span",{className:"column-settings__section"},void 0,Object(a.a)(g.b,{id:"home.column_settings.basic",defaultMessage:"Basic"})),Object(a.a)("div",{className:"column-settings__row"},void 0,Object(a.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reblog"],onChange:n,label:Object(a.a)(g.b,{id:"home.column_settings.show_reblogs",defaultMessage:"Show boosts"})})),Object(a.a)("div",{className:"column-settings__row"},void 0,Object(a.a)(O.a,{prefix:"home_timeline",settings:t,settingPath:["shows","reply"],onChange:n,label:Object(a.a)(g.b,{id:"home.column_settings.show_replies",defaultMessage:"Show replies"})})))},t}(u.a.PureComponent))||o,v=n(72),_=Object(h.connect)(function(e){return{settings:e.getIn(["settings","home"])}},function(e){return{onChange:function(t,n){e(Object(v.c)(["home"].concat(t),n))},onSave:function(){e(Object(v.d)())}}})(j),M=n(310);n.d(t,"default",function(){return P});var w=Object(g.f)({title:{id:"column.home",defaultMessage:"Home"}}),P=Object(h.connect)(function(e){return{hasUnread:e.getIn(["timelines","home","unread"])>0,isPartial:e.getIn(["timelines","home","isPartial"])}})(i=Object(g.g)(i=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return t=e.call.apply(e,[this].concat(o))||this,Object(l.a)(Object(c.a)(t),"handlePin",function(){var e=t.props,n=e.columnId,o=e.dispatch;o(n?Object(f.h)(n):Object(f.e)("HOME",{}))}),Object(l.a)(Object(c.a)(t),"handleMove",function(e){var n=t.props,o=n.columnId;(0,n.dispatch)(Object(f.g)(o,e))}),Object(l.a)(Object(c.a)(t),"handleHeaderClick",function(){t.column.scrollTop()}),Object(l.a)(Object(c.a)(t),"setRef",function(e){t.column=e}),Object(l.a)(Object(c.a)(t),"handleLoadMore",function(e){t.props.dispatch(Object(d.t)({maxId:e}))}),t}Object(s.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(d.t)())},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.shouldUpdateScroll,o=e.hasUnread,i=e.columnId,c=e.multiColumn,s=!!i;return u.a.createElement(p.a,{bindToDocument:!c,ref:this.setRef,label:t.formatMessage(w.title)},Object(a.a)(b.a,{icon:"home",active:o,title:t.formatMessage(w.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:s,multiColumn:c},void 0,Object(a.a)(_,{})),Object(a.a)(m.a,{trackScroll:!s,scrollKey:"home_timeline-"+i,onLoadMore:this.handleLoadMore,timelineId:"home",emptyMessage:Object(a.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(a.a)(M.a,{to:"/timelines/public"},void 0,Object(a.a)(g.b,{id:"empty_column.home.public_timeline",defaultMessage:"the public timeline"}))}}),shouldUpdateScroll:n,bindToDocument:!c}))},t}(u.a.PureComponent))||i)||i}}]); //# sourceMappingURL=home_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/home_timeline.js.map b/priv/static/packs/features/home_timeline.js.map index f01cb4fa9..b7555b036 100644 --- a/priv/static/packs/features/home_timeline.js.map +++ b/priv/static/packs/features/home_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/home_timeline/components/column_settings.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/home_timeline/containers/column_settings_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/home_timeline/index.js"],"names":["ColumnSettings","injectIntl","render","_this$props","this","props","settings","onChange","Object","jsx","className","index_es","id","defaultMessage","setting_toggle","prefix","settingPath","label","React","PureComponent","connect","state","getIn","dispatch","key","checked","changeSetting","concat","onSave","saveSettings","messages","defineMessages","title","HomeTimeline","hasUnread","isPartial","_this","columnId","removeColumn","addColumn","dir","_this$props2","moveColumn","column","scrollTop","c","maxId","expandHomeTimeline","componentDidMount","_checkIfReloadNeeded","componentDidUpdate","prevProps","componentWillUnmount","_stopPolling","wasPartial","polling","setInterval","clearInterval","_this$props3","intl","shouldUpdateScroll","multiColumn","pinned","react_default","a","createElement","ref","setRef","formatMessage","column_header","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","column_settings_container","status_list_container","trackScroll","scrollKey","onLoadMore","handleLoadMore","timelineId","emptyMessage","values","public","Link","to"],"mappings":"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","file":"features/home_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from '../../notifications/components/setting_toggle';\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 } = 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 </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting, saveSettings } from '../../../actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'home']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (key, checked) {\n dispatch(changeSetting(['home', ...key], 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 '../../actions/timelines';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/features/home_timeline/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/home_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/home_timeline/index.js"],"names":["ColumnSettings","injectIntl","render","this","props","settings","onChange","className","id","defaultMessage","prefix","settingPath","label","React","PureComponent","connect","state","getIn","dispatch","key","checked","changeSetting","onSave","saveSettings","messages","defineMessages","title","HomeTimeline","hasUnread","isPartial","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","maxId","expandHomeTimeline","componentDidMount","_checkIfReloadNeeded","componentDidUpdate","prevProps","componentWillUnmount","_stopPolling","wasPartial","polling","setInterval","clearInterval","intl","shouldUpdateScroll","multiColumn","pinned","bindToDocument","ref","setRef","formatMessage","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","trackScroll","scrollKey","onLoadMore","handleLoadMore","timelineId","emptyMessage","values","public","Link","to"],"mappings":"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","file":"features/home_timeline.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from '../../notifications/components/setting_toggle';\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 } = 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 </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting, saveSettings } from '../../../actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'home']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (key, checked) {\n dispatch(changeSetting(['home', ...key], 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 '../../actions/timelines';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/keyboard_shortcuts.js b/priv/static/packs/features/keyboard_shortcuts.js index 2a0204118..13863624f 100644 --- a/priv/static/packs/features/keyboard_shortcuts.js +++ b/priv/static/packs/features/keyboard_shortcuts.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{676:function(t,e,d){"use strict";d.r(e),d.d(e,"default",function(){return l});var o,a,b,c=d(0),i=d(6),s=d(1),j=(d(3),d(626)),O=d(634),r=d(7),v=d(5),u=d.n(v),k=d(25),n=Object(r.f)({heading:{id:"keyboard_shortcuts.heading",defaultMessage:"Keyboard Shortcuts"}}),l=Object(r.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.intl;return Object(c.a)(j.a,{icon:"question",heading:t.formatMessage(n.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)(r.b,{id:"keyboard_shortcuts.hotkey",defaultMessage:"Hotkey"})),Object(c.a)("th",{},void 0,Object(c.a)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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,"enter"),", ",Object(c.a)("kbd",{},void 0,"o")),Object(c.a)("td",{},void 0,Object(c.a)(r.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,"x")),Object(c.a)("td",{},void 0,Object(c.a)(r.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,"up"),", ",Object(c.a)("kbd",{},void 0,"k")),Object(c.a)("td",{},void 0,Object(c.a)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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,"g"),"+",Object(c.a)("kbd",{},void 0,"h")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.home",defaultMessage:"to open home timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.notifications",defaultMessage:"to open notifications column"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"l")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.local",defaultMessage:"to open local timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"t")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.federated",defaultMessage:"to open federated timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"d")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.direct",defaultMessage:"to open direct messages column"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"s")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.start",defaultMessage:'to open "get started" column'}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"f")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.favourites",defaultMessage:"to open favourites list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"p")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.pinned",defaultMessage:"to open pinned toots list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"u")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.my_profile",defaultMessage:"to open your profile"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"b")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.blocked",defaultMessage:"to open blocked users list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"m")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.muted",defaultMessage:"to open muted users list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"r")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.requests",defaultMessage:"to open follow requests list"}))),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)(r.b,{id:"keyboard_shortcuts.legend",defaultMessage:"to display this legend"})))))))},e}(k.a),Object(s.a)(a,"propTypes",{intl:u.a.object.isRequired,multiColumn:u.a.bool}),o=b))||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{723:function(t,e,d){"use strict";d.r(e),d.d(e,"default",function(){return l});var o,a,b,c=d(0),i=d(7),s=d(1),j=(d(3),d(663)),O=d(670),r=d(6),v=d(5),u=d.n(v),n=d(19),k=Object(r.f)({heading:{id:"keyboard_shortcuts.heading",defaultMessage:"Keyboard Shortcuts"}}),l=Object(r.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.multiColumn;return Object(c.a)(j.a,{bindToDocument:!d,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)(r.b,{id:"keyboard_shortcuts.hotkey",defaultMessage:"Hotkey"})),Object(c.a)("th",{},void 0,Object(c.a)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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,"enter"),", ",Object(c.a)("kbd",{},void 0,"o")),Object(c.a)("td",{},void 0,Object(c.a)(r.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,"x")),Object(c.a)("td",{},void 0,Object(c.a)(r.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)(r.b,{id:"keyboard_shortcuts.toggle_sensitivity",defaultMessage:"to show/hide media"}))),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)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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)(r.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,"g"),"+",Object(c.a)("kbd",{},void 0,"h")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.home",defaultMessage:"to open home timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"n")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.notifications",defaultMessage:"to open notifications column"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"l")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.local",defaultMessage:"to open local timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"t")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.federated",defaultMessage:"to open federated timeline"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"d")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.direct",defaultMessage:"to open direct messages column"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"s")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.start",defaultMessage:'to open "get started" column'}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"f")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.favourites",defaultMessage:"to open favourites list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"p")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.pinned",defaultMessage:"to open pinned toots list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"u")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.my_profile",defaultMessage:"to open your profile"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"b")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.blocked",defaultMessage:"to open blocked users list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"m")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.muted",defaultMessage:"to open muted users list"}))),Object(c.a)("tr",{},void 0,Object(c.a)("td",{},void 0,Object(c.a)("kbd",{},void 0,"g"),"+",Object(c.a)("kbd",{},void 0,"r")),Object(c.a)("td",{},void 0,Object(c.a)(r.b,{id:"keyboard_shortcuts.requests",defaultMessage:"to open follow requests list"}))),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)(r.b,{id:"keyboard_shortcuts.legend",defaultMessage:"to display this legend"})))))))},e}(n.a),Object(s.a)(a,"propTypes",{intl:u.a.object.isRequired,multiColumn:u.a.bool}),o=b))||o}}]); //# sourceMappingURL=keyboard_shortcuts.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/keyboard_shortcuts.js.map b/priv/static/packs/features/keyboard_shortcuts.js.map index 1d7cf0d60..8128a0b37 100644 --- a/priv/static/packs/features/keyboard_shortcuts.js.map +++ b/priv/static/packs/features/keyboard_shortcuts.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/keyboard_shortcuts/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","KeyboardShortcuts","injectIntl","render","intl","this","props","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_4__","icon","formatMessage","_components_column_back_button_slim__WEBPACK_IMPORTED_MODULE_5__","className","react_intl__WEBPACK_IMPORTED_MODULE_6__","ImmutablePureComponent","PropTypes","object","isRequired","multiColumn","bool"],"mappings":"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","file":"features/keyboard_shortcuts.js","sourcesContent":["import React from 'react';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\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\nexport default @injectIntl\nclass KeyboardShortcuts extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n render () {\n const { intl } = this.props;\n\n return (\n <Column 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>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>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>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>g</kbd>+<kbd>h</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.home' defaultMessage='to open home timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.notifications' defaultMessage='to open notifications column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>l</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.local' defaultMessage='to open local timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>t</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.federated' defaultMessage='to open federated timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>d</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.direct' defaultMessage='to open direct messages column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>s</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.start' defaultMessage='to open \"get started\" column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>f</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.favourites' defaultMessage='to open favourites list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>p</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.pinned' defaultMessage='to open pinned toots list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>u</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.my_profile' defaultMessage='to open your profile' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>b</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.blocked' defaultMessage='to open blocked users list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>m</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.muted' defaultMessage='to open muted users list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>r</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.requests' defaultMessage='to open follow requests list' /></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/mastodon/features/keyboard_shortcuts/index.js"],"names":["messages","defineMessages","heading","KeyboardShortcuts","injectIntl","render","this","props","intl","multiColumn","bindToDocument","icon","formatMessage","className","id","defaultMessage","ImmutablePureComponent","PropTypes","object","isRequired","bool"],"mappings":"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","file":"features/keyboard_shortcuts.js","sourcesContent":["import React from 'react';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\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\nexport default @injectIntl\nclass KeyboardShortcuts extends ImmutablePureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n };\n\n render () {\n const { intl, 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>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>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 <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>g</kbd>+<kbd>h</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.home' defaultMessage='to open home timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>n</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.notifications' defaultMessage='to open notifications column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>l</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.local' defaultMessage='to open local timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>t</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.federated' defaultMessage='to open federated timeline' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>d</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.direct' defaultMessage='to open direct messages column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>s</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.start' defaultMessage='to open \"get started\" column' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>f</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.favourites' defaultMessage='to open favourites list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>p</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.pinned' defaultMessage='to open pinned toots list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>u</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.my_profile' defaultMessage='to open your profile' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>b</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.blocked' defaultMessage='to open blocked users list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>m</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.muted' defaultMessage='to open muted users list' /></td>\n </tr>\n <tr>\n <td><kbd>g</kbd>+<kbd>r</kbd></td>\n <td><FormattedMessage id='keyboard_shortcuts.requests' defaultMessage='to open follow requests list' /></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/features/list_adder.js b/priv/static/packs/features/list_adder.js index cdb19716f..b0656c563 100644 --- a/priv/static/packs/features/list_adder.js +++ b/priv/static/packs/features/list_adder.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{709:function(t,e,n){"use strict";n.r(e);var i,a,c,o,s,r,d,u,l,p=n(0),b=n(6),f=n(1),v=(n(3),n(5)),j=n.n(v),O=n(26),m=n.n(O),_=n(21),R=n(25),g=n(7),I=n(32),h=n(61),N=n(67),q=n(30),y=Object(g.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),w=Object(_.connect)(function(t,e){var n=e.listId,i=e.added;return{list:t.get("lists").get(n),added:void 0===i?t.getIn(["listAdder","lists","items"]).includes(n):i}},function(t,e){var n=e.listId;return{onRemove:function(){return t(Object(I.J)(n))},onAdd:function(){return t(Object(I.A)(n))}}})(i=Object(g.g)((c=a=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t,e=this.props,n=e.list,i=e.intl,a=e.onRemove,c=e.onAdd;return t=e.added?Object(p.a)(N.a,{icon:"times",title:i.formatMessage(y.remove),onClick:a}):Object(p.a)(N.a,{icon:"plus",title:i.formatMessage(y.add),onClick:c}),Object(p.a)("div",{className:"list"},void 0,Object(p.a)("div",{className:"list__wrapper"},void 0,Object(p.a)("div",{className:"list__display-name"},void 0,Object(p.a)(q.a,{id:"list-ul",className:"column-link__icon",fixedWidth:!0}),n.get("title")),Object(p.a)("div",{className:"account__relationship"},void 0,t)))},e}(R.a),Object(f.a)(a,"propTypes",{list:m.a.map.isRequired,intl:j.a.object.isRequired,onRemove:j.a.func.isRequired,onAdd:j.a.func.isRequired,added:j.a.bool}),Object(f.a)(a,"defaultProps",{added:!1}),i=c))||i)||i,A=n(200),k=n(194),M=n(195),z=Object(_.connect)(function(){var i=Object(A.d)();return function(t,e){var n=e.accountId;return{account:i(t,n)}}})(o=Object(g.g)((r=s=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t=this.props.account;return Object(p.a)("div",{className:"account"},void 0,Object(p.a)("div",{className:"account__wrapper"},void 0,Object(p.a)("div",{className:"account__display-name"},void 0,Object(p.a)("div",{className:"account__avatar-wrapper"},void 0,Object(p.a)(k.a,{account:t,size:36})),Object(p.a)(M.a,{account:t}))))},e}(R.a),Object(f.a)(s,"propTypes",{account:m.a.map.isRequired}),o=r))||o)||o,C=n(990);n.d(e,"default",function(){return T});var J=Object(h.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(_.connect)(function(t){return{listIds:J(t).map(function(t){return t.get("id")})}},function(e){return{onInitialize:function(t){return e(Object(I.N)(t))},onReset:function(){return e(Object(I.L)())}}})(d=Object(g.g)((l=u=function(t){function e(){return t.apply(this,arguments)||this}Object(b.a)(e,t);var n=e.prototype;return n.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.accountId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var t=this.props,e=t.accountId,n=t.listIds;return Object(p.a)("div",{className:"modal-root__modal list-adder"},void 0,Object(p.a)("div",{className:"list-adder__account"},void 0,Object(p.a)(z,{accountId:e})),Object(p.a)(C.a,{}),Object(p.a)("div",{className:"list-adder__lists"},void 0,n.map(function(t){return Object(p.a)(w,{listId:t},t)})))},e}(R.a),Object(f.a)(u,"propTypes",{accountId:j.a.string.isRequired,onClose:j.a.func.isRequired,intl:j.a.object.isRequired,onInitialize:j.a.func.isRequired,onReset:j.a.func.isRequired,listIds:m.a.list.isRequired}),d=l))||d)||d}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{760:function(t,e,n){"use strict";n.r(e);var i,a,c,o,s,r,d,u,l,p=n(0),b=n(7),f=n(1),v=(n(3),n(5)),j=n.n(v),O=n(18),m=n.n(O),_=n(12),R=n(19),g=n(6),I=n(30),h=n(53),N=n(51),q=n(27),y=Object(g.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),w=Object(_.connect)(function(t,e){var n=e.listId,i=e.added;return{list:t.get("lists").get(n),added:void 0===i?t.getIn(["listAdder","lists","items"]).includes(n):i}},function(t,e){var n=e.listId;return{onRemove:function(){return t(Object(I.J)(n))},onAdd:function(){return t(Object(I.A)(n))}}})(i=Object(g.g)((c=a=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t,e=this.props,n=e.list,i=e.intl,a=e.onRemove,c=e.onAdd;return t=e.added?Object(p.a)(N.a,{icon:"times",title:i.formatMessage(y.remove),onClick:a}):Object(p.a)(N.a,{icon:"plus",title:i.formatMessage(y.add),onClick:c}),Object(p.a)("div",{className:"list"},void 0,Object(p.a)("div",{className:"list__wrapper"},void 0,Object(p.a)("div",{className:"list__display-name"},void 0,Object(p.a)(q.a,{id:"list-ul",className:"column-link__icon",fixedWidth:!0}),n.get("title")),Object(p.a)("div",{className:"account__relationship"},void 0,t)))},e}(R.a),Object(f.a)(a,"propTypes",{list:m.a.map.isRequired,intl:j.a.object.isRequired,onRemove:j.a.func.isRequired,onAdd:j.a.func.isRequired,added:j.a.bool}),Object(f.a)(a,"defaultProps",{added:!1}),i=c))||i)||i,A=n(204),k=n(107),M=n(116),z=Object(_.connect)(function(){var t=Object(A.d)();return function(e,n){var i=n.accountId;return{account:t(e,i)}}})(o=Object(g.g)((r=s=function(t){function e(){return t.apply(this,arguments)||this}return Object(b.a)(e,t),e.prototype.render=function(){var t=this.props.account;return Object(p.a)("div",{className:"account"},void 0,Object(p.a)("div",{className:"account__wrapper"},void 0,Object(p.a)("div",{className:"account__display-name"},void 0,Object(p.a)("div",{className:"account__avatar-wrapper"},void 0,Object(p.a)(k.a,{account:t,size:36})),Object(p.a)(M.a,{account:t}))))},e}(R.a),Object(f.a)(s,"propTypes",{account:m.a.map.isRequired}),o=r))||o)||o,C=n(1095);n.d(e,"default",function(){return T});var J=Object(h.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(_.connect)(function(t){return{listIds:J(t).map(function(t){return t.get("id")})}},function(t){return{onInitialize:function(e){return t(Object(I.N)(e))},onReset:function(){return t(Object(I.L)())}}})(d=Object(g.g)((l=u=function(t){function e(){return t.apply(this,arguments)||this}Object(b.a)(e,t);var n=e.prototype;return n.componentDidMount=function(){var t=this.props;(0,t.onInitialize)(t.accountId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var t=this.props,e=t.accountId,n=t.listIds;return Object(p.a)("div",{className:"modal-root__modal list-adder"},void 0,Object(p.a)("div",{className:"list-adder__account"},void 0,Object(p.a)(z,{accountId:e})),Object(p.a)(C.a,{}),Object(p.a)("div",{className:"list-adder__lists"},void 0,n.map(function(t){return Object(p.a)(w,{listId:t},t)})))},e}(R.a),Object(f.a)(u,"propTypes",{accountId:j.a.string.isRequired,onClose:j.a.func.isRequired,intl:j.a.object.isRequired,onInitialize:j.a.func.isRequired,onReset:j.a.func.isRequired,listIds:m.a.list.isRequired}),d=l))||d)||d}}]); //# sourceMappingURL=list_adder.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/list_adder.js.map b/priv/static/packs/features/list_adder.js.map index 0905fe864..55e525dd3 100644 --- a/priv/static/packs/features/list_adder.js.map +++ b/priv/static/packs/features/list_adder.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_adder/components/list.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_adder/components/account.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_adder/index.js"],"names":["messages","defineMessages","remove","id","defaultMessage","add","List","connect","state","_ref","listId","added","list","get","getIn","includes","dispatch","_ref2","onRemove","removeFromListAdder","onAdd","addToListAdder","injectIntl","render","button","_this$props","this","props","intl","Object","jsx","icon_button","icon","title","formatMessage","onClick","className","fixedWidth","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","Account","getAccount","makeGetAccount","accountId","account","avatar","size","display_name","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","ListAdder","listIds","onInitialize","setupListAdder","onReset","resetListAdder","componentDidMount","componentWillUnmount","_this$props2","account_Account","new_list_form","ListId","list_List","string","onClose"],"mappings":"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","file":"features/list_adder.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListAdder, addToListAdder } from '../../../actions/lists';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\n\nconst MapStateToProps = (state, { listId, added }) => ({\n list: state.get('lists').get(listId),\n added: typeof added === 'undefined' ? state.getIn(['listAdder', 'lists', 'items']).includes(listId) : added,\n});\n\nconst mapDispatchToProps = (dispatch, { listId }) => ({\n onRemove: () => dispatch(removeFromListAdder(listId)),\n onAdd: () => dispatch(addToListAdder(listId)),\n});\n\nexport default @connect(MapStateToProps, mapDispatchToProps)\n@injectIntl\nclass List extends ImmutablePureComponent {\n\n static propTypes = {\n list: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { list, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='list'>\n <div className='list__wrapper'>\n <div className='list__display-name'>\n <Icon id='list-ul' className='column-link__icon' fixedWidth />\n {list.get('title')}\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport { injectIntl } from 'react-intl';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId }) => ({\n account: getAccount(state, accountId),\n });\n\n return mapStateToProps;\n};\n\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n </div>\n </div>\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 { setupListAdder, resetListAdder } from '../../actions/lists';\nimport { createSelector } from 'reselect';\nimport List from './components/list';\nimport Account from './components/account';\nimport NewListForm from '../lists/components/new_list_form';\n// hack\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 listIds: getOrderedLists(state).map(list=>list.get('id')),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: accountId => dispatch(setupListAdder(accountId)),\n onReset: () => dispatch(resetListAdder()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListAdder extends ImmutablePureComponent {\n\n static propTypes = {\n accountId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n listIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, accountId } = this.props;\n onInitialize(accountId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountId, listIds } = this.props;\n\n return (\n <div className='modal-root__modal list-adder'>\n <div className='list-adder__account'>\n <Account accountId={accountId} />\n </div>\n\n <NewListForm />\n\n\n <div className='list-adder__lists'>\n {listIds.map(ListId => <List key={ListId} listId={ListId} />)}\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/mastodon/features/list_adder/components/list.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/list_adder/components/account.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/list_adder/index.js"],"names":["messages","defineMessages","remove","add","List","connect","state","listId","added","list","get","getIn","includes","dispatch","onRemove","removeFromListAdder","onAdd","addToListAdder","injectIntl","render","button","this","props","intl","icon","title","formatMessage","onClick","className","id","fixedWidth","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","Account","getAccount","makeGetAccount","accountId","account","size","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","ListAdder","listIds","onInitialize","setupListAdder","onReset","resetListAdder","componentDidMount","componentWillUnmount","ListId","string","onClose"],"mappings":"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","file":"features/list_adder.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListAdder, addToListAdder } from '../../../actions/lists';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\n\nconst MapStateToProps = (state, { listId, added }) => ({\n list: state.get('lists').get(listId),\n added: typeof added === 'undefined' ? state.getIn(['listAdder', 'lists', 'items']).includes(listId) : added,\n});\n\nconst mapDispatchToProps = (dispatch, { listId }) => ({\n onRemove: () => dispatch(removeFromListAdder(listId)),\n onAdd: () => dispatch(addToListAdder(listId)),\n});\n\nexport default @connect(MapStateToProps, mapDispatchToProps)\n@injectIntl\nclass List extends ImmutablePureComponent {\n\n static propTypes = {\n list: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { list, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='list'>\n <div className='list__wrapper'>\n <div className='list__display-name'>\n <Icon id='list-ul' className='column-link__icon' fixedWidth />\n {list.get('title')}\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport { injectIntl } from 'react-intl';\n\nconst makeMapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n const mapStateToProps = (state, { accountId }) => ({\n account: getAccount(state, accountId),\n });\n\n return mapStateToProps;\n};\n\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n };\n\n render () {\n const { account } = this.props;\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n </div>\n </div>\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 { setupListAdder, resetListAdder } from '../../actions/lists';\nimport { createSelector } from 'reselect';\nimport List from './components/list';\nimport Account from './components/account';\nimport NewListForm from '../lists/components/new_list_form';\n// hack\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 listIds: getOrderedLists(state).map(list=>list.get('id')),\n});\n\nconst mapDispatchToProps = dispatch => ({\n onInitialize: accountId => dispatch(setupListAdder(accountId)),\n onReset: () => dispatch(resetListAdder()),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass ListAdder extends ImmutablePureComponent {\n\n static propTypes = {\n accountId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n onInitialize: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n listIds: ImmutablePropTypes.list.isRequired,\n };\n\n componentDidMount () {\n const { onInitialize, accountId } = this.props;\n onInitialize(accountId);\n }\n\n componentWillUnmount () {\n const { onReset } = this.props;\n onReset();\n }\n\n render () {\n const { accountId, listIds } = this.props;\n\n return (\n <div className='modal-root__modal list-adder'>\n <div className='list-adder__account'>\n <Account accountId={accountId} />\n </div>\n\n <NewListForm />\n\n\n <div className='list-adder__lists'>\n {listIds.map(ListId => <List key={ListId} listId={ListId} />)}\n </div>\n </div>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/list_editor.js b/priv/static/packs/features/list_editor.js index 6adde2960..eea71fcf2 100644 --- a/priv/static/packs/features/list_editor.js +++ b/priv/static/packs/features/list_editor.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{696:function(e,t,n){"use strict";n.r(t);var a,c,i,o,r,s,u,d,l=n(0),b=n(6),p=n(1),f=n(3),j=n.n(f),O=n(5),h=n.n(O),v=n(26),m=n.n(v),g=n(21),C=n(25),_=n(7),y=n(32),I=n(200),R=n(194),N=n(195),w=n(67),k=Object(_.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),q=Object(g.connect)(function(){var c=Object(I.d)();return function(e,t){var n=t.accountId,a=t.added;return{account:c(e,n),added:void 0===a?e.getIn(["listEditor","accounts","items"]).includes(n):a}}},function(e,t){var n=t.accountId;return{onRemove:function(){return e(Object(y.K)(n))},onAdd:function(){return e(Object(y.B)(n))}}})(a=Object(_.g)((i=c=function(e){function t(){return e.apply(this,arguments)||this}return Object(b.a)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.account,a=t.intl,c=t.onRemove,i=t.onAdd;return e=t.added?Object(l.a)(w.a,{icon:"times",title:a.formatMessage(k.remove),onClick:c}):Object(l.a)(w.a,{icon:"plus",title:a.formatMessage(k.add),onClick:i}),Object(l.a)("div",{className:"account"},void 0,Object(l.a)("div",{className:"account__wrapper"},void 0,Object(l.a)("div",{className:"account__display-name"},void 0,Object(l.a)("div",{className:"account__avatar-wrapper"},void 0,Object(l.a)(R.a,{account:n,size:36})),Object(l.a)(N.a,{account:n})),Object(l.a)("div",{className:"account__relationship"},void 0,e)))},t}(C.a),Object(p.a)(c,"propTypes",{account:m.a.map.isRequired,intl:h.a.object.isRequired,onRemove:h.a.func.isRequired,onAdd:h.a.func.isRequired,added:h.a.bool}),Object(p.a)(c,"defaultProps",{added:!1}),a=i))||a)||a,M=n(2),S=n(12),A=n.n(S),E=n(30),x=Object(_.f)({search:{id:"lists.search",defaultMessage:"Search among people you follow"}}),z=Object(g.connect)(function(e){return{value:e.getIn(["listEditor","suggestions","value"])}},function(t){return{onSubmit:function(e){return t(Object(y.H)(e))},onClear:function(){return t(Object(y.E)())},onChange:function(e){return t(Object(y.D)(e))}}})(o=Object(_.g)(o=function(c){function e(){for(var t,e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return t=c.call.apply(c,[this].concat(n))||this,Object(p.a)(Object(M.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(p.a)(Object(M.a)(t),"handleKeyUp",function(e){13===e.keyCode&&t.props.onSubmit(t.props.value)}),Object(p.a)(Object(M.a)(t),"handleClear",function(){t.props.onClear()}),t}return Object(b.a)(e,c),e.prototype.render=function(){var e=this.props,t=e.value,n=e.intl,a=0<t.length;return Object(l.a)("div",{className:"list-editor__search search"},void 0,Object(l.a)("label",{},void 0,Object(l.a)("span",{style:{display:"none"}},void 0,n.formatMessage(x.search)),Object(l.a)("input",{className:"search__input",type:"text",value:t,onChange:this.handleChange,onKeyUp:this.handleKeyUp,placeholder:n.formatMessage(x.search)})),Object(l.a)("div",{role:"button",tabIndex:"0",className:"search__icon",onClick:this.handleClear},void 0,Object(l.a)(E.a,{id:"search",className:A()({active:!a})}),Object(l.a)(E.a,{id:"times-circle","aria-label":n.formatMessage(x.search),className:A()({active:a})})))},e}(j.a.PureComponent))||o)||o,K=Object(_.f)({title:{id:"lists.edit.submit",defaultMessage:"Change title"}}),P=Object(g.connect)(function(e){return{value:e.getIn(["listEditor","title"]),disabled:!e.getIn(["listEditor","isChanged"])}},function(t){return{onChange:function(e){return t(Object(y.C)(e))},onSubmit:function(){return t(Object(y.P)(!1))}}})(r=Object(_.g)(r=function(c){function e(){for(var t,e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return t=c.call.apply(c,[this].concat(n))||this,Object(p.a)(Object(M.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(p.a)(Object(M.a)(t),"handleSubmit",function(e){e.preventDefault(),t.props.onSubmit()}),Object(p.a)(Object(M.a)(t),"handleClick",function(){t.props.onSubmit()}),t}return Object(b.a)(e,c),e.prototype.render=function(){var e=this.props,t=e.value,n=e.disabled,a=e.intl.formatMessage(K.title);return Object(l.a)("form",{className:"column-inline-form",onSubmit:this.handleSubmit},void 0,Object(l.a)("input",{className:"setting-text",value:t,onChange:this.handleChange}),Object(l.a)(w.a,{disabled:n,icon:"check",title:a,onClick:this.handleClick}))},e}(j.a.PureComponent))||r)||r,U=n(90),D=n(45),J=n.n(D);n.d(t,"default",function(){return T});var T=Object(g.connect)(function(e){return{accountIds:e.getIn(["listEditor","accounts","items"]),searchAccountIds:e.getIn(["listEditor","suggestions","items"])}},function(t){return{onInitialize:function(e){return t(Object(y.O)(e))},onClear:function(){return t(Object(y.E)())},onReset:function(){return t(Object(y.M)())}}})(s=Object(_.g)((d=u=function(e){function t(){return e.apply(this,arguments)||this}Object(b.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this.props;(0,e.onInitialize)(e.listId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var e=this.props,t=e.accountIds,n=e.searchAccountIds,a=e.onClear,c=0<n.size;return Object(l.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(l.a)(P,{}),Object(l.a)(z,{}),Object(l.a)("div",{className:"drawer__pager"},void 0,Object(l.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,t.map(function(e){return Object(l.a)(q,{accountId:e,added:!0},e)})),c&&Object(l.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:a}),Object(l.a)(U.a,{defaultStyle:{x:-100},style:{x:J()(c?0:-100,{stiffness:210,damping:20})}},void 0,function(e){var t=e.x;return Object(l.a)("div",{className:"drawer__inner backdrop",style:{transform:0===t?null:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,n.map(function(e){return Object(l.a)(q,{accountId:e},e)}))})))},t}(C.a),Object(p.a)(u,"propTypes",{listId:h.a.string.isRequired,onClose:h.a.func.isRequired,intl:h.a.object.isRequired,onInitialize:h.a.func.isRequired,onClear:h.a.func.isRequired,onReset:h.a.func.isRequired,accountIds:m.a.list.isRequired,searchAccountIds:m.a.list.isRequired}),s=d))||s)||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{746:function(e,t,n){"use strict";n.r(t);var a,c,i,o,r,s,u,d,l=n(0),b=n(7),p=n(1),f=n(3),j=n.n(f),O=n(5),h=n.n(O),v=n(18),m=n.n(v),g=n(12),C=n(19),_=n(6),y=n(30),I=n(204),R=n(107),N=n(116),w=n(51),k=Object(_.f)({remove:{id:"lists.account.remove",defaultMessage:"Remove from list"},add:{id:"lists.account.add",defaultMessage:"Add to list"}}),q=Object(g.connect)(function(){var e=Object(I.d)();return function(t,n){var a=n.accountId,c=n.added;return{account:e(t,a),added:void 0===c?t.getIn(["listEditor","accounts","items"]).includes(a):c}}},function(e,t){var n=t.accountId;return{onRemove:function(){return e(Object(y.K)(n))},onAdd:function(){return e(Object(y.B)(n))}}})(a=Object(_.g)((i=c=function(e){function t(){return e.apply(this,arguments)||this}return Object(b.a)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.account,a=t.intl,c=t.onRemove,i=t.onAdd;return e=t.added?Object(l.a)(w.a,{icon:"times",title:a.formatMessage(k.remove),onClick:c}):Object(l.a)(w.a,{icon:"plus",title:a.formatMessage(k.add),onClick:i}),Object(l.a)("div",{className:"account"},void 0,Object(l.a)("div",{className:"account__wrapper"},void 0,Object(l.a)("div",{className:"account__display-name"},void 0,Object(l.a)("div",{className:"account__avatar-wrapper"},void 0,Object(l.a)(R.a,{account:n,size:36})),Object(l.a)(N.a,{account:n})),Object(l.a)("div",{className:"account__relationship"},void 0,e)))},t}(C.a),Object(p.a)(c,"propTypes",{account:m.a.map.isRequired,intl:h.a.object.isRequired,onRemove:h.a.func.isRequired,onAdd:h.a.func.isRequired,added:h.a.bool}),Object(p.a)(c,"defaultProps",{added:!1}),a=i))||a)||a,M=n(2),S=n(10),A=n.n(S),E=n(27),x=Object(_.f)({search:{id:"lists.search",defaultMessage:"Search among people you follow"}}),z=Object(g.connect)(function(e){return{value:e.getIn(["listEditor","suggestions","value"])}},function(e){return{onSubmit:function(t){return e(Object(y.H)(t))},onClear:function(){return e(Object(y.E)())},onChange:function(t){return e(Object(y.D)(t))}}})(o=Object(_.g)(o=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),c=0;c<n;c++)a[c]=arguments[c];return t=e.call.apply(e,[this].concat(a))||this,Object(p.a)(Object(M.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(p.a)(Object(M.a)(t),"handleKeyUp",function(e){13===e.keyCode&&t.props.onSubmit(t.props.value)}),Object(p.a)(Object(M.a)(t),"handleClear",function(){t.props.onClear()}),t}return Object(b.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.value,n=e.intl,a=t.length>0;return Object(l.a)("div",{className:"list-editor__search search"},void 0,Object(l.a)("label",{},void 0,Object(l.a)("span",{style:{display:"none"}},void 0,n.formatMessage(x.search)),Object(l.a)("input",{className:"search__input",type:"text",value:t,onChange:this.handleChange,onKeyUp:this.handleKeyUp,placeholder:n.formatMessage(x.search)})),Object(l.a)("div",{role:"button",tabIndex:"0",className:"search__icon",onClick:this.handleClear},void 0,Object(l.a)(E.a,{id:"search",className:A()({active:!a})}),Object(l.a)(E.a,{id:"times-circle","aria-label":n.formatMessage(x.search),className:A()({active:a})})))},t}(j.a.PureComponent))||o)||o,K=Object(_.f)({title:{id:"lists.edit.submit",defaultMessage:"Change title"}}),P=Object(g.connect)(function(e){return{value:e.getIn(["listEditor","title"]),disabled:!e.getIn(["listEditor","isChanged"])||!e.getIn(["listEditor","title"])}},function(e){return{onChange:function(t){return e(Object(y.C)(t))},onSubmit:function(){return e(Object(y.P)(!1))}}})(r=Object(_.g)(r=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),c=0;c<n;c++)a[c]=arguments[c];return t=e.call.apply(e,[this].concat(a))||this,Object(p.a)(Object(M.a)(t),"handleChange",function(e){t.props.onChange(e.target.value)}),Object(p.a)(Object(M.a)(t),"handleSubmit",function(e){e.preventDefault(),t.props.onSubmit()}),Object(p.a)(Object(M.a)(t),"handleClick",function(){t.props.onSubmit()}),t}return Object(b.a)(t,e),t.prototype.render=function(){var e=this.props,t=e.value,n=e.disabled,a=e.intl.formatMessage(K.title);return Object(l.a)("form",{className:"column-inline-form",onSubmit:this.handleSubmit},void 0,Object(l.a)("input",{className:"setting-text",value:t,onChange:this.handleChange}),Object(l.a)(w.a,{disabled:n,icon:"check",title:a,onClick:this.handleClick}))},t}(j.a.PureComponent))||r)||r,U=n(88),D=n(34),J=n.n(D);n.d(t,"default",function(){return T});var T=Object(g.connect)(function(e){return{accountIds:e.getIn(["listEditor","accounts","items"]),searchAccountIds:e.getIn(["listEditor","suggestions","items"])}},function(e){return{onInitialize:function(t){return e(Object(y.O)(t))},onClear:function(){return e(Object(y.E)())},onReset:function(){return e(Object(y.M)())}}})(s=Object(_.g)((d=u=function(e){function t(){return e.apply(this,arguments)||this}Object(b.a)(t,e);var n=t.prototype;return n.componentDidMount=function(){var e=this.props;(0,e.onInitialize)(e.listId)},n.componentWillUnmount=function(){(0,this.props.onReset)()},n.render=function(){var e=this.props,t=e.accountIds,n=e.searchAccountIds,a=e.onClear,c=n.size>0;return Object(l.a)("div",{className:"modal-root__modal list-editor"},void 0,Object(l.a)(P,{}),Object(l.a)(z,{}),Object(l.a)("div",{className:"drawer__pager"},void 0,Object(l.a)("div",{className:"drawer__inner list-editor__accounts"},void 0,t.map(function(e){return Object(l.a)(q,{accountId:e,added:!0},e)})),c&&Object(l.a)("div",{role:"button",tabIndex:"-1",className:"drawer__backdrop",onClick:a}),Object(l.a)(U.a,{defaultStyle:{x:-100},style:{x:J()(c?0:-100,{stiffness:210,damping:20})}},void 0,function(e){var t=e.x;return Object(l.a)("div",{className:"drawer__inner backdrop",style:{transform:0===t?null:"translateX("+t+"%)",visibility:-100===t?"hidden":"visible"}},void 0,n.map(function(e){return Object(l.a)(q,{accountId:e},e)}))})))},t}(C.a),Object(p.a)(u,"propTypes",{listId:h.a.string.isRequired,onClose:h.a.func.isRequired,intl:h.a.object.isRequired,onInitialize:h.a.func.isRequired,onClear:h.a.func.isRequired,onReset:h.a.func.isRequired,accountIds:m.a.list.isRequired,searchAccountIds:m.a.list.isRequired}),s=d))||s)||s}}]); //# sourceMappingURL=list_editor.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/list_editor.js.map b/priv/static/packs/features/list_editor.js.map index 8fa97d4cc..d8ae5ac71 100644 --- a/priv/static/packs/features/list_editor.js.map +++ b/priv/static/packs/features/list_editor.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_editor/components/account.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_editor/components/search.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_editor/components/edit_list_form.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_editor/index.js"],"names":["messages","defineMessages","remove","id","defaultMessage","add","Account","connect","getAccount","makeGetAccount","state","_ref","accountId","added","account","getIn","includes","dispatch","_ref2","onRemove","removeFromListEditor","onAdd","addToListEditor","injectIntl","render","button","_this$props","this","props","intl","Object","jsx","icon_button","icon","title","formatMessage","onClick","className","avatar","size","display_name","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","search","Search","value","onSubmit","fetchListSuggestions","onClear","clearListSuggestions","onChange","changeListSuggestions","e","_this","target","keyCode","hasValue","length","style","display","type","handleChange","onKeyUp","handleKeyUp","placeholder","role","tabIndex","handleClear","classNames","active","aria-label","React","PureComponent","ListForm","disabled","changeListEditorTitle","submitListEditor","preventDefault","handleSubmit","handleClick","ListEditor","accountIds","searchAccountIds","onInitialize","listId","setupListEditor","onReset","resetListEditor","componentDidMount","componentWillUnmount","_this$props2","showSearch","edit_list_form_ListForm","search_Search","account_Account","optional_motion","defaultStyle","x","spring","stiffness","damping","transform","visibility","string","onClose","list"],"mappings":"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","file":"features/list_editor.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListEditor, addToListEditor } from '../../../actions/lists';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\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 @connect(makeMapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { account, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n search: { id: 'lists.search', defaultMessage: 'Search among people you follow' },\n});\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 @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Search extends React.PureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n handleChange = e => {\n this.props.onChange(e.target.value);\n }\n\n handleKeyUp = e => {\n if (e.keyCode === 13) {\n this.props.onSubmit(this.props.value);\n }\n }\n\n handleClear = () => {\n this.props.onClear();\n }\n\n render () {\n const { value, intl } = this.props;\n const hasValue = value.length > 0;\n\n return (\n <div className='list-editor__search search'>\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.search)}</span>\n\n <input\n className='search__input'\n type='text'\n value={value}\n onChange={this.handleChange}\n onKeyUp={this.handleKeyUp}\n placeholder={intl.formatMessage(messages.search)}\n />\n </label>\n\n <div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>\n <Icon id='search' className={classNames({ active: !hasValue })} />\n <Icon id='times-circle' aria-label={intl.formatMessage(messages.search)} className={classNames({ active: hasValue })} />\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { changeListEditorTitle, submitListEditor } from '../../../actions/lists';\nimport IconButton from '../../../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']),\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 '../../actions/lists';\nimport Account from './components/account';\nimport Search from './components/search';\nimport EditListForm from './components/edit_list_form';\nimport Motion from '../ui/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 <Search />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <Account 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 => <Account 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/mastodon/features/list_editor/components/account.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/list_editor/components/search.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/list_editor/components/edit_list_form.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/list_editor/index.js"],"names":["messages","defineMessages","remove","add","Account","connect","getAccount","makeGetAccount","state","accountId","added","account","getIn","includes","dispatch","onRemove","removeFromListEditor","onAdd","addToListEditor","injectIntl","render","button","this","props","intl","icon","title","formatMessage","onClick","className","size","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","PropTypes","object","func","bool","search","Search","value","onSubmit","fetchListSuggestions","onClear","clearListSuggestions","onChange","changeListSuggestions","e","target","keyCode","hasValue","length","style","display","type","handleChange","onKeyUp","handleKeyUp","placeholder","role","tabIndex","handleClear","id","classNames","active","aria-label","React","PureComponent","ListForm","disabled","changeListEditorTitle","submitListEditor","preventDefault","handleSubmit","handleClick","ListEditor","accountIds","searchAccountIds","onInitialize","listId","setupListEditor","onReset","resetListEditor","componentDidMount","componentWillUnmount","showSearch","defaultStyle","x","spring","stiffness","damping","transform","visibility","string","onClose","list"],"mappings":"8PAYMA,EAAWC,YAAe,CAC9BC,OAAO,CAAD,6DACNC,IAAI,CAAD,uDAqBCC,EAFUC,kBAhBY,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,aAAc,WAAY,UAAUC,SAASJ,GAAaC,KAMtF,SAACI,EAAD,OAAaL,EAAb,EAAaA,UAAb,MAA8B,CACvDM,SAAU,kBAAMD,EAASE,YAAqBP,KAC9CQ,MAAO,kBAAMH,EAASI,YAAgBT,O,GAIvCU,a,sGAeCC,OAAA,WAAW,IAGLC,EAHI,EAC0CC,KAAKC,MAA/CZ,EADA,EACAA,QAASa,EADT,EACSA,KAAMT,EADf,EACeA,SAAUE,EADzB,EACyBA,MAUjC,OALEI,EANM,EACgCX,MAK7B,YAAC,IAAD,CAAYe,KAAK,QAAQC,MAAOF,EAAKG,cAAc3B,EAASE,QAAS0B,QAASb,IAE9E,YAAC,IAAD,CAAYU,KAAK,OAAOC,MAAOF,EAAKG,cAAc3B,EAASG,KAAMyB,QAASX,IAInF,mBAAKY,UAAU,gBAAf,EACE,mBAAKA,UAAU,yBAAf,EACE,mBAAKA,UAAU,8BAAf,EACE,mBAAKA,UAAU,gCAAf,EAAyC,YAAC,IAAD,CAAQlB,QAASA,EAASmB,KAAM,MACzE,YAAC,IAAD,CAAanB,QAASA,KAGxB,mBAAKkB,UAAU,8BAAf,EACGR,M,GAlCSU,K,0BAED,CACjBpB,QAASqB,IAAmBC,IAAIC,WAChCV,KAAMW,IAAUC,OAAOF,WACvBnB,SAAUoB,IAAUE,KAAKH,WACzBjB,MAAOkB,IAAUE,KAAKH,WACtBxB,MAAOyB,IAAUG,O,6BAGG,CACpB5B,OAAO,I,6CCtCLV,EAAWC,YAAe,CAC9BsC,OAAO,CAAD,qEAeFC,EAFUnC,kBAVQ,SAAAG,GAAK,MAAK,CAChCiC,MAAOjC,EAAMI,MAAM,CAAC,aAAc,cAAe,YAGxB,SAAAE,GAAQ,MAAK,CACtC4B,SAAU,SAAAD,GAAK,OAAI3B,EAAS6B,YAAqBF,KACjDG,QAAS,kBAAM9B,EAAS+B,gBACxBC,SAAU,SAAAL,GAAK,OAAI3B,EAASiC,YAAsBN,O,GAInDtB,Y,+LAWgB,SAAA6B,GACb,EAAKzB,MAAMuB,SAASE,EAAEC,OAAOR,S,yCAGjB,SAAAO,GACM,KAAdA,EAAEE,SACJ,EAAK3B,MAAMmB,SAAS,EAAKnB,MAAMkB,S,yCAIrB,WACZ,EAAKlB,MAAMqB,Y,sCAGbxB,OAAA,WAAW,IAAD,EACgBE,KAAKC,MAArBkB,EADA,EACAA,MAAOjB,EADP,EACOA,KACT2B,EAAWV,EAAMW,OAAS,EAEhC,OACE,mBAAKvB,UAAU,mCAAf,EACE,8BACE,oBAAMwB,MAAO,CAAEC,QAAS,cAAxB,EAAmC9B,EAAKG,cAAc3B,EAASuC,SAE/D,qBACEV,UAAU,gBACV0B,KAAK,OACLd,MAAOA,EACPK,SAAUxB,KAAKkC,aACfC,QAASnC,KAAKoC,YACdC,YAAanC,EAAKG,cAAc3B,EAASuC,WAI7C,mBAAKqB,KAAK,SAASC,SAAS,IAAIhC,UAAU,eAAeD,QAASN,KAAKwC,kBAAvE,EACE,YAAC,IAAD,CAAMC,GAAG,SAASlC,UAAWmC,IAAW,CAAEC,QAASd,MACnD,YAAC,IAAD,CAAMY,GAAG,eAAeG,aAAY1C,EAAKG,cAAc3B,EAASuC,QAASV,UAAWmC,IAAW,CAAEC,OAAQd,S,GA7C9FgB,IAAMC,iB,MCjBrBpE,EAAWC,YAAe,CAC9ByB,MAAM,CAAD,wDAeD2C,EAFUhE,kBAVQ,SAAAG,GAAK,MAAK,CAChCiC,MAAOjC,EAAMI,MAAM,CAAC,aAAc,UAClC0D,UAAW9D,EAAMI,MAAM,CAAC,aAAc,gBAAkBJ,EAAMI,MAAM,CAAC,aAAc,YAG1D,SAAAE,GAAQ,MAAK,CACtCgC,SAAU,SAAAL,GAAK,OAAI3B,EAASyD,YAAsB9B,KAClDC,SAAU,kBAAM5B,EAAS0D,aAAiB,O,GAI3CrD,Y,+LAWgB,SAAA6B,GACb,EAAKzB,MAAMuB,SAASE,EAAEC,OAAOR,S,0CAGhB,SAAAO,GACbA,EAAEyB,iBACF,EAAKlD,MAAMmB,a,yCAGC,WACZ,EAAKnB,MAAMmB,a,sCAGbtB,OAAA,WAAW,IAAD,EAC0BE,KAAKC,MAA/BkB,EADA,EACAA,MAAO6B,EADP,EACOA,SAET5C,EAHE,EACiBF,KAENG,cAAc3B,EAAS0B,OAE1C,OACE,oBAAMG,UAAU,qBAAqBa,SAAUpB,KAAKoD,mBAApD,EACE,qBACE7C,UAAU,eACVY,MAAOA,EACPK,SAAUxB,KAAKkC,eAGjB,YAAC,IAAD,CACEc,SAAUA,EACV7C,KAAK,QACLC,MAAOA,EACPE,QAASN,KAAKqD,gB,GAxCDR,IAAMC,iB,qECV7B,IAaMQ,EAFUvE,kBAXQ,SAAAG,GAAK,MAAK,CAChCqE,WAAYrE,EAAMI,MAAM,CAAC,aAAc,WAAY,UACnDkE,iBAAkBtE,EAAMI,MAAM,CAAC,aAAc,cAAe,YAGnC,SAAAE,GAAQ,MAAK,CACtCiE,aAAc,SAAAC,GAAM,OAAIlE,EAASmE,YAAgBD,KACjDpC,QAAS,kBAAM9B,EAAS+B,gBACxBqC,QAAS,kBAAMpE,EAASqE,kB,GAIzBhE,a,8GAcCiE,kBAAA,WAAsB,IAAD,EACc9D,KAAKC,OACtCwD,EAFmB,EACXA,cADW,EACGC,S,EAIxBK,qBAAA,YAEEH,EADoB5D,KAAKC,MAAjB2D,Y,EAIV9D,OAAA,WAAW,IAAD,EAC0CE,KAAKC,MAA/CsD,EADA,EACAA,WAAYC,EADZ,EACYA,iBAAkBlC,EAD9B,EAC8BA,QAChC0C,EAAaR,EAAiBhD,KAAO,EAE3C,OACE,mBAAKD,UAAU,sCAAf,EACE,YAAC,EAAD,IAEA,YAAC,EAAD,IAEA,mBAAKA,UAAU,sBAAf,EACE,mBAAKA,UAAU,4CAAf,EACGgD,EAAW5C,IAAI,SAAAxB,GAAS,OAAI,YAAC,EAAD,CAAyBA,UAAWA,EAAWC,OAAK,GAAtCD,MAG5C6E,GAAc,mBAAK1B,KAAK,SAASC,SAAS,KAAKhC,UAAU,mBAAmBD,QAASgB,IAEtF,YAAC,IAAD,CAAQ2C,aAAc,CAAEC,GAAI,KAAOnC,MAAO,CAAEmC,EAAGC,IAAOH,EAAa,GAAK,IAAK,CAAEI,UAAW,IAAKC,QAAS,YAAxG,EACG,gBAAGH,EAAH,EAAGA,EAAH,OACC,mBAAK3D,UAAU,yBAAyBwB,MAAO,CAAEuC,UAAiB,IAANJ,EAAU,KAAV,cAA+BA,EAA/B,KAAsCK,YAAmB,MAAPL,EAAa,SAAW,iBAAtI,EACGV,EAAiB7C,IAAI,SAAAxB,GAAS,OAAI,YAAC,EAAD,CAAyBA,UAAWA,GAAtBA,W,GA3CxCsB,K,0BAEJ,CACjBiD,OAAQ7C,IAAU2D,OAAO5D,WACzB6D,QAAS5D,IAAUE,KAAKH,WACxBV,KAAMW,IAAUC,OAAOF,WACvB6C,aAAc5C,IAAUE,KAAKH,WAC7BU,QAAST,IAAUE,KAAKH,WACxBgD,QAAS/C,IAAUE,KAAKH,WACxB2C,WAAY7C,IAAmBgE,KAAK9D,WACpC4C,iBAAkB9C,IAAmBgE,KAAK9D,a","file":"features/list_editor.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { makeGetAccount } from '../../../selectors';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport IconButton from '../../../components/icon_button';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { removeFromListEditor, addToListEditor } from '../../../actions/lists';\n\nconst messages = defineMessages({\n remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' },\n add: { id: 'lists.account.add', defaultMessage: 'Add to list' },\n});\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 @connect(makeMapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Account extends ImmutablePureComponent {\n\n static propTypes = {\n account: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.object.isRequired,\n onRemove: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n added: PropTypes.bool,\n };\n\n static defaultProps = {\n added: false,\n };\n\n render () {\n const { account, intl, onRemove, onAdd, added } = this.props;\n\n let button;\n\n if (added) {\n button = <IconButton icon='times' title={intl.formatMessage(messages.remove)} onClick={onRemove} />;\n } else {\n button = <IconButton icon='plus' title={intl.formatMessage(messages.add)} onClick={onAdd} />;\n }\n\n return (\n <div className='account'>\n <div className='account__wrapper'>\n <div className='account__display-name'>\n <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>\n <DisplayName account={account} />\n </div>\n\n <div className='account__relationship'>\n {button}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n search: { id: 'lists.search', defaultMessage: 'Search among people you follow' },\n});\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 @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Search extends React.PureComponent {\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n handleChange = e => {\n this.props.onChange(e.target.value);\n }\n\n handleKeyUp = e => {\n if (e.keyCode === 13) {\n this.props.onSubmit(this.props.value);\n }\n }\n\n handleClear = () => {\n this.props.onClear();\n }\n\n render () {\n const { value, intl } = this.props;\n const hasValue = value.length > 0;\n\n return (\n <div className='list-editor__search search'>\n <label>\n <span style={{ display: 'none' }}>{intl.formatMessage(messages.search)}</span>\n\n <input\n className='search__input'\n type='text'\n value={value}\n onChange={this.handleChange}\n onKeyUp={this.handleKeyUp}\n placeholder={intl.formatMessage(messages.search)}\n />\n </label>\n\n <div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>\n <Icon id='search' className={classNames({ active: !hasValue })} />\n <Icon id='times-circle' aria-label={intl.formatMessage(messages.search)} className={classNames({ active: hasValue })} />\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { changeListEditorTitle, submitListEditor } from '../../../actions/lists';\nimport IconButton from '../../../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 '../../actions/lists';\nimport Account from './components/account';\nimport Search from './components/search';\nimport EditListForm from './components/edit_list_form';\nimport Motion from '../ui/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 <Search />\n\n <div className='drawer__pager'>\n <div className='drawer__inner list-editor__accounts'>\n {accountIds.map(accountId => <Account 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 => <Account 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/features/list_timeline.js b/priv/static/packs/features/list_timeline.js index a512abc47..c52c3bbeb 100644 --- a/priv/static/packs/features/list_timeline.js +++ b/priv/static/packs/features/list_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{673:function(e,t,a){"use strict";a.r(t),a.d(t,"default",function(){return D});var n,i,s,d=a(0),c=a(2),o=a(6),l=a(1),r=a(3),p=a.n(r),b=a(21),u=a(5),h=a.n(u),m=a(904),O=a(633),j=a(629),f=a(628),v=a(222),g=a(7),M=a(635),C=a(35),I=a(32),y=a(57),k=a(897),_=a(272),w=a(30),x=Object(g.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"}}),D=Object(b.connect)(function(e,t){return{list:e.getIn(["lists",t.params.id]),hasUnread:0<e.getIn(["timelines","list:"+t.params.id,"unread"])}})(n=Object(g.g)((s=i=function(n){function e(){for(var s,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return s=n.call.apply(n,[this].concat(t))||this,Object(l.a)(Object(c.a)(s),"handlePin",function(){var e=s.props,t=e.columnId,a=e.dispatch;t?a(Object(v.h)(t)):(a(Object(v.e)("LIST",{id:s.props.params.id})),s.context.router.history.push("/"))}),Object(l.a)(Object(c.a)(s),"handleMove",function(e){var t=s.props,a=t.columnId;(0,t.dispatch)(Object(v.g)(a,e))}),Object(l.a)(Object(c.a)(s),"handleHeaderClick",function(){s.column.scrollTop()}),Object(l.a)(Object(c.a)(s),"setRef",function(e){s.column=e}),Object(l.a)(Object(c.a)(s),"handleLoadMore",function(e){var t=s.props.params.id;s.props.dispatch(Object(C.t)(t,{maxId:e}))}),Object(l.a)(Object(c.a)(s),"handleEditClick",function(){s.props.dispatch(Object(y.d)("LIST_EDITOR",{listId:s.props.params.id}))}),Object(l.a)(Object(c.a)(s),"handleDeleteClick",function(){var e=s.props,t=e.dispatch,a=e.columnId,n=e.intl,i=s.props.params.id;t(Object(y.d)("CONFIRM",{message:n.formatMessage(x.deleteMessage),confirm:n.formatMessage(x.deleteConfirm),onConfirm:function(){t(Object(I.F)(i)),a?t(Object(v.h)(a)):s.context.router.history.push("/lists")}}))}),s}Object(o.a)(e,n);var t=e.prototype;return t.componentDidMount=function(){var e=this.props.dispatch,t=this.props.params.id;e(Object(I.G)(t)),e(Object(C.t)(t)),this.disconnect=e(Object(M.d)(t))},t.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,t=e.shouldUpdateScroll,a=e.hasUnread,n=e.columnId,i=e.multiColumn,s=e.list,c=this.props.params.id,o=!!n,l=s?s.get("title"):c;return void 0===s?Object(d.a)(O.a,{},void 0,Object(d.a)("div",{className:"scrollable"},void 0,Object(d.a)(_.a,{}))):!1===s?Object(d.a)(O.a,{},void 0,Object(d.a)(j.a,{}),Object(d.a)(k.a,{})):p.a.createElement(O.a,{ref:this.setRef,label:l},Object(d.a)(f.a,{icon:"list-ul",active:a,title:l,onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:o,multiColumn:i},void 0,Object(d.a)("div",{className:"column-header__links"},void 0,Object(d.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleEditClick},void 0,Object(d.a)(w.a,{id:"pencil"})," ",Object(d.a)(g.b,{id:"lists.edit",defaultMessage:"Edit list"})),Object(d.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleDeleteClick},void 0,Object(d.a)(w.a,{id:"trash"})," ",Object(d.a)(g.b,{id:"lists.delete",defaultMessage:"Delete list"}))),Object(d.a)("hr",{})),Object(d.a)(m.a,{trackScroll:!o,scrollKey:"list_timeline-"+n,timelineId:"list:"+c,onLoadMore:this.handleLoadMore,emptyMessage:Object(d.a)(g.b,{id:"empty_column.list",defaultMessage:"There is nothing in this list yet. When members of this list post new statuses, they will appear here."}),shouldUpdateScroll:t}))},e}(p.a.PureComponent),Object(l.a)(i,"contextTypes",{router:h.a.object}),n=s))||n)||n}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{720:function(e,t,i){"use strict";i.r(t),i.d(t,"default",function(){return D});var n,a,s,c=i(0),o=i(2),l=i(7),d=i(1),r=i(3),p=i.n(r),u=i(12),b=i(5),h=i.n(b),m=i(977),O=i(669),j=i(666),f=i(665),v=i(245),g=i(6),M=i(672),C=i(35),I=i(30),y=i(47),k=i(970),_=i(294),w=i(27),x=Object(g.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"}}),D=Object(u.connect)(function(e,t){return{list:e.getIn(["lists",t.params.id]),hasUnread:e.getIn(["timelines","list:"+t.params.id,"unread"])>0}})(n=Object(g.g)((s=a=function(e){function t(){for(var t,i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];return t=e.call.apply(e,[this].concat(n))||this,Object(d.a)(Object(o.a)(t),"handlePin",function(){var e=t.props,i=e.columnId,n=e.dispatch;i?n(Object(v.h)(i)):(n(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,n=i.columnId;(0,i.dispatch)(Object(v.g)(n,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(C.u)(i,{maxId:e}))}),Object(d.a)(Object(o.a)(t),"handleEditClick",function(){t.props.dispatch(Object(y.d)("LIST_EDITOR",{listId:t.props.params.id}))}),Object(d.a)(Object(o.a)(t),"handleDeleteClick",function(){var e=t.props,i=e.dispatch,n=e.columnId,a=e.intl,s=t.props.params.id;i(Object(y.d)("CONFIRM",{message:a.formatMessage(x.deleteMessage),confirm:a.formatMessage(x.deleteConfirm),onConfirm:function(){i(Object(I.F)(s)),n?i(Object(v.h)(n)):t.context.router.history.push("/lists")}}))}),t}Object(l.a)(t,e);var i=t.prototype;return i.componentDidMount=function(){var e=this.props.dispatch,t=this.props.params.id;e(Object(I.G)(t)),e(Object(C.u)(t)),this.disconnect=e(Object(M.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(I.G)(i)),t(Object(C.u)(i)),this.disconnect=t(Object(M.d)(i)))},i.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},i.render=function(){var e=this.props,t=e.shouldUpdateScroll,i=e.hasUnread,n=e.columnId,a=e.multiColumn,s=e.list,o=this.props.params.id,l=!!n,d=s?s.get("title"):o;return void 0===s?Object(c.a)(O.a,{},void 0,Object(c.a)("div",{className:"scrollable"},void 0,Object(c.a)(_.a,{}))):!1===s?Object(c.a)(O.a,{},void 0,Object(c.a)(j.a,{multiColumn:a}),Object(c.a)(k.a,{})):p.a.createElement(O.a,{bindToDocument:!a,ref:this.setRef,label:d},Object(c.a)(f.a,{icon:"list-ul",active:i,title:d,onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:a},void 0,Object(c.a)("div",{className:"column-header__links"},void 0,Object(c.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleEditClick},void 0,Object(c.a)(w.a,{id:"pencil"})," ",Object(c.a)(g.b,{id:"lists.edit",defaultMessage:"Edit list"})),Object(c.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.handleDeleteClick},void 0,Object(c.a)(w.a,{id:"trash"})," ",Object(c.a)(g.b,{id:"lists.delete",defaultMessage:"Delete list"})))),Object(c.a)(m.a,{trackScroll:!l,scrollKey:"list_timeline-"+n,timelineId:"list:"+o,onLoadMore:this.handleLoadMore,emptyMessage:Object(c.a)(g.b,{id:"empty_column.list",defaultMessage:"There is nothing in this list yet. When members of this list post new statuses, they will appear here."}),shouldUpdateScroll:t,bindToDocument:!a}))},t}(p.a.PureComponent),Object(d.a)(a,"contextTypes",{router:h.a.object}),n=s))||n)||n}}]); //# sourceMappingURL=list_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/list_timeline.js.map b/priv/static/packs/features/list_timeline.js.map index 4cc0c8ecb..9113e40c8 100644 --- a/priv/static/packs/features/list_timeline.js.map +++ b/priv/static/packs/features/list_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/list_timeline/index.js"],"names":["messages","defineMessages","deleteMessage","id","defaultMessage","deleteConfirm","ListTimeline","connect","state","props","list","getIn","params","hasUnread","injectIntl","_this$props","_this","columnId","dispatch","removeColumn","addColumn","context","router","history","push","dir","_this$props2","moveColumn","column","scrollTop","c","maxId","expandListTimeline","openModal","listId","_this$props3","intl","message","formatMessage","confirm","onConfirm","deleteList","componentDidMount","this","fetchList","disconnect","connectListStream","componentWillUnmount","render","_this$props4","shouldUpdateScroll","multiColumn","pinned","title","get","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_components_column__WEBPACK_IMPORTED_MODULE_8__","className","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_18__","_components_column_back_button__WEBPACK_IMPORTED_MODULE_9__","_components_missing_indicator__WEBPACK_IMPORTED_MODULE_17__","react__WEBPACK_IMPORTED_MODULE_4___default","a","createElement","ref","setRef","label","_components_column_header__WEBPACK_IMPORTED_MODULE_10__","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","tabIndex","handleEditClick","mastodon_components_icon__WEBPACK_IMPORTED_MODULE_19__","react_intl__WEBPACK_IMPORTED_MODULE_12__","handleDeleteClick","_ui_containers_status_list_container__WEBPACK_IMPORTED_MODULE_7__","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","React","PureComponent","PropTypes","object"],"mappings":"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","file":"features/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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connectListStream } from '../../actions/streaming';\nimport { expandListTimeline } from '../../actions/timelines';\nimport { fetchList, deleteList } from '../../actions/lists';\nimport { openModal } from '../../actions/modal';\nimport MissingIndicator from '../../components/missing_indicator';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Icon from 'mastodon/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});\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 shouldUpdateScroll: PropTypes.func,\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 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 render () {\n const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n const title = list ? list.get('title') : id;\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 <ColumnBackButton />\n <MissingIndicator />\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 >\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 <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. When members of this list post new statuses, they will appear here.' />}\n shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/features/list_timeline/index.js"],"names":["messages","defineMessages","deleteMessage","deleteConfirm","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","componentDidMount","this","fetchList","disconnect","connectListStream","componentWillReceiveProps","nextProps","componentWillUnmount","render","shouldUpdateScroll","multiColumn","pinned","title","get","className","bindToDocument","ref","setRef","label","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","tabIndex","handleEditClick","defaultMessage","handleDeleteClick","trackScroll","scrollKey","timelineId","onLoadMore","handleLoadMore","emptyMessage","React","PureComponent","PropTypes","object"],"mappings":"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","file":"features/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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connectListStream } from '../../actions/streaming';\nimport { expandListTimeline } from '../../actions/timelines';\nimport { fetchList, deleteList } from '../../actions/lists';\nimport { openModal } from '../../actions/modal';\nimport MissingIndicator from '../../components/missing_indicator';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Icon from 'mastodon/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});\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 shouldUpdateScroll: PropTypes.func,\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 render () {\n const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list } = this.props;\n const { id } = this.props.params;\n const pinned = !!columnId;\n const title = list ? list.get('title') : id;\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 <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n return (\n <Column bindToDocument={!multiColumn} 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 >\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 </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. When members of this list post new statuses, they will appear here.' />}\n shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/lists.js b/priv/static/packs/features/lists.js index 96d0b1c6e..ab2ec99e8 100644 --- a/priv/static/packs/features/lists.js +++ b/priv/static/packs/features/lists.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{674:function(t,e,i){"use strict";i.r(e),i.d(e,"default",function(){return x});var s,n,a,o=i(0),r=i(6),c=i(1),u=(i(3),i(21)),l=i(5),d=i.n(l),p=i(26),b=i.n(p),f=i(272),g=i(626),h=i(634),j=i(32),O=i(7),m=i(25),y=i(988),v=i(989),w=i(990),M=i(61),q=i(893),R=Object(O.f)({heading:{id:"column.lists",defaultMessage:"Lists"},subheading:{id:"lists.subheading",defaultMessage:"Your lists"}}),k=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}),x=Object(u.connect)(function(t){return{lists:k(t)}})(s=Object(O.g)((a=n=function(t){function e(){return t.apply(this,arguments)||this}Object(r.a)(e,t);var i=e.prototype;return i.componentWillMount=function(){this.props.dispatch(Object(j.I)())},i.render=function(){var t=this.props,e=t.intl,i=t.shouldUpdateScroll,s=t.lists;if(!s)return Object(o.a)(g.a,{},void 0,Object(o.a)(f.a,{}));var n=Object(o.a)(O.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,{icon:"list-ul",heading:e.formatMessage(R.heading)},void 0,Object(o.a)(h.a,{}),Object(o.a)(w.a,{}),Object(o.a)(v.a,{text:e.formatMessage(R.subheading)}),Object(o.a)(q.a,{scrollKey:"lists",shouldUpdateScroll:i,emptyMessage:n},void 0,s.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}(m.a),Object(c.a)(n,"propTypes",{params:d.a.object.isRequired,dispatch:d.a.func.isRequired,lists:b.a.list,intl:d.a.object.isRequired}),s=a))||s)||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{721: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(12)),l=i(5),d=i.n(l),p=i(18),b=i.n(p),f=i(294),g=i(663),h=i(670),j=i(30),m=i(6),O=i(19),y=i(1093),v=i(1094),w=i(1095),M=i(53),q=i(964),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(j.I)())},i.render=function(){var t=this.props,e=t.intl,i=t.shouldUpdateScroll,n=t.lists,s=t.multiColumn;if(!n)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:!s,icon:"list-ul",heading:e.formatMessage(C.heading)},void 0,Object(o.a)(h.a,{}),Object(o.a)(w.a,{}),Object(o.a)(q.a,{scrollKey:"lists",shouldUpdateScroll:i,emptyMessage:a,prepend:Object(o.a)(v.a,{text:e.formatMessage(C.subheading)}),bindToDocument:!s},void 0,n.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:b.a.list,intl:d.a.object.isRequired,multiColumn:d.a.bool}),n=a))||n)||n}}]); //# sourceMappingURL=lists.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/lists.js.map b/priv/static/packs/features/lists.js.map index 26746254e..2387e21c9 100644 --- a/priv/static/packs/features/lists.js.map +++ b/priv/static/packs/features/lists.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/lists/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","subheading","getOrderedLists","createSelector","state","get","lists","toList","filter","item","sort","a","b","localeCompare","Lists","connect","injectIntl","componentWillMount","this","props","dispatch","fetchLists","render","_this$props","intl","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_8__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_7__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_11__","icon","formatMessage","_components_column_back_button_slim__WEBPACK_IMPORTED_MODULE_9__","_components_new_list_form__WEBPACK_IMPORTED_MODULE_15__","_ui_components_column_subheading__WEBPACK_IMPORTED_MODULE_14__","text","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_17__","scrollKey","map","list","_ui_components_column_link__WEBPACK_IMPORTED_MODULE_13__","to","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes"],"mappings":"qTAgBMA,EAAWC,YAAe,CAC9BC,QAAO,CAAAC,GAAA,eAAAC,eAAA,SACPC,WAAU,CAAAF,GAAA,mBAAAC,eAAA,gBAGNE,EAAkBC,YAAe,CAAC,SAAAC,GAAK,OAAIA,EAAMC,IAAI,WAAW,SAAAC,GACpE,OAAKA,EAIEA,EAAMC,SAASC,OAAO,SAAAC,GAAI,QAAMA,IAAMC,KAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEN,IAAI,SAASQ,cAAcD,EAAEP,IAAI,YAHtFC,IAYLQ,EAFUC,kBAJQ,SAAAX,GAAK,MAAK,CAChCE,MAAOJ,EAAgBE,QAIxBY,2HAUCC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,kBAGtBC,OAAA,WAAU,IAAAC,EACoCL,KAAKC,MAAzCK,EADAD,EACAC,KAAMC,EADNF,EACME,mBAAoBnB,EAD1BiB,EAC0BjB,MAElC,IAAKA,EACH,OACEoB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAMC,EAAeJ,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAkBhC,GAAG,qBAAqBC,eAAe,6EAE9E,OACE0B,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,CAAQI,KAAK,UAAUlC,QAAS0B,EAAKS,cAAcrC,EAASE,eAA5D,EACE4B,OAAAC,EAAA,EAAAD,CAACQ,EAAA,EAAD,IAEAR,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,IAEAT,OAAAC,EAAA,EAAAD,CAACU,EAAA,EAAD,CAAkBC,KAAMb,EAAKS,cAAcrC,EAASK,cACpDyB,OAAAC,EAAA,EAAAD,CAACY,EAAA,EAAD,CACEC,UAAU,QACVd,mBAAoBA,EACpBK,aAAcA,QAHhB,EAKGxB,EAAMkC,IAAI,SAAAC,GAAI,OACbf,OAAAC,EAAA,EAAAD,CAACgB,EAAA,EAAD,CAAiCC,GAAE,mBAAqBF,EAAKpC,IAAI,MAAS2B,KAAK,UAAUK,KAAMI,EAAKpC,IAAI,UAAvFoC,EAAKpC,IAAI,eAvClBuC,+BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzB5B,SAAU0B,IAAUG,KAAKD,WACzB1C,MAAO4C,IAAmBT,KAC1BjB,KAAMsB,IAAUC,OAAOC","file":"features/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 '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport { fetchLists } from '../../actions/lists';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from '../ui/components/column_link';\nimport ColumnSubheading from '../ui/components/column_subheading';\nimport NewListForm from './components/new_list_form';\nimport { createSelector } from 'reselect';\nimport ScrollableList from '../../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 };\n\n componentWillMount () {\n this.props.dispatch(fetchLists());\n }\n\n render () {\n const { intl, shouldUpdateScroll, lists } = 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 icon='list-ul' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <NewListForm />\n\n <ColumnSubheading text={intl.formatMessage(messages.subheading)} />\n <ScrollableList\n scrollKey='lists'\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/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","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","icon","formatMessage","scrollKey","prepend","text","map","list","to","ImmutablePureComponent","params","PropTypes","object","isRequired","func","ImmutablePropTypes","bool"],"mappings":"wTAgBMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,0CACPC,WAAW,CAAD,qDAGNC,EAAkBC,YAAe,CAAC,SAAAC,GAAK,OAAIA,EAAMC,IAAI,WAAW,SAAAC,GACpE,OAAKA,EAIEA,EAAMC,SAASC,OAAO,SAAAC,GAAI,QAAMA,IAAMC,KAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEN,IAAI,SAASQ,cAAcD,EAAEP,IAAI,YAHtFC,IAYLQ,EAFUC,kBAJQ,SAAAX,GAAK,MAAK,CAChCE,MAAOJ,EAAgBE,K,GAIxBY,a,8GAWCC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAGtBC,OAAA,WAAW,IAAD,EACiDJ,KAAKC,MAAtDI,EADA,EACAA,KAAMC,EADN,EACMA,mBAAoBlB,EAD1B,EAC0BA,MAAOmB,EADjC,EACiCA,YAEzC,IAAKnB,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMoB,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,6EAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,UAAU9B,QAASuB,EAAKQ,cAAcjC,EAASE,eAA1F,EACE,YAAC,IAAD,IAEA,YAAC,IAAD,IAEA,YAAC,IAAD,CACEgC,UAAU,QACVR,mBAAoBA,EACpBE,aAAcA,EACdO,QAAS,YAAC,IAAD,CAAkBC,KAAMX,EAAKQ,cAAcjC,EAASG,cAC7D4B,gBAAiBJ,QALnB,EAOGnB,EAAM6B,IAAI,SAAAC,GAAI,OACb,YAAC,IAAD,CAAiCC,GAAE,mBAAqBD,EAAK/B,IAAI,MAASyB,KAAK,UAAUI,KAAME,EAAK/B,IAAI,UAAvF+B,EAAK/B,IAAI,Y,GAzClBiC,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBtB,SAAUoB,IAAUG,KAAKD,WACzBpC,MAAOsC,IAAmBR,KAC1Bb,KAAMiB,IAAUC,OAAOC,WACvBjB,YAAae,IAAUK,O","file":"features/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 '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport { fetchLists } from '../../actions/lists';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ColumnLink from '../ui/components/column_link';\nimport ColumnSubheading from '../ui/components/column_subheading';\nimport NewListForm from './components/new_list_form';\nimport { createSelector } from 'reselect';\nimport ScrollableList from '../../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, shouldUpdateScroll, 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='list-ul' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n\n <NewListForm />\n\n <ScrollableList\n scrollKey='lists'\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\n prepend={<ColumnSubheading text={intl.formatMessage(messages.subheading)} />}\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/features/mutes.js b/priv/static/packs/features/mutes.js index adb350f23..3e1ad7304 100644 --- a/priv/static/packs/features/mutes.js +++ b/priv/static/packs/features/mutes.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{686:function(e,t,a){"use strict";a.r(t),a.d(t,"default",function(){return L});var n,o,s,c=a(0),r=a(2),u=a(6),i=a(1),d=a(56),l=a.n(d),p=(a(3),a(21)),h=a(7),b=a(25),f=a(5),j=a.n(f),m=a(26),O=a.n(m),M=a(272),g=a(626),v=a(634),y=a(895),w=a(196),I=a(893),q=Object(h.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(h.g)((s=o=function(o){function e(){for(var e,t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];return e=o.call.apply(o,[this].concat(a))||this,Object(i.a)(Object(r.a)(e),"handleLoadMore",l()(function(){e.props.dispatch(Object(w.e)())},300,{leading:!0})),e}Object(u.a)(e,o);var t=e.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(w.f)())},t.render=function(){var e=this.props,t=e.intl,a=e.shouldUpdateScroll,n=e.hasMore,o=e.accountIds;if(!o)return Object(c.a)(g.a,{},void 0,Object(c.a)(M.a,{}));var s=Object(c.a)(h.b,{id:"empty_column.mutes",defaultMessage:"You haven't muted any users yet."});return Object(c.a)(g.a,{icon:"volume-off",heading:t.formatMessage(q.heading)},void 0,Object(c.a)(v.a,{}),Object(c.a)(I.a,{scrollKey:"mutes",onLoadMore:this.handleLoadMore,hasMore:n,shouldUpdateScroll:a,emptyMessage:s},void 0,o.map(function(e){return Object(c.a)(y.a,{id:e},e)})))},e}(b.a),Object(i.a)(o,"propTypes",{params:j.a.object.isRequired,dispatch:j.a.func.isRequired,shouldUpdateScroll:j.a.func,hasMore:j.a.bool,accountIds:O.a.list,intl:j.a.object.isRequired}),n=s))||n)||n}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{733: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(7),i=a(1),d=a(63),l=a.n(d),p=(a(3),a(12)),b=a(6),h=a(19),m=a(5),f=a.n(m),j=a(18),O=a.n(j),M=a(294),g=a(663),v=a(670),y=a(966),w=a(206),I=a(964),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){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(i.a)(Object(u.a)(t),"handleLoadMore",l()(function(){t.props.dispatch(Object(w.e)())},300,{leading:!0})),t}Object(r.a)(t,e);var a=t.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(w.f)())},a.render=function(){var e=this.props,t=e.intl,a=e.shouldUpdateScroll,n=e.hasMore,o=e.accountIds,s=e.multiColumn;if(!o)return Object(c.a)(g.a,{},void 0,Object(c.a)(M.a,{}));var u=Object(c.a)(b.b,{id:"empty_column.mutes",defaultMessage:"You haven't muted any users yet."});return Object(c.a)(g.a,{bindToDocument:!s,icon:"volume-off",heading:t.formatMessage(q.heading)},void 0,Object(c.a)(v.a,{}),Object(c.a)(I.a,{scrollKey:"mutes",onLoadMore:this.handleLoadMore,hasMore:n,shouldUpdateScroll:a,emptyMessage:u,bindToDocument:!s},void 0,o.map(function(e){return Object(c.a)(y.a,{id:e},e)})))},t}(h.a),Object(i.a)(o,"propTypes",{params:f.a.object.isRequired,dispatch:f.a.func.isRequired,shouldUpdateScroll:f.a.func,hasMore:f.a.bool,accountIds:O.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/features/mutes.js.map b/priv/static/packs/features/mutes.js.map index a8d6d44d6..d32768e16 100644 --- a/priv/static/packs/features/mutes.js.map +++ b/priv/static/packs/features/mutes.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/mutes/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","Mutes","connect","state","accountIds","getIn","hasMore","injectIntl","lodash_debounce__WEBPACK_IMPORTED_MODULE_4___default","_this","props","dispatch","expandMutes","leading","componentWillMount","this","fetchMutes","render","_this$props","intl","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_12__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_11__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_7__","icon","formatMessage","_components_column_back_button_slim__WEBPACK_IMPORTED_MODULE_13__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_16__","scrollKey","onLoadMore","handleLoadMore","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_14__","ImmutablePureComponent","params","PropTypes","object","isRequired","func","bool","ImmutablePropTypes","list"],"mappings":"oTAcMA,EAAWC,YAAe,CAC9BC,QAAO,CAAAC,GAAA,eAAAC,eAAA,iBAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,QAAS,UAChDC,UAAWH,EAAME,MAAM,CAAC,aAAc,QAAS,cAIhDE,gNAgBkBC,IAAS,WACxBC,EAAKC,MAAMC,SAASC,gBACnB,IAAK,CAAEC,SAAS,mDANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,kBAOtBC,OAAA,WAAU,IAAAC,EACkDH,KAAKL,MAAvDS,EADAD,EACAC,KAAMC,EADNF,EACME,mBAAoBd,EAD1BY,EAC0BZ,QAASF,EADnCc,EACmCd,WAE3C,IAAKA,EACH,OACEiB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAMC,EAAeJ,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAkB3B,GAAG,qBAAqBC,eAAe,qCAE9E,OACEqB,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,CAAQI,KAAK,aAAa7B,QAASqB,EAAKS,cAAchC,EAASE,eAA/D,EACEuB,OAAAC,EAAA,EAAAD,CAACQ,EAAA,EAAD,IACAR,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,CACEC,UAAU,QACVC,WAAYjB,KAAKkB,eACjB3B,QAASA,EACTc,mBAAoBA,EACpBK,aAAcA,QALhB,EAOGrB,EAAW8B,IAAI,SAAAnC,GAAE,OAChBsB,OAAAC,EAAA,EAAAD,CAACc,EAAA,EAAD,CAA2BpC,GAAIA,GAARA,WA3CfqC,+BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzB7B,SAAU2B,IAAUG,KAAKD,WACzBpB,mBAAoBkB,IAAUG,KAC9BnC,QAASgC,IAAUI,KACnBtC,WAAYuC,IAAmBC,KAC/BzB,KAAMmB,IAAUC,OAAOC","file":"features/mutes.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport AccountContainer from '../../containers/account_container';\nimport { fetchMutes, expandMutes } from '../../actions/mutes';\nimport ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\n hasMore: PropTypes.bool,\n accountIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\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, shouldUpdateScroll, hasMore, accountIds } = 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 icon='volume-off' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='mutes'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/mutes/index.js"],"names":["messages","defineMessages","heading","Mutes","connect","state","accountIds","getIn","hasMore","injectIntl","props","dispatch","expandMutes","leading","componentWillMount","this","fetchMutes","render","intl","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","bindToDocument","icon","formatMessage","scrollKey","onLoadMore","handleLoadMore","map","ImmutablePureComponent","params","PropTypes","object","isRequired","func","bool","ImmutablePropTypes","list"],"mappings":"oTAcMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,kDAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,WAAYD,EAAME,MAAM,CAAC,aAAc,QAAS,UAChDC,UAAWH,EAAME,MAAM,CAAC,aAAc,QAAS,W,GAIhDE,a,mMAiBkB,IAAS,WACxB,EAAKC,MAAMC,SAASC,gBACnB,IAAK,CAAEC,SAAS,K,8CANnBC,mBAAA,WACEC,KAAKL,MAAMC,SAASK,gB,EAOtBC,OAAA,WAAW,IAAD,EAC+DF,KAAKL,MAApEQ,EADA,EACAA,KAAMC,EADN,EACMA,mBAAoBX,EAD1B,EAC0BA,QAASF,EADnC,EACmCA,WAAYc,EAD/C,EAC+CA,YAEvD,IAAKd,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMe,EAAe,YAAC,IAAD,CAAkBC,GAAG,qBAAqBC,eAAe,qCAE9E,OACE,YAAC,IAAD,CAAQC,gBAAiBJ,EAAaK,KAAK,aAAavB,QAASgB,EAAKQ,cAAc1B,EAASE,eAA7F,EACE,YAAC,IAAD,IACA,YAAC,IAAD,CACEyB,UAAU,QACVC,WAAYb,KAAKc,eACjBrB,QAASA,EACTW,mBAAoBA,EACpBE,aAAcA,EACdG,gBAAiBJ,QANnB,EAQGd,EAAWwB,IAAI,SAAAR,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,GAARA,Q,GA7CfS,K,0BAEC,CACjBC,OAAQC,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzBhB,mBAAoBc,IAAUG,KAC9B5B,QAASyB,IAAUI,KACnB/B,WAAYgC,IAAmBC,KAC/BrB,KAAMe,IAAUC,OAAOC,WACvBf,YAAaa,IAAUI,O","file":"features/mutes.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { debounce } from 'lodash';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport AccountContainer from '../../containers/account_container';\nimport { fetchMutes, expandMutes } from '../../actions/mutes';\nimport ScrollableList from '../../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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, hasMore, 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.mutes' defaultMessage=\"You haven't muted any users yet.\" />;\n\n return (\n <Column bindToDocument={!multiColumn} icon='volume-off' heading={intl.formatMessage(messages.heading)}>\n <ColumnBackButtonSlim />\n <ScrollableList\n scrollKey='mutes'\n onLoadMore={this.handleLoadMore}\n hasMore={hasMore}\n shouldUpdateScroll={shouldUpdateScroll}\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/features/notifications.js b/priv/static/packs/features/notifications.js index dc14de768..5d292390b 100644 --- a/priv/static/packs/features/notifications.js +++ b/priv/static/packs/features/notifications.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{691:function(t,e,i){"use strict";i.r(e);var o,n,a,s,c,l,r,p=i(0),d=i(2),u=i(6),f=i(1),b=i(56),h=i.n(b),g=i(3),O=i.n(g),j=i(21),v=i(633),m=i(628),M=i(85),_=i(222),w=i(200),C=i(5),y=i.n(C),k=i(26),P=i.n(k),x=i(903),N=i(895),S=i(7),I=i(379),F=i(25),W=i(343),H=i(30),T=function(t,e,i){var o=[e];return o.push(t.formatDate(i,{hour:"2-digit",minute:"2-digit",month:"short",day:"numeric"})),o.join(", ")},R=Object(S.g)((a=n=function(n){function t(){for(var o,t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return o=n.call.apply(n,[this].concat(e))||this,Object(f.a)(Object(d.a)(o),"handleMoveUp",function(){var t=o.props,e=t.notification;(0,t.onMoveUp)(e.get("id"))}),Object(f.a)(Object(d.a)(o),"handleMoveDown",function(){var t=o.props,e=t.notification;(0,t.onMoveDown)(e.get("id"))}),Object(f.a)(Object(d.a)(o),"handleOpen",function(){var t=o.props.notification;t.get("status")?o.context.router.history.push("/statuses/"+t.get("status")):o.handleOpenProfile()}),Object(f.a)(Object(d.a)(o),"handleOpenProfile",function(){var t=o.props.notification;o.context.router.history.push("/accounts/"+t.getIn(["account","id"]))}),Object(f.a)(Object(d.a)(o),"handleMention",function(t){t.preventDefault();var e=o.props,i=e.notification;(0,e.onMention)(i.get("account"),o.context.router.history)}),Object(f.a)(Object(d.a)(o),"handleHotkeyFavourite",function(){var t=o.props.status;t&&o.props.onFavourite(t)}),Object(f.a)(Object(d.a)(o),"handleHotkeyBoost",function(t){var e=o.props.status;e&&o.props.onReblog(e,t)}),Object(f.a)(Object(d.a)(o),"handleHotkeyToggleHidden",function(){var t=o.props.status;t&&o.props.onToggleHidden(t)}),o}Object(u.a)(t,n);var e=t.prototype;return e.getHandlers=function(){return{reply:this.handleMention,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,mention:this.handleMention,open:this.handleOpen,openProfile:this.handleOpenProfile,moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,toggleHidden:this.handleHotkeyToggleHidden}},e.renderFollow=function(t,e,i){var o=this.props.intl;return Object(p.a)(W.HotKeys,{handlers:this.getHandlers()},void 0,Object(p.a)("div",{className:"notification notification-follow focusable",tabIndex:"0","aria-label":T(o,o.formatMessage({id:"notification.follow",defaultMessage:"{name} followed you"},{name:e.get("acct")}),t.get("created_at"))},void 0,Object(p.a)("div",{className:"notification__message"},void 0,Object(p.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(p.a)(H.a,{id:"user-plus",fixedWidth:!0})),Object(p.a)("span",{title:t.get("created_at")},void 0,Object(p.a)(S.b,{id:"notification.follow",defaultMessage:"{name} followed you",values:{name:i}}))),Object(p.a)(N.a,{id:e.get("id"),withNote:!1,hidden:this.props.hidden})))},e.renderMention=function(t){return Object(p.a)(x.a,{id:t.get("status"),withDismiss:!0,hidden:this.props.hidden,onMoveDown:this.handleMoveDown,onMoveUp:this.handleMoveUp,contextType:"notifications",getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})},e.renderFavourite=function(t,e){var i=this.props.intl;return Object(p.a)(W.HotKeys,{handlers:this.getHandlers()},void 0,Object(p.a)("div",{className:"notification notification-favourite focusable",tabIndex:"0","aria-label":T(i,i.formatMessage({id:"notification.favourite",defaultMessage:"{name} favourited your status"},{name:t.getIn(["account","acct"])}),t.get("created_at"))},void 0,Object(p.a)("div",{className:"notification__message"},void 0,Object(p.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(p.a)(H.a,{id:"star",className:"star-icon",fixedWidth:!0})),Object(p.a)("span",{title:t.get("created_at")},void 0,Object(p.a)(S.b,{id:"notification.favourite",defaultMessage:"{name} favourited your status",values:{name:e}}))),Object(p.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:!!this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},e.renderReblog=function(t,e){var i=this.props.intl;return Object(p.a)(W.HotKeys,{handlers:this.getHandlers()},void 0,Object(p.a)("div",{className:"notification notification-reblog focusable",tabIndex:"0","aria-label":T(i,i.formatMessage({id:"notification.reblog",defaultMessage:"{name} boosted your status"},{name:t.getIn(["account","acct"])}),t.get("created_at"))},void 0,Object(p.a)("div",{className:"notification__message"},void 0,Object(p.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(p.a)(H.a,{id:"retweet",fixedWidth:!0})),Object(p.a)("span",{title:t.get("created_at")},void 0,Object(p.a)(S.b,{id:"notification.reblog",defaultMessage:"{name} boosted your status",values:{name:e}}))),Object(p.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},e.renderPoll=function(t){var e=this.props.intl;return Object(p.a)(W.HotKeys,{handlers:this.getHandlers()},void 0,Object(p.a)("div",{className:"notification notification-poll focusable",tabIndex:"0","aria-label":T(e,e.formatMessage({id:"notification.poll",defaultMessage:"A poll you have voted in has ended"}),t.get("created_at"))},void 0,Object(p.a)("div",{className:"notification__message"},void 0,Object(p.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(p.a)(H.a,{id:"tasks",fixedWidth:!0})),Object(p.a)("span",{title:t.get("created_at")},void 0,Object(p.a)(S.b,{id:"notification.poll",defaultMessage:"A poll you have voted in has ended"}))),Object(p.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},e.render=function(){var t=this.props.notification,e=t.get("account"),i={__html:e.get("display_name_html")},o=Object(p.a)("bdi",{},void 0,Object(p.a)(I.a,{className:"notification__display-name",href:e.get("url"),title:e.get("acct"),to:"/accounts/"+e.get("id"),dangerouslySetInnerHTML:i}));switch(t.get("type")){case"follow":return this.renderFollow(t,e,o);case"mention":return this.renderMention(t);case"favourite":return this.renderFavourite(t,o);case"reblog":return this.renderReblog(t,o);case"poll":return this.renderPoll(t)}return null},t}(F.a),Object(f.a)(n,"contextTypes",{router:y.a.object}),Object(f.a)(n,"propTypes",{notification:P.a.map.isRequired,hidden:y.a.bool,onMoveUp:y.a.func.isRequired,onMoveDown:y.a.func.isRequired,onMention:y.a.func.isRequired,onFavourite:y.a.func.isRequired,onReblog:y.a.func.isRequired,onToggleHidden:y.a.func.isRequired,status:P.a.map,intl:y.a.object.isRequired,getScrollPosition:y.a.func,updateScrollBottom:y.a.func,cacheMediaWidth:y.a.func,cachedMediaWidth:y.a.number}),o=a))||o,D=i(57),q=i(22),B=i(58),U=i(86),L=i(24),A=Object(j.connect)(function(){var o=Object(w.e)(),n=Object(w.f)();return function(t,e){var i=o(t,e.notification,e.accountId);return{notification:i,status:i.get("status")?n(t,{id:i.get("status")}):null}}},function(i){return{onMention:function(t,e){i(Object(q.bb)(t,e))},onModalReblog:function(t){i(Object(B.o)(t))},onReblog:function(t,e){t.get("reblogged")?i(Object(B.r)(t)):e.shiftKey||!L.b?this.onModalReblog(t):i(Object(D.d)("BOOST",{status:t,onReblog:this.onModalReblog}))},onFavourite:function(t){t.get("favourited")?i(Object(B.p)(t)):i(Object(B.k)(t))},onToggleHidden:function(t){t.get("hidden")?i(Object(U.k)(t.get("id"))):i(Object(U.i)(t.get("id")))}}})(R),K=function(t){function e(){return t.apply(this,arguments)||this}return Object(u.a)(e,t),e.prototype.render=function(){return Object(p.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.props.onClick},void 0,Object(p.a)(H.a,{id:"eraser"})," ",Object(p.a)(S.b,{id:"notifications.clear",defaultMessage:"Clear notifications"}))},e}(O.a.PureComponent),z=i(933),G=function(n){function t(){for(var i,t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];return i=n.call.apply(n,[this].concat(e))||this,Object(f.a)(Object(d.a)(i),"onPushChange",function(t,e){i.props.onChange(["push"].concat(t),e)}),i}return Object(u.a)(t,n),t.prototype.render=function(){var t=this.props,e=t.settings,i=t.pushSettings,o=t.onChange,n=t.onClear,a=Object(p.a)(S.b,{id:"notifications.column_settings.filter_bar.show",defaultMessage:"Show"}),s=Object(p.a)(S.b,{id:"notifications.column_settings.filter_bar.advanced",defaultMessage:"Display all categories"}),c=Object(p.a)(S.b,{id:"notifications.column_settings.alert",defaultMessage:"Desktop notifications"}),l=Object(p.a)(S.b,{id:"notifications.column_settings.show",defaultMessage:"Show in column"}),r=Object(p.a)(S.b,{id:"notifications.column_settings.sound",defaultMessage:"Play sound"}),d=i.get("browserSupport")&&i.get("isSubscribed"),u=d&&Object(p.a)(S.b,{id:"notifications.column_settings.push",defaultMessage:"Push notifications"});return Object(p.a)("div",{},void 0,Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(K,{onClick:n})),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-filter-bar"},void 0,Object(p.a)("span",{id:"notifications-filter-bar",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.filter_bar.category",defaultMessage:"Quick filter bar"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","show"],onChange:o,label:a}),Object(p.a)(z.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","advanced"],onChange:o,label:s}))),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-follow"},void 0,Object(p.a)("span",{id:"notifications-follow",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.follow",defaultMessage:"New followers:"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow"],onChange:o,label:c}),d&&Object(p.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","follow"],onChange:this.onPushChange,label:u}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","follow"],onChange:o,label:l}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow"],onChange:o,label:r}))),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-favourite"},void 0,Object(p.a)("span",{id:"notifications-favourite",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.favourite",defaultMessage:"Favourites:"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","favourite"],onChange:o,label:c}),d&&Object(p.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","favourite"],onChange:this.onPushChange,label:u}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","favourite"],onChange:o,label:l}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","favourite"],onChange:o,label:r}))),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-mention"},void 0,Object(p.a)("span",{id:"notifications-mention",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.mention",defaultMessage:"Mentions:"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","mention"],onChange:o,label:c}),d&&Object(p.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","mention"],onChange:this.onPushChange,label:u}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","mention"],onChange:o,label:l}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","mention"],onChange:o,label:r}))),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-reblog"},void 0,Object(p.a)("span",{id:"notifications-reblog",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.reblog",defaultMessage:"Boosts:"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","reblog"],onChange:o,label:c}),d&&Object(p.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","reblog"],onChange:this.onPushChange,label:u}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","reblog"],onChange:o,label:l}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","reblog"],onChange:o,label:r}))),Object(p.a)("div",{role:"group","aria-labelledby":"notifications-poll"},void 0,Object(p.a)("span",{id:"notifications-poll",className:"column-settings__section"},void 0,Object(p.a)(S.b,{id:"notifications.column_settings.poll",defaultMessage:"Poll results:"})),Object(p.a)("div",{className:"column-settings__row"},void 0,Object(p.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","poll"],onChange:o,label:c}),d&&Object(p.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","poll"],onChange:this.onPushChange,label:u}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","poll"],onChange:o,label:l}),Object(p.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","poll"],onChange:o,label:r}))))},t}(O.a.PureComponent),J=i(70),E=i(206),Q=Object(S.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"}}),Y=Object(S.g)(Object(j.connect)(function(t){return{settings:t.getIn(["settings","notifications"]),pushSettings:t.get("push_notifications")}},function(i,t){var e=t.intl;return{onChange:function(t,e){"push"===t[0]?i(Object(E.e)(t.slice(1),e)):"quickFilter"===t[0]?(i(Object(J.c)(["notifications"].concat(t),e)),i(Object(M.k)("all"))):i(Object(J.c)(["notifications"].concat(t),e))},onClear:function(){i(Object(D.d)("CONFIRM",{message:e.formatMessage(Q.clearMessage),confirm:e.formatMessage(Q.clearConfirm),onConfirm:function(){return i(Object(M.h)())}}))}}})(G)),V=Object(S.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"}}),X=Object(S.g)(s=function(t){function e(){return t.apply(this,arguments)||this}Object(u.a)(e,t);var i=e.prototype;return i.onClick=function(t){var e=this;return function(){return e.props.selectFilter(t)}},i.render=function(){var t=this.props,e=t.selectedFilter,i=t.advancedMode,o=t.intl;return i?Object(p.a)("div",{className:"notification__filter-bar"},void 0,Object(p.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(p.a)(S.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(p.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention"),title:o.formatMessage(V.mentions)},void 0,Object(p.a)(H.a,{id:"at",fixedWidth:!0})),Object(p.a)("button",{className:"favourite"===e?"active":"",onClick:this.onClick("favourite"),title:o.formatMessage(V.favourites)},void 0,Object(p.a)(H.a,{id:"star",fixedWidth:!0})),Object(p.a)("button",{className:"reblog"===e?"active":"",onClick:this.onClick("reblog"),title:o.formatMessage(V.boosts)},void 0,Object(p.a)(H.a,{id:"retweet",fixedWidth:!0})),Object(p.a)("button",{className:"poll"===e?"active":"",onClick:this.onClick("poll"),title:o.formatMessage(V.polls)},void 0,Object(p.a)(H.a,{id:"tasks",fixedWidth:!0})),Object(p.a)("button",{className:"follow"===e?"active":"",onClick:this.onClick("follow"),title:o.formatMessage(V.follows)},void 0,Object(p.a)(H.a,{id:"user-plus",fixedWidth:!0}))):Object(p.a)("div",{className:"notification__filter-bar"},void 0,Object(p.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(p.a)(S.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(p.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention")},void 0,Object(p.a)(S.b,{id:"notifications.filter.mentions",defaultMessage:"Mentions"})))},e}(O.a.PureComponent))||s,Z=Object(j.connect)(function(t){return{selectedFilter:t.getIn(["settings","notifications","quickFilter","active"]),advancedMode:t.getIn(["settings","notifications","quickFilter","advanced"])}},function(e){return{selectFilter:function(t){e(Object(M.k)(t))}}})(X),$=i(61),tt=i(4),et=i(893),it=i(986);i.d(e,"default",function(){return at});var ot=Object(S.f)({title:{id:"column.notifications",defaultMessage:"Notifications"}}),nt=Object($.a)([function(t){return t.getIn(["settings","notifications","quickFilter","show"])},function(t){return t.getIn(["settings","notifications","quickFilter","active"])},function(t){return Object(tt.List)(t.getIn(["settings","notifications","shows"]).filter(function(t){return!t}).keys())},function(t){return t.getIn(["notifications","items"])}],function(t,e,i,o){return t&&"all"!==e?o.filter(function(t){return null!==t&&e===t.get("type")}):o.filterNot(function(t){return null!==t&&i.includes(t.get("type"))})}),at=Object(j.connect)(function(t){return{showFilterBar:t.getIn(["settings","notifications","quickFilter","show"]),notifications:nt(t),isLoading:t.getIn(["notifications","isLoading"],!0),isUnread:0<t.getIn(["notifications","unread"]),hasMore:t.getIn(["notifications","hasMore"])}})(c=Object(S.g)((r=l=function(n){function t(){for(var o,t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return o=n.call.apply(n,[this].concat(e))||this,Object(f.a)(Object(d.a)(o),"handleLoadGap",function(t){o.props.dispatch(Object(M.i)({maxId:t}))}),Object(f.a)(Object(d.a)(o),"handleLoadOlder",h()(function(){var t=o.props.notifications.last();o.props.dispatch(Object(M.i)({maxId:t&&t.get("id")}))},300,{leading:!0})),Object(f.a)(Object(d.a)(o),"handleScrollToTop",h()(function(){o.props.dispatch(Object(M.j)(!0))},100)),Object(f.a)(Object(d.a)(o),"handleScroll",h()(function(){o.props.dispatch(Object(M.j)(!1))},100)),Object(f.a)(Object(d.a)(o),"handlePin",function(){var t=o.props,e=t.columnId,i=t.dispatch;i(e?Object(_.h)(e):Object(_.e)("NOTIFICATIONS",{}))}),Object(f.a)(Object(d.a)(o),"handleMove",function(t){var e=o.props,i=e.columnId;(0,e.dispatch)(Object(_.g)(i,t))}),Object(f.a)(Object(d.a)(o),"handleHeaderClick",function(){o.column.scrollTop()}),Object(f.a)(Object(d.a)(o),"setColumnRef",function(t){o.column=t}),Object(f.a)(Object(d.a)(o),"handleMoveUp",function(e){var t=o.props.notifications.findIndex(function(t){return null!==t&&t.get("id")===e})-1;o._selectChild(t)}),Object(f.a)(Object(d.a)(o),"handleMoveDown",function(e){var t=o.props.notifications.findIndex(function(t){return null!==t&&t.get("id")===e})+1;o._selectChild(t)}),o}Object(u.a)(t,n);var e=t.prototype;return e.componentWillUnmount=function(){this.handleLoadOlder.cancel(),this.handleScrollToTop.cancel(),this.handleScroll.cancel(),this.props.dispatch(Object(M.j)(!1))},e._selectChild=function(t){var e=this.column.node.querySelector("article:nth-of-type("+(t+1)+") .focusable");e&&e.focus()},e.render=function(){var i=this,t=this.props,e=t.intl,o=t.notifications,n=t.shouldUpdateScroll,a=t.isLoading,s=t.isUnread,c=t.columnId,l=t.multiColumn,r=t.hasMore,d=t.showFilterBar,u=!!c,f=Object(p.a)(S.b,{id:"empty_column.notifications",defaultMessage:"You don't have any notifications yet. Interact with others to start the conversation."}),b=null,h=d?Object(p.a)(Z,{}):null;b=a&&this.scrollableContent?this.scrollableContent:0<o.size||r?o.map(function(t,e){return null===t?Object(p.a)(it.a,{disabled:a,maxId:0<e?o.getIn([e-1,"id"]):null,onClick:i.handleLoadGap},"gap:"+o.getIn([e+1,"id"])):Object(p.a)(A,{notification:t,accountId:t.get("account"),onMoveUp:i.handleMoveUp,onMoveDown:i.handleMoveDown},t.get("id"))}):null,this.scrollableContent=b;var g=Object(p.a)(et.a,{scrollKey:"notifications-"+c,trackScroll:!u,isLoading:a,showLoading:a&&0===o.size,hasMore:r,emptyMessage:f,onLoadMore:this.handleLoadOlder,onScrollToTop:this.handleScrollToTop,onScroll:this.handleScroll,shouldUpdateScroll:n},void 0,b);return O.a.createElement(v.a,{ref:this.setColumnRef,label:e.formatMessage(ot.title)},Object(p.a)(m.a,{icon:"bell",active:s,title:e.formatMessage(ot.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:u,multiColumn:l},void 0,Object(p.a)(Y,{})),h,g)},t}(O.a.PureComponent),Object(f.a)(l,"defaultProps",{trackScroll:!0}),c=r))||c)||c}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{739:function(t,e,i){"use strict";i.r(e);var o,n,a,s,c,l,r,d=i(0),u=i(2),f=i(7),b=i(1),h=i(63),g=i.n(h),p=i(3),O=i.n(p),j=i(12),v=i(669),m=i(665),M=i(62),_=i(245),w=i(204),C=i(5),y=i.n(C),P=i(18),k=i.n(P),x=i(993),N=i(966),I=i(6),S=i(286),W=i(19),F=i(287),T=i(27),H=function(t,e,i){var o=[e];return o.push(t.formatDate(i,{hour:"2-digit",minute:"2-digit",month:"short",day:"numeric"})),o.join(", ")},D=Object(I.g)((a=n=function(t){function e(){for(var e,i=arguments.length,o=new Array(i),n=0;n<i;n++)o[n]=arguments[n];return e=t.call.apply(t,[this].concat(o))||this,Object(b.a)(Object(u.a)(e),"handleMoveUp",function(){var t=e.props,i=t.notification;(0,t.onMoveUp)(i.get("id"))}),Object(b.a)(Object(u.a)(e),"handleMoveDown",function(){var t=e.props,i=t.notification;(0,t.onMoveDown)(i.get("id"))}),Object(b.a)(Object(u.a)(e),"handleOpen",function(){var t=e.props.notification;t.get("status")?e.context.router.history.push("/statuses/"+t.get("status")):e.handleOpenProfile()}),Object(b.a)(Object(u.a)(e),"handleOpenProfile",function(){var t=e.props.notification;e.context.router.history.push("/accounts/"+t.getIn(["account","id"]))}),Object(b.a)(Object(u.a)(e),"handleMention",function(t){t.preventDefault();var i=e.props,o=i.notification;(0,i.onMention)(o.get("account"),e.context.router.history)}),Object(b.a)(Object(u.a)(e),"handleHotkeyFavourite",function(){var t=e.props.status;t&&e.props.onFavourite(t)}),Object(b.a)(Object(u.a)(e),"handleHotkeyBoost",function(t){var i=e.props.status;i&&e.props.onReblog(i,t)}),Object(b.a)(Object(u.a)(e),"handleHotkeyToggleHidden",function(){var t=e.props.status;t&&e.props.onToggleHidden(t)}),e}Object(f.a)(e,t);var i=e.prototype;return i.getHandlers=function(){return{reply:this.handleMention,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,mention:this.handleMention,open:this.handleOpen,openProfile:this.handleOpenProfile,moveUp:this.handleMoveUp,moveDown:this.handleMoveDown,toggleHidden:this.handleHotkeyToggleHidden}},i.renderFollow=function(t,e,i){var o=this.props.intl;return Object(d.a)(F.HotKeys,{handlers:this.getHandlers()},void 0,Object(d.a)("div",{className:"notification notification-follow focusable",tabIndex:"0","aria-label":H(o,o.formatMessage({id:"notification.follow",defaultMessage:"{name} followed you"},{name:e.get("acct")}),t.get("created_at"))},void 0,Object(d.a)("div",{className:"notification__message"},void 0,Object(d.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(d.a)(T.a,{id:"user-plus",fixedWidth:!0})),Object(d.a)("span",{title:t.get("created_at")},void 0,Object(d.a)(I.b,{id:"notification.follow",defaultMessage:"{name} followed you",values:{name:i}}))),Object(d.a)(N.a,{id:e.get("id"),withNote:!1,hidden:this.props.hidden})))},i.renderMention=function(t){return Object(d.a)(x.a,{id:t.get("status"),withDismiss:!0,hidden:this.props.hidden,onMoveDown:this.handleMoveDown,onMoveUp:this.handleMoveUp,contextType:"notifications",getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})},i.renderFavourite=function(t,e){var i=this.props.intl;return Object(d.a)(F.HotKeys,{handlers:this.getHandlers()},void 0,Object(d.a)("div",{className:"notification notification-favourite focusable",tabIndex:"0","aria-label":H(i,i.formatMessage({id:"notification.favourite",defaultMessage:"{name} favourited your status"},{name:t.getIn(["account","acct"])}),t.get("created_at"))},void 0,Object(d.a)("div",{className:"notification__message"},void 0,Object(d.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(d.a)(T.a,{id:"star",className:"star-icon",fixedWidth:!0})),Object(d.a)("span",{title:t.get("created_at")},void 0,Object(d.a)(I.b,{id:"notification.favourite",defaultMessage:"{name} favourited your status",values:{name:e}}))),Object(d.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:!!this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},i.renderReblog=function(t,e){var i=this.props.intl;return Object(d.a)(F.HotKeys,{handlers:this.getHandlers()},void 0,Object(d.a)("div",{className:"notification notification-reblog focusable",tabIndex:"0","aria-label":H(i,i.formatMessage({id:"notification.reblog",defaultMessage:"{name} boosted your status"},{name:t.getIn(["account","acct"])}),t.get("created_at"))},void 0,Object(d.a)("div",{className:"notification__message"},void 0,Object(d.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(d.a)(T.a,{id:"retweet",fixedWidth:!0})),Object(d.a)("span",{title:t.get("created_at")},void 0,Object(d.a)(I.b,{id:"notification.reblog",defaultMessage:"{name} boosted your status",values:{name:e}}))),Object(d.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},i.renderPoll=function(t){var e=this.props.intl;return Object(d.a)(F.HotKeys,{handlers:this.getHandlers()},void 0,Object(d.a)("div",{className:"notification notification-poll focusable",tabIndex:"0","aria-label":H(e,e.formatMessage({id:"notification.poll",defaultMessage:"A poll you have voted in has ended"}),t.get("created_at"))},void 0,Object(d.a)("div",{className:"notification__message"},void 0,Object(d.a)("div",{className:"notification__favourite-icon-wrapper"},void 0,Object(d.a)(T.a,{id:"tasks",fixedWidth:!0})),Object(d.a)("span",{title:t.get("created_at")},void 0,Object(d.a)(I.b,{id:"notification.poll",defaultMessage:"A poll you have voted in has ended"}))),Object(d.a)(x.a,{id:t.get("status"),account:t.get("account"),muted:!0,withDismiss:!0,hidden:this.props.hidden,getScrollPosition:this.props.getScrollPosition,updateScrollBottom:this.props.updateScrollBottom,cachedMediaWidth:this.props.cachedMediaWidth,cacheMediaWidth:this.props.cacheMediaWidth})))},i.render=function(){var t=this.props.notification,e=t.get("account"),i={__html:e.get("display_name_html")},o=Object(d.a)("bdi",{},void 0,Object(d.a)(S.a,{className:"notification__display-name",href:e.get("url"),title:e.get("acct"),to:"/accounts/"+e.get("id"),dangerouslySetInnerHTML:i}));switch(t.get("type")){case"follow":return this.renderFollow(t,e,o);case"mention":return this.renderMention(t);case"favourite":return this.renderFavourite(t,o);case"reblog":return this.renderReblog(t,o);case"poll":return this.renderPoll(t)}return null},e}(W.a),Object(b.a)(n,"contextTypes",{router:y.a.object}),Object(b.a)(n,"propTypes",{notification:k.a.map.isRequired,hidden:y.a.bool,onMoveUp:y.a.func.isRequired,onMoveDown:y.a.func.isRequired,onMention:y.a.func.isRequired,onFavourite:y.a.func.isRequired,onReblog:y.a.func.isRequired,onToggleHidden:y.a.func.isRequired,status:k.a.map,intl:y.a.object.isRequired,getScrollPosition:y.a.func,updateScrollBottom:y.a.func,cacheMediaWidth:y.a.func,cachedMediaWidth:y.a.number}),o=a))||o,R=i(47),q=i(21),L=i(66),B=i(93),U=i(20),A=Object(j.connect)(function(){var t=Object(w.e)(),e=Object(w.f)();return function(i,o){var n=t(i,o.notification,o.accountId);return{notification:n,status:n.get("status")?e(i,{id:n.get("status")}):null}}},function(t){return{onMention:function(e,i){t(Object(q.cb)(e,i))},onModalReblog:function(e){t(Object(L.o)(e))},onReblog:function(e,i){e.get("reblogged")?t(Object(L.r)(e)):i.shiftKey||!U.b?this.onModalReblog(e):t(Object(R.d)("BOOST",{status:e,onReblog:this.onModalReblog}))},onFavourite:function(e){e.get("favourited")?t(Object(L.p)(e)):t(Object(L.k)(e))},onToggleHidden:function(e){e.get("hidden")?t(Object(B.k)(e.get("id"))):t(Object(B.i)(e.get("id")))}}})(D),K=function(t){function e(){return t.apply(this,arguments)||this}return Object(f.a)(e,t),e.prototype.render=function(){return Object(d.a)("button",{className:"text-btn column-header__setting-btn",tabIndex:"0",onClick:this.props.onClick},void 0,Object(d.a)(T.a,{id:"eraser"})," ",Object(d.a)(I.b,{id:"notifications.clear",defaultMessage:"Clear notifications"}))},e}(O.a.PureComponent),z=i(1023),G=function(t){function e(){for(var e,i=arguments.length,o=new Array(i),n=0;n<i;n++)o[n]=arguments[n];return e=t.call.apply(t,[this].concat(o))||this,Object(b.a)(Object(u.a)(e),"onPushChange",function(t,i){e.props.onChange(["push"].concat(t),i)}),e}return Object(f.a)(e,t),e.prototype.render=function(){var t=this.props,e=t.settings,i=t.pushSettings,o=t.onChange,n=t.onClear,a=Object(d.a)(I.b,{id:"notifications.column_settings.filter_bar.show",defaultMessage:"Show"}),s=Object(d.a)(I.b,{id:"notifications.column_settings.filter_bar.advanced",defaultMessage:"Display all categories"}),c=Object(d.a)(I.b,{id:"notifications.column_settings.alert",defaultMessage:"Desktop notifications"}),l=Object(d.a)(I.b,{id:"notifications.column_settings.show",defaultMessage:"Show in column"}),r=Object(d.a)(I.b,{id:"notifications.column_settings.sound",defaultMessage:"Play sound"}),u=i.get("browserSupport")&&i.get("isSubscribed"),f=u&&Object(d.a)(I.b,{id:"notifications.column_settings.push",defaultMessage:"Push notifications"});return Object(d.a)("div",{},void 0,Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(K,{onClick:n})),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-filter-bar"},void 0,Object(d.a)("span",{id:"notifications-filter-bar",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.filter_bar.category",defaultMessage:"Quick filter bar"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","show"],onChange:o,label:a}),Object(d.a)(z.a,{id:"show-filter-bar",prefix:"notifications",settings:e,settingPath:["quickFilter","advanced"],onChange:o,label:s}))),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-follow"},void 0,Object(d.a)("span",{id:"notifications-follow",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.follow",defaultMessage:"New followers:"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","follow"],onChange:o,label:c}),u&&Object(d.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","follow"],onChange:this.onPushChange,label:f}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","follow"],onChange:o,label:l}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","follow"],onChange:o,label:r}))),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-favourite"},void 0,Object(d.a)("span",{id:"notifications-favourite",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.favourite",defaultMessage:"Favourites:"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","favourite"],onChange:o,label:c}),u&&Object(d.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","favourite"],onChange:this.onPushChange,label:f}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","favourite"],onChange:o,label:l}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","favourite"],onChange:o,label:r}))),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-mention"},void 0,Object(d.a)("span",{id:"notifications-mention",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.mention",defaultMessage:"Mentions:"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","mention"],onChange:o,label:c}),u&&Object(d.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","mention"],onChange:this.onPushChange,label:f}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","mention"],onChange:o,label:l}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","mention"],onChange:o,label:r}))),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-reblog"},void 0,Object(d.a)("span",{id:"notifications-reblog",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.reblog",defaultMessage:"Boosts:"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","reblog"],onChange:o,label:c}),u&&Object(d.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","reblog"],onChange:this.onPushChange,label:f}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","reblog"],onChange:o,label:l}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","reblog"],onChange:o,label:r}))),Object(d.a)("div",{role:"group","aria-labelledby":"notifications-poll"},void 0,Object(d.a)("span",{id:"notifications-poll",className:"column-settings__section"},void 0,Object(d.a)(I.b,{id:"notifications.column_settings.poll",defaultMessage:"Poll results:"})),Object(d.a)("div",{className:"column-settings__row"},void 0,Object(d.a)(z.a,{prefix:"notifications_desktop",settings:e,settingPath:["alerts","poll"],onChange:o,label:c}),u&&Object(d.a)(z.a,{prefix:"notifications_push",settings:i,settingPath:["alerts","poll"],onChange:this.onPushChange,label:f}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["shows","poll"],onChange:o,label:l}),Object(d.a)(z.a,{prefix:"notifications",settings:e,settingPath:["sounds","poll"],onChange:o,label:r}))))},e}(O.a.PureComponent),J=i(72),V=i(222),E=Object(I.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"}}),Q=Object(I.g)(Object(j.connect)(function(t){return{settings:t.getIn(["settings","notifications"]),pushSettings:t.get("push_notifications")}},function(t,e){var i=e.intl;return{onChange:function(e,i){"push"===e[0]?t(Object(V.e)(e.slice(1),i)):"quickFilter"===e[0]?(t(Object(J.c)(["notifications"].concat(e),i)),t(Object(M.p)("all"))):t(Object(J.c)(["notifications"].concat(e),i))},onClear:function(){t(Object(R.d)("CONFIRM",{message:i.formatMessage(E.clearMessage),confirm:i.formatMessage(E.clearConfirm),onConfirm:function(){return t(Object(M.k)())}}))}}})(G)),Y=Object(I.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"}}),X=Object(I.g)(s=function(t){function e(){return t.apply(this,arguments)||this}Object(f.a)(e,t);var i=e.prototype;return i.onClick=function(t){var e=this;return function(){return e.props.selectFilter(t)}},i.render=function(){var t=this.props,e=t.selectedFilter,i=t.advancedMode,o=t.intl;return i?Object(d.a)("div",{className:"notification__filter-bar"},void 0,Object(d.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(d.a)(I.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(d.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention"),title:o.formatMessage(Y.mentions)},void 0,Object(d.a)(T.a,{id:"reply-all",fixedWidth:!0})),Object(d.a)("button",{className:"favourite"===e?"active":"",onClick:this.onClick("favourite"),title:o.formatMessage(Y.favourites)},void 0,Object(d.a)(T.a,{id:"star",fixedWidth:!0})),Object(d.a)("button",{className:"reblog"===e?"active":"",onClick:this.onClick("reblog"),title:o.formatMessage(Y.boosts)},void 0,Object(d.a)(T.a,{id:"retweet",fixedWidth:!0})),Object(d.a)("button",{className:"poll"===e?"active":"",onClick:this.onClick("poll"),title:o.formatMessage(Y.polls)},void 0,Object(d.a)(T.a,{id:"tasks",fixedWidth:!0})),Object(d.a)("button",{className:"follow"===e?"active":"",onClick:this.onClick("follow"),title:o.formatMessage(Y.follows)},void 0,Object(d.a)(T.a,{id:"user-plus",fixedWidth:!0}))):Object(d.a)("div",{className:"notification__filter-bar"},void 0,Object(d.a)("button",{className:"all"===e?"active":"",onClick:this.onClick("all")},void 0,Object(d.a)(I.b,{id:"notifications.filter.all",defaultMessage:"All"})),Object(d.a)("button",{className:"mention"===e?"active":"",onClick:this.onClick("mention")},void 0,Object(d.a)(I.b,{id:"notifications.filter.mentions",defaultMessage:"Mentions"})))},e}(O.a.PureComponent))||s,Z=Object(j.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(M.p)(e))}}})(X),$=i(53),tt=i(4),et=i(964),it=i(1091);i.d(e,"default",function(){return at});var ot=Object(I.f)({title:{id:"column.notifications",defaultMessage:"Notifications"}}),nt=Object($.a)([function(t){return t.getIn(["settings","notifications","quickFilter","show"])},function(t){return t.getIn(["settings","notifications","quickFilter","active"])},function(t){return Object(tt.List)(t.getIn(["settings","notifications","shows"]).filter(function(t){return!t}).keys())},function(t){return t.getIn(["notifications","items"])}],function(t,e,i,o){return t&&"all"!==e?o.filter(function(t){return null!==t&&e===t.get("type")}):o.filterNot(function(t){return null!==t&&i.includes(t.get("type"))})}),at=Object(j.connect)(function(t){return{showFilterBar:t.getIn(["settings","notifications","quickFilter","show"]),notifications:nt(t),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(tt.List)()).size}})(c=Object(I.g)((r=l=function(t){function e(){for(var e,i=arguments.length,o=new Array(i),n=0;n<i;n++)o[n]=arguments[n];return e=t.call.apply(t,[this].concat(o))||this,Object(b.a)(Object(u.a)(e),"handleLoadGap",function(t){e.props.dispatch(Object(M.l)({maxId:t}))}),Object(b.a)(Object(u.a)(e),"handleLoadOlder",g()(function(){var t=e.props.notifications.last();e.props.dispatch(Object(M.l)({maxId:t&&t.get("id")}))},300,{leading:!0})),Object(b.a)(Object(u.a)(e),"handleLoadPending",function(){e.props.dispatch(Object(M.m)())}),Object(b.a)(Object(u.a)(e),"handleScrollToTop",g()(function(){e.props.dispatch(Object(M.o)(!0))},100)),Object(b.a)(Object(u.a)(e),"handleScroll",g()(function(){e.props.dispatch(Object(M.o)(!1))},100)),Object(b.a)(Object(u.a)(e),"handlePin",function(){var t=e.props,i=t.columnId,o=t.dispatch;o(i?Object(_.h)(i):Object(_.e)("NOTIFICATIONS",{}))}),Object(b.a)(Object(u.a)(e),"handleMove",function(t){var i=e.props,o=i.columnId;(0,i.dispatch)(Object(_.g)(o,t))}),Object(b.a)(Object(u.a)(e),"handleHeaderClick",function(){e.column.scrollTop()}),Object(b.a)(Object(u.a)(e),"setColumnRef",function(t){e.column=t}),Object(b.a)(Object(u.a)(e),"handleMoveUp",function(t){var i=e.props.notifications.findIndex(function(e){return null!==e&&e.get("id")===t})-1;e._selectChild(i,!0)}),Object(b.a)(Object(u.a)(e),"handleMoveDown",function(t){var i=e.props.notifications.findIndex(function(e){return null!==e&&e.get("id")===t})+1;e._selectChild(i,!1)}),e}Object(f.a)(e,t);var i=e.prototype;return i.componentWillMount=function(){this.props.dispatch(Object(M.n)())},i.componentWillUnmount=function(){this.handleLoadOlder.cancel(),this.handleScrollToTop.cancel(),this.handleScroll.cancel(),this.props.dispatch(Object(M.o)(!1)),this.props.dispatch(Object(M.q)())},i._selectChild=function(t,e){var i=this.column.node,o=i.querySelector("article:nth-of-type("+(t+1)+") .focusable");o&&(e&&i.scrollTop>o.offsetTop?o.scrollIntoView(!0):!e&&i.scrollTop+i.clientHeight<o.offsetTop+o.offsetHeight&&o.scrollIntoView(!1),o.focus())},i.render=function(){var t=this,e=this.props,i=e.intl,o=e.notifications,n=e.shouldUpdateScroll,a=e.isLoading,s=e.isUnread,c=e.columnId,l=e.multiColumn,r=e.hasMore,u=e.numPending,f=e.showFilterBar,b=!!c,h=Object(d.a)(I.b,{id:"empty_column.notifications",defaultMessage:"You don't have any notifications yet. Interact with others to start the conversation."}),g=null,p=f?Object(d.a)(Z,{}):null;g=a&&this.scrollableContent?this.scrollableContent:o.size>0||r?o.map(function(e,i){return null===e?Object(d.a)(it.a,{disabled:a,maxId:i>0?o.getIn([i-1,"id"]):null,onClick:t.handleLoadGap},"gap:"+o.getIn([i+1,"id"])):Object(d.a)(A,{notification:e,accountId:e.get("account"),onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown},e.get("id"))}):null,this.scrollableContent=g;var j=Object(d.a)(et.a,{scrollKey:"notifications-"+c,trackScroll:!b,isLoading:a,showLoading:a&&0===o.size,hasMore:r,numPending:u,emptyMessage:h,onLoadMore:this.handleLoadOlder,onLoadPending:this.handleLoadPending,onScrollToTop:this.handleScrollToTop,onScroll:this.handleScroll,shouldUpdateScroll:n,bindToDocument:!l},void 0,g);return O.a.createElement(v.a,{bindToDocument:!l,ref:this.setColumnRef,label:i.formatMessage(ot.title)},Object(d.a)(m.a,{icon:"bell",active:s,title:i.formatMessage(ot.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:b,multiColumn:l},void 0,Object(d.a)(Q,{})),p,j)},e}(O.a.PureComponent),Object(b.a)(l,"defaultProps",{trackScroll:!0}),c=r))||c)||c}}]); //# sourceMappingURL=notifications.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/notifications.js.map b/priv/static/packs/features/notifications.js.map index 275353bfc..e8cdefa15 100644 --- a/priv/static/packs/features/notifications.js.map +++ b/priv/static/packs/features/notifications.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/notification.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/notification_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/clear_column_button.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/column_settings.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/filter_bar.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/notifications/index.js"],"names":["notificationForScreenReader","intl","message","timestamp","output","push","formatDate","hour","minute","month","day","join","Notification","injectIntl","_this$props","_this","props","notification","onMoveUp","get","_this$props2","onMoveDown","context","router","history","handleOpenProfile","getIn","e","preventDefault","_this$props3","onMention","status","onFavourite","onReblog","onToggleHidden","getHandlers","reply","this","handleMention","favourite","handleHotkeyFavourite","boost","handleHotkeyBoost","mention","open","handleOpen","openProfile","moveUp","handleMoveUp","moveDown","handleMoveDown","toggleHidden","handleHotkeyToggleHidden","renderFollow","account","link","Object","jsx","react_hotkeys_index_es","handlers","className","tabIndex","aria-label","formatMessage","id","defaultMessage","name","icon","fixedWidth","title","index_es","values","account_container","withNote","hidden","renderMention","status_container","withDismiss","contextType","getScrollPosition","updateScrollBottom","cachedMediaWidth","cacheMediaWidth","renderFavourite","muted","renderReblog","renderPoll","render","displayNameHtml","__html","permalink","href","to","dangerouslySetInnerHTML","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","bool","func","number","connect","getNotification","makeGetNotification","getStatus","makeGetStatus","state","accountId","dispatch","mentionCompose","onModalReblog","reblog","unreblog","shiftKey","boostModal","openModal","unfavourite","revealStatus","hideStatus","ClearColumnButton","onClick","React","PureComponent","ColumnSettings","path","checked","onChange","concat","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","clear_column_button_ClearColumnButton","role","aria-labelledby","setting_toggle","prefix","settingPath","label","onPushChange","messages","defineMessages","clearMessage","clearConfirm","_ref","changePushNotifications","slice","changeSetting","setFilter","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","isLoading","isUnread","hasMore","maxId","expandNotifications","debounce_default","last","leading","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","componentWillUnmount","handleLoadOlder","cancel","handleScrollToTop","handleScroll","index","element","node","querySelector","focus","_this2","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","filter_bar_container","size","load_gap","disabled","handleLoadGap","notification_container","scrollContainer","scrollable_list","scrollKey","trackScroll","showLoading","onLoadMore","onScrollToTop","onScroll","react_default","a","createElement","ref","setColumnRef","column_header","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","column_settings_container"],"mappings":"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","file":"features/notifications.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport StatusContainer from '../../../containers/status_container';\nimport AccountContainer from '../../../containers/account_container';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Permalink from '../../../components/permalink';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport Icon from 'mastodon/components/icon';\n\nconst notificationForScreenReader = (intl, message, timestamp) => {\n const output = [message];\n\n output.push(intl.formatDate(timestamp, { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }));\n\n return output.join(', ');\n};\n\nexport default @injectIntl\nclass Notification extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\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 onFavourite: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n intl: PropTypes.object.isRequired,\n getScrollPosition: PropTypes.func,\n updateScrollBottom: PropTypes.func,\n cacheMediaWidth: PropTypes.func,\n cachedMediaWidth: PropTypes.number,\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 const { notification } = this.props;\n\n if (notification.get('status')) {\n this.context.router.history.push(`/statuses/${notification.get('status')}`);\n } else {\n this.handleOpenProfile();\n }\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 handleHotkeyFavourite = () => {\n const { status } = this.props;\n if (status) this.props.onFavourite(status);\n }\n\n handleHotkeyBoost = e => {\n const { status } = this.props;\n if (status) this.props.onReblog(status, e);\n }\n\n handleHotkeyToggleHidden = () => {\n const { status } = this.props;\n if (status) this.props.onToggleHidden(status);\n }\n\n getHandlers () {\n return {\n reply: this.handleMention,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n mention: this.handleMention,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n toggleHidden: this.handleHotkeyToggleHidden,\n };\n }\n\n renderFollow (notification, account, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow', defaultMessage: '{name} followed you' }, { name: account.get('acct') }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='user-plus' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />\n </span>\n </div>\n\n <AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} />\n </div>\n </HotKeys>\n );\n }\n\n renderMention (notification) {\n return (\n <StatusContainer\n id={notification.get('status')}\n withDismiss\n hidden={this.props.hidden}\n onMoveDown={this.handleMoveDown}\n onMoveUp={this.handleMoveUp}\n contextType='notifications'\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n );\n }\n\n renderFavourite (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='star' className='star-icon' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.favourite' defaultMessage='{name} favourited your status' values={{ name: link }} />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={!!this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n renderReblog (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='retweet' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.reblog' defaultMessage='{name} boosted your status' values={{ name: link }} />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n renderPoll (notification) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='tasks' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.poll' defaultMessage='A poll you have voted in has ended' />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n render () {\n const { notification } = this.props;\n const account = notification.get('account');\n const displayNameHtml = { __html: account.get('display_name_html') };\n const link = <bdi><Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;\n\n switch(notification.get('type')) {\n case 'follow':\n return this.renderFollow(notification, account, link);\n case 'mention':\n return this.renderMention(notification);\n case 'favourite':\n return this.renderFavourite(notification, link);\n case 'reblog':\n return this.renderReblog(notification, link);\n case 'poll':\n return this.renderPoll(notification);\n }\n\n return null;\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetNotification, makeGetStatus } from '../../../selectors';\nimport Notification from '../components/notification';\nimport { openModal } from '../../../actions/modal';\nimport { mentionCompose } from '../../../actions/compose';\nimport {\n reblog,\n favourite,\n unreblog,\n unfavourite,\n} from '../../../actions/interactions';\nimport {\n hideStatus,\n revealStatus,\n} from '../../../actions/statuses';\nimport { boostModal } from '../../../initial_state';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n const getStatus = makeGetStatus();\n\n const mapStateToProps = (state, props) => {\n const notification = getNotification(state, props.notification, props.accountId);\n return {\n notification: notification,\n status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null,\n };\n };\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n\n onModalReblog (status) {\n dispatch(reblog(status));\n },\n\n onReblog (status, e) {\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n if (e.shiftKey || !boostModal) {\n this.onModalReblog(status);\n } else {\n dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n }\n }\n },\n\n onFavourite (status) {\n if (status.get('favourited')) {\n dispatch(unfavourite(status));\n } else {\n dispatch(favourite(status));\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\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\n\nexport default class ClearColumnButton extends React.PureComponent {\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\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']} 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-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']} 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']} 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']} 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']} 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 '../../../actions/settings';\nimport { setFilter } from '../../../actions/notifications';\nimport { clearNotifications } from '../../../actions/notifications';\nimport { changeAlerts as changePushNotifications } from '../../../actions/push_notifications';\nimport { openModal } from '../../../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 'mastodon/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='at' 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 '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandNotifications, scrollTopNotifications } from '../../actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from '../../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 '../../components/scrollable_list';\nimport LoadGap from '../../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 isLoading: state.getIn(['notifications', 'isLoading'], true),\n isUnread: state.getIn(['notifications', 'unread']) > 0,\n hasMore: state.getIn(['notifications', 'hasMore']),\n});\n\nexport default @connect(mapStateToProps)\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 };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n componentWillUnmount () {\n this.handleLoadOlder.cancel();\n this.handleScrollToTop.cancel();\n this.handleScroll.cancel();\n this.props.dispatch(scrollTopNotifications(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 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);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n this._selectChild(elementIndex);\n }\n\n _selectChild (index) {\n const element = this.column.node.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n element.focus();\n }\n }\n\n render () {\n const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, 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 emptyMessage={emptyMessage}\n onLoadMore={this.handleLoadOlder}\n onScrollToTop={this.handleScrollToTop}\n onScroll={this.handleScroll}\n shouldUpdateScroll={shouldUpdateScroll}\n >\n {scrollableContent}\n </ScrollableList>\n );\n\n return (\n <Column ref={this.setColumnRef} label={intl.formatMessage(messages.title)}>\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 >\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/mastodon/features/notifications/components/notification.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/notification_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/clear_column_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/filter_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/index.js"],"names":["notificationForScreenReader","intl","message","timestamp","output","push","formatDate","hour","minute","month","day","join","Notification","injectIntl","props","notification","onMoveUp","get","onMoveDown","context","router","history","handleOpenProfile","getIn","e","preventDefault","onMention","status","onFavourite","onReblog","onToggleHidden","getHandlers","reply","this","handleMention","favourite","handleHotkeyFavourite","boost","handleHotkeyBoost","mention","open","handleOpen","openProfile","moveUp","handleMoveUp","moveDown","handleMoveDown","toggleHidden","handleHotkeyToggleHidden","renderFollow","account","link","handlers","className","tabIndex","aria-label","formatMessage","id","defaultMessage","name","fixedWidth","title","values","withNote","hidden","renderMention","withDismiss","contextType","getScrollPosition","updateScrollBottom","cachedMediaWidth","cacheMediaWidth","renderFavourite","muted","renderReblog","renderPoll","render","displayNameHtml","__html","href","to","dangerouslySetInnerHTML","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","bool","func","number","connect","getNotification","makeGetNotification","getStatus","makeGetStatus","state","accountId","dispatch","mentionCompose","onModalReblog","reblog","unreblog","shiftKey","boostModal","openModal","unfavourite","revealStatus","hideStatus","ClearColumnButton","onClick","React","PureComponent","ColumnSettings","path","checked","onChange","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","role","aria-labelledby","prefix","settingPath","label","onPushChange","messages","defineMessages","clearMessage","clearConfirm","changePushNotifications","slice","changeSetting","setFilter","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","isLoading","isUnread","size","hasMore","numPending","maxId","expandNotifications","last","leading","loadPending","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","componentWillMount","mountNotifications","componentWillUnmount","handleLoadOlder","cancel","handleScrollToTop","handleScroll","unmountNotifications","index","align_top","container","node","element","querySelector","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","disabled","handleLoadGap","scrollContainer","scrollKey","trackScroll","showLoading","onLoadMore","onLoadPending","handleLoadPending","onScrollToTop","onScroll","bindToDocument","ref","setColumnRef","icon","active","onPin","handlePin","onMove","handleMove","handleHeaderClick"],"mappings":"iUAWMA,EAA8B,SAACC,EAAMC,EAASC,GAClD,IAAMC,EAAS,CAACF,GAIhB,OAFAE,EAAOC,KAAKJ,EAAKK,WAAWH,EAAW,CAAEI,KAAM,UAAWC,OAAQ,UAAWC,MAAO,QAASC,IAAK,aAE3FN,EAAOO,KAAK,OAIfC,EADUC,a,iMAwBC,WAAO,IAAD,EACgB,EAAKC,MAAhCC,EADW,EACXA,cACRC,EAFmB,EACGA,UACbD,EAAaE,IAAI,S,4CAGX,WAAO,IAAD,EACgB,EAAKH,MAAlCC,EADa,EACbA,cACRG,EAFqB,EACCA,YACXH,EAAaE,IAAI,S,wCAGjB,WAAO,IACVF,EAAiB,EAAKD,MAAtBC,aAEJA,EAAaE,IAAI,UACnB,EAAKE,QAAQC,OAAOC,QAAQhB,KAA5B,aAA8CU,EAAaE,IAAI,WAE/D,EAAKK,sB,+CAIW,WAAO,IACjBP,EAAiB,EAAKD,MAAtBC,aACR,EAAKI,QAAQC,OAAOC,QAAQhB,KAA5B,aAA8CU,EAAaQ,MAAM,CAAC,UAAW,U,2CAG/D,SAAAC,GACdA,EAAEC,iBADiB,MAGiB,EAAKX,MAAjCC,EAHW,EAGXA,cACRW,EAJmB,EAGGA,WACZX,EAAaE,IAAI,WAAY,EAAKE,QAAQC,OAAOC,W,mDAGrC,WAAO,IACrBM,EAAW,EAAKb,MAAhBa,OACJA,GAAQ,EAAKb,MAAMc,YAAYD,K,+CAGjB,SAAAH,GAAM,IAChBG,EAAW,EAAKb,MAAhBa,OACJA,GAAQ,EAAKb,MAAMe,SAASF,EAAQH,K,sDAGf,WAAO,IACxBG,EAAW,EAAKb,MAAhBa,OACJA,GAAQ,EAAKb,MAAMgB,eAAeH,K,8CAGxCI,YAAA,WACE,MAAO,CACLC,MAAOC,KAAKC,cACZC,UAAWF,KAAKG,sBAChBC,MAAOJ,KAAKK,kBACZC,QAASN,KAAKC,cACdM,KAAMP,KAAKQ,WACXC,YAAaT,KAAKX,kBAClBqB,OAAQV,KAAKW,aACbC,SAAUZ,KAAKa,eACfC,aAAcd,KAAKe,2B,EAIvBC,aAAA,SAAclC,EAAcmC,EAASC,GAAO,IAClClD,EAASgC,KAAKnB,MAAdb,KAER,OACE,YAAC,UAAD,CAASmD,SAAUnB,KAAKF,oBAAxB,EACE,mBAAKsB,UAAU,6CAA6CC,SAAS,IAAIC,aAAYvD,EAA4BC,EAAMA,EAAKuD,cAAc,CAAEC,GAAI,sBAAuBC,eAAgB,uBAAyB,CAAEC,KAAMT,EAAQjC,IAAI,UAAYF,EAAaE,IAAI,qBAAjQ,EACE,mBAAKoC,UAAU,8BAAf,EACE,mBAAKA,UAAU,6CAAf,EACE,YAAC,IAAD,CAAMI,GAAG,YAAYG,YAAU,KAGjC,oBAAMC,MAAO9C,EAAaE,IAAI,oBAA9B,EACE,YAAC,IAAD,CAAkBwC,GAAG,sBAAsBC,eAAe,sBAAsBI,OAAQ,CAAEH,KAAMR,OAIpG,YAAC,IAAD,CAAkBM,GAAIP,EAAQjC,IAAI,MAAO8C,UAAU,EAAOC,OAAQ/B,KAAKnB,MAAMkD,Y,EAMrFC,cAAA,SAAelD,GACb,OACE,YAAC,IAAD,CACE0C,GAAI1C,EAAaE,IAAI,UACrBiD,aAAW,EACXF,OAAQ/B,KAAKnB,MAAMkD,OACnB9C,WAAYe,KAAKa,eACjB9B,SAAUiB,KAAKW,aACfuB,YAAY,gBACZC,kBAAmBnC,KAAKnB,MAAMsD,kBAC9BC,mBAAoBpC,KAAKnB,MAAMuD,mBAC/BC,iBAAkBrC,KAAKnB,MAAMwD,iBAC7BC,gBAAiBtC,KAAKnB,MAAMyD,mB,EAKlCC,gBAAA,SAAiBzD,EAAcoC,GAAO,IAC5BlD,EAASgC,KAAKnB,MAAdb,KAER,OACE,YAAC,UAAD,CAASmD,SAAUnB,KAAKF,oBAAxB,EACE,mBAAKsB,UAAU,gDAAgDC,SAAS,IAAIC,aAAYvD,EAA4BC,EAAMA,EAAKuD,cAAc,CAAEC,GAAI,yBAA0BC,eAAgB,iCAAmC,CAAEC,KAAM5C,EAAaQ,MAAM,CAAC,UAAW,WAAaR,EAAaE,IAAI,qBAArS,EACE,mBAAKoC,UAAU,8BAAf,EACE,mBAAKA,UAAU,6CAAf,EACE,YAAC,IAAD,CAAMI,GAAG,OAAOJ,UAAU,YAAYO,YAAU,KAGlD,oBAAMC,MAAO9C,EAAaE,IAAI,oBAA9B,EACE,YAAC,IAAD,CAAkBwC,GAAG,yBAAyBC,eAAe,gCAAgCI,OAAQ,CAAEH,KAAMR,OAIjH,YAAC,IAAD,CACEM,GAAI1C,EAAaE,IAAI,UACrBiC,QAASnC,EAAaE,IAAI,WAC1BwD,OAAK,EACLP,aAAW,EACXF,SAAU/B,KAAKnB,MAAMkD,OACrBI,kBAAmBnC,KAAKnB,MAAMsD,kBAC9BC,mBAAoBpC,KAAKnB,MAAMuD,mBAC/BC,iBAAkBrC,KAAKnB,MAAMwD,iBAC7BC,gBAAiBtC,KAAKnB,MAAMyD,qB,EAOtCG,aAAA,SAAc3D,EAAcoC,GAAO,IACzBlD,EAASgC,KAAKnB,MAAdb,KAER,OACE,YAAC,UAAD,CAASmD,SAAUnB,KAAKF,oBAAxB,EACE,mBAAKsB,UAAU,6CAA6CC,SAAS,IAAIC,aAAYvD,EAA4BC,EAAMA,EAAKuD,cAAc,CAAEC,GAAI,sBAAuBC,eAAgB,8BAAgC,CAAEC,KAAM5C,EAAaQ,MAAM,CAAC,UAAW,WAAaR,EAAaE,IAAI,qBAA5R,EACE,mBAAKoC,UAAU,8BAAf,EACE,mBAAKA,UAAU,6CAAf,EACE,YAAC,IAAD,CAAMI,GAAG,UAAUG,YAAU,KAG/B,oBAAMC,MAAO9C,EAAaE,IAAI,oBAA9B,EACE,YAAC,IAAD,CAAkBwC,GAAG,sBAAsBC,eAAe,6BAA6BI,OAAQ,CAAEH,KAAMR,OAI3G,YAAC,IAAD,CACEM,GAAI1C,EAAaE,IAAI,UACrBiC,QAASnC,EAAaE,IAAI,WAC1BwD,OAAK,EACLP,aAAW,EACXF,OAAQ/B,KAAKnB,MAAMkD,OACnBI,kBAAmBnC,KAAKnB,MAAMsD,kBAC9BC,mBAAoBpC,KAAKnB,MAAMuD,mBAC/BC,iBAAkBrC,KAAKnB,MAAMwD,iBAC7BC,gBAAiBtC,KAAKnB,MAAMyD,qB,EAOtCI,WAAA,SAAY5D,GAAe,IACjBd,EAASgC,KAAKnB,MAAdb,KAER,OACE,YAAC,UAAD,CAASmD,SAAUnB,KAAKF,oBAAxB,EACE,mBAAKsB,UAAU,2CAA2CC,SAAS,IAAIC,aAAYvD,EAA4BC,EAAMA,EAAKuD,cAAc,CAAEC,GAAI,oBAAqBC,eAAgB,uCAAyC3C,EAAaE,IAAI,qBAA7O,EACE,mBAAKoC,UAAU,8BAAf,EACE,mBAAKA,UAAU,6CAAf,EACE,YAAC,IAAD,CAAMI,GAAG,QAAQG,YAAU,KAG7B,oBAAMC,MAAO9C,EAAaE,IAAI,oBAA9B,EACE,YAAC,IAAD,CAAkBwC,GAAG,oBAAoBC,eAAe,yCAI5D,YAAC,IAAD,CACED,GAAI1C,EAAaE,IAAI,UACrBiC,QAASnC,EAAaE,IAAI,WAC1BwD,OAAK,EACLP,aAAW,EACXF,OAAQ/B,KAAKnB,MAAMkD,OACnBI,kBAAmBnC,KAAKnB,MAAMsD,kBAC9BC,mBAAoBpC,KAAKnB,MAAMuD,mBAC/BC,iBAAkBrC,KAAKnB,MAAMwD,iBAC7BC,gBAAiBtC,KAAKnB,MAAMyD,qB,EAOtCK,OAAA,WAAW,IACD7D,EAAiBkB,KAAKnB,MAAtBC,aACFmC,EAAmBnC,EAAaE,IAAI,WACpC4D,EAAmB,CAAEC,OAAQ5B,EAAQjC,IAAI,sBACzCkC,EAAmB,4BAAK,YAAC,IAAD,CAAWE,UAAU,6BAA6B0B,KAAM7B,EAAQjC,IAAI,OAAQ4C,MAAOX,EAAQjC,IAAI,QAAS+D,GAAE,aAAe9B,EAAQjC,IAAI,MAASgE,wBAAyBJ,KAErM,OAAO9D,EAAaE,IAAI,SACxB,IAAK,SACH,OAAOgB,KAAKgB,aAAalC,EAAcmC,EAASC,GAClD,IAAK,UACH,OAAOlB,KAAKgC,cAAclD,GAC5B,IAAK,YACH,OAAOkB,KAAKuC,gBAAgBzD,EAAcoC,GAC5C,IAAK,SACH,OAAOlB,KAAKyC,aAAa3D,EAAcoC,GACzC,IAAK,OACH,OAAOlB,KAAK0C,WAAW5D,GAGzB,OAAO,M,GA9OgBmE,K,6BAEH,CACpB9D,OAAQ+D,IAAUC,S,0BAGD,CACjBrE,aAAcsE,IAAmBC,IAAIC,WACrCvB,OAAQmB,IAAUK,KAClBxE,SAAUmE,IAAUM,KAAKF,WACzBrE,WAAYiE,IAAUM,KAAKF,WAC3B7D,UAAWyD,IAAUM,KAAKF,WAC1B3D,YAAauD,IAAUM,KAAKF,WAC5B1D,SAAUsD,IAAUM,KAAKF,WACzBzD,eAAgBqD,IAAUM,KAAKF,WAC/B5D,OAAQ0D,IAAmBC,IAC3BrF,KAAMkF,IAAUC,OAAOG,WACvBnB,kBAAmBe,IAAUM,KAC7BpB,mBAAoBc,IAAUM,KAC9BlB,gBAAiBY,IAAUM,KAC3BnB,iBAAkBa,IAAUO,S,iDC8BjBC,oBArDa,WAC1B,IAAMC,EAAkBC,cAClBC,EAAYC,cAUlB,OARwB,SAACC,EAAOlF,GAC9B,IAAMC,EAAe6E,EAAgBI,EAAOlF,EAAMC,aAAcD,EAAMmF,WACtE,MAAO,CACLlF,aAAcA,EACdY,OAAQZ,EAAaE,IAAI,UAAY6E,EAAUE,EAAO,CAAEvC,GAAI1C,EAAaE,IAAI,YAAe,QAOvE,SAAAiF,GAAQ,MAAK,CACtCxE,UAAW,SAACwB,EAAS9B,GACnB8E,EAASC,aAAejD,EAAS9B,KAGnCgF,cALsC,SAKvBzE,GACbuE,EAASG,YAAO1E,KAGlBE,SATsC,SAS5BF,EAAQH,GACZG,EAAOV,IAAI,aACbiF,EAASI,YAAS3E,IAEdH,EAAE+E,WAAaC,IACjBvE,KAAKmE,cAAczE,GAEnBuE,EAASO,YAAU,QAAS,CAAE9E,SAAQE,SAAUI,KAAKmE,kBAK3DxE,YArBsC,SAqBzBD,GACPA,EAAOV,IAAI,cACbiF,EAASQ,YAAY/E,IAErBuE,EAAS/D,YAAUR,KAIvBG,eA7BsC,SA6BtBH,GACVA,EAAOV,IAAI,UACbiF,EAASS,YAAahF,EAAOV,IAAI,QAEjCiF,EAASU,YAAWjF,EAAOV,IAAI,WAKtB0E,CAAiD/E,GCjE3CiG,E,kGAMnBjC,OAAA,WACE,OACE,sBAAQvB,UAAU,sCAAsCC,SAAS,IAAIwD,QAAS7E,KAAKnB,MAAMgG,cAAzF,EAAkG,YAAC,IAAD,CAAMrD,GAAG,WAA3G,IAAuH,YAAC,IAAD,CAAkBA,GAAG,sBAAsBC,eAAe,0B,GARxIqD,IAAMC,e,UCEhCC,E,6LASJ,SAACC,EAAMC,GACpB,EAAKrG,MAAMsG,SAAX,CAAqB,QAArB,OAAgCF,GAAOC,K,sCAGzCvC,OAAA,WAAW,IAAD,EAC8C3C,KAAKnB,MAAnDuG,EADA,EACAA,SAAUC,EADV,EACUA,aAAcF,EADxB,EACwBA,SAAUG,EADlC,EACkCA,QAEpCC,EAAgB,YAAC,IAAD,CAAkB/D,GAAG,gDAAgDC,eAAe,SACpG+D,EAAoB,YAAC,IAAD,CAAkBhE,GAAG,oDAAoDC,eAAe,2BAC5GgE,EAAY,YAAC,IAAD,CAAkBjE,GAAG,sCAAsCC,eAAe,0BACtFiE,EAAY,YAAC,IAAD,CAAkBlE,GAAG,qCAAqCC,eAAe,mBACrFkE,EAAY,YAAC,IAAD,CAAkBnE,GAAG,sCAAsCC,eAAe,eAEtFmE,EAAmBP,EAAarG,IAAI,mBAAqBqG,EAAarG,IAAI,gBAC1E6G,EAAUD,GAAoB,YAAC,IAAD,CAAkBpE,GAAG,qCAAqCC,eAAe,uBAE7G,OACE,4BACE,mBAAKL,UAAU,6BAAf,EACE,YAAC,EAAD,CAAmByD,QAASS,KAG9B,mBAAKQ,KAAK,QAAQC,kBAAgB,iCAAlC,EACE,oBAAMvE,GAAG,2BAA2BJ,UAAU,iCAA9C,EACE,YAAC,IAAD,CAAkBI,GAAG,oDAAoDC,eAAe,sBAE1F,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAeI,GAAG,kBAAkBwE,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,cAAe,QAASd,SAAUA,EAAUe,MAAOX,IAChJ,YAAC,IAAD,CAAe/D,GAAG,kBAAkBwE,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,cAAe,YAAad,SAAUA,EAAUe,MAAOV,MAIxJ,mBAAKM,KAAK,QAAQC,kBAAgB,6BAAlC,EACE,oBAAMvE,GAAG,uBAAuBJ,UAAU,iCAA1C,EAAqE,YAAC,IAAD,CAAkBI,GAAG,uCAAuCC,eAAe,oBAEhJ,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAe4E,OAAO,wBAAwBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,UAAWd,SAAUA,EAAUe,MAAOT,IAC/HG,GAAoB,YAAC,IAAD,CAAeI,OAAO,qBAAqBZ,SAAUC,EAAcY,YAAa,CAAC,SAAU,UAAWd,SAAUnF,KAAKmG,aAAcD,MAAOL,IAC/J,YAAC,IAAD,CAAeG,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,QAAS,UAAWd,SAAUA,EAAUe,MAAOR,IACvH,YAAC,IAAD,CAAeM,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,UAAWd,SAAUA,EAAUe,MAAOP,MAI5H,mBAAKG,KAAK,QAAQC,kBAAgB,gCAAlC,EACE,oBAAMvE,GAAG,0BAA0BJ,UAAU,iCAA7C,EAAwE,YAAC,IAAD,CAAkBI,GAAG,0CAA0CC,eAAe,iBAEtJ,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAe4E,OAAO,wBAAwBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,aAAcd,SAAUA,EAAUe,MAAOT,IAClIG,GAAoB,YAAC,IAAD,CAAeI,OAAO,qBAAqBZ,SAAUC,EAAcY,YAAa,CAAC,SAAU,aAAcd,SAAUnF,KAAKmG,aAAcD,MAAOL,IAClK,YAAC,IAAD,CAAeG,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,QAAS,aAAcd,SAAUA,EAAUe,MAAOR,IAC1H,YAAC,IAAD,CAAeM,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,aAAcd,SAAUA,EAAUe,MAAOP,MAI/H,mBAAKG,KAAK,QAAQC,kBAAgB,8BAAlC,EACE,oBAAMvE,GAAG,wBAAwBJ,UAAU,iCAA3C,EAAsE,YAAC,IAAD,CAAkBI,GAAG,wCAAwCC,eAAe,eAElJ,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAe4E,OAAO,wBAAwBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,WAAYd,SAAUA,EAAUe,MAAOT,IAChIG,GAAoB,YAAC,IAAD,CAAeI,OAAO,qBAAqBZ,SAAUC,EAAcY,YAAa,CAAC,SAAU,WAAYd,SAAUnF,KAAKmG,aAAcD,MAAOL,IAChK,YAAC,IAAD,CAAeG,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,QAAS,WAAYd,SAAUA,EAAUe,MAAOR,IACxH,YAAC,IAAD,CAAeM,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,WAAYd,SAAUA,EAAUe,MAAOP,MAI7H,mBAAKG,KAAK,QAAQC,kBAAgB,6BAAlC,EACE,oBAAMvE,GAAG,uBAAuBJ,UAAU,iCAA1C,EAAqE,YAAC,IAAD,CAAkBI,GAAG,uCAAuCC,eAAe,aAEhJ,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAe4E,OAAO,wBAAwBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,UAAWd,SAAUA,EAAUe,MAAOT,IAC/HG,GAAoB,YAAC,IAAD,CAAeI,OAAO,qBAAqBZ,SAAUC,EAAcY,YAAa,CAAC,SAAU,UAAWd,SAAUnF,KAAKmG,aAAcD,MAAOL,IAC/J,YAAC,IAAD,CAAeG,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,QAAS,UAAWd,SAAUA,EAAUe,MAAOR,IACvH,YAAC,IAAD,CAAeM,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,UAAWd,SAAUA,EAAUe,MAAOP,MAI5H,mBAAKG,KAAK,QAAQC,kBAAgB,2BAAlC,EACE,oBAAMvE,GAAG,qBAAqBJ,UAAU,iCAAxC,EAAmE,YAAC,IAAD,CAAkBI,GAAG,qCAAqCC,eAAe,mBAE5I,mBAAKL,UAAU,6BAAf,EACE,YAAC,IAAD,CAAe4E,OAAO,wBAAwBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,QAASd,SAAUA,EAAUe,MAAOT,IAC7HG,GAAoB,YAAC,IAAD,CAAeI,OAAO,qBAAqBZ,SAAUC,EAAcY,YAAa,CAAC,SAAU,QAASd,SAAUnF,KAAKmG,aAAcD,MAAOL,IAC7J,YAAC,IAAD,CAAeG,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,QAAS,QAASd,SAAUA,EAAUe,MAAOR,IACrH,YAAC,IAAD,CAAeM,OAAO,gBAAgBZ,SAAUA,EAAUa,YAAa,CAAC,SAAU,QAASd,SAAUA,EAAUe,MAAOP,Q,GA5FtFb,IAAMC,e,iBCE5CqB,EAAWC,YAAe,CAC9BC,aAAa,CAAD,2HACZC,aAAa,CAAD,iEA+BC3H,cAAW8E,kBA5BF,SAAAK,GAAK,MAAK,CAChCqB,SAAUrB,EAAMzE,MAAM,CAAC,WAAY,kBACnC+F,aAActB,EAAM/E,IAAI,wBAGC,SAACiF,EAAD,OAAajG,EAAb,EAAaA,KAAb,MAAyB,CAElDmH,SAFkD,SAExCF,EAAMC,GACE,SAAZD,EAAK,GACPhB,EAASuC,YAAwBvB,EAAKwB,MAAM,GAAIvB,IAC3B,gBAAZD,EAAK,IACdhB,EAASyC,YAAc,CAAC,iBAAF,OAAsBzB,GAAOC,IACnDjB,EAAS0C,YAAU,SAEnB1C,EAASyC,YAAc,CAAC,iBAAF,OAAsBzB,GAAOC,KAIvDI,QAbkD,WAchDrB,EAASO,YAAU,UAAW,CAC5BvG,QAASD,EAAKuD,cAAc6E,EAASE,cACrCM,QAAS5I,EAAKuD,cAAc6E,EAASG,cACrCM,UAAW,kBAAM5C,EAAS6C,sBAMNpD,CAA6CsB,ICrCjE+B,EAAWV,YAAe,CAC9BW,SAAS,CAAD,8DACRC,WAAW,CAAD,kEACVC,OAAO,CAAD,0DACNC,MAAM,CAAD,+DACLC,QAAQ,CAAD,8DAIHC,EADUzI,Y,4GAUdiG,QAAA,SAASyC,GAAmB,IAAD,OACzB,OAAO,kBAAM,EAAKzI,MAAM0I,aAAaD,K,EAGvC3E,OAAA,WAAW,IAAD,EACuC3C,KAAKnB,MAA5C2I,EADA,EACAA,eAAgBC,EADhB,EACgBA,aAAczJ,EAD9B,EAC8BA,KAsEtC,OArEyByJ,EAsBvB,mBAAKrG,UAAU,iCAAf,EACE,sBACEA,UAA8B,QAAnBoG,EAA2B,SAAW,GACjD3C,QAAS7E,KAAK6E,QAAQ,aAFxB,EAIE,YAAC,IAAD,CACErD,GAAG,2BACHC,eAAe,SAGnB,sBACEL,UAA8B,YAAnBoG,EAA+B,SAAW,GACrD3C,QAAS7E,KAAK6E,QAAQ,WACtBjD,MAAO5D,EAAKuD,cAAcwF,EAASC,gBAHrC,EAKE,YAAC,IAAD,CAAMxF,GAAG,YAAYG,YAAU,KAEjC,sBACEP,UAA8B,cAAnBoG,EAAiC,SAAW,GACvD3C,QAAS7E,KAAK6E,QAAQ,aACtBjD,MAAO5D,EAAKuD,cAAcwF,EAASE,kBAHrC,EAKE,YAAC,IAAD,CAAMzF,GAAG,OAAOG,YAAU,KAE5B,sBACEP,UAA8B,WAAnBoG,EAA8B,SAAW,GACpD3C,QAAS7E,KAAK6E,QAAQ,UACtBjD,MAAO5D,EAAKuD,cAAcwF,EAASG,cAHrC,EAKE,YAAC,IAAD,CAAM1F,GAAG,UAAUG,YAAU,KAE/B,sBACEP,UAA8B,SAAnBoG,EAA4B,SAAW,GAClD3C,QAAS7E,KAAK6E,QAAQ,QACtBjD,MAAO5D,EAAKuD,cAAcwF,EAASI,aAHrC,EAKE,YAAC,IAAD,CAAM3F,GAAG,QAAQG,YAAU,KAE7B,sBACEP,UAA8B,WAAnBoG,EAA8B,SAAW,GACpD3C,QAAS7E,KAAK6E,QAAQ,UACtBjD,MAAO5D,EAAKuD,cAAcwF,EAASK,eAHrC,EAKE,YAAC,IAAD,CAAM5F,GAAG,YAAYG,YAAU,MAhEnC,mBAAKP,UAAU,iCAAf,EACE,sBACEA,UAA8B,QAAnBoG,EAA2B,SAAW,GACjD3C,QAAS7E,KAAK6E,QAAQ,aAFxB,EAIE,YAAC,IAAD,CACErD,GAAG,2BACHC,eAAe,SAGnB,sBACEL,UAA8B,YAAnBoG,EAA+B,SAAW,GACrD3C,QAAS7E,KAAK6E,QAAQ,iBAFxB,EAIE,YAAC,IAAD,CACErD,GAAG,gCACHC,eAAe,gB,GAhCHqD,IAAMC,iB,ECCfrB,oBAXa,SAAAK,GAAK,MAAK,CACpCyD,eAAgBzD,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,cAAe,WACzEmI,aAAc1D,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,cAAe,eAG9C,SAAC2E,GAAD,MAAe,CACxCsD,aADwC,SAC1BG,GACZzD,EAAS0C,YAAUe,OAIRhE,CAAiD2D,G,4ECGhE,IAAMjB,GAAWC,YAAe,CAC9BzE,MAAM,CAAD,4DAGD+F,GAAmBC,YAAe,CACtC,SAAA7D,GAAK,OAAIA,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,cAAe,UAClE,SAAAyE,GAAK,OAAIA,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,cAAe,YAClE,SAAAyE,GAAK,OAAI8D,gBAAc9D,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,UAAUwI,OAAO,SAAAC,GAAI,OAAKA,IAAMC,SACjG,SAAAjE,GAAK,OAAIA,EAAMzE,MAAM,CAAC,gBAAiB,YACtC,SAAC2I,EAAeC,EAAaC,EAAeC,GAC7C,OAAKH,GAAiC,QAAhBC,EAMfE,EAAcN,OAAO,SAAAC,GAAI,OAAa,OAATA,GAAiBG,IAAgBH,EAAK/I,IAAI,UAFrEoJ,EAAcC,UAAU,SAAAN,GAAI,OAAa,OAATA,GAAiBI,EAAcG,SAASP,EAAK/I,IAAI,aAgBtFuJ,GAFU7E,kBATQ,SAAAK,GAAK,MAAK,CAChCkE,cAAelE,EAAMzE,MAAM,CAAC,WAAY,gBAAiB,cAAe,SACxE8I,cAAeT,GAAiB5D,GAChCyE,UAAWzE,EAAMzE,MAAM,CAAC,gBAAiB,cAAc,GACvDmJ,SAAU1E,EAAMzE,MAAM,CAAC,gBAAiB,WAAa,GAAKyE,EAAMzE,MAAM,CAAC,gBAAiB,iBAAiBoJ,KAAO,EAChHC,QAAS5E,EAAMzE,MAAM,CAAC,gBAAiB,YACvCsJ,WAAY7E,EAAMzE,MAAM,CAAC,gBAAiB,gBAAiBuI,mBAAiBa,O,GAI7E9J,a,kMAiCiB,SAACiK,GACf,EAAKhK,MAAMoF,SAAS6E,YAAoB,CAAED,a,6CAG1B,IAAS,WACzB,IAAME,EAAO,EAAKlK,MAAMuJ,cAAcW,OACtC,EAAKlK,MAAMoF,SAAS6E,YAAoB,CAAED,MAAOE,GAAQA,EAAK/J,IAAI,UACjE,IAAK,CAAEgK,SAAS,K,+CAEC,WAClB,EAAKnK,MAAMoF,SAASgF,iB,+CAGF,IAAS,WAC3B,EAAKpK,MAAMoF,SAASiF,aAAuB,KAC1C,M,0CAEY,IAAS,WACtB,EAAKrK,MAAMoF,SAASiF,aAAuB,KAC1C,M,uCAES,WAAO,IAAD,EACe,EAAKrK,MAA5BsK,EADQ,EACRA,SAAUlF,EADF,EACEA,SAGhBA,EADEkF,EACOC,YAAaD,GAEbE,YAAU,gBAAiB,O,wCAI3B,SAACC,GAAS,IAAD,EACW,EAAKzK,MAA5BsK,EADY,EACZA,UACRlF,EAFoB,EACFA,UACTsF,YAAWJ,EAAUG,M,+CAGZ,WAClB,EAAKE,OAAOC,c,0CAGC,SAAAC,GACb,EAAKF,OAASE,I,0CAGD,SAAAlI,GACb,IAAMmI,EAAe,EAAK9K,MAAMuJ,cAAcwB,UAAU,SAAA7B,GAAI,OAAa,OAATA,GAAiBA,EAAK/I,IAAI,QAAUwC,IAAM,EAC1G,EAAKqI,aAAaF,GAAc,K,4CAGjB,SAAAnI,GACf,IAAMmI,EAAe,EAAK9K,MAAMuJ,cAAcwB,UAAU,SAAA7B,GAAI,OAAa,OAATA,GAAiBA,EAAK/I,IAAI,QAAUwC,IAAM,EAC1G,EAAKqI,aAAaF,GAAc,K,8CA/DlCG,mBAAA,WACE9J,KAAKnB,MAAMoF,SAAS8F,gB,EAGtBC,qBAAA,WACEhK,KAAKiK,gBAAgBC,SACrBlK,KAAKmK,kBAAkBD,SACvBlK,KAAKoK,aAAaF,SAClBlK,KAAKnB,MAAMoF,SAASiF,aAAuB,IAC3ClJ,KAAKnB,MAAMoF,SAASoG,gB,EAyDtBR,aAAA,SAAcS,EAAOC,GACnB,IAAMC,EAAYxK,KAAKwJ,OAAOiB,KACxBC,EAAUF,EAAUG,cAAV,wBAA+CL,EAAQ,GAAvD,gBAEZI,IACEH,GAAaC,EAAUf,UAAYiB,EAAQE,UAC7CF,EAAQG,gBAAe,IACbN,GAAaC,EAAUf,UAAYe,EAAUM,aAAeJ,EAAQE,UAAYF,EAAQK,cAClGL,EAAQG,gBAAe,GAEzBH,EAAQM,U,EAIZrI,OAAA,WAAW,IAAD,SAC4H3C,KAAKnB,MAAjIb,EADA,EACAA,KAAMoK,EADN,EACMA,cAAe6C,EADrB,EACqBA,mBAAoBzC,EADzC,EACyCA,UAAWC,EADpD,EACoDA,SAAUU,EAD9D,EAC8DA,SAAU+B,EADxE,EACwEA,YAAavC,EADrF,EACqFA,QAASC,EAD9F,EAC8FA,WAAYX,EAD1G,EAC0GA,cAC5GkD,IAAWhC,EACXiC,EAAe,YAAC,IAAD,CAAkB5J,GAAG,6BAA6BC,eAAe,0FAElF4J,EAAoB,KAElBC,EAAqBrD,EACtB,YAAC,EAAD,IACD,KAGFoD,EADE7C,GAAaxI,KAAKqL,kBACArL,KAAKqL,kBAChBjD,EAAcM,KAAO,GAAKC,EACfP,EAAc/E,IAAI,SAAC0E,EAAMuC,GAAP,OAA0B,OAATvC,EACrD,YAAC,KAAD,CAEEwD,SAAU/C,EACVK,MAAOyB,EAAQ,EAAIlC,EAAc9I,MAAM,CAACgL,EAAQ,EAAG,OAAS,KAC5DzF,QAAS,EAAK2G,eAHT,OAASpD,EAAc9I,MAAM,CAACgL,EAAQ,EAAG,QAMhD,YAAC,EAAD,CAEExL,aAAciJ,EACd/D,UAAW+D,EAAK/I,IAAI,WACpBD,SAAU,EAAK4B,aACf1B,WAAY,EAAK4B,gBAJZkH,EAAK/I,IAAI,SAQE,KAGtBgB,KAAKqL,kBAAoBA,EAEzB,IAAMI,EACJ,YAAC,KAAD,CACEC,UAAS,iBAAmBvC,EAC5BwC,aAAcR,EACd3C,UAAWA,EACXoD,YAAapD,GAAoC,IAAvBJ,EAAcM,KACxCC,QAASA,EACTC,WAAYA,EACZwC,aAAcA,EACdS,WAAY7L,KAAKiK,gBACjB6B,cAAe9L,KAAK+L,kBACpBC,cAAehM,KAAKmK,kBACpB8B,SAAUjM,KAAKoK,aACfa,mBAAoBA,EACpBiB,gBAAiBhB,QAbnB,EAeGG,GAIL,OACE,kBAAC,IAAD,CAAQa,gBAAiBhB,EAAaiB,IAAKnM,KAAKoM,aAAclG,MAAOlI,EAAKuD,cAAc6E,GAASxE,QAC/F,YAAC,IAAD,CACEyK,KAAK,OACLC,OAAQ7D,EACR7G,MAAO5D,EAAKuD,cAAc6E,GAASxE,OACnC2K,MAAOvM,KAAKwM,UACZC,OAAQzM,KAAK0M,WACb7H,QAAS7E,KAAK2M,kBACdxB,OAAQA,EACRD,YAAaA,QARf,EAUE,YAAC,EAAD,KAEDI,EACAG,I,GA3KmB3G,IAAMC,e,6BAgBV,CACpB4G,aAAa,I","file":"features/notifications.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport StatusContainer from '../../../containers/status_container';\nimport AccountContainer from '../../../containers/account_container';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Permalink from '../../../components/permalink';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport Icon from 'mastodon/components/icon';\n\nconst notificationForScreenReader = (intl, message, timestamp) => {\n const output = [message];\n\n output.push(intl.formatDate(timestamp, { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }));\n\n return output.join(', ');\n};\n\nexport default @injectIntl\nclass Notification extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\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 onFavourite: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n intl: PropTypes.object.isRequired,\n getScrollPosition: PropTypes.func,\n updateScrollBottom: PropTypes.func,\n cacheMediaWidth: PropTypes.func,\n cachedMediaWidth: PropTypes.number,\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 const { notification } = this.props;\n\n if (notification.get('status')) {\n this.context.router.history.push(`/statuses/${notification.get('status')}`);\n } else {\n this.handleOpenProfile();\n }\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 handleHotkeyFavourite = () => {\n const { status } = this.props;\n if (status) this.props.onFavourite(status);\n }\n\n handleHotkeyBoost = e => {\n const { status } = this.props;\n if (status) this.props.onReblog(status, e);\n }\n\n handleHotkeyToggleHidden = () => {\n const { status } = this.props;\n if (status) this.props.onToggleHidden(status);\n }\n\n getHandlers () {\n return {\n reply: this.handleMention,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n mention: this.handleMention,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n toggleHidden: this.handleHotkeyToggleHidden,\n };\n }\n\n renderFollow (notification, account, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow', defaultMessage: '{name} followed you' }, { name: account.get('acct') }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='user-plus' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />\n </span>\n </div>\n\n <AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} />\n </div>\n </HotKeys>\n );\n }\n\n renderMention (notification) {\n return (\n <StatusContainer\n id={notification.get('status')}\n withDismiss\n hidden={this.props.hidden}\n onMoveDown={this.handleMoveDown}\n onMoveUp={this.handleMoveUp}\n contextType='notifications'\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n );\n }\n\n renderFavourite (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='star' className='star-icon' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.favourite' defaultMessage='{name} favourited your status' values={{ name: link }} />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={!!this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n renderReblog (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='retweet' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.reblog' defaultMessage='{name} boosted your status' values={{ name: link }} />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n renderPoll (notification) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon id='tasks' fixedWidth />\n </div>\n\n <span title={notification.get('created_at')}>\n <FormattedMessage id='notification.poll' defaultMessage='A poll you have voted in has ended' />\n </span>\n </div>\n\n <StatusContainer\n id={notification.get('status')}\n account={notification.get('account')}\n muted\n withDismiss\n hidden={this.props.hidden}\n getScrollPosition={this.props.getScrollPosition}\n updateScrollBottom={this.props.updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n />\n </div>\n </HotKeys>\n );\n }\n\n render () {\n const { notification } = this.props;\n const account = notification.get('account');\n const displayNameHtml = { __html: account.get('display_name_html') };\n const link = <bdi><Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;\n\n switch(notification.get('type')) {\n case 'follow':\n return this.renderFollow(notification, account, link);\n case 'mention':\n return this.renderMention(notification);\n case 'favourite':\n return this.renderFavourite(notification, link);\n case 'reblog':\n return this.renderReblog(notification, link);\n case 'poll':\n return this.renderPoll(notification);\n }\n\n return null;\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetNotification, makeGetStatus } from '../../../selectors';\nimport Notification from '../components/notification';\nimport { openModal } from '../../../actions/modal';\nimport { mentionCompose } from '../../../actions/compose';\nimport {\n reblog,\n favourite,\n unreblog,\n unfavourite,\n} from '../../../actions/interactions';\nimport {\n hideStatus,\n revealStatus,\n} from '../../../actions/statuses';\nimport { boostModal } from '../../../initial_state';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n const getStatus = makeGetStatus();\n\n const mapStateToProps = (state, props) => {\n const notification = getNotification(state, props.notification, props.accountId);\n return {\n notification: notification,\n status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null,\n };\n };\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n\n onModalReblog (status) {\n dispatch(reblog(status));\n },\n\n onReblog (status, e) {\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n if (e.shiftKey || !boostModal) {\n this.onModalReblog(status);\n } else {\n dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n }\n }\n },\n\n onFavourite (status) {\n if (status.get('favourited')) {\n dispatch(unfavourite(status));\n } else {\n dispatch(favourite(status));\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\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\n\nexport default class ClearColumnButton extends React.PureComponent {\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\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']} 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-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']} 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']} 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']} 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']} 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 '../../../actions/settings';\nimport { setFilter } from '../../../actions/notifications';\nimport { clearNotifications } from '../../../actions/notifications';\nimport { changeAlerts as changePushNotifications } from '../../../actions/push_notifications';\nimport { openModal } from '../../../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 'mastodon/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 '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandNotifications, scrollTopNotifications, loadPending, mountNotifications, unmountNotifications } from '../../actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from '../../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 '../../components/scrollable_list';\nimport LoadGap from '../../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 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});\n\nexport default @connect(mapStateToProps)\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 };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n componentWillMount() {\n this.props.dispatch(mountNotifications());\n }\n\n componentWillUnmount () {\n this.handleLoadOlder.cancel();\n this.handleScrollToTop.cancel();\n this.handleScroll.cancel();\n this.props.dispatch(scrollTopNotifications(false));\n this.props.dispatch(unmountNotifications());\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 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 bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.title)}>\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 >\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/features/pinned_statuses.js b/priv/static/packs/features/pinned_statuses.js index 05bc56c38..7406920a2 100644 --- a/priv/static/packs/features/pinned_statuses.js +++ b/priv/static/packs/features/pinned_statuses.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{677:function(t,e,n){"use strict";n.r(e),n.d(e,"default",function(){return y});var s,a,c,o=n(0),i=n(2),r=n(6),u=n(1),l=n(3),d=n.n(l),p=n(21),h=n(5),f=n.n(h),b=n(26),j=n.n(b),O=n(394),g=n(626),m=n(634),w=n(914),M=n(7),I=n(25),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)((c=a=function(a){function t(){for(var e,t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=a.call.apply(a,[this].concat(n))||this,Object(u.a)(Object(i.a)(e),"handleHeaderClick",function(){e.column.scrollTop()}),Object(u.a)(Object(i.a)(e),"setRef",function(t){e.column=t}),e}Object(r.a)(t,a);var e=t.prototype;return e.componentWillMount=function(){this.props.dispatch(Object(O.b)())},e.render=function(){var t=this.props,e=t.intl,n=t.shouldUpdateScroll,s=t.statusIds,a=t.hasMore;return d.a.createElement(g.a,{icon:"thumb-tack",heading:e.formatMessage(R.heading),ref:this.setRef},Object(o.a)(m.a,{}),Object(o.a)(w.a,{statusIds:s,scrollKey:"pinned_statuses",hasMore:a,shouldUpdateScroll:n}))},t}(I.a),Object(u.a)(a,"propTypes",{dispatch:f.a.func.isRequired,shouldUpdateScroll:f.a.func,statusIds:j.a.list.isRequired,intl:f.a.object.isRequired,hasMore:f.a.bool.isRequired}),s=c))||s)||s}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{724:function(t,e,n){"use strict";n.r(e),n.d(e,"default",function(){return y});var s,a,o,c=n(0),i=n(2),u=n(7),r=n(1),l=n(3),d=n.n(l),p=n(12),b=n(5),h=n.n(b),f=n(18),m=n.n(f),j=n(420),O=n(663),g=n(670),w=n(995),M=n(6),I=n(19),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)((o=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(i.a)(e),"handleHeaderClick",function(){e.column.scrollTop()}),Object(r.a)(Object(i.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.shouldUpdateScroll,s=t.statusIds,a=t.hasMore,o=t.multiColumn;return d.a.createElement(O.a,{bindToDocument:!o,icon:"thumb-tack",heading:e.formatMessage(R.heading),ref:this.setRef},Object(c.a)(g.a,{}),Object(c.a)(w.a,{statusIds:s,scrollKey:"pinned_statuses",hasMore:a,shouldUpdateScroll:n,bindToDocument:!o}))},e}(I.a),Object(r.a)(a,"propTypes",{dispatch:h.a.func.isRequired,shouldUpdateScroll:h.a.func,statusIds:m.a.list.isRequired,intl:h.a.object.isRequired,hasMore:h.a.bool.isRequired,multiColumn:h.a.bool}),s=o))||s)||s}}]); //# sourceMappingURL=pinned_statuses.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/pinned_statuses.js.map b/priv/static/packs/features/pinned_statuses.js.map index 76bcdeec5..9b5de4b46 100644 --- a/priv/static/packs/features/pinned_statuses.js.map +++ b/priv/static/packs/features/pinned_statuses.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/pinned_statuses/index.js"],"names":["messages","defineMessages","heading","id","defaultMessage","PinnedStatuses","connect","state","statusIds","getIn","hasMore","injectIntl","_this","column","scrollTop","c","componentWillMount","this","props","dispatch","fetchPinnedStatuses","render","_this$props","intl","shouldUpdateScroll","react__WEBPACK_IMPORTED_MODULE_4___default","a","createElement","_ui_components_column__WEBPACK_IMPORTED_MODULE_9__","icon","formatMessage","ref","setRef","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_components_column_back_button_slim__WEBPACK_IMPORTED_MODULE_10__","_components_status_list__WEBPACK_IMPORTED_MODULE_11__","scrollKey","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","bool"],"mappings":"0RAWMA,EAAWC,YAAe,CAC9BC,QAAO,CAAAC,GAAA,cAAAC,eAAA,iBAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,OAAQ,UAChDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,OAAQ,cAIjDE,mNAeqB,WAClBC,EAAKC,OAAOC,kDAGL,SAAAC,GACPH,EAAKC,OAASE,kDAThBC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,kBAWtBC,OAAA,WAAU,IAAAC,EACiDL,KAAKC,MAAtDK,EADAD,EACAC,KAAMC,EADNF,EACME,mBAAoBhB,EAD1Bc,EAC0Bd,UAAWE,EADrCY,EACqCZ,QAE7C,OACEe,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAQC,KAAK,aAAa3B,QAASqB,EAAKO,cAAc9B,EAASE,SAAU6B,IAAKd,KAAKe,QACjFC,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,IACAF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,CACE5B,UAAWA,EACX6B,UAAU,kBACV3B,QAASA,EACTc,mBAAoBA,SAhCDc,+BAER,CACjBnB,SAAUoB,IAAUC,KAAKC,WACzBjB,mBAAoBe,IAAUC,KAC9BhC,UAAWkC,IAAmBC,KAAKF,WACnClB,KAAMgB,IAAUK,OAAOH,WACvB/B,QAAS6B,IAAUM,KAAKJ","file":"features/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 '../../actions/pin_statuses';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport StatusList from '../../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 shouldUpdateScroll: PropTypes.func,\n statusIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n hasMore: PropTypes.bool.isRequired,\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, shouldUpdateScroll, statusIds, hasMore } = this.props;\n\n return (\n <Column 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 shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/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","shouldUpdateScroll","multiColumn","bindToDocument","icon","formatMessage","ref","setRef","scrollKey","ImmutablePureComponent","PropTypes","func","isRequired","ImmutablePropTypes","list","object","bool"],"mappings":"0RAWMA,EAAWC,YAAe,CAC9BC,QAAQ,CAAD,iDAUHC,EAFUC,kBALQ,SAAAC,GAAK,MAAK,CAChCC,UAAWD,EAAME,MAAM,CAAC,eAAgB,OAAQ,UAChDC,UAAWH,EAAME,MAAM,CAAC,eAAgB,OAAQ,W,GAIjDE,a,sMAgBqB,WAClB,EAAKC,OAAOC,c,oCAGL,SAAAC,GACP,EAAKF,OAASE,I,8CAThBC,mBAAA,WACEC,KAAKC,MAAMC,SAASC,gB,EAWtBC,OAAA,WAAW,IAAD,EAC8DJ,KAAKC,MAAnEI,EADA,EACAA,KAAMC,EADN,EACMA,mBAAoBd,EAD1B,EAC0BA,UAAWE,EADrC,EACqCA,QAASa,EAD9C,EAC8CA,YAEtD,OACE,kBAAC,IAAD,CAAQC,gBAAiBD,EAAaE,KAAK,aAAarB,QAASiB,EAAKK,cAAcxB,EAASE,SAAUuB,IAAKX,KAAKY,QAC/G,YAAC,IAAD,IACA,YAAC,IAAD,CACEpB,UAAWA,EACXqB,UAAU,kBACVnB,QAASA,EACTY,mBAAoBA,EACpBE,gBAAiBD,M,GAlCEO,K,0BAER,CACjBZ,SAAUa,IAAUC,KAAKC,WACzBX,mBAAoBS,IAAUC,KAC9BxB,UAAW0B,IAAmBC,KAAKF,WACnCZ,KAAMU,IAAUK,OAAOH,WACvBvB,QAASqB,IAAUM,KAAKJ,WACxBV,YAAaQ,IAAUM,O","file":"features/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 '../../actions/pin_statuses';\nimport Column from '../ui/components/column';\nimport ColumnBackButtonSlim from '../../components/column_back_button_slim';\nimport StatusList from '../../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 shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, 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 shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/public_timeline.js b/priv/static/packs/features/public_timeline.js index 24d101ae7..abcfad7dd 100644 --- a/priv/static/packs/features/public_timeline.js +++ b/priv/static/packs/features/public_timeline.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{716:function(e,t,n){"use strict";n.r(t);var o,i,c,d=n(0),a=n(2),l=n(6),r=n(1),s=n(3),u=n.n(s),p=n(21),b=n(7),h=n(5),m=n.n(h),f=n(904),j=n(633),O=n(628),M=n(35),g=n(222),y=n(987),v=n(70),I=Object(p.connect)(function(e,t){var n=t.columnId,o=e.getIn(["settings","columns"]),i=o.findIndex(function(e){return e.get("uuid")===n});return{settings:n&&0<=i?o.get(i).get("params"):e.getIn(["settings","public"])}},function(n,e){var o=e.columnId;return{onChange:function(e,t){n(o?Object(g.f)(o,e,t):Object(v.c)(["public"].concat(e),t))}}})(y.a),w=n(635);n.d(t,"default",function(){return U});var C=Object(b.f)({title:{id:"column.public",defaultMessage:"Federated timeline"}}),U=Object(p.connect)(function(e,t){var n=t.onlyMedia,o=t.columnId,i=o,c=e.getIn(["settings","columns"]),a=c.findIndex(function(e){return e.get("uuid")===i});return{hasUnread:0<e.getIn(["timelines","public"+(n?":media":""),"unread"]),onlyMedia:o&&0<=a?c.get(a).getIn(["params","other","onlyMedia"]):e.getIn(["settings","public","other","onlyMedia"])}})(o=Object(b.g)((c=i=function(o){function e(){for(var i,e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return i=o.call.apply(o,[this].concat(t))||this,Object(r.a)(Object(a.a)(i),"handlePin",function(){var e=i.props,t=e.columnId,n=e.dispatch,o=e.onlyMedia;n(t?Object(g.h)(t):Object(g.e)("PUBLIC",{other:{onlyMedia:o}}))}),Object(r.a)(Object(a.a)(i),"handleMove",function(e){var t=i.props,n=t.columnId;(0,t.dispatch)(Object(g.g)(n,e))}),Object(r.a)(Object(a.a)(i),"handleHeaderClick",function(){i.column.scrollTop()}),Object(r.a)(Object(a.a)(i),"setRef",function(e){i.column=e}),Object(r.a)(Object(a.a)(i),"handleLoadMore",function(e){var t=i.props,n=t.dispatch,o=t.onlyMedia;n(Object(M.u)({maxId:e,onlyMedia:o}))}),i}Object(l.a)(e,o);var t=e.prototype;return t.componentDidMount=function(){var e=this.props,t=e.dispatch,n=e.onlyMedia;t(Object(M.u)({onlyMedia:n})),this.disconnect=t(Object(w.e)({onlyMedia:n}))},t.componentDidUpdate=function(e){if(e.onlyMedia!==this.props.onlyMedia){var t=this.props,n=t.dispatch,o=t.onlyMedia;this.disconnect(),n(Object(M.u)({onlyMedia:o})),this.disconnect=n(Object(w.e)({onlyMedia:o}))}},t.componentWillUnmount=function(){this.disconnect&&(this.disconnect(),this.disconnect=null)},t.render=function(){var e=this.props,t=e.intl,n=e.shouldUpdateScroll,o=e.columnId,i=e.hasUnread,c=e.multiColumn,a=e.onlyMedia,l=!!o;return u.a.createElement(j.a,{ref:this.setRef,label:t.formatMessage(C.title)},Object(d.a)(O.a,{icon:"globe",active:i,title:t.formatMessage(C.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:l,multiColumn:c},void 0,Object(d.a)(I,{columnId:o})),Object(d.a)(f.a,{timelineId:"public"+(a?":media":""),onLoadMore:this.handleLoadMore,trackScroll:!l,scrollKey:"public_timeline-"+o,emptyMessage:Object(d.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"}),shouldUpdateScroll:n}))},e}(u.a.PureComponent),Object(r.a)(i,"contextTypes",{router:m.a.object}),Object(r.a)(i,"defaultProps",{onlyMedia:!1}),o=c))||o)||o}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{765: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(12),b=t(6),h=t(5),m=t.n(h),f=t(977),j=t(669),O=t(665),M=t(35),g=t(245),y=t(1092),v=t(72),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(g.f)(t,n,o):Object(v.c)(["public"].concat(n),o))}}})(y.a),w=t(672);t.d(n,"default",function(){return U});var C=Object(b.f)({title:{id:"column.public",defaultMessage:"Federated timeline"}}),U=Object(p.connect)(function(e,n){var t=n.onlyMedia,o=n.columnId,i=o,c=e.getIn(["settings","columns"]),a=c.findIndex(function(e){return e.get("uuid")===i});return{hasUnread:e.getIn(["timelines","public"+(t?":media":""),"unread"])>0,onlyMedia:o&&a>=0?c.get(a).getIn(["params","other","onlyMedia"]):e.getIn(["settings","public","other","onlyMedia"])}})(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(g.h)(t):Object(g.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(g.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(M.v)({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(M.v)({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(M.v)({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.shouldUpdateScroll,o=e.columnId,i=e.hasUnread,c=e.multiColumn,l=e.onlyMedia,d=!!o;return u.a.createElement(j.a,{bindToDocument:!c,ref:this.setRef,label:n.formatMessage(C.title)},Object(a.a)(O.a,{icon:"globe",active:i,title:n.formatMessage(C.title),onPin:this.handlePin,onMove:this.handleMove,onClick:this.handleHeaderClick,pinned:d,multiColumn:c},void 0,Object(a.a)(I,{columnId:o})),Object(a.a)(f.a,{timelineId:"public"+(l?":media":""),onLoadMore:this.handleLoadMore,trackScroll:!d,scrollKey:"public_timeline-"+o,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"}),shouldUpdateScroll:t,bindToDocument:!c}))},n}(u.a.PureComponent),Object(r.a)(i,"contextTypes",{router:m.a.object}),Object(r.a)(i,"defaultProps",{onlyMedia:!1}),o=c))||o)||o}}]); //# sourceMappingURL=public_timeline.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/public_timeline.js.map b/priv/static/packs/features/public_timeline.js.map index 3907f1e04..8d052edb5 100644 --- a/priv/static/packs/features/public_timeline.js.map +++ b/priv/static/packs/features/public_timeline.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/public_timeline/containers/column_settings_container.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/public_timeline/index.js"],"names":["connect","state","_ref","uuid","columnId","columns","getIn","index","findIndex","c","get","settings","dispatch","_ref2","onChange","key","checked","changeColumnParams","changeSetting","concat","ColumnSettings","messages","defineMessages","title","id","defaultMessage","PublicTimeline","onlyMedia","hasUnread","injectIntl","_this$props","_this","props","removeColumn","addColumn","other","dir","_this$props2","moveColumn","column","scrollTop","maxId","_this$props3","expandPublicTimeline","componentDidMount","_this$props4","this","disconnect","connectPublicStream","componentDidUpdate","prevProps","_this$props5","componentWillUnmount","render","_this$props6","intl","shouldUpdateScroll","multiColumn","pinned","react_default","a","createElement","ref","setRef","label","formatMessage","Object","jsx","column_header","icon","active","onPin","handlePin","onMove","handleMove","onClick","handleHeaderClick","column_settings_container","status_list_container","timelineId","onLoadMore","handleLoadMore","trackScroll","scrollKey","emptyMessage","index_es","React","PureComponent","router","PropTypes","object"],"mappings":"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","file":"features/public_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../../community_timeline/components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { changeColumnParams } from '../../../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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandPublicTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectPublicStream } from '../../actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst mapStateToProps = (state, { onlyMedia, 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 hasUnread: state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`, 'unread']) > 0,\n onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']),\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PublicTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, columnId, hasUnread, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\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/mastodon/features/public_timeline/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/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","hasUnread","injectIntl","props","removeColumn","addColumn","other","dir","moveColumn","column","scrollTop","maxId","expandPublicTimeline","componentDidMount","this","disconnect","connectPublicStream","componentDidUpdate","prevProps","componentWillUnmount","render","intl","shouldUpdateScroll","multiColumn","pinned","bindToDocument","ref","setRef","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":"features/public_timeline.js","sourcesContent":["import { connect } from 'react-redux';\nimport ColumnSettings from '../../community_timeline/components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { changeColumnParams } from '../../../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 '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandPublicTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectPublicStream } from '../../actions/streaming';\n\nconst messages = defineMessages({\n title: { id: 'column.public', defaultMessage: 'Federated timeline' },\n});\n\nconst mapStateToProps = (state, { onlyMedia, 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 hasUnread: state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`, 'unread']) > 0,\n onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']),\n };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass PublicTimeline extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static defaultProps = {\n onlyMedia: false,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\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, shouldUpdateScroll, columnId, hasUnread, multiColumn, onlyMedia } = this.props;\n const pinned = !!columnId;\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} 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 shouldUpdateScroll={shouldUpdateScroll}\n bindToDocument={!multiColumn}\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/reblogs.js b/priv/static/packs/features/reblogs.js index 2ea5892da..fcd199969 100644 --- a/priv/static/packs/features/reblogs.js +++ b/priv/static/packs/features/reblogs.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{681:function(t,s,e){"use strict";e.r(s),e.d(s,"default",function(){return v});var a,o,n,r=e(0),c=e(6),p=e(1),i=(e(3),e(21)),u=e(25),d=e(5),l=e.n(d),b=e(26),h=e.n(b),m=e(272),f=e(58),j=e(7),O=e(895),I=e(626),w=e(629),y=e(893),v=Object(i.connect)(function(t,s){return{accountIds:t.getIn(["user_lists","reblogged_by",s.params.statusId])}})((n=o=function(t){function s(){return t.apply(this,arguments)||this}Object(c.a)(s,t);var e=s.prototype;return e.componentWillMount=function(){this.props.dispatch(Object(f.m)(this.props.params.statusId))},e.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(f.m)(t.params.statusId))},e.render=function(){var t=this.props,s=t.shouldUpdateScroll,e=t.accountIds;if(!e)return Object(r.a)(I.a,{},void 0,Object(r.a)(m.a,{}));var a=Object(r.a)(j.b,{id:"status.reblogs.empty",defaultMessage:"No one has boosted this toot yet. When someone does, they will show up here."});return Object(r.a)(I.a,{},void 0,Object(r.a)(w.a,{}),Object(r.a)(y.a,{scrollKey:"reblogs",shouldUpdateScroll:s,emptyMessage:a},void 0,e.map(function(t){return Object(r.a)(O.a,{id:t,withNote:!1},t)})))},s}(u.a),Object(p.a)(o,"propTypes",{params:l.a.object.isRequired,dispatch:l.a.func.isRequired,shouldUpdateScroll:l.a.func,accountIds:h.a.list}),a=n))||a}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{728:function(t,s,e){"use strict";e.r(s),e.d(s,"default",function(){return v});var a,o,n,r=e(0),c=e(7),u=e(1),i=(e(3),e(12)),p=e(19),d=e(5),l=e.n(d),b=e(18),h=e.n(b),m=e(294),f=e(66),j=e(6),O=e(966),I=e(663),w=e(666),y=e(964),v=Object(i.connect)(function(t,s){return{accountIds:t.getIn(["user_lists","reblogged_by",s.params.statusId])}})((n=o=function(t){function s(){return t.apply(this,arguments)||this}Object(c.a)(s,t);var e=s.prototype;return e.componentWillMount=function(){this.props.accountIds||this.props.dispatch(Object(f.m)(this.props.params.statusId))},e.componentWillReceiveProps=function(t){t.params.statusId!==this.props.params.statusId&&t.params.statusId&&this.props.dispatch(Object(f.m)(t.params.statusId))},e.render=function(){var t=this.props,s=t.shouldUpdateScroll,e=t.accountIds,a=t.multiColumn;if(!e)return Object(r.a)(I.a,{},void 0,Object(r.a)(m.a,{}));var o=Object(r.a)(j.b,{id:"status.reblogs.empty",defaultMessage:"No one has boosted this toot yet. When someone does, they will show up here."});return Object(r.a)(I.a,{},void 0,Object(r.a)(w.a,{multiColumn:a}),Object(r.a)(y.a,{scrollKey:"reblogs",shouldUpdateScroll:s,emptyMessage:o,bindToDocument:!a},void 0,e.map(function(t){return Object(r.a)(O.a,{id:t,withNote:!1},t)})))},s}(p.a),Object(u.a)(o,"propTypes",{params:l.a.object.isRequired,dispatch:l.a.func.isRequired,shouldUpdateScroll:l.a.func,accountIds:h.a.list,multiColumn:l.a.bool}),a=n))||a}}]); //# sourceMappingURL=reblogs.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/reblogs.js.map b/priv/static/packs/features/reblogs.js.map index ef1ee6fca..ac1fc1321 100644 --- a/priv/static/packs/features/reblogs.js.map +++ b/priv/static/packs/features/reblogs.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/reblogs/index.js"],"names":["Reblogs","connect","state","props","accountIds","getIn","params","statusId","componentWillMount","this","dispatch","fetchReblogs","componentWillReceiveProps","nextProps","render","_this$props","shouldUpdateScroll","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_ui_components_column__WEBPACK_IMPORTED_MODULE_12__","_components_loading_indicator__WEBPACK_IMPORTED_MODULE_8__","emptyMessage","react_intl__WEBPACK_IMPORTED_MODULE_10__","id","defaultMessage","_components_column_back_button__WEBPACK_IMPORTED_MODULE_13__","_components_scrollable_list__WEBPACK_IMPORTED_MODULE_14__","scrollKey","map","_containers_account_container__WEBPACK_IMPORTED_MODULE_11__","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list"],"mappings":"2RAkBMA,EADUC,kBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,eAAgBF,EAAMG,OAAOC,6HAapEC,mBAAA,WACEC,KAAKN,MAAMO,SAASC,YAAaF,KAAKN,MAAMG,OAAOC,cAGrDK,0BAAA,SAA0BC,GACpBA,EAAUP,OAAOC,WAAaE,KAAKN,MAAMG,OAAOC,UAAYM,EAAUP,OAAOC,UAC/EE,KAAKN,MAAMO,SAASC,YAAaE,EAAUP,OAAOC,cAItDO,OAAA,WAAU,IAAAC,EACmCN,KAAKN,MAAxCa,EADAD,EACAC,mBAAoBZ,EADpBW,EACoBX,WAE5B,IAAKA,EACH,OACEa,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACG,EAAA,EAAD,KAKN,IAAMC,EAAeJ,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAkBC,GAAG,uBAAuBC,eAAe,iFAEhF,OACEP,OAAAC,EAAA,EAAAD,CAACE,EAAA,EAAD,UACEF,OAAAC,EAAA,EAAAD,CAACQ,EAAA,EAAD,IAEAR,OAAAC,EAAA,EAAAD,CAACS,EAAA,EAAD,CACEC,UAAU,UACVX,mBAAoBA,EACpBK,aAAcA,QAHhB,EAKGjB,EAAWwB,IAAI,SAAAL,GAAE,OAChBN,OAAAC,EAAA,EAAAD,CAACY,EAAA,EAAD,CAA2BN,GAAIA,EAAIO,UAAU,GAAtBP,WA1CbQ,+BAED,CACjBzB,OAAQ0B,IAAUC,OAAOC,WACzBxB,SAAUsB,IAAUG,KAAKD,WACzBlB,mBAAoBgB,IAAUG,KAC9B/B,WAAYgC,IAAmBC","file":"features/reblogs.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport { fetchReblogs } from '../../actions/interactions';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\nclass Reblogs extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchReblogs(this.props.params.statusId));\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 render () {\n const { shouldUpdateScroll, accountIds } = 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>\n <ColumnBackButton />\n\n <ScrollableList\n scrollKey='reblogs'\n shouldUpdateScroll={shouldUpdateScroll}\n emptyMessage={emptyMessage}\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/mastodon/features/reblogs/index.js"],"names":["Reblogs","connect","state","props","accountIds","getIn","params","statusId","componentWillMount","this","dispatch","fetchReblogs","componentWillReceiveProps","nextProps","render","shouldUpdateScroll","multiColumn","emptyMessage","id","defaultMessage","scrollKey","bindToDocument","map","withNote","ImmutablePureComponent","PropTypes","object","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"2RAkBMA,EADUC,kBAJQ,SAACC,EAAOC,GAAR,MAAmB,CACzCC,WAAYF,EAAMG,MAAM,CAAC,aAAc,eAAgBF,EAAMG,OAAOC,a,gHAcpEC,mBAAA,WACOC,KAAKN,MAAMC,YACdK,KAAKN,MAAMO,SAASC,YAAaF,KAAKN,MAAMG,OAAOC,Y,EAIvDK,0BAAA,SAA0BC,GACpBA,EAAUP,OAAOC,WAAaE,KAAKN,MAAMG,OAAOC,UAAYM,EAAUP,OAAOC,UAC/EE,KAAKN,MAAMO,SAASC,YAAaE,EAAUP,OAAOC,Y,EAItDO,OAAA,WAAW,IAAD,EACgDL,KAAKN,MAArDY,EADA,EACAA,mBAAoBX,EADpB,EACoBA,WAAYY,EADhC,EACgCA,YAExC,IAAKZ,EACH,OACE,YAAC,IAAD,UACE,YAAC,IAAD,KAKN,IAAMa,EAAe,YAAC,IAAD,CAAkBC,GAAG,uBAAuBC,eAAe,iFAEhF,OACE,YAAC,IAAD,UACE,YAAC,IAAD,CAAkBH,YAAaA,IAE/B,YAAC,IAAD,CACEI,UAAU,UACVL,mBAAoBA,EACpBE,aAAcA,EACdI,gBAAiBL,QAJnB,EAMGZ,EAAWkB,IAAI,SAAAJ,GAAE,OAChB,YAAC,IAAD,CAA2BA,GAAIA,EAAIK,UAAU,GAAtBL,Q,GA9CbM,K,0BAED,CACjBlB,OAAQmB,IAAUC,OAAOC,WACzBjB,SAAUe,IAAUG,KAAKD,WACzBZ,mBAAoBU,IAAUG,KAC9BxB,WAAYyB,IAAmBC,KAC/Bd,YAAaS,IAAUM,O","file":"features/reblogs.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport { fetchReblogs } from '../../actions/interactions';\nimport { FormattedMessage } from 'react-intl';\nimport AccountContainer from '../../containers/account_container';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ScrollableList from '../../components/scrollable_list';\n\nconst mapStateToProps = (state, props) => ({\n accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),\n});\n\nexport default @connect(mapStateToProps)\nclass Reblogs extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n accountIds: ImmutablePropTypes.list,\n multiColumn: PropTypes.bool,\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 render () {\n const { shouldUpdateScroll, 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>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <ScrollableList\n scrollKey='reblogs'\n shouldUpdateScroll={shouldUpdateScroll}\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/features/search.js b/priv/static/packs/features/search.js new file mode 100644 index 000000000..631d69b83 --- /dev/null +++ b/priv/static/packs/features/search.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{737:function(a,e,c){"use strict";c.r(e);var r=c(0),d=(c(3),c(687)),i=c(1097);e.default=function(){return Object(r.a)("div",{className:"column search-page"},void 0,Object(r.a)(d.a,{}),Object(r.a)("div",{className:"drawer__pager"},void 0,Object(r.a)("div",{className:"drawer__inner darker"},void 0,Object(r.a)(i.a,{}))))}}}]); +//# sourceMappingURL=search.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/search.js.map b/priv/static/packs/features/search.js.map new file mode 100644 index 000000000..74113975c --- /dev/null +++ b/priv/static/packs/features/search.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/search/index.js"],"names":["Search","className"],"mappings":"uIAgBeA,UAZA,kBACb,mBAAKC,UAAU,2BAAf,EACE,YAAC,IAAD,IAEA,mBAAKA,UAAU,sBAAf,EACE,mBAAKA,UAAU,6BAAf,EACE,YAAC,IAAD","file":"features/search.js","sourcesContent":["import React from 'react';\nimport SearchContainer from 'mastodon/features/compose/containers/search_container';\nimport SearchResultsContainer from 'mastodon/features/compose/containers/search_results_container';\n\nconst Search = () => (\n <div className='column search-page'>\n <SearchContainer />\n\n <div className='drawer__pager'>\n <div className='drawer__inner darker'>\n <SearchResultsContainer />\n </div>\n </div>\n </div>\n);\n\nexport default Search;\n"],"sourceRoot":""}
\ No newline at end of file diff --git a/priv/static/packs/features/status.js b/priv/static/packs/features/status.js index 7433cf8ef..468527aa5 100644 --- a/priv/static/packs/features/status.js +++ b/priv/static/packs/features/status.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{649:function(e,t,a){"use strict";a.d(t,"a",function(){return x});var r=a(0),i=a(2),s=a(6),o=a(1),n=a(3),d=a.n(n),c=a(5),l=a.n(c),u=a(26),p=a.n(u),h=a(194),b=a(195),g=a(209),f=a(496),O=a(502),m=a(358),j=a(7),v=a(497),M=a(25),y=a(132),k=a(642),_=a(12),C=a.n(_),R=a(30),w=a(503),x=function(n){function e(){for(var a,e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return a=n.call.apply(n,[this].concat(t))||this,Object(o.a)(Object(i.a)(a),"state",{height:null}),Object(o.a)(Object(i.a)(a),"handleAccountClick",function(e){0!==e.button||e.ctrlKey||e.metaKey||!a.context.router||(e.preventDefault(),a.context.router.history.push("/accounts/"+a.props.status.getIn(["account","id"]))),e.stopPropagation()}),Object(o.a)(Object(i.a)(a),"handleOpenVideo",function(e,t){a.props.onOpenVideo(e,t)}),Object(o.a)(Object(i.a)(a),"handleExpandedToggle",function(){a.props.onToggleHidden(a.props.status)}),Object(o.a)(Object(i.a)(a),"setRef",function(e){a.node=e,a._measureHeight()}),Object(o.a)(Object(i.a)(a),"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")}),a}Object(s.a)(e,n);var t=e.prototype;return t._measureHeight=function(e){var t=this;this.props.measureHeight&&this.node&&(Object(k.a)(function(){return t.node&&t.setState({height:Math.ceil(t.node.scrollHeight)+1})}),this.props.onHeightChange&&e&&this.props.onHeightChange())},t.componentDidUpdate=function(e,t){this._measureHeight(t.height!==this.state.height)},t.render=function(){var e=this.props.status&&this.props.status.get("reblog")?this.props.status.get("reblog"):this.props.status,t={boxSizing:"border-box"},a=this.props.compact;if(!e)return null;var s="",n="",i="",o="retweet",c="";if(this.props.measureHeight&&(t.height=this.state.height+"px"),e.get("poll"))s=Object(r.a)(w.a,{pollId:e.get("poll")});else if(0<e.get("media_attachments").size)if(e.get("media_attachments").some(function(e){return"unknown"===e.get("type")}))s=Object(r.a)(O.a,{media:e.get("media_attachments")});else if("video"===e.getIn(["media_attachments",0,"type"])){var l=e.getIn(["media_attachments",0]);s=Object(r.a)(y.default,{preview:l.get("preview_url"),src:l.get("url"),alt:l.get("description"),width:300,height:150,inline:!0,onOpenVideo:this.handleOpenVideo,sensitive:e.get("sensitive")})}else s=Object(r.a)(f.default,{standalone:!0,sensitive:e.get("sensitive"),media:e.get("media_attachments"),height:300,onOpenMedia:this.props.onOpenMedia});else 0===e.get("spoiler_text").length&&(s=Object(r.a)(v.a,{onOpenMedia:this.props.onOpenMedia,card:e.get("card",null)}));return e.get("application")&&(n=Object(r.a)("span",{},void 0," · ",Object(r.a)("a",{className:"detailed-status__application",href:e.getIn(["application","website"]),target:"_blank",rel:"noopener"},void 0,e.getIn(["application","name"])))),"direct"===e.get("visibility")?o="envelope":"private"===e.get("visibility")&&(o="lock"),i="private"===e.get("visibility")?Object(r.a)(R.a,{id:o}):this.context.router?Object(r.a)(m.a,{to:"/statuses/"+e.get("id")+"/reblogs",className:"detailed-status__link"},void 0,Object(r.a)(R.a,{id:o}),Object(r.a)("span",{className:"detailed-status__reblogs"},void 0,Object(r.a)(j.c,{value:e.get("reblogs_count")}))):Object(r.a)("a",{href:"/interact/"+e.get("id")+"?type=reblog",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(r.a)(R.a,{id:o}),Object(r.a)("span",{className:"detailed-status__reblogs"},void 0,Object(r.a)(j.c,{value:e.get("reblogs_count")}))),c=this.context.router?Object(r.a)(m.a,{to:"/statuses/"+e.get("id")+"/favourites",className:"detailed-status__link"},void 0,Object(r.a)(R.a,{id:"star"}),Object(r.a)("span",{className:"detailed-status__favorites"},void 0,Object(r.a)(j.c,{value:e.get("favourites_count")}))):Object(r.a)("a",{href:"/interact/"+e.get("id")+"?type=favourite",className:"detailed-status__link",onClick:this.handleModalLink},void 0,Object(r.a)(R.a,{id:"star"}),Object(r.a)("span",{className:"detailed-status__favorites"},void 0,Object(r.a)(j.c,{value:e.get("favourites_count")}))),Object(r.a)("div",{style:t},void 0,d.a.createElement("div",{ref:this.setRef,className:C()("detailed-status",{compact:a})},Object(r.a)("a",{href:e.getIn(["account","url"]),onClick:this.handleAccountClick,className:"detailed-status__display-name"},void 0,Object(r.a)("div",{className:"detailed-status__display-avatar"},void 0,Object(r.a)(h.a,{account:e.get("account"),size:48})),Object(r.a)(b.a,{account:e.get("account"),localDomain:this.props.domain})),Object(r.a)(g.a,{status:e,expanded:!e.get("hidden"),onExpandedToggle:this.handleExpandedToggle}),s,Object(r.a)("div",{className:"detailed-status__meta"},void 0,Object(r.a)("a",{className:"detailed-status__datetime",href:e.get("url"),target:"_blank",rel:"noopener"},void 0,Object(r.a)(j.a,{value:new Date(e.get("created_at")),hour12:!1,year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})),n," · ",i," · ",c)))},e}(M.a);Object(o.a)(x,"contextTypes",{router:l.a.object}),Object(o.a)(x,"propTypes",{status:p.a.map,onOpenMedia:l.a.func.isRequired,onOpenVideo:l.a.func.isRequired,onToggleHidden:l.a.func.isRequired,measureHeight:l.a.bool,onHeightChange:l.a.func,domain:l.a.string.isRequired,compact:l.a.bool})},714:function(e,t,a){"use strict";a.r(t);var s,n,i,o,c,l,r,u=a(0),d=a(2),p=a(6),h=a(1),b=a(4),g=a.n(b),f=a(3),O=a.n(f),m=a(21),j=a(5),v=a.n(j),M=a(12),y=a.n(M),k=a(26),_=a.n(k),C=a(86),R=a(897),w=a(649),x=a(67),I=a(637),D=a(7),H=a(24),N=Object(D.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"},cancel_reblog_private:{id:"status.cancel_reblog_private",defaultMessage:"Unboost"},cannot_reblog:{id:"status.cannot_reblog",defaultMessage:"This post cannot be boosted"},favourite:{id:"status.favourite",defaultMessage:"Favourite"},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"}}),A=Object(D.g)((i=n=function(n){function e(){for(var a,e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return a=n.call.apply(n,[this].concat(t))||this,Object(h.a)(Object(d.a)(a),"handleReplyClick",function(){a.props.onReply(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleReblogClick",function(e){a.props.onReblog(a.props.status,e)}),Object(h.a)(Object(d.a)(a),"handleFavouriteClick",function(){a.props.onFavourite(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleDeleteClick",function(){a.props.onDelete(a.props.status,a.context.router.history)}),Object(h.a)(Object(d.a)(a),"handleRedraftClick",function(){a.props.onDelete(a.props.status,a.context.router.history,!0)}),Object(h.a)(Object(d.a)(a),"handleDirectClick",function(){a.props.onDirect(a.props.status.get("account"),a.context.router.history)}),Object(h.a)(Object(d.a)(a),"handleMentionClick",function(){a.props.onMention(a.props.status.get("account"),a.context.router.history)}),Object(h.a)(Object(d.a)(a),"handleMuteClick",function(){a.props.onMute(a.props.status.get("account"))}),Object(h.a)(Object(d.a)(a),"handleConversationMuteClick",function(){a.props.onMuteConversation(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleBlockClick",function(){a.props.onBlock(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleReport",function(){a.props.onReport(a.props.status)}),Object(h.a)(Object(d.a)(a),"handlePinClick",function(){a.props.onPin(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleShare",function(){navigator.share({text:a.props.status.get("search_index"),url:a.props.status.get("url")})}),Object(h.a)(Object(d.a)(a),"handleEmbed",function(){a.props.onEmbed(a.props.status)}),Object(h.a)(Object(d.a)(a),"handleCopy",function(){var e=a.props.status.get("url"),t=document.createElement("textarea");t.textContent=e,t.style.position="fixed",document.body.appendChild(t);try{t.select(),document.execCommand("copy")}catch(e){}finally{document.body.removeChild(t)}}),a}return Object(p.a)(e,n),e.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(N.copy),action:this.handleCopy}),i.push({text:a.formatMessage(N.embed),action:this.handleEmbed}),i.push(null)),H.k===t.getIn(["account","id"])?(s?i.push({text:a.formatMessage(t.get("pinned")?N.unpin:N.pin),action:this.handlePinClick}):"private"===t.get("visibility")&&i.push({text:a.formatMessage(t.get("reblogged")?N.cancel_reblog_private:N.reblog_private),action:this.handleReblogClick}),i.push(null),i.push({text:a.formatMessage(n?N.unmuteConversation:N.muteConversation),action:this.handleConversationMuteClick}),i.push(null),i.push({text:a.formatMessage(N.delete),action:this.handleDeleteClick}),i.push({text:a.formatMessage(N.redraft),action:this.handleRedraftClick})):(i.push({text:a.formatMessage(N.mention,{name:t.getIn(["account","username"])}),action:this.handleMentionClick}),i.push({text:a.formatMessage(N.direct,{name:t.getIn(["account","username"])}),action:this.handleDirectClick}),i.push(null),i.push({text:a.formatMessage(N.mute,{name:t.getIn(["account","username"])}),action:this.handleMuteClick}),i.push({text:a.formatMessage(N.block,{name:t.getIn(["account","username"])}),action:this.handleBlockClick}),i.push({text:a.formatMessage(N.report,{name:t.getIn(["account","username"])}),action:this.handleReport}),H.i&&(i.push(null),i.push({text:a.formatMessage(N.admin_account,{name:t.getIn(["account","username"])}),href:"/admin/accounts/"+t.getIn(["account","id"])}),i.push({text:a.formatMessage(N.admin_status),href:"/admin/accounts/"+t.getIn(["account","id"])+"/statuses/"+t.get("id")})));var o,c="share"in navigator&&"public"===t.get("visibility")&&Object(u.a)("div",{className:"detailed-status__button"},void 0,Object(u.a)(x.a,{title:a.formatMessage(N.share),icon:"share-alt",onClick:this.handleShare}));o=null===t.get("in_reply_to_id",null)?"reply":"reply-all";var l="retweet";"direct"===t.get("visibility")?l="envelope":"private"===t.get("visibility")&&(l="lock");var r="direct"===t.get("visibility")||"private"===t.get("visibility");return Object(u.a)("div",{className:"detailed-status__action-bar"},void 0,Object(u.a)("div",{className:"detailed-status__button"},void 0,Object(u.a)(x.a,{title:a.formatMessage(N.reply),icon:t.get("in_reply_to_account_id")===t.getIn(["account","id"])?"reply":o,onClick:this.handleReplyClick})),Object(u.a)("div",{className:"detailed-status__button"},void 0,Object(u.a)(x.a,{disabled:r,active:t.get("reblogged"),title:r?a.formatMessage(N.cannot_reblog):a.formatMessage(N.reblog),icon:l,onClick:this.handleReblogClick})),Object(u.a)("div",{className:"detailed-status__button"},void 0,Object(u.a)(x.a,{className:"star-icon",animate:!0,active:t.get("favourited"),title:a.formatMessage(N.favourite),icon:"star",onClick:this.handleFavouriteClick})),c,Object(u.a)("div",{className:"detailed-status__action-bar-dropdown"},void 0,Object(u.a)(I.a,{size:18,icon:"ellipsis-h",items:i,direction:"left",title:"More"})))},e}(O.a.PureComponent),Object(h.a)(n,"contextTypes",{router:v.a.object}),s=i))||s,T=a(626),S=a(58),B=a(22),E=a(27),F=a(196),U=a(94),z=a(200),P=a(427),V=a(629),q=a(628),K=a(903),L=a(57),J=a(25),W=a(343),X=a(230),G=a(769),Q=a(30);a.d(t,"default",function(){return Z});var Y=Object(D.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? Favourites and boosts will be lost, and replies to the original post will be orphaned."},blockConfirm:{id:"confirmations.block.confirm",defaultMessage:"Block"},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?"},blockAndReport:{id:"confirmations.block.block_and_report",defaultMessage:"Block & Report"}}),Z=(o=Object(m.connect)(function(){var s=Object(z.f)();return function(n,e){var i=s(n,{id:e.params.statusId}),t=g.a.List(),a=g.a.List();return i&&(t=t.withMutations(function(e){for(var t=i.get("in_reply_to_id");t;)e.unshift(t),t=n.getIn(["contexts","inReplyTos",t])}),a=a.withMutations(function(e){for(var t=[i.get("id")];0<t.length;){var a=t.shift(),s=n.getIn(["contexts","replies",a]);i.get("id")!==a&&e.push(a),s&&s.reverse().forEach(function(e){t.unshift(e)})}})),{status:i,ancestorsIds:t,descendantsIds:a,askReplyConfirmation:0!==n.getIn(["compose","text"]).trim().length,domain:n.getIn(["meta","domain"])}}}),Object(D.g)(c=o((r=l=function(s){function e(){for(var o,e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return o=s.call.apply(s,[this].concat(t))||this,Object(h.a)(Object(d.a)(o),"state",{fullscreen:!1}),Object(h.a)(Object(d.a)(o),"handleFavouriteClick",function(e){e.get("favourited")?o.props.dispatch(Object(S.p)(e)):o.props.dispatch(Object(S.k)(e))}),Object(h.a)(Object(d.a)(o),"handlePin",function(e){e.get("pinned")?o.props.dispatch(Object(S.q)(e)):o.props.dispatch(Object(S.n)(e))}),Object(h.a)(Object(d.a)(o),"handleReplyClick",function(e){var t=o.props,a=t.askReplyConfirmation,s=t.dispatch,n=t.intl;s(a?Object(L.d)("CONFIRM",{message:n.formatMessage(Y.replyMessage),confirm:n.formatMessage(Y.replyConfirm),onConfirm:function(){return s(Object(B.fb)(e,o.context.router.history))}}):Object(B.fb)(e,o.context.router.history))}),Object(h.a)(Object(d.a)(o),"handleModalReblog",function(e){o.props.dispatch(Object(S.o)(e))}),Object(h.a)(Object(d.a)(o),"handleReblogClick",function(e,t){e.get("reblogged")?o.props.dispatch(Object(S.r)(e)):t&&t.shiftKey||!H.b?o.handleModalReblog(e):o.props.dispatch(Object(L.d)("BOOST",{status:e,onReblog:o.handleModalReblog}))}),Object(h.a)(Object(d.a)(o),"handleDeleteClick",function(e,t,a){void 0===a&&(a=!1);var s=o.props,n=s.dispatch,i=s.intl;H.d?n(Object(L.d)("CONFIRM",{message:i.formatMessage(a?Y.redraftMessage:Y.deleteMessage),confirm:i.formatMessage(a?Y.redraftConfirm:Y.deleteConfirm),onConfirm:function(){return n(Object(C.g)(e.get("id"),t,a))}})):n(Object(C.g)(e.get("id"),t,a))}),Object(h.a)(Object(d.a)(o),"handleDirectClick",function(e,t){o.props.dispatch(Object(B.X)(e,t))}),Object(h.a)(Object(d.a)(o),"handleMentionClick",function(e,t){o.props.dispatch(Object(B.bb)(e,t))}),Object(h.a)(Object(d.a)(o),"handleOpenMedia",function(e,t){o.props.dispatch(Object(L.d)("MEDIA",{media:e,index:t}))}),Object(h.a)(Object(d.a)(o),"handleOpenVideo",function(e,t){o.props.dispatch(Object(L.d)("VIDEO",{media:e,time:t}))}),Object(h.a)(Object(d.a)(o),"handleMuteClick",function(e){o.props.dispatch(Object(F.g)(e))}),Object(h.a)(Object(d.a)(o),"handleConversationMuteClick",function(e){e.get("muted")?o.props.dispatch(Object(C.l)(e.get("id"))):o.props.dispatch(Object(C.j)(e.get("id")))}),Object(h.a)(Object(d.a)(o),"handleToggleHidden",function(e){e.get("hidden")?o.props.dispatch(Object(C.k)(e.get("id"))):o.props.dispatch(Object(C.i)(e.get("id")))}),Object(h.a)(Object(d.a)(o),"handleToggleAll",function(){var e=o.props,t=e.status,a=e.ancestorsIds,s=e.descendantsIds,n=[t.get("id")].concat(a.toJS(),s.toJS());t.get("hidden")?o.props.dispatch(Object(C.k)(n)):o.props.dispatch(Object(C.i)(n))}),Object(h.a)(Object(d.a)(o),"handleBlockClick",function(e){var t=o.props,a=t.dispatch,s=t.intl,n=e.get("account");a(Object(L.d)("CONFIRM",{message:Object(u.a)(D.b,{id:"confirmations.block.message",defaultMessage:"Are you sure you want to block {name}?",values:{name:Object(u.a)("strong",{},void 0,"@",n.get("acct"))}}),confirm:s.formatMessage(Y.blockConfirm),onConfirm:function(){return a(Object(E.w)(n.get("id")))},secondary:s.formatMessage(Y.blockAndReport),onSecondary:function(){a(Object(E.w)(n.get("id"))),a(Object(U.k)(n,e))}}))}),Object(h.a)(Object(d.a)(o),"handleReport",function(e){o.props.dispatch(Object(U.k)(e.get("account"),e))}),Object(h.a)(Object(d.a)(o),"handleEmbed",function(e){o.props.dispatch(Object(L.d)("EMBED",{url:e.get("url")}))}),Object(h.a)(Object(d.a)(o),"handleHotkeyMoveUp",function(){o.handleMoveUp(o.props.status.get("id"))}),Object(h.a)(Object(d.a)(o),"handleHotkeyMoveDown",function(){o.handleMoveDown(o.props.status.get("id"))}),Object(h.a)(Object(d.a)(o),"handleHotkeyReply",function(e){e.preventDefault(),o.handleReplyClick(o.props.status)}),Object(h.a)(Object(d.a)(o),"handleHotkeyFavourite",function(){o.handleFavouriteClick(o.props.status)}),Object(h.a)(Object(d.a)(o),"handleHotkeyBoost",function(){o.handleReblogClick(o.props.status)}),Object(h.a)(Object(d.a)(o),"handleHotkeyMention",function(e){e.preventDefault(),o.handleMentionClick(o.props.status.get("account"))}),Object(h.a)(Object(d.a)(o),"handleHotkeyOpenProfile",function(){o.context.router.history.push("/accounts/"+o.props.status.getIn(["account","id"]))}),Object(h.a)(Object(d.a)(o),"handleHotkeyToggleHidden",function(){o.handleToggleHidden(o.props.status)}),Object(h.a)(Object(d.a)(o),"handleMoveUp",function(e){var t=o.props,a=t.status,s=t.ancestorsIds,n=t.descendantsIds;if(e===a.get("id"))o._selectChild(s.size-1);else{var i=s.indexOf(e);-1===i?(i=n.indexOf(e),o._selectChild(s.size+i)):o._selectChild(i-1)}}),Object(h.a)(Object(d.a)(o),"handleMoveDown",function(e){var t=o.props,a=t.status,s=t.ancestorsIds,n=t.descendantsIds;if(e===a.get("id"))o._selectChild(s.size+1);else{var i=s.indexOf(e);-1===i?(i=n.indexOf(e),o._selectChild(s.size+i+2)):o._selectChild(i+1)}}),Object(h.a)(Object(d.a)(o),"setRef",function(e){o.node=e}),Object(h.a)(Object(d.a)(o),"onFullScreenChange",function(){o.setState({fullscreen:Object(X.d)()})}),o}Object(p.a)(e,s);var t=e.prototype;return t.componentWillMount=function(){this.props.dispatch(Object(C.h)(this.props.params.statusId))},t.componentDidMount=function(){Object(X.a)(this.onFullScreenChange)},t.componentWillReceiveProps=function(e){e.params.statusId!==this.props.params.statusId&&e.params.statusId&&(this._scrolledIntoView=!1,this.props.dispatch(Object(C.h)(e.params.statusId)))},t._selectChild=function(e){var t=this.node.querySelectorAll(".focusable")[e];t&&t.focus()},t.renderChildren=function(e){var t=this;return e.map(function(e){return Object(u.a)(K.a,{id:e,onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown,contextType:"thread"},e)})},t.componentDidUpdate=function(){if(!this._scrolledIntoView){var e=this.props,t=e.status,a=e.ancestorsIds;if(t&&a&&0<a.size){var s=this.node.querySelectorAll(".focusable")[a.size-1];window.requestAnimationFrame(function(){s.scrollIntoView(!0)}),this._scrolledIntoView=!0}}},t.componentWillUnmount=function(){Object(X.b)(this.onFullScreenChange)},t.render=function(){var e,t,a=this.props,s=a.shouldUpdateScroll,n=a.status,i=a.ancestorsIds,o=a.descendantsIds,c=a.intl,l=a.domain,r=this.state.fullscreen;if(null===n)return Object(u.a)(T.a,{},void 0,Object(u.a)(V.a,{}),Object(u.a)(R.a,{}));i&&0<i.size&&(e=Object(u.a)("div",{},void 0,this.renderChildren(i))),o&&0<o.size&&(t=Object(u.a)("div",{},void 0,this.renderChildren(o)));var d={moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,reply:this.handleHotkeyReply,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,mention:this.handleHotkeyMention,openProfile:this.handleHotkeyOpenProfile,toggleHidden:this.handleHotkeyToggleHidden};return Object(u.a)(T.a,{label:c.formatMessage(Y.detailedStatus)},void 0,Object(u.a)(q.a,{showBackButton:!0,extraButton:Object(u.a)("button",{className:"column-header__button",title:c.formatMessage(n.get("hidden")?Y.revealAll:Y.hideAll),"aria-label":c.formatMessage(n.get("hidden")?Y.revealAll:Y.hideAll),onClick:this.handleToggleAll,"aria-pressed":n.get("hidden")?"false":"true"},void 0,Object(u.a)(Q.a,{id:n.get("hidden")?"eye-slash":"eye"}))}),Object(u.a)(P.a,{scrollKey:"thread",shouldUpdateScroll:s},void 0,O.a.createElement("div",{className:y()("scrollable",{fullscreen:r}),ref:this.setRef},e,Object(u.a)(W.HotKeys,{handlers:d},void 0,Object(u.a)("div",{className:y()("focusable","detailed-status__wrapper"),tabIndex:"0","aria-label":Object(G.b)(c,n,!1)},void 0,Object(u.a)(w.a,{status:n,onOpenVideo:this.handleOpenVideo,onOpenMedia:this.handleOpenMedia,onToggleHidden:this.handleToggleHidden,domain:l}),Object(u.a)(A,{status:n,onReply:this.handleReplyClick,onFavourite:this.handleFavouriteClick,onReblog:this.handleReblogClick,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}))),t)))},e}(J.a),Object(h.a)(l,"contextTypes",{router:v.a.object}),Object(h.a)(l,"propTypes",{params:v.a.object.isRequired,dispatch:v.a.func.isRequired,status:_.a.map,ancestorsIds:_.a.list,descendantsIds:_.a.list,intl:v.a.object.isRequired,askReplyConfirmation:v.a.bool,domain:v.a.string.isRequired}),c=r))||c)||c)}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{692:function(e,t,a){"use strict";a.d(t,"a",function(){return I});var s=a(0),i=a(2),n=a(7),o=a(1),c=a(3),l=a.n(c),r=a(5),d=a.n(r),u=a(18),p=a.n(u),h=a(107),b=a(116),g=a(223),f=a(529),O=a(310),m=a(6),j=a(530),v=a(19),M=a(84),y=a(290),_=a(683),C=a(10),k=a.n(C),w=a(27),I=function(e){function t(){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",{height:null}),Object(o.a)(Object(i.a)(t),"handleAccountClick",function(e){0!==e.button||e.ctrlKey||e.metaKey||!t.context.router||(e.preventDefault(),t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]))),e.stopPropagation()}),Object(o.a)(Object(i.a)(t),"handleOpenVideo",function(e,a){t.props.onOpenVideo(e,a)}),Object(o.a)(Object(i.a)(t),"handleExpandedToggle",function(){t.props.onToggleHidden(t.props.status)}),Object(o.a)(Object(i.a)(t),"setRef",function(e){t.node=e,t._measureHeight()}),Object(o.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}Object(n.a)(t,e);var a=t.prototype;return a._measureHeight=function(e){var t=this;this.props.measureHeight&&this.node&&(Object(_.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={boxSizing:"border-box"},a=this.props.compact;if(!e)return null;var i="",n="",o="",c="retweet",r="";if(this.props.measureHeight&&(t.height=this.state.height+"px"),e.get("media_attachments").size>0)if("audio"===e.getIn(["media_attachments",0,"type"])){var d=e.getIn(["media_attachments",0]);i=Object(s.a)(y.default,{src:d.get("url"),alt:d.get("description"),duration:d.getIn(["meta","original","duration"],0),height:110,preload:!0})}else if("video"===e.getIn(["media_attachments",0,"type"])){var u=e.getIn(["media_attachments",0]);i=Object(s.a)(M.default,{preview:u.get("preview_url"),blurhash:u.get("blurhash"),src:u.get("url"),alt:u.get("description"),width:300,height:150,inline:!0,onOpenVideo:this.handleOpenVideo,sensitive:e.get("sensitive"),visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility})}else i=Object(s.a)(f.default,{standalone:!0,sensitive:e.get("sensitive"),media:e.get("media_attachments"),height:300,onOpenMedia:this.props.onOpenMedia,visible:this.props.showMedia,onToggleVisibility:this.props.onToggleMediaVisibility});else 0===e.get("spoiler_text").length&&(i=Object(s.a)(j.a,{onOpenMedia:this.props.onOpenMedia,card:e.get("card",null)}));return e.get("application")&&(n=Object(s.a)("span",{},void 0," · ",Object(s.a)("a",{className:"detailed-status__application",href:e.getIn(["application","website"]),target:"_blank",rel:"noopener"},void 0,e.getIn(["application","name"])))),"direct"===e.get("visibility")?c="envelope":"private"===e.get("visibility")&&(c="lock"),o="private"===e.get("visibility")?Object(s.a)(w.a,{id:c}):this.context.router?Object(s.a)(O.a,{to:"/statuses/"+e.get("id")+"/reblogs",className:"detailed-status__link"},void 0,Object(s.a)(w.a,{id:c}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(m.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)(w.a,{id:c}),Object(s.a)("span",{className:"detailed-status__reblogs"},void 0,Object(s.a)(m.c,{value:e.get("reblogs_count")}))),r=this.context.router?Object(s.a)(O.a,{to:"/statuses/"+e.get("id")+"/favourites",className:"detailed-status__link"},void 0,Object(s.a)(w.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(m.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)(w.a,{id:"star"}),Object(s.a)("span",{className:"detailed-status__favorites"},void 0,Object(s.a)(m.c,{value:e.get("favourites_count")}))),Object(s.a)("div",{style:t},void 0,l.a.createElement("div",{ref:this.setRef,className:k()("detailed-status",{compact:a})},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)(h.a,{account:e.get("account"),size:48})),Object(s.a)(b.a,{account:e.get("account"),localDomain:this.props.domain})),Object(s.a)(g.a,{status:e,expanded:!e.get("hidden"),onExpandedToggle:this.handleExpandedToggle}),i,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"},void 0,Object(s.a)(m.a,{value:new Date(e.get("created_at")),hour12:!1,year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})),n," · ",o," · ",r)))},t}(v.a);Object(o.a)(I,"contextTypes",{router:d.a.object}),Object(o.a)(I,"propTypes",{status:p.a.map,onOpenMedia:d.a.func.isRequired,onOpenVideo:d.a.func.isRequired,onToggleHidden:d.a.func.isRequired,measureHeight:d.a.bool,onHeightChange:d.a.func,domain:d.a.string.isRequired,compact:d.a.bool,showMedia:d.a.bool,onToggleMediaVisibility:d.a.func})},767:function(e,t,a){"use strict";a.r(t);var s,i,n,o,c,l,r,d=a(0),u=a(2),p=a(7),h=a(1),b=a(4),g=a.n(b),f=a(3),O=a.n(f),m=a(12),j=a(5),v=a.n(j),M=a(10),y=a.n(M),_=a(18),C=a.n(_),k=a(53),w=a(93),I=a(970),x=a(692),R=a(51),H=a(637),D=a(6),T=a(20),N=Object(D.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"},cancel_reblog_private:{id:"status.cancel_reblog_private",defaultMessage:"Unboost"},cannot_reblog:{id:"status.cannot_reblog",defaultMessage:"This post cannot be boosted"},favourite:{id:"status.favourite",defaultMessage:"Favourite"},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"}}),S=Object(D.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(h.a)(Object(u.a)(t),"handleReplyClick",function(){t.props.onReply(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleReblogClick",function(e){t.props.onReblog(t.props.status,e)}),Object(h.a)(Object(u.a)(t),"handleFavouriteClick",function(){t.props.onFavourite(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleDeleteClick",function(){t.props.onDelete(t.props.status,t.context.router.history)}),Object(h.a)(Object(u.a)(t),"handleRedraftClick",function(){t.props.onDelete(t.props.status,t.context.router.history,!0)}),Object(h.a)(Object(u.a)(t),"handleDirectClick",function(){t.props.onDirect(t.props.status.get("account"),t.context.router.history)}),Object(h.a)(Object(u.a)(t),"handleMentionClick",function(){t.props.onMention(t.props.status.get("account"),t.context.router.history)}),Object(h.a)(Object(u.a)(t),"handleMuteClick",function(){t.props.onMute(t.props.status.get("account"))}),Object(h.a)(Object(u.a)(t),"handleConversationMuteClick",function(){t.props.onMuteConversation(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleBlockClick",function(){t.props.onBlock(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleReport",function(){t.props.onReport(t.props.status)}),Object(h.a)(Object(u.a)(t),"handlePinClick",function(){t.props.onPin(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleShare",function(){navigator.share({text:t.props.status.get("search_index"),url:t.props.status.get("url")})}),Object(h.a)(Object(u.a)(t),"handleEmbed",function(){t.props.onEmbed(t.props.status)}),Object(h.a)(Object(u.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(p.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(N.copy),action:this.handleCopy}),n.push({text:a.formatMessage(N.embed),action:this.handleEmbed}),n.push(null)),T.m===t.getIn(["account","id"])?(s?n.push({text:a.formatMessage(t.get("pinned")?N.unpin:N.pin),action:this.handlePinClick}):"private"===t.get("visibility")&&n.push({text:a.formatMessage(t.get("reblogged")?N.cancel_reblog_private:N.reblog_private),action:this.handleReblogClick}),n.push(null),n.push({text:a.formatMessage(i?N.unmuteConversation:N.muteConversation),action:this.handleConversationMuteClick}),n.push(null),n.push({text:a.formatMessage(N.delete),action:this.handleDeleteClick}),n.push({text:a.formatMessage(N.redraft),action:this.handleRedraftClick})):(n.push({text:a.formatMessage(N.mention,{name:t.getIn(["account","username"])}),action:this.handleMentionClick}),n.push({text:a.formatMessage(N.direct,{name:t.getIn(["account","username"])}),action:this.handleDirectClick}),n.push(null),n.push({text:a.formatMessage(N.mute,{name:t.getIn(["account","username"])}),action:this.handleMuteClick}),n.push({text:a.formatMessage(N.block,{name:t.getIn(["account","username"])}),action:this.handleBlockClick}),n.push({text:a.formatMessage(N.report,{name:t.getIn(["account","username"])}),action:this.handleReport}),T.j&&(n.push(null),n.push({text:a.formatMessage(N.admin_account,{name:t.getIn(["account","username"])}),href:"/admin/accounts/"+t.getIn(["account","id"])}),n.push({text:a.formatMessage(N.admin_status),href:"/admin/accounts/"+t.getIn(["account","id"])+"/statuses/"+t.get("id")})));var o,c="share"in navigator&&"public"===t.get("visibility")&&Object(d.a)("div",{className:"detailed-status__button"},void 0,Object(d.a)(R.a,{title:a.formatMessage(N.share),icon:"share-alt",onClick:this.handleShare}));o=null===t.get("in_reply_to_id",null)?"reply":"reply-all";var l="retweet";"direct"===t.get("visibility")?l="envelope":"private"===t.get("visibility")&&(l="lock");var r="direct"===t.get("visibility")||"private"===t.get("visibility");return Object(d.a)("div",{className:"detailed-status__action-bar"},void 0,Object(d.a)("div",{className:"detailed-status__button"},void 0,Object(d.a)(R.a,{title:a.formatMessage(N.reply),icon:t.get("in_reply_to_account_id")===t.getIn(["account","id"])?"reply":o,onClick:this.handleReplyClick})),Object(d.a)("div",{className:"detailed-status__button"},void 0,Object(d.a)(R.a,{disabled:r,active:t.get("reblogged"),title:r?a.formatMessage(N.cannot_reblog):a.formatMessage(N.reblog),icon:l,onClick:this.handleReblogClick})),Object(d.a)("div",{className:"detailed-status__button"},void 0,Object(d.a)(R.a,{className:"star-icon",animate:!0,active:t.get("favourited"),title:a.formatMessage(N.favourite),icon:"star",onClick:this.handleFavouriteClick})),c,Object(d.a)("div",{className:"detailed-status__action-bar-dropdown"},void 0,Object(d.a)(H.a,{size:18,icon:"ellipsis-h",items:n,direction:"left",title:"More"})))},t}(O.a.PureComponent),Object(h.a)(i,"contextTypes",{router:v.a.object}),s=n))||s,V=a(663),A=a(66),E=a(21),F=a(206),B=a(220),U=a(99),z=a(204),P=a(460),q=a(666),L=a(665),K=a(993),J=a(47),W=a(19),X=a(287),G=a(252),Q=a(830),Y=a(27);a.d(t,"default",function(){return $});var Z=Object(D.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? Favourites and boosts will be lost, and replies to the original post will be orphaned."},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?"}}),$=(o=Object(m.connect)(function(){var e=Object(z.f)(),t=Object(k.a)([function(e,t){return t.id},function(e){return e.getIn(["contexts","inReplyTos"])}],function(e,t){var a=g.a.List();return a=a.withMutations(function(a){for(var s=e;s;)a.unshift(s),s=t.get(s)})}),a=Object(k.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)}),g.a.List(s)});return function(s,i){var n=e(s,{id:i.params.statusId}),o=g.a.List(),c=g.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,askReplyConfirmation:0!==s.getIn(["compose","text"]).trim().length,domain:s.getIn(["meta","domain"])}}}),Object(D.g)(c=o((r=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(h.a)(Object(u.a)(t),"state",{fullscreen:!1,showMedia:Object(Q.b)(t.props.status),loadedStatusId:void 0}),Object(h.a)(Object(u.a)(t),"handleToggleMediaVisibility",function(){t.setState({showMedia:!t.state.showMedia})}),Object(h.a)(Object(u.a)(t),"handleFavouriteClick",function(e){e.get("favourited")?t.props.dispatch(Object(A.p)(e)):t.props.dispatch(Object(A.k)(e))}),Object(h.a)(Object(u.a)(t),"handlePin",function(e){e.get("pinned")?t.props.dispatch(Object(A.q)(e)):t.props.dispatch(Object(A.n)(e))}),Object(h.a)(Object(u.a)(t),"handleReplyClick",function(e){var a=t.props,s=a.askReplyConfirmation,i=a.dispatch,n=a.intl;i(s?Object(J.d)("CONFIRM",{message:n.formatMessage(Z.replyMessage),confirm:n.formatMessage(Z.replyConfirm),onConfirm:function(){return i(Object(E.gb)(e,t.context.router.history))}}):Object(E.gb)(e,t.context.router.history))}),Object(h.a)(Object(u.a)(t),"handleModalReblog",function(e){t.props.dispatch(Object(A.o)(e))}),Object(h.a)(Object(u.a)(t),"handleReblogClick",function(e,a){e.get("reblogged")?t.props.dispatch(Object(A.r)(e)):a&&a.shiftKey||!T.b?t.handleModalReblog(e):t.props.dispatch(Object(J.d)("BOOST",{status:e,onReblog:t.handleModalReblog}))}),Object(h.a)(Object(u.a)(t),"handleDeleteClick",function(e,a,s){void 0===s&&(s=!1);var i=t.props,n=i.dispatch,o=i.intl;T.d?n(Object(J.d)("CONFIRM",{message:o.formatMessage(s?Z.redraftMessage:Z.deleteMessage),confirm:o.formatMessage(s?Z.redraftConfirm:Z.deleteConfirm),onConfirm:function(){return n(Object(w.g)(e.get("id"),a,s))}})):n(Object(w.g)(e.get("id"),a,s))}),Object(h.a)(Object(u.a)(t),"handleDirectClick",function(e,a){t.props.dispatch(Object(E.X)(e,a))}),Object(h.a)(Object(u.a)(t),"handleMentionClick",function(e,a){t.props.dispatch(Object(E.cb)(e,a))}),Object(h.a)(Object(u.a)(t),"handleOpenMedia",function(e,a){t.props.dispatch(Object(J.d)("MEDIA",{media:e,index:a}))}),Object(h.a)(Object(u.a)(t),"handleOpenVideo",function(e,a){t.props.dispatch(Object(J.d)("VIDEO",{media:e,time:a}))}),Object(h.a)(Object(u.a)(t),"handleMuteClick",function(e){t.props.dispatch(Object(F.g)(e))}),Object(h.a)(Object(u.a)(t),"handleConversationMuteClick",function(e){e.get("muted")?t.props.dispatch(Object(w.l)(e.get("id"))):t.props.dispatch(Object(w.j)(e.get("id")))}),Object(h.a)(Object(u.a)(t),"handleToggleHidden",function(e){e.get("hidden")?t.props.dispatch(Object(w.k)(e.get("id"))):t.props.dispatch(Object(w.i)(e.get("id")))}),Object(h.a)(Object(u.a)(t),"handleToggleAll",function(){var e=t.props,a=e.status,s=e.ancestorsIds,i=e.descendantsIds,n=[a.get("id")].concat(s.toJS(),i.toJS());a.get("hidden")?t.props.dispatch(Object(w.k)(n)):t.props.dispatch(Object(w.i)(n))}),Object(h.a)(Object(u.a)(t),"handleBlockClick",function(e){var a=t.props.dispatch,s=e.get("account");a(Object(B.f)(s))}),Object(h.a)(Object(u.a)(t),"handleReport",function(e){t.props.dispatch(Object(U.k)(e.get("account"),e))}),Object(h.a)(Object(u.a)(t),"handleEmbed",function(e){t.props.dispatch(Object(J.d)("EMBED",{url:e.get("url")}))}),Object(h.a)(Object(u.a)(t),"handleHotkeyMoveUp",function(){t.handleMoveUp(t.props.status.get("id"))}),Object(h.a)(Object(u.a)(t),"handleHotkeyMoveDown",function(){t.handleMoveDown(t.props.status.get("id"))}),Object(h.a)(Object(u.a)(t),"handleHotkeyReply",function(e){e.preventDefault(),t.handleReplyClick(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleHotkeyFavourite",function(){t.handleFavouriteClick(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleHotkeyBoost",function(){t.handleReblogClick(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleHotkeyMention",function(e){e.preventDefault(),t.handleMentionClick(t.props.status.get("account"))}),Object(h.a)(Object(u.a)(t),"handleHotkeyOpenProfile",function(){t.context.router.history.push("/accounts/"+t.props.status.getIn(["account","id"]))}),Object(h.a)(Object(u.a)(t),"handleHotkeyToggleHidden",function(){t.handleToggleHidden(t.props.status)}),Object(h.a)(Object(u.a)(t),"handleHotkeyToggleSensitive",function(){t.handleToggleMediaVisibility()}),Object(h.a)(Object(u.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(h.a)(Object(u.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(h.a)(Object(u.a)(t),"setRef",function(e){t.node=e}),Object(h.a)(Object(u.a)(t),"onFullScreenChange",function(){t.setState({fullscreen:Object(G.d)()})}),t}Object(p.a)(t,e);var a=t.prototype;return a.componentWillMount=function(){this.props.dispatch(Object(w.h)(this.props.params.statusId))},a.componentDidMount=function(){Object(G.a)(this.onFullScreenChange)},a.componentWillReceiveProps=function(e){e.params.statusId!==this.props.params.statusId&&e.params.statusId&&(this._scrolledIntoView=!1,this.props.dispatch(Object(w.h)(e.params.statusId))),e.status&&e.status.get("id")!==this.state.loadedStatusId&&this.setState({showMedia:Object(Q.b)(e.status),loadedStatusId:e.status.get("id")})},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(d.a)(K.a,{id:e,onMoveUp:t.handleMoveUp,onMoveDown:t.handleMoveDown,contextType:"thread"},e)})},a.componentDidUpdate=function(){if(!this._scrolledIntoView){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)}),this._scrolledIntoView=!0}}},a.componentWillUnmount=function(){Object(G.b)(this.onFullScreenChange)},a.render=function(){var e,t,a=this.props,s=a.shouldUpdateScroll,i=a.status,n=a.ancestorsIds,o=a.descendantsIds,c=a.intl,l=a.domain,r=a.multiColumn,u=this.state.fullscreen;if(null===i)return Object(d.a)(V.a,{},void 0,Object(d.a)(q.a,{multiColumn:r}),Object(d.a)(I.a,{}));n&&n.size>0&&(e=Object(d.a)("div",{},void 0,this.renderChildren(n))),o&&o.size>0&&(t=Object(d.a)("div",{},void 0,this.renderChildren(o)));var p={moveUp:this.handleHotkeyMoveUp,moveDown:this.handleHotkeyMoveDown,reply:this.handleHotkeyReply,favourite:this.handleHotkeyFavourite,boost:this.handleHotkeyBoost,mention:this.handleHotkeyMention,openProfile:this.handleHotkeyOpenProfile,toggleHidden:this.handleHotkeyToggleHidden,toggleSensitive:this.handleHotkeyToggleSensitive};return Object(d.a)(V.a,{bindToDocument:!r,label:c.formatMessage(Z.detailedStatus)},void 0,Object(d.a)(L.a,{showBackButton:!0,multiColumn:r,extraButton:Object(d.a)("button",{className:"column-header__button",title:c.formatMessage(i.get("hidden")?Z.revealAll:Z.hideAll),"aria-label":c.formatMessage(i.get("hidden")?Z.revealAll:Z.hideAll),onClick:this.handleToggleAll,"aria-pressed":i.get("hidden")?"false":"true"},void 0,Object(d.a)(Y.a,{id:i.get("hidden")?"eye-slash":"eye"}))}),Object(d.a)(P.a,{scrollKey:"thread",shouldUpdateScroll:s},void 0,O.a.createElement("div",{className:y()("scrollable",{fullscreen:u}),ref:this.setRef},e,Object(d.a)(X.HotKeys,{handlers:p},void 0,Object(d.a)("div",{className:y()("focusable","detailed-status__wrapper"),tabIndex:"0","aria-label":Object(Q.c)(c,i,!1)},void 0,Object(d.a)(x.a,{status:i,onOpenVideo:this.handleOpenVideo,onOpenMedia:this.handleOpenMedia,onToggleHidden:this.handleToggleHidden,domain:l,showMedia:this.state.showMedia,onToggleMediaVisibility:this.handleToggleMediaVisibility}),Object(d.a)(S,{status:i,onReply:this.handleReplyClick,onFavourite:this.handleFavouriteClick,onReblog:this.handleReblogClick,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}))),t)))},t}(W.a),Object(h.a)(l,"contextTypes",{router:v.a.object}),Object(h.a)(l,"propTypes",{params:v.a.object.isRequired,dispatch:v.a.func.isRequired,status:C.a.map,ancestorsIds:C.a.list,descendantsIds:C.a.list,intl:v.a.object.isRequired,askReplyConfirmation:v.a.bool,multiColumn:v.a.bool,domain:v.a.string.isRequired}),c=r))||c)||c)}}]); //# sourceMappingURL=status.js.map
\ No newline at end of file diff --git a/priv/static/packs/features/status.js.map b/priv/static/packs/features/status.js.map index 5739dd851..357ff7dcc 100644 --- a/priv/static/packs/features/status.js.map +++ b/priv/static/packs/features/status.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/status/components/action_bar.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","metaKey","_this","context","router","preventDefault","history","push","props","status","getIn","stopPropagation","media","startTime","onOpenVideo","onToggleHidden","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","_this2","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","state","render","get","outerStyle","boxSizing","compact","applicationLink","reblogLink","reblogIcon","favouriteLink","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","mastodon_containers_poll_container__WEBPACK_IMPORTED_MODULE_20__","pollId","size","some","item","_components_attachment_list__WEBPACK_IMPORTED_MODULE_11__","video","_video__WEBPACK_IMPORTED_MODULE_16__","preview","src","alt","width","inline","handleOpenVideo","sensitive","_components_media_gallery__WEBPACK_IMPORTED_MODULE_10__","standalone","onOpenMedia","length","_card__WEBPACK_IMPORTED_MODULE_14__","card","className","rel","mastodon_components_icon__WEBPACK_IMPORTED_MODULE_19__","id","react_router_dom__WEBPACK_IMPORTED_MODULE_12__","to","react_intl__WEBPACK_IMPORTED_MODULE_13__","value","onClick","handleModalLink","style","react__WEBPACK_IMPORTED_MODULE_4___default","a","createElement","ref","setRef","classNames","handleAccountClick","_components_avatar__WEBPACK_IMPORTED_MODULE_7__","account","_components_display_name__WEBPACK_IMPORTED_MODULE_8__","localDomain","domain","_components_status_content__WEBPACK_IMPORTED_MODULE_9__","expanded","onExpandedToggle","handleExpandedToggle","Date","hour12","year","month","day","hour","minute","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","func","isRequired","bool","string","messages","defineMessages","delete","defaultMessage","redraft","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","textarea","document","textContent","position","body","appendChild","select","execCommand","removeChild","_this$props","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleReblogClick","handleConversationMuteClick","handleDeleteClick","handleRedraftClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","replyIcon","shareButton","jsx","icon_button","title","icon","handleShare","reblog_disabled","handleReplyClick","disabled","active","animate","handleFavouriteClick","dropdown_menu_container","items","direction","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","blockConfirm","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","blockAndReport","Status","connect","getStatus","makeGetStatus","params","statusId","ancestorsIds","Immutable","List","descendantsIds","withMutations","mutable","unshift","ids","shift","replies","reverse","forEach","askReplyConfirmation","trim","fullscreen","dispatch","unfavourite","openModal","message","confirm","onConfirm","replyCompose","unreblog","shiftKey","boostModal","handleModalReblog","withRedraft","_this$props2","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","initMuteModal","unmuteStatus","muteStatus","revealStatus","hideStatus","_this$props3","statusIds","concat","toJS","_this$props4","index_es","values","blockAccount","secondary","onSecondary","initReport","handleMoveUp","handleMoveDown","handleToggleHidden","_this$props5","_selectChild","indexOf","_this$props6","isFullscreen","componentWillMount","fetchStatus","componentDidMount","attachFullscreenListener","onFullScreenChange","componentWillReceiveProps","nextProps","_scrolledIntoView","element","querySelectorAll","focus","renderChildren","list","status_container","onMoveUp","onMoveDown","contextType","_this$props7","requestAnimationFrame","scrollIntoView","componentWillUnmount","detachFullscreenListener","ancestors","descendants","_this$props8","shouldUpdateScroll","column","column_back_button","missing_indicator","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleHotkeyToggleHidden","label","column_header","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","react_router_scroll_4_es","scrollKey","react_default","react_hotkeys_index_es","tabIndex","textForScreenReader","detailed_status","handleOpenMedia","action_bar_ActionBar","handlePin"],"mappings":"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","file":"features/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport AttachmentList from '../../../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 '../../video';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\nimport PollContainer from 'mastodon/containers/poll_container';\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 onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\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 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 outerStyle = { boxSizing: 'border-box' };\n const { compact } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = '';\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 } 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']) === 'video') {\n const video = status.getIn(['media_attachments', 0]);\n\n media = (\n <Video\n preview={video.get('preview_url')}\n src={video.get('url')}\n alt={video.get('description')}\n width={300}\n height={150}\n inline\n onOpenVideo={this.handleOpenVideo}\n sensitive={status.get('sensitive')}\n />\n );\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n height={300}\n onOpenMedia={this.props.onOpenMedia}\n />\n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{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 })}>\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 status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n {media}\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'>\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}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from '../../../initial_state';\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 cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\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 onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onBlock: PropTypes.func,\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 = () => {\n this.props.onFavourite(this.props.status);\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 } else {\n if (status.get('visibility') === 'private') {\n menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n }\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 menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\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) {\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\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 replyIcon;\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n } else {\n replyIcon = 'reply-all';\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');\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_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} 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(messages.reblog)} 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\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='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 { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n favourite,\n unfavourite,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport { blockAccount } from '../../actions/accounts';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n hideStatus,\n revealStatus,\n} from '../../actions/statuses';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader } from '../../components/status';\nimport Icon from 'mastodon/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? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\n blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },\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 blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\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 = ancestorsIds.withMutations(mutable => {\n let id = status.get('in_reply_to_id');\n\n while (id) {\n mutable.unshift(id);\n id = state.getIn(['contexts', 'inReplyTos', id]);\n }\n });\n\n descendantsIds = descendantsIds.withMutations(mutable => {\n const ids = [status.get('id')];\n\n while (ids.length > 0) {\n let id = ids.shift();\n const replies = state.getIn(['contexts', 'replies', id]);\n\n if (status.get('id') !== id) {\n mutable.push(id);\n }\n\n if (replies) {\n replies.reverse().forEach(reply => {\n ids.unshift(reply);\n });\n }\n }\n });\n }\n\n return {\n status,\n ancestorsIds,\n descendantsIds,\n askReplyConfirmation: 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 ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n };\n\n state = {\n fullscreen: false,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n }\n\n handleFavouriteClick = (status) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n this.props.dispatch(favourite(status));\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 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 this.props.dispatch(reblog(status));\n }\n\n handleReblogClick = (status, e) => {\n if (status.get('reblogged')) {\n this.props.dispatch(unreblog(status));\n } else {\n if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\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 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 handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n }\n\n handleBlockClick = (status) => {\n const { dispatch, intl } = this.props;\n const account = status.get('account');\n\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n confirm: intl.formatMessage(messages.blockConfirm),\n onConfirm: () => dispatch(blockAccount(account.get('id'))),\n secondary: intl.formatMessage(messages.blockAndReport),\n onSecondary: () => {\n dispatch(blockAccount(account.get('id')));\n dispatch(initReport(account, status));\n },\n }));\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 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 handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status.get('account'));\n }\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(this.props.status);\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);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index);\n } else {\n this._selectChild(index - 1);\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);\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);\n } else {\n this._selectChild(index + 1);\n }\n }\n }\n\n _selectChild (index) {\n const element = this.node.querySelectorAll('.focusable')[index];\n\n if (element) {\n element.focus();\n }\n }\n\n renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n />\n ));\n }\n\n setRef = c => {\n this.node = c;\n }\n\n componentDidUpdate () {\n if (this._scrolledIntoView) {\n return;\n }\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 this._scrolledIntoView = true;\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n render () {\n let ancestors, descendants;\n const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain } = this.props;\n const { fullscreen } = this.state;\n\n if (status === null) {\n return (\n <Column>\n <ColumnBackButton />\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 mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n };\n\n return (\n <Column label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n showBackButton\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={shouldUpdateScroll}>\n <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className={classNames('focusable', 'detailed-status__wrapper')} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}>\n <DetailedStatus\n status={status}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n onToggleHidden={this.handleToggleHidden}\n domain={domain}\n />\n\n <ActionBar\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReblog={this.handleReblogClick}\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/mastodon/features/status/components/detailed_status.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/status/components/action_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","metaKey","context","router","preventDefault","history","push","props","status","getIn","stopPropagation","media","startTime","onOpenVideo","onToggleHidden","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","state","render","get","outerStyle","boxSizing","compact","applicationLink","reblogLink","reblogIcon","favouriteLink","size","attachment","src","alt","duration","preload","preview","blurhash","width","inline","handleOpenVideo","sensitive","visible","showMedia","onToggleVisibility","onToggleMediaVisibility","standalone","onOpenMedia","length","card","className","rel","id","to","value","onClick","handleModalLink","style","ref","setRef","classNames","handleAccountClick","account","localDomain","domain","expanded","onExpandedToggle","handleExpandedToggle","Date","hour12","year","month","day","hour","minute","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","func","isRequired","bool","string","messages","defineMessages","delete","redraft","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","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","handleReblogClick","handleConversationMuteClick","handleDeleteClick","handleRedraftClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","replyIcon","shareButton","title","icon","handleShare","reblog_disabled","handleReplyClick","disabled","active","animate","handleFavouriteClick","items","direction","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","Status","connect","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","statusId","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","shift","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","askReplyConfirmation","trim","fullscreen","defaultMediaVisibility","loadedStatusId","undefined","dispatch","unfavourite","openModal","message","confirm","onConfirm","replyCompose","unreblog","shiftKey","boostModal","handleModalReblog","withRedraft","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","initMuteModal","unmuteStatus","muteStatus","revealStatus","hideStatus","statusIds","concat","toJS","initBlockModal","initReport","handleMoveUp","handleMoveDown","handleToggleHidden","handleToggleMediaVisibility","_selectChild","indexOf","isFullscreen","componentWillMount","fetchStatus","componentDidMount","attachFullscreenListener","onFullScreenChange","componentWillReceiveProps","nextProps","_scrolledIntoView","align_top","container","element","querySelectorAll","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","requestAnimationFrame","componentWillUnmount","detachFullscreenListener","ancestors","descendants","shouldUpdateScroll","multiColumn","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleHotkeyToggleHidden","toggleSensitive","handleHotkeyToggleSensitive","bindToDocument","label","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","scrollKey","tabIndex","textForScreenReader","handleOpenMedia","handlePin"],"mappings":"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","file":"features/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\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 '../../video';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/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 onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\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.metaKey) && this.context.router) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\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 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 outerStyle = { boxSizing: 'border-box' };\n const { compact } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = '';\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('media_attachments').size > 0) {\n 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 } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n\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 width={300}\n height={150}\n inline\n onOpenVideo={this.handleOpenVideo}\n sensitive={status.get('sensitive')}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n height={300}\n onOpenMedia={this.props.onOpenMedia}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{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 })}>\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 status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n {media}\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'>\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}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from '../../../initial_state';\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 cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\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 onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onBlock: PropTypes.func,\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 = () => {\n this.props.onFavourite(this.props.status);\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 } else {\n if (status.get('visibility') === 'private') {\n menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n }\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 menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\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) {\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\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 replyIcon;\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n } else {\n replyIcon = 'reply-all';\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');\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_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} 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(messages.reblog)} 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\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='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 '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n favourite,\n unfavourite,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n hideStatus,\n revealStatus,\n} from '../../actions/statuses';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initBlockModal } from '../../actions/blocks';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport Icon from 'mastodon/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? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\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});\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 askReplyConfirmation: 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 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 showMedia: defaultMediaVisibility(this.props.status),\n loadedStatusId: undefined,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n\n if (nextProps.status && nextProps.status.get('id') !== this.state.loadedStatusId) {\n this.setState({ showMedia: defaultMediaVisibility(nextProps.status), loadedStatusId: nextProps.status.get('id') });\n }\n }\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n }\n\n handleFavouriteClick = (status) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n this.props.dispatch(favourite(status));\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 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 this.props.dispatch(reblog(status));\n }\n\n handleReblogClick = (status, e) => {\n if (status.get('reblogged')) {\n this.props.dispatch(unreblog(status));\n } else {\n if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\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 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 handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\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 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 handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status.get('account'));\n }\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(this.props.status);\n }\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\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 renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n />\n ));\n }\n\n setRef = c => {\n this.node = c;\n }\n\n componentDidUpdate () {\n if (this._scrolledIntoView) {\n return;\n }\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 this._scrolledIntoView = true;\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n render () {\n let ancestors, descendants;\n const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props;\n const { fullscreen } = 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 mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n };\n\n return (\n <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={shouldUpdateScroll}>\n <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className={classNames('focusable', 'detailed-status__wrapper')} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}>\n <DetailedStatus\n status={status}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n onToggleHidden={this.handleToggleHidden}\n domain={domain}\n showMedia={this.state.showMedia}\n onToggleMediaVisibility={this.handleToggleMediaVisibility}\n />\n\n <ActionBar\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReblog={this.handleReblogClick}\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 |