blob: 50f6791464a06dd76a306ef29cba3c1bbb1d5cc8 (
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
37
38
39
40
41
42
43
44
45
46
47
|
/**
* Internal dependencies
*/
export function renderPhone( inputText ) {
const arrayOfNumbers = inputText.match( /\d+\.\d+|\d+\b|\d+(?=\w)/g );
if ( ! arrayOfNumbers ) {
// No numbers found
return inputText;
}
const indexOfFirstNumber = inputText.indexOf( arrayOfNumbers[ 0 ] );
// Assume that eveything after the first number should be part of the phone number.
// care about the first prefix character.
let phoneNumber = indexOfFirstNumber ? inputText.substring( indexOfFirstNumber - 1 ) : inputText;
let prefix = indexOfFirstNumber ? inputText.substring( 0, indexOfFirstNumber ) : '';
let justNumber = phoneNumber.replace( /\D/g, '' );
// Phone numbers starting with + should be part of the number.
if ( /[0-9/+/(]/.test( phoneNumber[ 0 ] ) ) {
// Remove the special character from the prefix so they don't appear twice.
prefix = prefix.slice( 0, -1 );
// Phone numbers starting with + shoud be part of the number.
if ( phoneNumber[ 0 ] === '+' ) {
justNumber = '+' + justNumber;
}
} else {
// Remove the first character.
phoneNumber = phoneNumber.substring( 1 );
}
const prefixSpan = prefix.trim() ? (
<span key="phonePrefix" className="phone-prefix">
{ prefix }
</span>
) : null;
return [
prefixSpan,
<a key="phoneNumber" href={ `tel:${ justNumber }` }>
{ phoneNumber }
</a>,
];
}
const save = ( { attributes: { phone }, className } ) =>
phone && <div className={ className }>{ renderPhone( phone ) }</div>;
export default save;
|