summaryrefslogtreecommitdiff
blob: e0eb0204d154512540cc1a0df36ee7a574655c2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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;