/* global pwsL10n:true */ (function($){ var password = 'Gosh, WordPress is grand.', $input = $('#pass'), shouldAnimate = true, timesForAnimation = [280, 300, 305, 310, 315, 325, 330, 345, 360, 370, 380, 400, 450, 500, 600], resultsCache = {}, indicatorString = $('#pass-strength-result').text(); function updateResult(){ var strength; if ( typeof( resultsCache[ $input.val() ]) === 'undefined') { strength = wp.passwordStrength.meter($input.val(), [], $input.val()); resultsCache[ $input.val() ] = strength; } else { strength = resultsCache[ $input.val() ]; } $('#pass-strength-result').removeClass('short bad good strong'); switch ( strength ) { case 2: $('#pass-strength-result').addClass('bad').html( pwsL10n.bad ); break; case 3: $('#pass-strength-result').addClass('good').html( pwsL10n.good ); break; case 4: $('#pass-strength-result').addClass('strong').html( pwsL10n.strong ); break; default: $('#pass-strength-result').addClass('short').html( pwsL10n['short'] ); } } function resetMeter(){ $input.val(''); $('#pass-strength-result').text(indicatorString); $('#pass-strength-result').removeClass('short bad good strong'); } function animate(){ if (shouldAnimate === false) return; if ($input.val().length < password.length){ $input.val( password.substr(0, $input.val().length + 1) ); updateResult(); // Look like real typing by changing the speed new letters are added each time setTimeout( animate, ( timesForAnimation[ Math.floor( Math.random() * timesForAnimation.length ) ] ) ); } else { resetMeter(); // When we reset, let's wait a bit longer than normal to start again setTimeout(animate, 700); } } function begin(){ // we async load zxcvbn, so we need to make sure it's loaded before starting if (typeof(zxcvbn) !== 'undefined') animate(); else setTimeout(begin,800); } // Turn off the animation on focus $input.on('focus', function(){ shouldAnimate = false; resetMeter(); }); // Act like a normal password strength meter $input.on('keyup', function(){ updateResult(); }); // Start the animation begin(); })(jQuery);