From 7b33220fa3a128e2bdda1c8d82239a7174927931 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 1 Nov 2017 21:03:36 +0000 Subject: [PATCH] Customize: Strip zero padding when setting month to prevent de-selection; add zero-padding for `number` input fields when blurring. Amends [42042]. See #42373. Fixes #42392. git-svn-id: https://develop.svn.wordpress.org/trunk@42104 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/customize-controls.js | 30 +++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/js/customize-controls.js b/src/wp-admin/js/customize-controls.js index a51fb02e10..7fb87bc88e 100644 --- a/src/wp-admin/js/customize-controls.js +++ b/src/wp-admin/js/customize-controls.js @@ -5577,6 +5577,13 @@ control.notifications.remove( 'invalid_date' ); } } ) ); + + // Add zero-padding when blurring field. + input.on( 'blur', _.debounce( function() { + if ( ! control.invalidDate ) { + control.populateDateInputs(); + } + } ) ); } ); control.inputElements.month.bind( control.updateDaysForMonth ); @@ -5822,8 +5829,27 @@ } _.each( control.inputElements, function( element, component ) { - if ( 'meridian' === component || parseInt( parsed[ component ], 10 ) !== parseInt( element(), 10 ) ) { - element.set( parsed[ component ] ); + var value = parsed[ component ]; // This will be zero-padded string. + + // Set month and meridian regardless of focused state since they are dropdowns. + if ( 'month' === component || 'meridian' === component ) { + + // Options in dropdowns are not zero-padded. + value = value.replace( /^0/, '' ); + + element.set( value ); + } else { + + value = parseInt( value, 10 ); + if ( ! element.element.is( document.activeElement ) ) { + + // Populate element with zero-padded value if not focused. + element.set( parsed[ component ] ); + } else if ( value !== parseInt( element(), 10 ) ) { + + // Forcibly update the value if its underlying value changed, regardless of zero-padding. + element.set( String( value ) ); + } } } );