From 664e619bb61679462587470dd6bb4ccf4e4755c8 Mon Sep 17 00:00:00 2001 From: Shane Tomlinson <stomlinson@mozilla.com> Date: Thu, 26 Jul 2012 13:03:44 +0100 Subject: [PATCH] Cleanup on the signin page. * Slide the password fields down whenever they are shown. * Add slideUp/slideDown, fadeIn/fadeOut to dom-jquery.js --- resources/static/common/css/style.css | 6 +++ resources/static/common/js/lib/dom-jquery.js | 40 ++++++++++++++++++++ resources/static/dialog/css/style.css | 1 - resources/static/pages/css/style.css | 12 ++++-- resources/static/pages/js/signin.js | 37 +++++++++--------- resources/views/signin.ejs | 31 +++++++-------- 6 files changed, 87 insertions(+), 40 deletions(-) diff --git a/resources/static/common/css/style.css b/resources/static/common/css/style.css index ab5a2a960..cd2760e4c 100644 --- a/resources/static/common/css/style.css +++ b/resources/static/common/css/style.css @@ -61,7 +61,9 @@ strong { } .hidden { + /* This funkiness is so that labels still appear for screen readers */ visibility: hidden; + display: block; height: 0; } @@ -139,6 +141,10 @@ input[type=password]:disabled { border-color: #b2b2b2; } +label { + display: block; +} + label + input[type=text], label + input[type=password], label + input[type=email] { diff --git a/resources/static/common/js/lib/dom-jquery.js b/resources/static/common/js/lib/dom-jquery.js index 0faeb1ccc..e4cd8be64 100644 --- a/resources/static/common/js/lib/dom-jquery.js +++ b/resources/static/common/js/lib/dom-jquery.js @@ -328,6 +328,46 @@ BrowserID.DOM = ( function() { */ hide: function( elementToHide ) { return jQuery( elementToHide ).hide(); + }, + + /** + * Slide an element down + * @method slideDown + * @param {selector || element} elementToSlide + * @param {number} [animationTime] + */ + slideDown: function( elementToSlide, animationTime ) { + return jQuery( elementToSlide ).slideDown( animationTime || 250 ); + }, + + /** + * Slide an element up + * @method slideUp + * @param {selector || element} elementToSlide + * @param {number} [animationTime] + */ + slideUp: function( elementToSlide, animationTime ) { + return jQuery( elementToSlide ).slideUp( animationTime ); + }, + + /** + * Fade an element in + * @method fadeIn + * @param {selector || element} elementToFade + * @param {number} [animationTime] + */ + fadeIn: function( elementToFade, animationTime ) { + return jQuery( elementToFade ).fadeIn( animationTime ); + }, + + /** + * Fade an element out + * @method fadeOut + * @param {selector || element} elementToFade + * @param {number} [animationTime] + */ + fadeOut: function( elementToFade, animationTime ) { + return jQuery( elementToFade ).fadeOut( animationTime ); } }; diff --git a/resources/static/dialog/css/style.css b/resources/static/dialog/css/style.css index 9543dd9df..73ac003f8 100644 --- a/resources/static/dialog/css/style.css +++ b/resources/static/dialog/css/style.css @@ -104,7 +104,6 @@ footer { } label { - display: block; text-shadow: 1px 1px 0 rgba(255,255,255,0.5); } diff --git a/resources/static/pages/css/style.css b/resources/static/pages/css/style.css index b3e7e543e..4c617136e 100644 --- a/resources/static/pages/css/style.css +++ b/resources/static/pages/css/style.css @@ -454,20 +454,24 @@ button.delete:active { } #signUpForm li { - margin: 0 0 10px; + margin: 10px 0 0; padding: 0; } +#signUpForm li:first-child { + margin: 0; +} + #signUpForm > .siteinfo { margin-bottom: 10px; } -.siteinfo, #congrats, .password_entry, .vpassword_entry, #verify_password, .enter_password .hint, .verify_primary .forminputs, .known_secondary .start, .unknown_secondary .start, .unknown_secondary .forgot { +.siteinfo, #congrats, .password_entry, .vpassword_entry, .verify_primary, .known_secondary .start, .unknown_secondary .start, .primary .start, .unknown_secondary .forgot { display: none; } -.enter_verify_password #verify_password, .known_secondary .password_entry, .unknown_secondary .vpassword_entry, .verify_primary #verify_primary { - display: block; +label.vpassword_entry { + margin-top: 15px; } .submit > p { diff --git a/resources/static/pages/js/signin.js b/resources/static/pages/js/signin.js index ecabbb961..1ac3037c7 100644 --- a/resources/static/pages/js/signin.js +++ b/resources/static/pages/js/signin.js @@ -1,4 +1,4 @@ -/*globals BrowserID:true, $:true*/ +/*globals BrowserID:true, gettext:true */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -39,7 +39,7 @@ BrowserID.signIn = (function() { }, pageHelpers.getFailure(errors.authenticateWithAssertion, callback)); } else { - $("#primary_no_login").fadeIn(250); + dom.fadeIn("#primary_no_login", 250); setTimeout(complete.curry(callback), 250); } }, pageHelpers.getFailure(errors.provisioningPrimary, callback)); @@ -59,20 +59,20 @@ BrowserID.signIn = (function() { if (info.type === "secondary") { // A secondary user has to either sign in or sign up depending on the // status of their email address. - var className = "unknown_secondary", - submit = signUpSubmit, - title = gettext("Sign Up"); - - if (info.known) { - className = "known_secondary"; - submit = signInSubmit; - title = gettext("Sign In"); + var bodyClassName = "known_secondary", + showClassName = "password_entry", + submit = signInSubmit; + + if (!info.known) { + bodyClassName = "unknown_secondary"; + showClassName = "vpassword_entry"; + submit = signUpSubmit; } - dom.addClass("body", className); - dom.focus("#password"); - dom.setInner("#title", title); + dom.addClass("body", bodyClassName); + dom.slideDown("." + showClassName); self.submit = submit; + dom.focus("#password"); complete(oncomplete); } @@ -85,6 +85,7 @@ BrowserID.signIn = (function() { // primary user who is not authenticated with primary, must auth with // primary and then authenticate them to BrowserID. dom.addClass("body", "verify_primary"); + dom.slideDown("#verify_primary"); dom.setInner("#primary_email", email); self.submit = authWithPrimary; @@ -105,12 +106,11 @@ BrowserID.signIn = (function() { password = helpers.getAndValidatePassword("#password"); if (email && password) { - user.authenticate(email, password, function onSuccess(authenticated) { + user.authenticate(email, password, function(authenticated) { if (authenticated) { userAuthenticated(); } else { - // bad authentication tooltip.showTooltip("#cannot_authenticate"); } complete(oncomplete); @@ -169,9 +169,10 @@ BrowserID.signIn = (function() { // this is basically a state reset. var email = dom.getInner("#email"); if(email !== lastEmail) { - dom.removeClass("body", "verify_primary"); + dom.removeClass("body", "primary"); dom.removeClass("body", "known_secondary"); dom.removeClass("body", "unknown_secondary"); + dom.slideUp(".password_entry, .vpassword_entry, .verify_primary"); this.submit = emailSubmit; lastEmail = email; } @@ -190,10 +191,6 @@ BrowserID.signIn = (function() { self.bind("#email", "change", onEmailChange); self.bind("#email", "keyup", onEmailChange); - // a redirect to the signup page using the link needs to clear the stored - // email address or else the user may be redirected here. - self.bind(".redirect", "click", pageHelpers.clearStoredEmail); - sc.start.call(self, options); // If there is an email already set up in pageHelpers.setupEmail, see if diff --git a/resources/views/signin.ejs b/resources/views/signin.ejs index 5a1b04f28..64112c241 100644 --- a/resources/views/signin.ejs +++ b/resources/views/signin.ejs @@ -6,7 +6,7 @@ <div id="vAlign"> <!-- XXX this form submits to nowhere --> <form id="signUpForm" class="cf authform" novalidate> - <h1 id="title"><%- gettext('Sign In') %></h1> + <h1><%- gettext('Sign In') %></h1> <ul class="notifications"> <li class="notification emailsent"> @@ -43,7 +43,8 @@ <li class="password_entry vpassword_entry"> <a class="forgot right" href="/forgot"><%- gettext('forgot your password?') %></a> - <label for="password"><%- gettext('Password') %></label> + <label for="password" class="password_entry"><%- gettext('Password') %></label> + <label for="password" class="vpassword_entry"><%- gettext('Your email address is new to us. Please create a password to use with Persona.') %></label> <input id="password" placeholder="<%- gettext('password') %>" type="password" maxlength="80"> <div id="password_required" class="tooltip" for="password"> @@ -61,7 +62,7 @@ </li> <li class="vpassword_entry"> - <label for="vpassword"><%- gettext('Verify Password') %></label> + <label for="vpassword" class="hidden"><%- gettext('Verify Password') %></label> <input id="vpassword" placeholder="<%- gettext('verify password') %>" type="password" maxlength="80"> <div id="password_required" class="tooltip" for="vpassword"> @@ -84,7 +85,9 @@ </div> <div class="submit cf forminputs vpassword_entry"> - <button id="verifyEmail"><%- gettext('Verify Email') %></button> + <p class="cf"> + <button id="verifyEmail"><%- gettext('Verify Email') %></button> + </p> <p class="tospp cf"> <%- format( @@ -97,18 +100,16 @@ </div> - <ul class="notifications"> - <li class="notification" id="verify_primary"> - <p> - <%- format(gettext('To verify that you own <strong %(emailId)>this address</strong>, you must sign in with your provider. A new window will be opened.'), - { emailId: 'id="primary_email"' }) %> - </p> + <div class="submit cf forminputs verify_primary"> + <p> + <%- format(gettext('To verify that you own <strong %(emailId)>this address</strong>, you must sign in with your provider. A new window will be opened.'), + { emailId: 'id="primary_email"' }) %> + </p> - <p class="submit"> - <button id="authWithPrimary"><%- gettext('Verify') %></button> - </p> - </li> - </ul> + <p class="submit"> + <button id="authWithPrimary"><%- gettext('Verify') %></button> + </p> + </div> </form> </div> </div> -- GitLab