summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/extensions/blocks/contact-info/phone/save.js')
-rw-r--r--plugins/jetpack/extensions/blocks/contact-info/phone/save.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/plugins/jetpack/extensions/blocks/contact-info/phone/save.js b/plugins/jetpack/extensions/blocks/contact-info/phone/save.js
new file mode 100644
index 00000000..50f67914
--- /dev/null
+++ b/plugins/jetpack/extensions/blocks/contact-info/phone/save.js
@@ -0,0 +1,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;