diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | web-ui/app/account_recovery.html | 1 | ||||
-rw-r--r-- | web-ui/app/js/account_recovery.js | 5 | ||||
-rw-r--r-- | web-ui/app/js/account_recovery/page.js | 21 | ||||
-rw-r--r-- | web-ui/app/scss/account_recovery/page.scss | 163 | ||||
-rw-r--r-- | web-ui/app/scss/base/_colors.scss | 1 | ||||
-rw-r--r-- | web-ui/config/loaders-webpack.js | 20 | ||||
-rw-r--r-- | web-ui/package.json | 3 | ||||
-rw-r--r-- | web-ui/test/spec/account_recovery/page.spec.js (renamed from web-ui/test/spec/account_recovery/account_recovery.spec.js) | 4 | ||||
-rw-r--r-- | web-ui/webpack.config.js | 20 | ||||
-rw-r--r-- | web-ui/webpack.production.config.js | 13 |
11 files changed, 214 insertions, 38 deletions
@@ -27,6 +27,7 @@ requirements_js: install_js: @cd web-ui;\ + npm rebuild node-sass;\ npm run build create_virtualenv: ensure_virtualenv_installed diff --git a/web-ui/app/account_recovery.html b/web-ui/app/account_recovery.html index 407f5907..d2021f65 100644 --- a/web-ui/app/account_recovery.html +++ b/web-ui/app/account_recovery.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/> <title>Pixelated Account Recovery</title> </head> <body> diff --git a/web-ui/app/js/account_recovery.js b/web-ui/app/js/account_recovery.js index 02183574..441a8936 100644 --- a/web-ui/app/js/account_recovery.js +++ b/web-ui/app/js/account_recovery.js @@ -1,6 +1,11 @@ import React from 'react' import { render } from 'react-dom' import Page from 'js/account_recovery/page' +import a11y from 'react-a11y' + +import 'font-awesome/scss/font-awesome.scss' + +if(process.env.NODE_ENV === 'development') a11y(React); render( <Page/>, diff --git a/web-ui/app/js/account_recovery/page.js b/web-ui/app/js/account_recovery/page.js index a6be0c6e..5d4f2c36 100644 --- a/web-ui/app/js/account_recovery/page.js +++ b/web-ui/app/js/account_recovery/page.js @@ -3,9 +3,24 @@ import React from 'react' import 'scss/account_recovery/page.scss' const Page = () => ( - <div className="container"> - <img src="assets/images/forgot-my-password.svg" /> - <h1>E se você esquecer sua senha?</h1> + <div className='container'> + <img src='assets/images/forgot-my-password.svg' alt="Esqueci minha senha!"/> + <form> + <h1>E se você esquecer sua senha?</h1> + <p>Informe outro e-mail que você usa regularmente. Esse será o seu e-mail de recuperação.</p> + <p>Instruções para recuperar sua senha serão enviadas para esse e-mail, guarde com carinho.</p> + <div className="field-group"> + <input type="text" name="email" className="email" required/> + <label className="animated-label" htmlFor="email">Digite seu e-mail de recuperação</label> + </div> + <button>Adicionar e-mail</button> + <div> + <a href="/"> + <i className="fa fa-angle-left" aria-hidden="true"></i> + <span>Voltar</span> + </a> + </div> + </form> </div> ); diff --git a/web-ui/app/scss/account_recovery/page.scss b/web-ui/app/scss/account_recovery/page.scss index b6a4c024..8bba1b5a 100644 --- a/web-ui/app/scss/account_recovery/page.scss +++ b/web-ui/app/scss/account_recovery/page.scss @@ -1,7 +1,10 @@ @import "../vendor/reset"; @import "../base/colors"; @import "../base/fonts"; -@import "../base/scaffolding"; + +html { + min-height: 100%; +} body { font-family: "Open Sans", "Microsoft YaHei", "Hiragino Sans GB", "Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Arial, sans-serif; @@ -10,22 +13,164 @@ body { background: -o-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Opera 11.1 to 12.0 */ background: -moz-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Firefox 3.6 to 15 */ background: linear-gradient(to bottom right, $dark_blue, $middle_blue); /* Standard syntax */ + color: $dark_grey_text; + min-height: 100%; } h1 { - font-size: 4em; - color: $dark_slate_gray; + font-size: 1.3em; + font-weight: 600; +} + +p { + -webkit-margin-before: 0.5em; + -webkit-margin-after: 0.5em; + margin-before: 0.5em; + margin-after: 0.5em; +} + +a { + text-decoration: none; + color: $dark_blue; + font-style: italic; + + .fa { + font-size: 1.6em; + position: relative; + top: 3px; + margin-right: 0.3em; + } + +} + +.field-group { + position:relative; + margin: 1.5em 0; + width: 100%; + + label { + font-size: 0.9em; + margin-bottom: 10px; + display: inline-block; + } + + input { + display: block; + border: none; + border-bottom: solid 1px #4da3b6; + width: 100%; + height: auto; + padding: 0.3em 0px; + } + + input:focus { + outline:none; + border-width: 2px; + } + + input:focus ~ .animated-label, input:valid ~ .animated-label { + top:-12px; + left: 0; + font-size:0.7em; + color:#4da3b6; + } + + .animated-label { + color:#999; + position:absolute; + pointer-events:none; + left: 6px; + top:10px; + transition:0.2s ease all; + -moz-transition:0.2s ease all; + -webkit-transition:0.2s ease all; + } +} + + +button { + background: $dark_blue; + padding: 0.8em; + color: $white; + text-align: center; + border: none; + border-radius: 2px; + font-weight: 300; + width: 100%; + margin-bottom: 1em; } .container { background: $white; - width: 90%; - margin: 2% auto; - padding: 3%; + width: 84%; + margin: 3% auto; + padding: 6% 5%; + + -webkit-display: flex; + display: flex; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + flex-direction: column; +} + +img { + width: 50%; + -webkit-align-self: center; + align-self: center; +} + +@media only screen and (min-width : 500px) { + body { + font-size: 1.3em; + } + + form { + display: flex; + -webkit-display: flex; + -webkit-flex-direction: column; + flex-direction: column; + + .field-group, button, div { + width: 70%; + -webkit-align-self: center; + align-self: center; + } + } +} + +@media only screen and (min-width : 960px) { + .container{ + width: 60%; + padding: 3%; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-flex-direction: row; + flex-direction: row; + max-width: 700px; + } + + form { + margin-left: 2.5em; + + .field-group, button, div { + width: 300px; + -webkit-align-self: flex-start; + align-self: flex-start; + } + + .field-group { + margin-top: 3em; + font-size: 1em; + } + } img { - display: block; - width: 50%; - margin: 0 auto; + width: 300px; + } + + button { + font-size: 0.8em; + margin-bottom: 1em; } } diff --git a/web-ui/app/scss/base/_colors.scss b/web-ui/app/scss/base/_colors.scss index f3c245a9..e79781cf 100644 --- a/web-ui/app/scss/base/_colors.scss +++ b/web-ui/app/scss/base/_colors.scss @@ -38,6 +38,7 @@ $black: #000; $top_pane: $contrast; $total_count_bg: #C0B9B9; $background_dropdown_grey: #f0f0f0; +$dark_grey_text: #4a4a4a; $background_light_grey: #F5F5F5; $border_light_grey: #D9D9D9; diff --git a/web-ui/config/loaders-webpack.js b/web-ui/config/loaders-webpack.js new file mode 100644 index 00000000..21e9a572 --- /dev/null +++ b/web-ui/config/loaders-webpack.js @@ -0,0 +1,20 @@ +module.exports = [ + { + test: /\.js$/, + exclude: /(node_modules|bower_components)/, + loader: 'babel', + query: { presets: ['es2015', 'react']} + }, + { + test: /\.scss|css$/, + loader: "style-loader!css-loader!sass-loader" + }, + { + test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, + loader: "url-loader?limit=10000&mimetype=application/font-woff" + }, + { + test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, + loader: "file-loader" + } +] diff --git a/web-ui/package.json b/web-ui/package.json index 6f875280..6f9b03d4 100644 --- a/web-ui/package.json +++ b/web-ui/package.json @@ -17,6 +17,7 @@ "dompurify": "^0.8.4", "enzyme": "^2.7.1", "expect": "^1.20.2", + "file-loader": "^0.10.0", "font-awesome": "^4.7.0", "handlebars": "^4.0.5", "he": "^1.1.0", @@ -49,12 +50,14 @@ "node-sass": "^4.5.0", "quoted-printable": "^1.0.1", "react": "^15.4.2", + "react-a11y": "^0.3.3", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.4.2", "requirejs": "2.2.0", "sass-loader": "^4.1.1", "style-loader": "^0.13.1", "typeahead.js": "^0.11.1", + "url-loader": "^0.5.7", "utf8": "^2.1.2", "watch": "0.19.1", "webpack": "^1.14.0" diff --git a/web-ui/test/spec/account_recovery/account_recovery.spec.js b/web-ui/test/spec/account_recovery/page.spec.js index eaff257b..f550a51e 100644 --- a/web-ui/test/spec/account_recovery/account_recovery.spec.js +++ b/web-ui/test/spec/account_recovery/page.spec.js @@ -3,9 +3,9 @@ import expect from 'expect' import React from 'react' import Page from '../../../app/js/account_recovery/page' -describe('test', () => { +describe('Page', () => { 'use strict'; - it('react', () => { + it('renders backup email page title', () => { const page = shallow(<Page />); expect(page.find('h1').text()).toEqual('E se você esquecer sua senha?'); }); diff --git a/web-ui/webpack.config.js b/web-ui/webpack.config.js index 59d2ae5b..5886154a 100644 --- a/web-ui/webpack.config.js +++ b/web-ui/webpack.config.js @@ -1,6 +1,7 @@ var path = require('path'); var webpack = require('webpack'); var copyWebpack = require('./config/copy-webpack'); +var loaders = require('./config/loaders-webpack'); var aliases = require('./config/alias-webpack'); module.exports = { @@ -20,18 +21,11 @@ module.exports = { extensions: ['', '.js'] }, module: { - loaders: [ - { - test: /\.js$/, - exclude: /(node_modules|bower_components)/, - loader: 'babel', - query: { presets: ['es2015', 'react']} - }, - { - test: /\.scss|css$/, - loader: "style-loader!css-loader!sass-loader" - } - ] + loaders: loaders }, - plugins: [copyWebpack] + plugins: [copyWebpack, new webpack.DefinePlugin({ + 'process.env': { + 'NODE_ENV': '"development"' + } + })] } diff --git a/web-ui/webpack.production.config.js b/web-ui/webpack.production.config.js index bc10b90e..cf8ab8ff 100644 --- a/web-ui/webpack.production.config.js +++ b/web-ui/webpack.production.config.js @@ -1,6 +1,7 @@ var path = require('path'); var webpack = require('webpack'); var copyWebpack = require('./config/copy-webpack'); +var loaders = require('./config/loaders-webpack'); var aliases = require('./config/alias-webpack'); module.exports = { @@ -20,17 +21,7 @@ module.exports = { extensions: ['', '.js'] }, module: { - loaders: [ - { - test: /\.js$/, - loader: 'babel', - query: { presets: ['es2015', 'react']} - }, - { - test: /\.scss|css$/, - loader: "style-loader!css-loader!sass-loader" - } - ] + loaders: loaders }, plugins: [ new webpack.optimize.UglifyJsPlugin(), |