about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/components/components/lightbox.jsx8
-rw-r--r--app/assets/javascripts/components/features/ui/components/tabs_bar.jsx5
-rw-r--r--app/assets/javascripts/components/features/ui/index.jsx57
-rw-r--r--app/assets/stylesheets/components.scss10
-rw-r--r--package.json1
-rw-r--r--yarn.lock22
6 files changed, 58 insertions, 45 deletions
diff --git a/app/assets/javascripts/components/components/lightbox.jsx b/app/assets/javascripts/components/components/lightbox.jsx
index 29822ccb3..b5c2a69d8 100644
--- a/app/assets/javascripts/components/components/lightbox.jsx
+++ b/app/assets/javascripts/components/components/lightbox.jsx
@@ -41,15 +41,17 @@ const Lightbox = React.createClass({
   mixins: [PureRenderMixin],
 
   componentDidMount () {
-    this._listener = window.addEventListener('keyup', e => {
+    this._listener = e => {
       if (e.key === 'Escape') {
         this.props.onCloseClicked();
       }
-    });
+    };
+
+    window.addEventListener('keyup', this._listener);
   },
 
   componentWillUnmount () {
-    window.removeEventListener(this._listener);
+    window.removeEventListener('keyup', this._listener);
   },
 
   render () {
diff --git a/app/assets/javascripts/components/features/ui/components/tabs_bar.jsx b/app/assets/javascripts/components/features/ui/components/tabs_bar.jsx
index 868ebe00a..219979522 100644
--- a/app/assets/javascripts/components/features/ui/components/tabs_bar.jsx
+++ b/app/assets/javascripts/components/features/ui/components/tabs_bar.jsx
@@ -5,8 +5,7 @@ const outerStyle = {
   background: '#373b4a',
   margin: '10px',
   flex: '0 0 auto',
-  marginBottom: '0',
-  display: 'flex'
+  marginBottom: '0'
 };
 
 const tabStyle = {
@@ -28,7 +27,7 @@ const tabActiveStyle = {
 
 const TabsBar = () => {
   return (
-    <div style={outerStyle}>
+    <div className='tabs-bar' style={outerStyle}>
       <Link style={tabStyle} activeStyle={tabActiveStyle} to='/statuses/new'><i className='fa fa-fw fa-pencil' /> <FormattedMessage id='tabs_bar.compose' defaultMessage='Compose' /></Link>
       <Link style={tabStyle} activeStyle={tabActiveStyle} to='/timelines/home'><i className='fa fa-fw fa-home' /> <FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></Link>
       <Link style={tabStyle} activeStyle={tabActiveStyle} to='/notifications'><i className='fa fa-fw fa-bell' /> <FormattedMessage id='tabs_bar.notifications' defaultMessage='Notifications' /></Link>
diff --git a/app/assets/javascripts/components/features/ui/index.jsx b/app/assets/javascripts/components/features/ui/index.jsx
index 9b5469bbd..39ef35676 100644
--- a/app/assets/javascripts/components/features/ui/index.jsx
+++ b/app/assets/javascripts/components/features/ui/index.jsx
@@ -5,36 +5,61 @@ import LoadingBarContainer from './containers/loading_bar_container';
 import HomeTimeline from '../home_timeline';
 import MentionsTimeline from '../mentions_timeline';
 import Compose from '../compose';
-import MediaQuery from 'react-responsive';
 import TabsBar from './components/tabs_bar';
 import ModalContainer from './containers/modal_container';
 import Notifications from '../notifications';
+import { debounce } from 'react-decoration';
 
 const UI = React.createClass({
 
+  getInitialState () {
+    return {
+      width: window.innerWidth
+    };
+  },
+
   mixins: [PureRenderMixin],
 
+  @debounce(500)
+  handleResize () {
+    this.setState({ width: window.innerWidth });
+  },
+
+  componentWillMount () {
+    window.addEventListener('resize', this.handleResize, { passive: true });
+  },
+
+  componentWillUnmount () {
+    window.removeEventListener('resize', this.handleResize);
+  },
+
   render () {
     const layoutBreakpoint = 1024;
 
+    let mountedColumns;
+
+    if (this.state.width <= layoutBreakpoint) {
+      mountedColumns = (
+        <ColumnsArea>
+          {this.props.children}
+        </ColumnsArea>
+      );
+    } else {
+      mountedColumns = (
+        <ColumnsArea>
+          <Compose />
+          <HomeTimeline trackScroll={false} />
+          <Notifications trackScroll={false} />
+          {this.props.children}
+        </ColumnsArea>
+      );
+    }
+
     return (
       <div style={{ flex: '0 0 auto', display: 'flex', flexDirection: 'column', width: '100%', height: '100%', background: '#1a1c23' }}>
-        <MediaQuery maxWidth={layoutBreakpoint}>
-          <TabsBar />
-        </MediaQuery>
+        <TabsBar />
 
-        <MediaQuery maxWidth={layoutBreakpoint} component={ColumnsArea}>
-          {this.props.children}
-        </MediaQuery>
-
-        <MediaQuery minWidth={layoutBreakpoint + 1}>
-          <ColumnsArea>
-            <Compose />
-            <HomeTimeline trackScroll={false} />
-            <Notifications trackScroll={false} />
-            {this.props.children}
-          </ColumnsArea>
-        </MediaQuery>
+        {mountedColumns}
 
         <NotificationsContainer />
         <LoadingBarContainer style={{ backgroundColor: '#2b90d9', left: '0', top: '0' }} />
diff --git a/app/assets/stylesheets/components.scss b/app/assets/stylesheets/components.scss
index cc9f0eb3b..b1249ff7e 100644
--- a/app/assets/stylesheets/components.scss
+++ b/app/assets/stylesheets/components.scss
@@ -355,6 +355,16 @@
   }
 }
 
+.tabs-bar {
+  display: flex;
+}
+
+@media screen and (min-width: 1025px) {
+  .tabs-bar {
+    display: none;
+  }
+}
+
 .react-autosuggest__container {
   position: relative;
 }
diff --git a/package.json b/package.json
index 3bd2eacd3..ab75c5be5 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,6 @@
     "react-proxy": "^1.1.8",
     "react-redux": "^5.0.0-beta.3",
     "react-redux-loading-bar": "^2.4.1",
-    "react-responsive": "^1.1.5",
     "react-router": "^2.8.0",
     "react-router-scroll": "^0.3.2",
     "react-simple-dropdown": "^1.1.4",
diff --git a/yarn.lock b/yarn.lock
index 0a41f8b90..733ef7e92 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1585,10 +1585,6 @@ css-loader@0.25.0:
     postcss-modules-values "^1.1.0"
     source-list-map "^0.1.4"
 
-css-mediaquery@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
-
 css-select@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -2414,10 +2410,6 @@ https-browserify@~0.0.0:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
 
-hyphenate-style-name@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.1.tgz#bc49b9446e02b4570641afdd29c1ce7609d1b9cc"
-
 iconv-lite@^0.4.13, iconv-lite@~0.4.13:
   version "0.4.13"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
@@ -3011,12 +3003,6 @@ mantra-core@^1.6.1:
     react-komposer "^1.9.0"
     react-simple-di "^1.2.0"
 
-matchmedia@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/matchmedia/-/matchmedia-0.1.2.tgz#cfd47f2bf68fbc7f5ea1bd3a3cf1715ecba3c1bd"
-  dependencies:
-    css-mediaquery "^0.1.2"
-
 math-expression-evaluator@^1.2.14:
   version "1.2.14"
   resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab"
@@ -3977,14 +3963,6 @@ react-redux@^5.0.0-beta.3:
     lodash-es "^4.2.0"
     loose-envify "^1.1.0"
 
-react-responsive:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-1.1.5.tgz#a7019a28817dcb601ef31d10d72f798a0d710a17"
-  dependencies:
-    hyphenate-style-name "^1.0.0"
-    matchmedia "^0.1.2"
-    object-assign "^4.0.1"
-
 react-router-scroll:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/react-router-scroll/-/react-router-scroll-0.3.2.tgz#ba8b1d01b3681dc5a68d72865d35c10e84065e52"