ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

commit e0f299bddce3878efdf366db810eb1a140a3e21f
parent a549a58f8d2473b6449cec119d3395bfeeb2fddf
Author: Konstantin Tarkus <koistya@gmail.com>
Date:   Mon,  7 Mar 2016 23:05:20 +0300

Merge pull request #486 from frenzzy/login-form

Add login form
Diffstat:
Msrc/components/App/App.scss | 4++++
Msrc/routes/login/Login.js | 92++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Msrc/routes/login/Login.scss | 140+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 233 insertions(+), 3 deletions(-)

diff --git a/src/components/App/App.scss b/src/components/App/App.scss @@ -25,6 +25,10 @@ html { line-height: 1.375; /* ~22px */ } +a { + color: #0074c2; +} + /* * Remove text-shadow in selection highlight: * https://twitter.com/miketaylr/status/12228805301 diff --git a/src/routes/login/Login.js b/src/routes/login/Login.js @@ -16,7 +16,97 @@ function Login({ title }) { <div className={s.root}> <div className={s.container}> <h1>{title}</h1> - <p>...</p> + <p className={s.lead}>Log in with your username or company email address.</p> + <div className={s.formGroup}> + <a className={s.facebook} href="/login/facebook"> + <svg + className={s.icon} + width="30" + height="30" + viewBox="0 0 30 30" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M22 16l1-5h-5V7c0-1.544.784-2 3-2h2V0h-4c-4.072 0-7 2.435-7 7v4H7v5h5v14h6V16h4z" + /> + </svg> + <span>Log in with Facebook</span> + </a> + </div> + <div className={s.formGroup}> + <a className={s.google} href="/login/google"> + <svg + className={s.icon} + width="30" + height="30" + viewBox="0 0 30 30" + xmlns="http://www.w3.org/2000/svg" + > + <path d={'M30 13h-4V9h-2v4h-4v2h4v4h2v-4h4m-15 2s-2-1.15-2-2c0 0-.5-1.828 1-3 ' + + '1.537-1.2 3-3.035 3-5 0-2.336-1.046-5-3-6h3l2.387-1H10C5.835 0 2 3.345 2 7c0 ' + + '3.735 2.85 6.56 7.086 6.56.295 0 .58-.006.86-.025-.273.526-.47 1.12-.47 1.735 ' + + '0 1.037.817 2.042 1.523 2.73H9c-5.16 0-9 2.593-9 6 0 3.355 4.87 6 10.03 6 5.882 ' + + '0 9.97-3 9.97-7 0-2.69-2.545-4.264-5-6zm-4-4c-2.395 0-5.587-2.857-6-6C4.587 ' + + '3.856 6.607.93 9 1c2.394.07 4.603 2.908 5.017 6.052C14.43 10.195 13 13 11 13zm-1 ' + + '15c-3.566 0-7-1.29-7-4 0-2.658 3.434-5.038 7-5 .832.01 2 0 2 0 1 0 2.88.88 4 2 1 ' + + '1 1 2.674 1 3 0 3-1.986 4-7 4z'} + /> + </svg> + <span>Log in with Google</span> + </a> + </div> + <div className={s.formGroup}> + <a className={s.twitter} href="/login/twitter"> + <svg + className={s.icon} + width="30" + height="30" + viewBox="0 0 30 30" + xmlns="http://www.w3.org/2000/svg" + > + <path d={'M30 6.708c-1.105.49-2.756 1.143-4 1.292 1.273-.762 2.54-2.56 ' + + '3-4-.97.577-2.087 1.355-3.227 1.773L25 5c-1.12-1.197-2.23-2-4-2-3.398 0-6 ' + + '2.602-6 6 0 .4.047.7.11.956L15 10C9 10 5.034 8.724 2 5c-.53.908-1 1.872-1 ' + + '3 0 2.136 1.348 3.894 3 5-1.01-.033-2.17-.542-3-1 0 2.98 4.186 6.432 7 7-1 ' + + '1-4.623.074-5 0 .784 2.447 3.31 3.95 6 4-2.105 1.648-4.647 2.51-7.53 2.51-.5 ' + + '0-.988-.03-1.47-.084C2.723 27.17 6.523 28 10 28c11.322 0 17-8.867 17-17 ' + + '0-.268.008-.736 0-1 1.2-.868 2.172-2.058 3-3.292z'} + /> + </svg> + <span>Log in with Twitter</span> + </a> + </div> + <strong className={s.lineThrough}>OR</strong> + <form method="post"> + <div className={s.formGroup}> + <label className={s.label} htmlFor="usernameOrEmail"> + Username or email address: + </label> + <input + className={s.input} + id="usernameOrEmail" + type="text" + name="usernameOrEmail" + autoFocus + /> + </div> + <div className={s.formGroup}> + <label className={s.label} htmlFor="password"> + Password: + </label> + <input + className={s.input} + id="password" + type="password" + name="password" + /> + </div> + <div className={s.formGroup}> + <button className={s.button} type="submit"> + Log in + </button> + </div> + </form> </div> </div> ); diff --git a/src/routes/login/Login.scss b/src/routes/login/Login.scss @@ -6,7 +6,6 @@ * This source code is licensed under the MIT license found in the * LICENSE.txt file in the root directory of this source tree. */ - @import '../../components/variables.scss'; .root { @@ -17,5 +16,142 @@ .container { margin: 0 auto; padding: 0 0 40px; - max-width: $max-content-width; + max-width: 380px; +} + +.lead { + font-size: 1.25em; +} + +.formGroup { + margin-bottom: 15px; +} + +.label { + display: inline-block; + margin-bottom: 5px; + max-width: 100%; + font-weight: 700; +} + +.input { + display: block; + box-sizing: border-box; + padding: 10px 16px; + width: 100%; + height: 46px; + outline: 0; + border: 1px solid #ccc; + border-radius: 0; + background: #fff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + color: #616161; + font-size: 18px; + line-height: 1.3333333; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + + &:focus { + border-color: #0074c2; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 116, 194, .6); + } +} + +.button { + display: block; + box-sizing: border-box; + margin: 0; + padding: 10px 16px; + width: 100%; + outline: 0; + border: 1px solid #373277; + border-radius: 0; + background: #373277; + color: #fff; + text-align: center; + text-decoration: none; + font-size: 18px; + line-height: 1.3333333; + cursor: pointer; + + &:hover { + background: rgba(54, 50, 119, 0.8); + } + + &:focus { + border-color: #0074c2; + box-shadow: 0 0 8px rgba(0, 116, 194, .6); + } +} + +.facebook { + border-color: #3b5998; + background: #3b5998; + composes: button; + + &:hover { + background: #2d4373; + } +} + +.google { + border-color: #dd4b39; + background: #dd4b39; + composes: button; + + &:hover { + background: #c23321; + } +} + +.twitter { + border-color: #55acee; + background: #55acee; + composes: button; + + &:hover { + background: #2795e9; + } +} + +.icon { + display: inline-block; + margin: -2px 12px -2px 0; + width: 20px; + height: 20px; + vertical-align: middle; + fill: currentColor; +} + +.lineThrough { + position: relative; + z-index: 1; + display: block; + margin-bottom: 15px; + width: 100%; + color: #757575; + text-align: center; + font-size: 80%; + + &:before { + position: absolute; + top: 50%; + left: 50%; + z-index: -1; + margin-top: -5px; + margin-left: -20px; + width: 40px; + height: 10px; + background-color: #fff; + content: ''; + } + + &:after { + position: absolute; + top: 49%; + z-index: -2; + display: block; + width: 100%; + border-bottom: 1px solid #ddd; + content: ''; + } }