]> cat aescling's git repositories - mastodon.git/commitdiff
Show media modal on public timeline (#7413)
authorYamagishi Kazutoshi <ykzts@desire.sh>
Tue, 8 May 2018 11:33:09 +0000 (20:33 +0900)
committerEugen Rochko <eugen@zeonfederated.com>
Tue, 8 May 2018 11:33:09 +0000 (13:33 +0200)
app/javascript/mastodon/components/status.js
app/javascript/mastodon/containers/timeline_container.js
app/javascript/mastodon/features/ui/components/modal_root.js
app/views/about/show.html.haml
app/views/tags/show.html.haml

index 402d558c4cb4e54840b22c6ef3257c92b8a9a25f..953d98c20d4dfb7ae99b19954ad2f30ce96b2375 100644 (file)
@@ -206,7 +206,7 @@ export default class Status extends ImmutablePureComponent {
         );
       } else {
         media = (
-          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery} >
+          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>
             {Component => <Component media={status.get('media_attachments')} sensitive={status.get('sensitive')} height={110} onOpenMedia={this.props.onOpenMedia} />}
           </Bundle>
         );
index 8719bb5c9eeab5b680fb59adbd9c5bd7b56f29d2..a1a4bd024bce363dcbee32d5ab49640db4761c3a 100644 (file)
@@ -1,4 +1,5 @@
-import React from 'react';
+import React, { Fragment } from 'react';
+import ReactDOM from 'react-dom';
 import { Provider } from 'react-redux';
 import PropTypes from 'prop-types';
 import configureStore from '../store/configureStore';
@@ -8,6 +9,7 @@ import { getLocale } from '../locales';
 import PublicTimeline from '../features/standalone/public_timeline';
 import CommunityTimeline from '../features/standalone/community_timeline';
 import HashtagTimeline from '../features/standalone/hashtag_timeline';
+import ModalContainer from '../features/ui/containers/modal_container';
 import initialState from '../initial_state';
 
 const { localeData, messages } = getLocale();
@@ -47,7 +49,13 @@ export default class TimelineContainer extends React.PureComponent {
     return (
       <IntlProvider locale={locale} messages={messages}>
         <Provider store={store}>
-          {timeline}
+          <Fragment>
+            {timeline}
+            {ReactDOM.createPortal(
+              <ModalContainer />,
+              document.getElementById('modal-container'),
+            )}
+          </Fragment>
         </Provider>
       </IntlProvider>
     );
index 4185cba32205f9b9d5637adb451db769337b9faf..a334318ce56422f05e50b8444b6c1c39f3b8b3d3 100644 (file)
@@ -40,6 +40,17 @@ export default class ModalRoot extends React.PureComponent {
     onClose: PropTypes.func.isRequired,
   };
 
+  getSnapshotBeforeUpdate () {
+    const visible = !!this.props.type;
+    return {
+      overflowY: visible ? 'hidden' : null,
+    };
+  }
+
+  componentDidUpdate (prevProps, prevState, { overflowY }) {
+    document.body.style.overflowY = overflowY;
+  }
+
   renderLoading = modalId => () => {
     return ['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
   }
index 870dafdf520fcfd0421665ba623c01880c64b43b..fba46d54b74755f0cfece97ce3b9eed99d3542f2 100644 (file)
             %p
               = link_to t('about.source_code'), @instance_presenter.source_url
               = " (#{@instance_presenter.version_number})"
+
+#modal-container
index f8cdc9952314a8d5d37755af4384061da6e6460e..d46f3599926d384e9901873f6bc617e99113ba00 100644 (file)
@@ -34,3 +34,5 @@
               %p= t 'about.about_mastodon_html'
 
               = render 'features'
+
+#modal-container