| /** |
| * @license |
| * Copyright (C) 2010 The Libphonenumber Authors. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @fileoverview Phone Number Parser Demo. |
| * |
| * @author Nikolaos Trogkanis |
| */ |
| goog.provide('i18n.phonenumbers.demo'); |
| |
| goog.require('goog.dom'); |
| goog.require('goog.json'); |
| goog.require('goog.proto2.ObjectSerializer'); |
| goog.require('goog.string.StringBuffer'); |
| goog.require('i18n.phonenumbers.AsYouTypeFormatter'); |
| goog.require('i18n.phonenumbers.PhoneNumberFormat'); |
| goog.require('i18n.phonenumbers.PhoneNumberType'); |
| goog.require('i18n.phonenumbers.PhoneNumberUtil'); |
| goog.require('i18n.phonenumbers.PhoneNumberUtil.ValidationResult'); |
| goog.require('i18n.phonenumbers.ShortNumberInfo'); |
| |
| |
| /** |
| * @const |
| * @type {!i18n.phonenumbers.PhoneNumberUtil} |
| * @private |
| */ |
| var phoneUtil_ = i18n.phonenumbers.PhoneNumberUtil.getInstance(); |
| |
| function phoneNumberParser() { |
| var $ = goog.dom.getElement; |
| var phoneNumber = $('phoneNumber').value; |
| var regionCode = $('defaultCountry').value.toUpperCase(); |
| var carrierCode = $('carrierCode').value; |
| var output = new goog.string.StringBuffer(); |
| try { |
| var number = phoneUtil_.parseAndKeepRawInput(phoneNumber, regionCode); |
| output.append('****Parsing Result:****\n'); |
| output.append(goog.json.serialize(new goog.proto2.ObjectSerializer( |
| goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number))); |
| output.append('\n\n****Validation Results:****'); |
| var isPossible = phoneUtil_.isPossibleNumber(number); |
| output.append('\nResult from isPossibleNumber(): '); |
| output.append(isPossible); |
| var validationResult = i18n.phonenumbers.PhoneNumberUtil.ValidationResult; |
| var isPossibleReason = phoneUtil_.isPossibleNumberWithReason(number) |
| var hasRegionCode = regionCode && regionCode != 'ZZ'; |
| if (isPossible) { |
| // Checking as isValid() fails if possible local only. |
| if (isPossibleReason == validationResult.IS_POSSIBLE_LOCAL_ONLY) { |
| output.append('\nResult from isPossibleNumberWithReason(): '); |
| output.append('IS_POSSIBLE_LOCAL_ONLY'); |
| output.append( |
| '\nNumber is considered invalid as it is ' + |
| 'not a possible national number.'); |
| } else { |
| var isNumberValid = phoneUtil_.isValidNumber(number); |
| output.append('\nResult from isValidNumber(): '); |
| output.append(isNumberValid); |
| if (isNumberValid && hasRegionCode) { |
| output.append('\nResult from isValidNumberForRegion(): '); |
| output.append(phoneUtil_.isValidNumberForRegion(number, regionCode)); |
| } |
| output.append('\nPhone Number region: '); |
| output.append(phoneUtil_.getRegionCodeForNumber(number)); |
| output.append('\nResult from getNumberType(): '); |
| output.append(getNumberTypeString(number)); |
| } |
| } else { |
| output.append('\nResult from isPossibleNumberWithReason(): '); |
| switch (isPossibleReason) { |
| case validationResult.INVALID_COUNTRY_CODE: |
| output.append('INVALID_COUNTRY_CODE'); |
| break; |
| case validationResult.TOO_SHORT: |
| output.append('TOO_SHORT'); |
| break; |
| case validationResult.TOO_LONG: |
| output.append('TOO_LONG'); |
| break; |
| case validationResult.INVALID_LENGTH: |
| output.append('INVALID_LENGTH'); |
| break; |
| } |
| // IS_POSSIBLE shouldn't happen, since we only call this if _not_ |
| // possible. |
| output.append( |
| '\nNote: Numbers that are not possible have type UNKNOWN,' + |
| ' an unknown region, and are considered invalid.'); |
| } |
| if (!isNumberValid) { |
| var shortInfo = i18n.phonenumbers.ShortNumberInfo.getInstance(); |
| output.append('\n\n****ShortNumberInfo Results:****'); |
| output.append('\nResult from isPossibleShortNumber: '); |
| output.append(shortInfo.isPossibleShortNumber(number)); |
| output.append('\nResult from isValidShortNumber: '); |
| output.append(shortInfo.isValidShortNumber(number)); |
| if (hasRegionCode) { |
| output.append('\nResult from isPossibleShortNumberForRegion: '); |
| output.append( |
| shortInfo.isPossibleShortNumberForRegion(number, regionCode)); |
| output.append('\nResult from isValidShortNumberForRegion: '); |
| output.append( |
| shortInfo.isValidShortNumberForRegion(number, regionCode)); |
| } |
| } |
| |
| var PNF = i18n.phonenumbers.PhoneNumberFormat; |
| output.append('\n\n****Formatting Results:**** '); |
| output.append('\nE164 format: '); |
| output.append( |
| isNumberValid ? phoneUtil_.format(number, PNF.E164) : 'invalid'); |
| output.append('\nOriginal format: '); |
| output.append(phoneUtil_.formatInOriginalFormat(number, regionCode)); |
| output.append('\nNational format: '); |
| output.append(phoneUtil_.format(number, PNF.NATIONAL)); |
| output.append('\nInternational format: '); |
| output.append( |
| isNumberValid ? phoneUtil_.format(number, PNF.INTERNATIONAL) : |
| 'invalid'); |
| output.append('\nOut-of-country format from US: '); |
| output.append( |
| isNumberValid ? |
| phoneUtil_.formatOutOfCountryCallingNumber(number, 'US') : |
| 'invalid'); |
| output.append('\nOut-of-country format from Switzerland: '); |
| output.append( |
| isNumberValid ? |
| phoneUtil_.formatOutOfCountryCallingNumber(number, 'CH') : |
| 'invalid'); |
| if (carrierCode.length > 0) { |
| output.append('\nNational format with carrier code: '); |
| output.append( |
| phoneUtil_.formatNationalNumberWithCarrierCode(number, carrierCode)); |
| } |
| output.append('\n\n****AsYouTypeFormatter Results****'); |
| var formatter = new i18n.phonenumbers.AsYouTypeFormatter(regionCode); |
| var phoneNumberLength = phoneNumber.length; |
| for (var i = 0; i < phoneNumberLength; ++i) { |
| var inputChar = phoneNumber.charAt(i); |
| output.append('\nChar entered: '); |
| output.append(inputChar); |
| output.append(' Output: '); |
| output.append(formatter.inputDigit(inputChar)); |
| } |
| } catch (e) { |
| output.append('\n' + e.toString()); |
| } |
| $('output').value = output.toString(); |
| return false; |
| } |
| |
| function getNumberTypeString(number) { |
| switch (phoneUtil_.getNumberType(number)) { |
| case i18n.phonenumbers.PhoneNumberType.FIXED_LINE: |
| return 'FIXED_LINE'; |
| case i18n.phonenumbers.PhoneNumberType.MOBILE: |
| return 'MOBILE' |
| case i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE: |
| return 'FIXED_LINE_OR_MOBILE'; |
| case i18n.phonenumbers.PhoneNumberType.TOLL_FREE: |
| return 'TOLL_FREE'; |
| case i18n.phonenumbers.PhoneNumberType.PREMIUM_RATE: |
| return 'PREMIUM_RATE'; |
| case i18n.phonenumbers.PhoneNumberType.SHARED_COST: |
| return 'SHARED_COST'; |
| case i18n.phonenumbers.PhoneNumberType.VOIP: |
| return 'VOIP'; |
| case i18n.phonenumbers.PhoneNumberType.PERSONAL_NUMBER: |
| return 'PERSONAL_NUMBER'; |
| case i18n.phonenumbers.PhoneNumberType.PAGER: |
| return 'PAGER'; |
| case i18n.phonenumbers.PhoneNumberType.UAN: |
| return 'UAN'; |
| case i18n.phonenumbers.PhoneNumberType.UNKNOWN: |
| return 'UNKNOWN'; |
| } |
| } |
| |
| goog.exportSymbol('phoneNumberParser', phoneNumberParser); |