{"version":3,"sources":["webpack:///./app/javascript/mastodon/containers/media_container.js"],"names":["getLocale","localeData","messages","addLocaleData","MEDIA_COMPONENTS","MediaGallery","Video","Card","Poll","Hashtag","Audio","MediaContainer","media","index","time","document","body","classList","add","documentElement","style","marginRight","getScrollbarWidth","setState","video","ImmutableList","remove","render","this","props","locale","components","map","call","component","i","componentName","getAttribute","Component","JSON","parse","card","poll","hashtag","Object","assign","fromJS","onOpenVideo","handleOpenVideo","onOpenMedia","handleOpenMedia","ReactDOM","createPortal","key","onClose","handleCloseMedia","state","PureComponent"],"mappings":"iUAgBiCA,sBAAzBC,E,EAAAA,WAAYC,E,EAAAA,SACpBC,YAAcF,GAEd,IAAMG,EAAmB,CAAEC,uBAAcC,gBAAOC,SAAMC,SAAMC,YAASC,iBAEhDC,E,sLAOX,CACNC,MAAO,KACPC,MAAO,KACPC,KAAM,O,8CAGU,SAACF,EAAOC,GACxBE,SAASC,KAAKC,UAAUC,IAAI,uBAC5BH,SAASI,gBAAgBC,MAAMC,YAAiBC,cAAhD,KAEA,EAAKC,SAAS,CAAEX,QAAOC,a,8CAGP,SAACW,EAAOV,GACxB,IAAMF,EAAQa,eAAc,CAACD,IAE7BT,SAASC,KAAKC,UAAUC,IAAI,uBAC5BH,SAASI,gBAAgBC,MAAMC,YAAiBC,cAAhD,KAEA,EAAKC,SAAS,CAAEX,QAAOE,Y,+CAGN,WACjBC,SAASC,KAAKC,UAAUS,OAAO,uBAC/BX,SAASI,gBAAgBC,MAAMC,YAAc,EAE7C,EAAKE,SAAS,CAAEX,MAAO,KAAMC,MAAO,KAAMC,KAAM,U,sCAGlDa,OAAA,WAAW,IAAD,SACuBC,KAAKC,MAA5BC,EADA,EACAA,OAAQC,EADR,EACQA,WAEhB,OACE,YAAC,IAAD,CAAcD,OAAQA,EAAQ5B,SAAUA,QAAxC,EACE,YAAC,WAAD,UACG,GAAG8B,IAAIC,KAAKF,GAAY,SAACG,EAAWC,GACnC,IAAMC,EAAgBF,EAAUG,aAAa,kBACvCC,EAAYlC,EAAiBgC,GAFM,EAGQG,KAAKC,MAAMN,EAAUG,aAAa,eAA3EzB,EAHiC,EAGjCA,MAAO6B,EAH0B,EAG1BA,KAAMC,EAHoB,EAGpBA,KAAMC,EAHc,EAGdA,QAAYd,EAHE,uDAkBzC,OAbAe,OAAOC,OAAOhB,EAAde,OAAA,UAAAA,CAAA,GACMhC,EAAU,CAAEA,MAASkC,iBAAOlC,IAAa,GACzC6B,EAAU,CAAEA,KAASK,iBAAOL,IAAa,GACzCC,EAAU,CAAEA,KAASI,iBAAOJ,IAAa,GACzCC,EAAU,CAAEA,QAASG,iBAAOH,IAAa,GAEvB,UAAlBP,EAA4B,CAC9BW,YAAa,EAAKC,iBAChB,CACFC,YAAa,EAAKC,mBAIfC,IAASC,aACd,kBAACd,EAAD,qBAAeT,EAAf,CAAsBwB,IAAG,SAAWlB,KACpCD,MAIJ,YAAC,IAAD,CAAWoB,QAAS1B,KAAK2B,uBAAzB,EACG3B,KAAK4B,MAAM5C,OACV,YAAC,IAAD,CACEA,MAAOgB,KAAK4B,MAAM5C,MAClBC,MAAOe,KAAK4B,MAAM3C,OAAS,EAC3BC,KAAMc,KAAK4B,MAAM1C,KACjBwC,QAAS1B,KAAK2B,uB,GAxEcE","file":"js/containers/media_container-d4e6267e9d563c409541.chunk.js","sourcesContent":["import React, { PureComponent, Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { List as ImmutableList, fromJS } from 'immutable';\nimport { getLocale } from 'mastodon/locales';\nimport { getScrollbarWidth } from 'mastodon/utils/scrollbar';\nimport MediaGallery from 'mastodon/components/media_gallery';\nimport Poll from 'mastodon/components/poll';\nimport Hashtag from 'mastodon/components/hashtag';\nimport ModalRoot from 'mastodon/components/modal_root';\nimport MediaModal from 'mastodon/features/ui/components/media_modal';\nimport Video from 'mastodon/features/video';\nimport Card from 'mastodon/features/status/components/card';\nimport Audio from 'mastodon/features/audio';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag, Audio };\n\nexport default class MediaContainer extends PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string.isRequired,\n    components: PropTypes.object.isRequired,\n  };\n\n  state = {\n    media: null,\n    index: null,\n    time: null,\n  };\n\n  handleOpenMedia = (media, index) => {\n    document.body.classList.add('with-modals--active');\n    document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;\n\n    this.setState({ media, index });\n  }\n\n  handleOpenVideo = (video, time) => {\n    const media = ImmutableList([video]);\n\n    document.body.classList.add('with-modals--active');\n    document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;\n\n    this.setState({ media, time });\n  }\n\n  handleCloseMedia = () => {\n    document.body.classList.remove('with-modals--active');\n    document.documentElement.style.marginRight = 0;\n\n    this.setState({ media: null, index: null, time: null });\n  }\n\n  render () {\n    const { locale, components } = this.props;\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <Fragment>\n          {[].map.call(components, (component, i) => {\n            const componentName = component.getAttribute('data-component');\n            const Component = MEDIA_COMPONENTS[componentName];\n            const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props'));\n\n            Object.assign(props, {\n              ...(media   ? { media:   fromJS(media)   } : {}),\n              ...(card    ? { card:    fromJS(card)    } : {}),\n              ...(poll    ? { poll:    fromJS(poll)    } : {}),\n              ...(hashtag ? { hashtag: fromJS(hashtag) } : {}),\n\n              ...(componentName === 'Video' ? {\n                onOpenVideo: this.handleOpenVideo,\n              } : {\n                onOpenMedia: this.handleOpenMedia,\n              }),\n            });\n\n            return ReactDOM.createPortal(\n              <Component {...props} key={`media-${i}`} />,\n              component,\n            );\n          })}\n\n          <ModalRoot onClose={this.handleCloseMedia}>\n            {this.state.media && (\n              <MediaModal\n                media={this.state.media}\n                index={this.state.index || 0}\n                time={this.state.time}\n                onClose={this.handleCloseMedia}\n              />\n            )}\n          </ModalRoot>\n        </Fragment>\n      </IntlProvider>\n    );\n  }\n\n}\n"],"sourceRoot":""}