From 9d00dc705ad75c070a8071286d0cce07da533ca2 Mon Sep 17 00:00:00 2001 From: Mickael KERJEAN Date: Fri, 2 Mar 2018 05:51:13 +1100 Subject: [PATCH] improvement (connection page): UI improvement, fixing errors and weirderies --- .gitignore | 6 +- client/assets/bucket.svg | 6 ++ client/assets/delete.svg | 43 ++++++++++ client/assets/download.svg | 10 +++ client/assets/dropbox.png | Bin 0 -> 9130 bytes client/assets/edit.svg | 9 ++ client/assets/error.svg | 37 +++++++++ client/assets/file.svg | 4 + client/assets/folder copy.svg | 6 ++ client/assets/folder.svg | 6 ++ client/assets/google-drive.png | Bin 0 -> 10710 bytes client/assets/link.svg | 6 ++ client/assets/loader.svg | 1 + client/assets/loader_white.svg | 1 + client/assets/pause.svg | 38 +++++++++ client/assets/play.svg | 37 +++++++++ client/assets/power.svg | 39 +++++++++ client/assets/save.svg | 38 +++++++++ client/pages/connectpage.js | 105 ++++++++++-------------- client/pages/connectpage/credentials.js | 4 +- client/pages/connectpage/form.js | 64 +++++++++------ client/pages/connectpage/form.scss | 20 +++++ package-lock.json | 28 +++++++ package.json | 1 + server/model/backend/dropbox.js | 2 +- webpack.config.js | 4 + 26 files changed, 423 insertions(+), 92 deletions(-) create mode 100644 client/assets/bucket.svg create mode 100644 client/assets/delete.svg create mode 100644 client/assets/download.svg create mode 100644 client/assets/dropbox.png create mode 100644 client/assets/edit.svg create mode 100644 client/assets/error.svg create mode 100644 client/assets/file.svg create mode 100644 client/assets/folder copy.svg create mode 100644 client/assets/folder.svg create mode 100644 client/assets/google-drive.png create mode 100644 client/assets/link.svg create mode 100644 client/assets/loader.svg create mode 100644 client/assets/loader_white.svg create mode 100644 client/assets/pause.svg create mode 100644 client/assets/play.svg create mode 100644 client/assets/power.svg create mode 100644 client/assets/save.svg diff --git a/.gitignore b/.gitignore index e77c88ec..c32ac8f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,12 @@ server/public/js -server/public/index.html +server/public/index.html node_modules/ babel_cache/ .DS_Store \#*\# -.\#* +.\#* *.log *~ *.swp *.swo - \ No newline at end of file +.tern-port \ No newline at end of file diff --git a/client/assets/bucket.svg b/client/assets/bucket.svg new file mode 100644 index 00000000..8380a9bb --- /dev/null +++ b/client/assets/bucket.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/client/assets/delete.svg b/client/assets/delete.svg new file mode 100644 index 00000000..f7358b02 --- /dev/null +++ b/client/assets/delete.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/download.svg b/client/assets/download.svg new file mode 100644 index 00000000..ee148bd4 --- /dev/null +++ b/client/assets/download.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/client/assets/dropbox.png b/client/assets/dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..19515de3e14cf257cc4089f8f2d0bab5cb104b5a GIT binary patch literal 9130 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 + + + + + + + + diff --git a/client/assets/error.svg b/client/assets/error.svg new file mode 100644 index 00000000..e5bcec14 --- /dev/null +++ b/client/assets/error.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/file.svg b/client/assets/file.svg new file mode 100644 index 00000000..3803ac02 --- /dev/null +++ b/client/assets/file.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/assets/folder copy.svg b/client/assets/folder copy.svg new file mode 100644 index 00000000..f1b08731 --- /dev/null +++ b/client/assets/folder copy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/client/assets/folder.svg b/client/assets/folder.svg new file mode 100644 index 00000000..f1b08731 --- /dev/null +++ b/client/assets/folder.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/client/assets/google-drive.png b/client/assets/google-drive.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0135b05eb672cfe0f9035a79733f492fdd5c06 GIT binary patch literal 10710 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 p{D1ki;eWqU + + + + + diff --git a/client/assets/loader.svg b/client/assets/loader.svg new file mode 100644 index 00000000..f997200a --- /dev/null +++ b/client/assets/loader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/assets/loader_white.svg b/client/assets/loader_white.svg new file mode 100644 index 00000000..ad3b741a --- /dev/null +++ b/client/assets/loader_white.svg @@ -0,0 +1 @@ + diff --git a/client/assets/pause.svg b/client/assets/pause.svg new file mode 100644 index 00000000..7c8b0090 --- /dev/null +++ b/client/assets/pause.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/play.svg b/client/assets/play.svg new file mode 100644 index 00000000..f22527cf --- /dev/null +++ b/client/assets/play.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/power.svg b/client/assets/power.svg new file mode 100644 index 00000000..06e7e0ba --- /dev/null +++ b/client/assets/power.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/save.svg b/client/assets/save.svg new file mode 100644 index 00000000..6cec20d4 --- /dev/null +++ b/client/assets/save.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/pages/connectpage.js b/client/pages/connectpage.js index 8a714f41..d388e177 100644 --- a/client/pages/connectpage.js +++ b/client/pages/connectpage.js @@ -17,9 +17,11 @@ export class ConnectPage extends React.Component { remember_me: window.localStorage.hasOwnProperty('credentials') ? true : false, loading: false, error: null, - marginTop: this._marginTop() + doing_a_third_party_login: false }; + } + componentDidMount(){ // adapted from: https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript function getParam(name) { const regex = new RegExp("[?&#]" + name.replace(/[\[\]]/g, "\\$&") + "(=([^&#]*)|&|#|$)"); @@ -31,76 +33,54 @@ export class ConnectPage extends React.Component { // dropbox login if(getParam('state') === 'dropbox'){ - this.state.loading = true; this.authenticate({bearer: getParam('access_token'), type: 'dropbox'}); + this.setState({doing_a_third_party_login: true}); } // google drive login if(getParam('code')){ - this.state.loading = true; this.authenticate({code: getParam('code'), type: 'gdrive'}); + this.setState({doing_a_third_party_login: true}); } } - componentWillMount(){ - window.onresize = () => { - this.setState({marginTop: this._marginTop()}); - }; - } - _marginTop(){ - let size = Math.round(Math.abs((document.body.offsetHeight - 300) / 2)); - return size > 150? 150 : size; - } - authenticate(params){ - if(params.type === 'dropbox') return this.login_dropbox(); - else if(params.type === 'gdrive') return this.login_google(); - this.setState({loading: true}); Session.authenticate(params) .then((ok) => { - this.setState({loading: false}); invalidate(); const path = params.path && /^\//.test(params.path)? /\/$/.test(params.path) ? params.path : params.path+'/' : '/'; this.props.history.push('/files'+path); }) .catch(err => { - if(err && err.code === 'CANCELLED'){ return; } this.setState({loading: false, error: err}); - window.setTimeout(() => { - this.setState({error: null}); - }, 1000); + window.setTimeout(() => this.setState({error: null}), 1000); }); } - login_dropbox(e){ - this.setState({loading: true}); - Session.url('dropbox').then((url) => { - window.location.href = url; - }).catch((err) => { - if(err && err.code === 'CANCELLED'){ return; } - this.setState({loading: false, error: err}); - window.setTimeout(() => { - this.setState({error: null}); - }, 1000); - }); - } - - login_google(e){ - this.setState({loading: true}); - Session.url('gdrive').then((url) => { - window.location.href = url; - }).catch((err) => { - if(err && err.code === 'CANCELLED'){ return } - this.setState({loading: false, error: err}); - window.setTimeout(() => { - this.setState({error: null}); - }, 1000); - }); + initiateAuthToThirdParty(source){ + if(source === 'dropbox'){ + this.setState({loading: true}); + Session.url('dropbox').then((url) => { + window.location.href = url; + }).catch((err) => { + this.setState({loading: false, error: err}); + window.setTimeout(() => this.setState({error: null}), 1000); + }); + }else if(source === 'google'){ + this.setState({loading: true}); + Session.url('gdrive').then((url) => { + window.location.href = url; + }).catch((err) => { + this.setState({loading: false, error: err}); + window.setTimeout(() => this.setState({error: null}), 1000); + }); + } } onFormSubmit(data, credentials){ - this.setState({credentials: credentials}); - this.authenticate(data); + this.setState({credentials: credentials}, () => { + this.authenticate(data); + }); } setRemember(state){ @@ -122,23 +102,22 @@ export class ConnectPage extends React.Component { - - -
+ + + + + - - - + + + + + diff --git a/client/pages/connectpage/credentials.js b/client/pages/connectpage/credentials.js index 88da5067..539a2edd 100644 --- a/client/pages/connectpage/credentials.js +++ b/client/pages/connectpage/credentials.js @@ -36,7 +36,7 @@ export class Credentials extends React.Component { } } - componentWillMount(){ + componentDidMount(){ this.init(); if(this.state.key) this.onSubmit(); } @@ -91,8 +91,8 @@ export class Credentials extends React.Component { } }else{ this.setState({error: 'Password can\'t be empty'}); + window.setTimeout(() => this.setState({error: null}), 1500); } - window.setTimeout(() => this.setState({error: null}), 1500); } render() { diff --git a/client/pages/connectpage/form.js b/client/pages/connectpage/form.js index 95ce831a..e0c13750 100644 --- a/client/pages/connectpage/form.js +++ b/client/pages/connectpage/form.js @@ -3,6 +3,8 @@ import { Container, Card, NgIf, Input, Button, Textarea, Loader, Notification, e import { Session, invalidate, password } from '../../data'; import './form.scss'; +import img_drive from '../../assets/google-drive.png'; +import img_dropbox from '../../assets/dropbox.png'; export class Form extends React.Component { constructor(props){ @@ -14,24 +16,14 @@ export class Form extends React.Component { advanced_sftp: false, advanced_webdav: false, advanced_s3: false, - advanced_git: false + advanced_git: false, + dummy: true }; } - - _marginTop(){ - let size = 300; - const $screen = document.querySelector('.login-form'); - if($screen) size = $screen.offsetHeight; - - size = Math.round((document.body.offsetHeight - size) / 2); - if(size < 0) return 0; - if(size > 150) return 150; - return size; - } - componentDidMount(){ this.publishState(this.props.credentials); + window.addEventListener('resize', this.rerender.bind(this)); } componentWillReceiveProps(props){ @@ -40,6 +32,9 @@ export class Form extends React.Component { } } + componentWillUnmount(){ + window.removeEventListener('resize', this.rerender.bind(this)); + } publishState(_credentials){ const pushDOM = (credentials) => { @@ -102,10 +97,33 @@ export class Form extends React.Component { this.props.onSubmit(auth_data, credentials); } + redirect_dropbox(e){ + this.props.onThirdPartyLogin('dropbox'); + } + + redirect_google(e){ + this.props.onThirdPartyLogin('google'); + } + onTypeChange(type){ this.setState({type: type}, () => this.publishState(this.props.credentials)); } + rerender(){ + this.setState({dummy: !this.state.dummy}); + } + + _marginTop(){ + let size = 300; + const $screen = document.querySelector('.login-form'); + if($screen) size = $screen.offsetHeight; + + size = Math.round((document.body.offsetHeight - size) / 2); + if(size < 0) return 0; + if(size > 150) return 150; + return size; + } + render() { let className = (window.innerWidth < 600) ? 'scroll-x' : ''; return ( @@ -122,9 +140,9 @@ export class Form extends React.Component {
- {this.state.refs.webdav_url = input; }} autoComplete="new-password" /> - {this.state.refs.webdav_username = input; }} autoComplete="new-password" /> - {this.state.refs.webdav_password = input; }} autoComplete="new-password" /> + { this.state.refs.webdav_url = input; }} autoComplete="new-password" /> + { this.state.refs.webdav_username = input; }} autoComplete="new-password" /> + { this.state.refs.webdav_password = input; }} autoComplete="new-password" /> @@ -196,23 +214,23 @@ export class Form extends React.Component { -
- +
+
- +
-
- +
+
- +
- + ); } } diff --git a/client/pages/connectpage/form.scss b/client/pages/connectpage/form.scss index 99cbb5b3..58359b57 100644 --- a/client/pages/connectpage/form.scss +++ b/client/pages/connectpage/form.scss @@ -42,3 +42,23 @@ } } } + +.component_page_connection_form.form-appear{ + opacity: 0; +} +.component_page_connection_form.form-appear.form-appear-active{ + opacity: 1; + transition: opacity 0.5s ease-out; +} + + +.component_rememberme.remember-appear{ + opacity: 0; + transform: translateX(40px); +} +.component_rememberme.remember-appear.remember-appear-active{ + opacity: 1; + transform: translateX(0px); + transition: all 0.3s ease-out; + transition-delay: 0.5s; +} diff --git a/package-lock.json b/package-lock.json index b3cb7fc7..9b06de26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11149,6 +11149,34 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=" }, + "url-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.6.0", + "schema-utils": "0.3.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + } + } + } + }, "url-parse": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", diff --git a/package.json b/package.json index 182a4703..0443bbba 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "sass-loader": "^6.0.6", "sass-variable-loader": "^0.1.2", "style-loader": "^0.20.2", + "url-loader": "^0.6.2", "webpack-bundle-analyzer": "^2.8.2", "webpack-dev-server": "^2.4.5" } diff --git a/server/model/backend/dropbox.js b/server/model/backend/dropbox.js index 8266366f..b08ae48a 100644 --- a/server/model/backend/dropbox.js +++ b/server/model/backend/dropbox.js @@ -43,7 +43,7 @@ module.exports = { test: function(params){ return query(params, "https://api.dropboxapi.com/2/users/get_current_account", "POST") .then((opts) => Promise.resolve(params)) - .catch((err) => Promise.reject({message: err && err.message || err, code: "NOT_AUTHENTICATED"})) + .catch((err) => Promise.reject({message: 'Dropbox didn\'t gave us access to your account', code: "NOT_AUTHENTICATED"})) }, cat: function(path, params){ return query_stream(params, "https://content.dropboxapi.com/2/files/download", "POST", null, { diff --git a/webpack.config.js b/webpack.config.js index bb157374..550f7167 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -28,6 +28,10 @@ let config = { { test: /\.scss$/, loaders: ['style-loader', 'css-loader', 'sass-loader'] + }, + { + test: /\.(pdf|jpg|png|gif|svg|ico)$/, + loader: "url-loader?mimetype=image/png" } ] },