@@ -16,6 +16,15 @@ jQuery(function ($) {
1616 * @type {boolean }
1717 */
1818 const isLivePreview = window . location . search . includes ( 'env=preview' ) ;
19+ const emailRegex = / ^ [ \w \- \. \+ ] + \@ [ a - z A - Z 0 - 9 \. \- ] + \. [ a - z A - z 0 - 9 ] { 2 , 4 } $ / ;
20+
21+ var showNewsletterError = function ( $input , message ) {
22+ var $wrap = $input . closest ( '.vz-option-input' ) ;
23+ $wrap . next ( '.vz-field-error' ) . remove ( ) ;
24+ if ( message ) {
25+ $wrap . after ( '<span class="vz-field-error">' + message + '</span>' ) ;
26+ }
27+ } ;
1928
2029 /**
2130 * Redirect to draft page after subscribe (optional).
@@ -304,21 +313,20 @@ jQuery(function ($) {
304313 } ;
305314 var emailElement = $ ( "#vz_subscribe_email" ) ;
306315 // Remove error message.
307- emailElement . next ( ".vz-field-error" ) . remove ( ) ;
316+ showNewsletterError ( emailElement , '' ) ;
308317 var newsletterEnabled = $ ( "#enable_newsletter" ) . is ( ":checked" ) ;
309318
310319 if ( withSubscribe && newsletterEnabled ) {
311- var subscribeEmail = emailElement . val ( ) ;
312- var EmailTest = / ^ [ \w \- \. \+ ] + \@ [ a - z A - Z 0 - 9 \. \- ] + \. [ a - z A - z 0 - 9 ] { 2 , 4 } $ / ;
320+ var subscribeEmail = emailElement . val ( ) . trim ( ) ;
313321 var errorMessage = "" ;
314322
315323 if ( "" === subscribeEmail ) {
316324 errorMessage = visualizerSetupWizardData . errorMessages . requiredEmail ;
317- } else if ( ! EmailTest . test ( subscribeEmail ) ) {
325+ } else if ( ! emailRegex . test ( subscribeEmail ) ) {
318326 errorMessage = visualizerSetupWizardData . errorMessages . invalidEmail ;
319327 }
320328 if ( "" !== errorMessage ) {
321- $ ( '<span class="vz-field-error">' + errorMessage + "</span>" ) . insertAfter ( emailElement ) ;
329+ showNewsletterError ( emailElement , errorMessage ) ;
322330 return false ;
323331 }
324332
@@ -354,6 +362,7 @@ jQuery(function ($) {
354362 var $inputWrap = $card . find ( '.vz-option-input' ) ;
355363 $inputWrap . show ( ) ;
356364 $card . find ( '#vz_subscribe_email' ) . focus ( ) ;
365+ validateNewsletterEmail ( ) ;
357366 } ) ;
358367
359368 var finalizeNewsletterEmail = function ( $card ) {
@@ -367,7 +376,37 @@ jQuery(function ($) {
367376 } ;
368377
369378 $ ( document ) . on ( 'click' , '.vz-save-email' , function ( ) {
370- finalizeNewsletterEmail ( $ ( this ) . closest ( '.vz-option-card--newsletter' ) ) ;
379+ var $card = $ ( this ) . closest ( '.vz-option-card--newsletter' ) ;
380+ if ( ! validateNewsletterEmail ( ) ) {
381+ return ;
382+ }
383+ finalizeNewsletterEmail ( $card ) ;
384+ } ) ;
385+
386+ var validateNewsletterEmail = function ( ) {
387+ var $input = $ ( "#vz_subscribe_email" ) ;
388+ if ( ! $input . length ) {
389+ return true ;
390+ }
391+ var $card = $input . closest ( '.vz-option-card--newsletter' ) ;
392+ var $saveButton = $card . find ( '.vz-save-email' ) ;
393+ var email = $input . val ( ) . trim ( ) ;
394+ showNewsletterError ( $input , '' ) ;
395+ if ( ! email ) {
396+ $saveButton . prop ( 'disabled' , false ) ;
397+ return true ;
398+ }
399+ if ( ! emailRegex . test ( email ) ) {
400+ showNewsletterError ( $input , visualizerSetupWizardData . errorMessages . invalidEmail ) ;
401+ $saveButton . prop ( 'disabled' , true ) ;
402+ return false ;
403+ }
404+ $saveButton . prop ( 'disabled' , false ) ;
405+ return true ;
406+ } ;
407+
408+ $ ( document ) . on ( 'input blur' , '#vz_subscribe_email' , function ( ) {
409+ validateNewsletterEmail ( ) ;
371410 } ) ;
372411
373412 // Click to copy.
@@ -380,6 +419,9 @@ jQuery(function ($) {
380419 $ ( "#step-1" ) . on ( "change" , "input:radio" , function ( ) {
381420 $ ( "#step-1" ) . find ( '[data-step_number="1"]' ) . removeClass ( "disabled" ) ;
382421 } ) ;
422+ if ( $ ( '#step-1 .vz-radio-btn:checked' ) . length ) {
423+ $ ( '#step-1' ) . find ( '[data-step_number="1"]' ) . removeClass ( 'disabled' ) ;
424+ }
383425
384426 // Change button text.
385427 $ ( document ) . on ( "change" , "#insert_shortcode" , function ( ) {
0 commit comments