From 0217951e44ef20c68f2a42c4f1deb2c0279efcf9 Mon Sep 17 00:00:00 2001 From: Mark Jaquith Date: Wed, 29 Jul 2015 03:27:25 +0000 Subject: [PATCH] Re-work user-profile.js so the password meter works in IE8 and password managers can fill multiple times. props adamsilverstein fixes #32886 Built from https://develop.svn.wordpress.org/trunk@33473 git-svn-id: http://core.svn.wordpress.org/trunk@33440 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/js/user-profile.js | 34 ++++++++++++++++++++------------- wp-admin/js/user-profile.min.js | 2 +- wp-includes/version.php | 2 +- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/wp-admin/js/user-profile.js b/wp-admin/js/user-profile.js index de87bb945f..4f78fbf068 100644 --- a/wp-admin/js/user-profile.js +++ b/wp-admin/js/user-profile.js @@ -13,21 +13,23 @@ $weakCheckbox, $submitButtons, - $submitButton; + $submitButton, + currentPass; function generatePassword() { if ( typeof zxcvbn !== 'function' ) { - setTimeout( generatePassword, 50 ); + setTimeout( generatePassword, 50 ); } else { - $pass1.val( $pass1.data( 'pw' ) ); - $pass1.trigger( 'propertychange' ); - $pass1Wrap.addClass( 'show-password' ); + $pass1.val( $pass1.data( 'pw' ) ); + $pass1.trigger( 'pwupdate' ); + $pass1Wrap.addClass( 'show-password' ); } } function bindPass1() { var passStrength = $('#pass-strength-result')[0]; - var currentPass = $pass1.val(); + + currentPass = $pass1.val(); $pass1Wrap = $pass1.parent(); @@ -40,8 +42,13 @@ .addClass( $pass1[0].className ) .data( 'pw', $pass1.data( 'pw' ) ) .val( $pass1.val() ) - .on( 'input', function () { - $pass1.val( $pass1Text.val() ).trigger( 'propertychange' ); + .on( 'input propertychange', function () { + if ( $pass1Text.val() === currentPass ) { + return; + } + $pass2.val( $pass1Text.val() ); + $pass1.val( $pass1Text.val() ).trigger( 'pwupdate' ); + currentPass = $pass1Text.val(); } ); $pass1.after( $pass1Text ); @@ -50,7 +57,7 @@ generatePassword(); } - $pass1.on( 'input propertychange', function () { + $pass1.on( 'input propertychange pwupdate', function () { if ( $pass1.val() === currentPass ) { return; } @@ -149,12 +156,14 @@ * Fix a LastPass mismatch issue, LastPass only changes pass2. * * This fixes the issue by copying any changes from the hidden - * pass2 field to the pass1 field. + * pass2 field to the pass1 field, then running check_pass_strength. */ $pass2 = $('#pass2').on( 'input propertychange', function () { if ( $pass2.val().length > 0 ) { $pass1.val( $pass2.val() ); - $pass1.trigger( 'propertychange' ); + $pass2.val(''); + currentPass = ''; + $pass1.trigger( 'pwupdate' ); } } ); @@ -228,8 +237,7 @@ var $colorpicker, $stylesheet, user_id, current_user_id, select = $( '#display_name' ); - $('#pass1').val('').on( 'input propertychange', check_pass_strength ); - $('#pass2').val('').on( 'input propertychange', check_pass_strength ); + $('#pass1').val('').on( 'input propertychange pwupdate', check_pass_strength ); $('#pass-strength-result').show(); $('.color-palette').click( function() { $(this).siblings('input[name="admin_color"]').prop('checked', true); diff --git a/wp-admin/js/user-profile.min.js b/wp-admin/js/user-profile.min.js index f9f59855fb..b4da63a1cf 100644 --- a/wp-admin/js/user-profile.min.js +++ b/wp-admin/js/user-profile.min.js @@ -1 +1 @@ -!function(a){function b(){"function"!=typeof zxcvbn?setTimeout(b,50):(i.val(i.data("pw")),i.trigger("propertychange"),h.addClass("show-password"))}function c(){var c=a("#pass-strength-result")[0],d=i.val();h=i.parent(),j=a('').attr({id:"pass1-text",name:"pass1-text",autocomplete:"off"}).addClass(i[0].className).data("pw",i.data("pw")).val(i.val()).on("input",function(){i.val(j.val()).trigger("propertychange")}),i.after(j),1===parseInt(i.data("reveal"),10)&&b(),i.on("input propertychange",function(){i.val()!==d&&(d=i.val(),j.val(d),i.add(j).removeClass("short bad good strong"),c.className&&(i.add(j).addClass(c.className),"short"===c.className||"bad"===c.className?(m.prop("checked")||n.prop("disabled",!0),l.show()):(n.prop("disabled",!1),l.hide())))})}function d(){var a=g.find(".wp-hide-pw");a.show().on("click",function(){1===parseInt(a.data("toggle"),10)?(h.addClass("show-password"),a.data("toggle",0).attr({"aria-label":userProfileL10n.ariaHide}).find(".text").text(userProfileL10n.hide).end().find(".dashicons").removeClass("dashicons-visibility").addClass("dashicons-hidden"),j.focus(),_.isUndefined(j[0].setSelectionRange)||j[0].setSelectionRange(0,100)):(h.removeClass("show-password"),a.data("toggle",1).attr({"aria-label":userProfileL10n.ariaShow}).find(".text").text(userProfileL10n.show).end().find(".dashicons").removeClass("dashicons-hidden").addClass("dashicons-visibility"),i.focus(),_.isUndefined(i[0].setSelectionRange)||i[0].setSelectionRange(0,100))})}function e(){var e,f,q;g=a(".user-pass1-wrap"),a(".user-pass2-wrap").hide(),o=a("#submit").on("click",function(){p=!1}),n=o.add(" #createusersub"),l=a(".pw-weak"),m=l.find(".pw-checkbox"),m.change(function(){n.prop("disabled",!m.prop("checked"))}),i=a("#pass1"),i.length&&c(),k=a("#pass2").on("input propertychange",function(){k.val().length>0&&(i.val(k.val()),i.trigger("propertychange"))}),e=g.find(".wp-pwd").hide(),d(),f=g.find("button.wp-generate-pw").show(),f.on("click",function(){p=!0,f.hide(),e.show(),b(),_.defer(function(){j.focus(),_.isUndefined(j[0].setSelectionRange)||j[0].setSelectionRange(0,100)},0)}),q=g.find("button.wp-cancel-pw"),q.on("click",function(){p=!1,f.show(),e.hide()}),g.closest("form").on("submit",function(){p=!1,k.val(i.val()),h.removeClass("show-password")})}function f(){var b,c=a("#pass1").val(),d=a("#pass2").val();if(a("#pass-strength-result").removeClass("short bad good strong"),!c)return void a("#pass-strength-result").html(" ");switch(b=wp.passwordStrength.meter(c,wp.passwordStrength.userInputBlacklist(),d)){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n["short"])}}var g,h,i,j,k,l,m,n,o,p=!1;a(document).ready(function(){var b,c,d,g,h=a("#display_name");a("#pass1").val("").on("input propertychange",f),a("#pass2").val("").on("input propertychange",f),a("#pass-strength-result").show(),a(".color-palette").click(function(){a(this).siblings('input[name="admin_color"]').prop("checked",!0)}),h.length&&a("#first_name, #last_name, #nickname").bind("blur.user_profile",function(){var b=[],c={display_nickname:a("#nickname").val()||"",display_username:a("#user_login").val()||"",display_firstname:a("#first_name").val()||"",display_lastname:a("#last_name").val()||""};c.display_firstname&&c.display_lastname&&(c.display_firstlast=c.display_firstname+" "+c.display_lastname,c.display_lastfirst=c.display_lastname+" "+c.display_firstname),a.each(a("option",h),function(a,c){b.push(c.value)}),a.each(c,function(d,e){if(e){var f=e.replace(/<\/?[a-z][^>]*>/gi,"");c[d].length&&-1===a.inArray(f,b)&&(b.push(f),a("