@@ -755,6 +755,7 @@ function renderRegisterPage() {
755755}
756756
757757const registerAvailability = { email : null , username : null } ;
758+ const registerFocus = { email : false , username : false } ;
758759let registerAvailabilityTimer = null ;
759760
760761function setFieldStatus ( field , state , message ) {
@@ -771,13 +772,25 @@ function setFieldStatus(field, state, message) {
771772 } else {
772773 statusEl . innerHTML = '' ;
773774 }
775+ const showText = registerFocus [ field ] && ( state === 'ok' || state === 'taken' ) ;
774776 if ( hintEl ) {
775- hintEl . textContent = message || '' ;
776- hintEl . className = `field-hint ${ state === 'ok' || state === 'taken' ? state : '' } ` ;
777+ hintEl . textContent = showText ? message : '' ;
778+ hintEl . className = `field-hint ${ showText ? state : '' } ` ;
777779 }
778780 if ( state === 'taken' || state === 'ok' ) initIcons ( ) ;
779781}
780782
783+ function renderStoredStatus ( field ) {
784+ const availability = registerAvailability [ field ] ;
785+ if ( availability === true ) {
786+ setFieldStatus ( field , 'ok' , 'Available' ) ;
787+ } else if ( availability === false ) {
788+ setFieldStatus ( field , 'taken' , field === 'email' ? 'This email is already taken' : 'This username is already taken' ) ;
789+ } else {
790+ setFieldStatus ( field , '' ) ;
791+ }
792+ }
793+
781794function setupRegisterAvailabilityChecks ( ) {
782795 const emailInput = $ ( '#reg-email' ) ;
783796 const usernameInput = $ ( '#reg-username' ) ;
@@ -813,14 +826,12 @@ function setupRegisterAvailabilityChecks() {
813826 if ( username && validateRegUsername ( username ) ) params . set ( 'username' , username ) ;
814827 const data = await api ( `/auth/check-availability?${ params . toString ( ) } ` ) ;
815828 if ( email && validateRegEmail ( email ) ) {
816- const available = data . email ?. available ;
817- registerAvailability . email = available ;
818- setFieldStatus ( 'email' , available ? 'ok' : 'taken' , available ? 'Available' : 'This email is already taken' ) ;
829+ registerAvailability . email = ! ! data . email ?. available ;
830+ renderStoredStatus ( 'email' ) ;
819831 }
820832 if ( username && validateRegUsername ( username ) ) {
821- const available = data . username ?. available ;
822- registerAvailability . username = available ;
823- setFieldStatus ( 'username' , available ? 'ok' : 'taken' , available ? 'Available' : 'This username is already taken' ) ;
833+ registerAvailability . username = ! ! data . username ?. available ;
834+ renderStoredStatus ( 'username' ) ;
824835 }
825836 } catch {
826837 setFieldStatus ( 'email' , '' ) ;
@@ -833,10 +844,22 @@ function setupRegisterAvailabilityChecks() {
833844 registerAvailabilityTimer = setTimeout ( runCheck , 400 ) ;
834845 } ;
835846
847+ const onFocus = ( field ) => {
848+ registerFocus [ field ] = true ;
849+ renderStoredStatus ( field ) ;
850+ } ;
851+
852+ const onBlur = ( field ) => {
853+ registerFocus [ field ] = false ;
854+ renderStoredStatus ( field ) ;
855+ } ;
856+
836857 emailInput . addEventListener ( 'input' , onInput ) ;
837858 usernameInput . addEventListener ( 'input' , onInput ) ;
838- emailInput . addEventListener ( 'blur' , runCheck ) ;
839- usernameInput . addEventListener ( 'blur' , runCheck ) ;
859+ emailInput . addEventListener ( 'focus' , ( ) => onFocus ( 'email' ) ) ;
860+ emailInput . addEventListener ( 'blur' , ( ) => onBlur ( 'email' ) ) ;
861+ usernameInput . addEventListener ( 'focus' , ( ) => onFocus ( 'username' ) ) ;
862+ usernameInput . addEventListener ( 'blur' , ( ) => onBlur ( 'username' ) ) ;
840863}
841864
842865function validateRegEmail ( email ) {
0 commit comments