diff options
Diffstat (limited to 'plugins/jetpack/extensions/blocks/contact-info/email/save.js')
-rw-r--r-- | plugins/jetpack/extensions/blocks/contact-info/email/save.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/plugins/jetpack/extensions/blocks/contact-info/email/save.js b/plugins/jetpack/extensions/blocks/contact-info/email/save.js new file mode 100644 index 00000000..e0eb0204 --- /dev/null +++ b/plugins/jetpack/extensions/blocks/contact-info/email/save.js @@ -0,0 +1,36 @@ +/** + * External dependencies + */ +import emailValidator from 'email-validator'; +import { Fragment } from '@wordpress/element'; + +const renderEmail = inputText => { + const explodedInput = inputText.split( /(\s+)/ ).map( ( email, i ) => { + // Remove and punctuation from the end of the email address. + const emailToValidate = email.replace( /([.,/#!$%^&*;:{}=\-_`~()\][])+$/g, '' ); + if ( email.indexOf( '@' ) && emailValidator.validate( emailToValidate ) ) { + return email === emailToValidate ? ( + // Email. + <a href={ `mailto:${ email }` } key={ i }> + { email } + </a> + ) : ( + // Email with punctionation. + <Fragment key={ i }> + <a href={ `mailto:${ email }` } key={ i }> + { emailToValidate } + </a> + <Fragment>{ email.slice( -( email.length - emailToValidate.length ) ) }</Fragment> + </Fragment> + ); + } + // Just a plain string. + return <Fragment key={ i }>{ email }</Fragment>; + } ); + return explodedInput; +}; + +const save = ( { attributes: { email }, className } ) => + email && <div className={ className }>{ renderEmail( email ) }</div>; + +export default save; |