diff options
| author | Tayane Fernandes <tayane.rmf@gmail.com> | 2017-02-07 17:39:09 -0200 | 
|---|---|---|
| committer | Tayane Fernandes <tayane.rmf@gmail.com> | 2017-02-07 17:39:09 -0200 | 
| commit | bc922deb23a72d6ca1bf4c39efd1d7366baa9a84 (patch) | |
| tree | adf216625b4fb30c79e7577c990ac669da73c204 /web-ui/src | |
| parent | ebd5b3adce44a16213e5c1ec763a642899eba908 (diff) | |
[#922] Refactoring react folder structure
with @anikarni
Diffstat (limited to 'web-ui/src')
| -rw-r--r-- | web-ui/src/account_recovery/account_recovery.html | 12 | ||||
| -rw-r--r-- | web-ui/src/account_recovery/account_recovery.js | 18 | ||||
| -rw-r--r-- | web-ui/src/account_recovery/page.js | 28 | ||||
| -rw-r--r-- | web-ui/src/account_recovery/page.scss | 176 | ||||
| -rw-r--r-- | web-ui/src/i18n.js | 39 | 
5 files changed, 273 insertions, 0 deletions
| diff --git a/web-ui/src/account_recovery/account_recovery.html b/web-ui/src/account_recovery/account_recovery.html new file mode 100644 index 00000000..bd451ebc --- /dev/null +++ b/web-ui/src/account_recovery/account_recovery.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +  <head> +    <meta charset="utf-8"/> +    <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> +    <div id="root"/> +    <script type="text/javascript" src="/assets/account_recovery.js"></script> +  </body> +</html> diff --git a/web-ui/src/account_recovery/account_recovery.js b/web-ui/src/account_recovery/account_recovery.js new file mode 100644 index 00000000..f2421bfc --- /dev/null +++ b/web-ui/src/account_recovery/account_recovery.js @@ -0,0 +1,18 @@ +import React from 'react' +import { render } from 'react-dom' +import a11y from 'react-a11y' +import { I18nextProvider } from 'react-i18next' + +import Page from './page' +import i18n from '../i18n' + +import 'font-awesome/scss/font-awesome.scss' + +if(process.env.NODE_ENV === 'development') a11y(React); + +render( +  <I18nextProvider i18n={ i18n }> +    <Page/> +  </I18nextProvider>, +  document.getElementById('root') +); diff --git a/web-ui/src/account_recovery/page.js b/web-ui/src/account_recovery/page.js new file mode 100644 index 00000000..a02d307c --- /dev/null +++ b/web-ui/src/account_recovery/page.js @@ -0,0 +1,28 @@ +import React from 'react' +import { translate } from 'react-i18next' + +import './page.scss' + +export const Page = ({ t }) => ( +  <div className='container'> +    <img src='assets/images/forgot-my-password.svg' alt={t('backup-account.image-description')}/> +    <form> +      <h1>{t('backup-account.title')}</h1> +      <p>{t('backup-account.paragraph1')}</p> +      <p>{t('backup-account.paragraph2')}</p> +      <div className="field-group"> +        <input type="text" name="email" className="email" required/> +        <label className="animated-label" htmlFor="email">{t('backup-account.input-label')}</label> +      </div> +      <button>{t('backup-account.button')}</button> +      <div> +        <a href="/"> +          <i className="fa fa-angle-left" aria-hidden="true"></i> +          <span>{t('back-to-inbox')}</span> +        </a> +      </div> +    </form> +  </div> +) + +export default translate('', { wait: true })(Page) diff --git a/web-ui/src/account_recovery/page.scss b/web-ui/src/account_recovery/page.scss new file mode 100644 index 00000000..e7b1504e --- /dev/null +++ b/web-ui/src/account_recovery/page.scss @@ -0,0 +1,176 @@ +@import "~scss/vendor/reset"; +@import "~scss/base/colors"; +@import "~scss/base/fonts"; + +html { +  min-height: 100%; +} + +body { +  font-family: "Open Sans", "Microsoft YaHei", "Hiragino Sans GB", "Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Arial, sans-serif; +  background: $dark_blue; /* For browsers that do not support gradients */ +  background: -webkit-linear-gradient(left top, $dark_blue, $middle_blue); /* For Safari 5.1 to 6.0 */ +  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: 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: 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 { +      flex-basis: 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 { +    width: 300px; +  } + +  button { +    font-size: 0.8em; +    margin-bottom: 1em; +  } +} diff --git a/web-ui/src/i18n.js b/web-ui/src/i18n.js new file mode 100644 index 00000000..9c6ad550 --- /dev/null +++ b/web-ui/src/i18n.js @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ +import i18n from 'i18next' +import i18nBackend from 'i18nextXHRBackend' +import i18nDetector from 'i18nextBrowserLanguageDetector' + +const detector = new i18nDetector(); +const detect = detector.detect.bind(detector); + +detector.detect = function(detectionOrder)  { +  let result = detect(detectionOrder); +  return result.replace('-', '_'); +}; + +i18n +  .use(i18nBackend) +  .use(detector) +  .init({ +    fallbackLng: 'en_US', +    backend: { +      loadPath: 'assets/locales/{{lng}}/{{ns}}.json' +    } +  }); + +export default i18n; | 
