Bug Tracker

Changeset 5836

Show
Ignore:
Timestamp:
08/20/08 12:12:12 (11 months ago)
Author:
joern.zaefferer
Message:

validate.password: much improved password strength meter, better integration with validation plugin

Location:
trunk/plugins/validate.password
Files:
1 added
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/plugins/validate.password/demo/index.html

    r5832 r5836  
    66 
    77<link rel="stylesheet" type="text/css" media="screen" href="milk.css" /> 
     8<link rel="stylesheet" type="text/css" media="screen" href="../jquery.validate.password.css" /> 
    89 
    910<script type="text/javascript" src="../../validate/lib/jquery.js"></script> 
    1011<script type="text/javascript" src="../../validate/jquery.validate.js"></script> 
    1112<script type="text/javascript" src="../jquery.validate.password.js"></script> 
    12  
    13 <style type="text/css"> 
    14 .password-meter { 
    15     position:relative; 
    16     top: 20px; 
    17     background: #e0e0e0; 
    18     width: 180px; 
    19 } 
    20 .password-meter-bar { 
    21     height: 4px; 
    22 } 
    23 .password-meter-weak { 
    24     background: red; 
    25     width: 20px; 
    26 } 
    27 .password-meter-good { 
    28     background: blue; 
    29     width: 140px; 
    30 } 
    31 .password-meter-strong { 
    32     background: green; 
    33     width: 180px; 
    34 } 
    35  
    36 </style> 
    3713 
    3814<script id="demo" type="text/javascript"> 
     
    4622            }, 
    4723            password: { 
    48                 required: true, 
    49                 password: true 
     24                password: "#username" 
    5025            }, 
    5126            password_confirm: { 
     
    5934                minlength: jQuery.format("Enter at least {0} characters") 
    6035            }, 
    61             password: { 
    62                 required: "Provide a password", 
    63                 rangelength: jQuery.format("Enter at least {0} characters") 
    64             }, 
    6536            password_confirm: { 
    6637                required: "Repeat your password", 
     
    7142        // the errorPlacement has to take the table layout into account 
    7243        errorPlacement: function(error, element) { 
    73             error.appendTo( element.parent().next() ); 
     44            error.prependTo( element.parent().next() ); 
    7445        }, 
    7546        // specifying a submitHandler prevents the default submit, good for the demo 
     
    130101                <td class="status"> 
    131102                    <div class="password-meter"> 
    132                         <div class="password-meter-bar"></div> 
     103                        <div class="password-meter-message">&nbsp;</div> 
     104                        <div class="password-meter-bg"> 
     105                            <div class="password-meter-bar"></div> 
     106                        </div> 
    133107                    </div> 
    134108                </td> 
  • trunk/plugins/validate.password/jquery.validate.password.js

    r5832 r5836  
    4141     
    4242    $.validator.passwordRating.messages = { 
     43        "similar-to-username": "Too similar to username", 
    4344        "too-short": "Too short", 
    44         "very-weak": "Weak", 
    45         "weak": "Fair", 
     45        "very-weak": "Very weak", 
     46        "weak": "Weak", 
    4647        "good": "Good", 
    4748        "strong": "Strong" 
     
    5657        var rating = $.validator.passwordRating(password, username.val()); 
    5758        // update message for this field 
    58         $.extend(this.settings.messages[element.name] || (this.settings.messages[element.name] = {}), { 
    59             password: $.validator.passwordRating.messages[rating.messageKey] 
    60         }) 
    61         $(".password-meter-bar").removeClass().addClass("password-meter-bar").addClass("password-meter-" + rating.messageKey); 
     59         
     60        var meter = $(".password-meter", element.form); 
     61         
     62        meter.find(".password-meter-bar").removeClass().addClass("password-meter-bar").addClass("password-meter-" + rating.messageKey); 
     63        meter.find(".password-meter-message") 
     64        .removeClass() 
     65        .addClass("password-meter-message") 
     66        .addClass("password-meter-message-" + rating.messageKey) 
     67        .text($.validator.passwordRating.messages[rating.messageKey]); 
    6268        // display process bar instead of error message 
    6369         
    6470        return rating.rate > 2; 
    65     }, ""); 
     71    }, "&nbsp;"); 
    6672    // manually add class rule, to make username param optional 
    6773    $.validator.classRuleSettings.password = { password: true }; 
  • trunk/plugins/validate.password/test/index.html

    r5834 r5836  
    44    <link rel="Stylesheet" media="screen" href="qunit/testsuite.css" /> 
    55    <script type="text/javascript" src="../../validate/lib/jquery.js"></script> 
    6     <script type="text/javascript" src="../lib/ui.core.js"></script> 
    7     <script type="text/javascript" src="../lib/ui.progressbar.js"></script> 
    86    <script type="text/javascript" src="qunit/testrunner.js"></script> 
    97    <script type="text/javascript" src="../../validate/jquery.validate.js"></script> 
     
    2422        <form id="form"> 
    2523            <input id="username" name="username" value="Peter" /> 
    26             <input class="required password" name="password" id="password" /> 
     24            <input class="password" name="password" id="password" /> 
     25            <div class="password-meter"> 
     26                <div class="password-meter-message">&nbsp;</div> 
     27                <div class="password-meter-bg"> 
     28                    <div class="password-meter-bar"></div> 
     29                </div> 
     30            </div> 
    2731        </form> 
    2832    </div> 
  • trunk/plugins/validate.password/test/strength-meter.js

    r5834 r5836  
    66function check(messageKey) { 
    77    input.valid(); 
    8     if (!messageKey) { 
    9         equals( input.next(":visible").text(), $.validator.messages.required ); 
    10     } else { 
    11         equals( input.next(":visible").text(), messages[messageKey] ); 
    12     } 
     8    equals( $("#form .password-meter-message").text(), messages[messageKey] ); 
    139} 
    1410 
     
    1814     
    1915    input = $("#password"); 
    20     check(); 
     16    check("too-short"); 
    2117     
    2218    input.val("a"); 
    2319    check("too-short"); 
    24      
    25     input.val(""); 
    26     check(); 
    2720     
    2821    input.val("abc123@po"); 
     
    3730        rules: { 
    3831            password: { 
    39                 required: true, 
    4032                password: "#username" 
    4133            } 
     
    4335    }); 
    4436     
    45     check(); 
     37    check("too-short"); 
    4638     
    4739    input.val("peterpeter");