Вход Регистрация
Файл: public_html/tpl/assets/module/lib/libphonenumber/src/utils.js
Строк: 413
<?php
/**
 * Follow instructions here to compile this file:
 * https://code.google.com/p/libphonenumber/source/browse/trunk/javascript/README
 *
 * Once setup, to re-compile:
 * 1) Copy the contents of this file into libphonenumber/javascript/i18n/phonenumbers/demo.js
 * 2) ant -f ~/src/libphonenumber/javascript/build.xml compile-demo
 * 3) Copy demo-compiled.js to build/utils.js
 */

// includes
goog.require('i18n.phonenumbers.AsYouTypeFormatter');
goog.require('i18n.phonenumbers.PhoneNumberFormat');
goog.require('i18n.phonenumbers.PhoneNumberUtil');


// get an example number for the given country code
function getExampleNumber(countryCodenationalnumberType) {
  try {
    var 
phoneUtil i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var 
numberObj phoneUtil.getExampleNumberForType(countryCodenumberType);
    var 
format = (national) ? i18n.phonenumbers.PhoneNumberFormat.NATIONAL i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL;
    return 
phoneUtil.format(numberObjformat);
  } catch (
e) {
    return 
"";
  }
}


// format the given number to the E164 standard
function formatNumberE164(numbercountryCode) {
  try {
    var 
phoneUtil i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var 
numberObj phoneUtil.parseAndKeepRawInput(numbercountryCode);
    return 
phoneUtil.format(numberObji18n.phonenumbers.PhoneNumberFormat.E164);
  } catch (
e) {
    return 
"";
  }
}


// check if given number is valid
function isValidNumber(numbercountryCode) {
  try {
    var 
phoneUtil i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var 
numberObj phoneUtil.parseAndKeepRawInput(numbercountryCode);
    return 
phoneUtil.isValidNumber(numberObj);
  } catch (
e) {
    return 
false;
  }
}


// get more info if the validation has failed e.g. too long/too short
function getValidationError(numbercountryCode) {
  try {
    var 
phoneUtil i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var 
numberObj phoneUtil.parseAndKeepRawInput(numbercountryCode);
    return 
phoneUtil.isPossibleNumberWithReason(numberObj);
  } catch (
e) {
    
//console.log(e);

    // here I convert thrown errors into ValidationResult enums (if possible)
    
if (== i18n.phonenumbers.Error.INVALID_COUNTRY_CODE) {
      return 
i18n.phonenumbers.PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE;
    }
    if (
== i18n.phonenumbers.Error.NOT_A_NUMBER) {
      return 
4;
    }
    if (
== i18n.phonenumbers.Error.TOO_SHORT_AFTER_IDD || == i18n.phonenumbers.Error.TOO_SHORT_NSN) {
      return 
i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT;
    }
    if (
== i18n.phonenumbers.Error.TOO_LONG) {
      return 
i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_LONG;
    }

    
// broken
    
return -99;
  }
}


// format the given number (optionally add any formatting suffix e.g. a hyphen)
function formatNumber(valcountryCodeaddSuffix) {
  try {
    var 
clean val.replace(/D/g"");
    if (
val.substr(01) == "+") {
      
clean "+" clean;
    }
    
// NOTE: we use AsYouTypeFormatter because the default format function can't handle incomplete numbers e.g. "+17024" formats to "+1 7024" as opposed to "+1 702-4"
    
var formatter = new i18n.phonenumbers.AsYouTypeFormatter(countryCode);
    
// if clean is empty, we still need this to be a string otherwise we get errors later
    
var result "",
      
next;
    for (var 
0clean.lengthi++) {
      
// TODO: improve this so don't just pump in every digit every time - we should just cache this formatter object, and just call inputDigit once each time the user enters a new digit
      
next formatter.inputDigit(clean.charAt(i));
      
// if adding this char didn't change the length, or made it smaller (and there's no longer any spaces): that means that formatting failed which means the number was no longer a potentially valid number, so stop!
      
if (result && next.length <= result.length && next.indexOf(" ") == -1) {
        return 
result;
      }
      
result next;
    }
    
// for some reason libphonenumber formats "+44" to "+44 ", but doesn't do the same with "+1"
    
if (result.charAt(result.length 1) == " ") {
      
result result.substr(0result.length 1);
    }
    if (
addSuffix) {
      
// hack to get formatting suffix
      
var test formatter.inputDigit('5');
      
// again the "+44 " problem... (also affects "+45" apparently)
      
if (test.charAt(test.length 1) == " ") {
        
test test.substr(0test.length 1);
      }
      
// if adding a '5' introduces a formatting char - check if the penultimate char is not-a-number
      
var penultimate test.substr(test.length 21);
      
// Note: never use isNaN without parseFloat
      
if (isNaN(parseFloat(penultimate))) {
        
// update the result to the new value (minus that last '5' we just added)
        
result test.substr(0test.length 1);
      }
    }
    return 
result;
  } catch (
e) {
    return 
val;
  }
}


// get the type of the given number e.g. fixed-line/mobile
function getNumberType(numbercountryCode) {
  try {
    var 
phoneUtil i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var 
numberObj phoneUtil.parseAndKeepRawInput(numbercountryCode);
    return 
phoneUtil.getNumberType(numberObj)
  } catch (
e) {
    
// broken
    
return -99;
  }
}


// copied this from i18n.phonenumbers.PhoneNumberType in https://code.google.com/p/libphonenumber/source/browse/trunk/javascript/i18n/phonenumbers/phonenumberutil.js and put the keys in quotes to force closure compiler to preserve the keys
// TODO: there must be a way to just tell closure compiler to preserve the keys on i18n.phonenumbers.PhoneNumberType and just export that
var numberType = {
  
"FIXED_LINE"0,
  
"MOBILE"1,
  
// In some regions (e.g. the USA), it is impossible to distinguish between
  // fixed-line and mobile numbers by looking at the phone number itself.
  
"FIXED_LINE_OR_MOBILE"2,
  
// Freephone lines
  
"TOLL_FREE"3,
  
"PREMIUM_RATE"4,
  
// The cost of this call is shared between the caller and the recipient, and
  // is hence typically less than PREMIUM_RATE calls. See
  // http://en.wikipedia.org/wiki/Shared_Cost_Service for more information.
  
"SHARED_COST"5,
  
// Voice over IP numbers. This includes TSoIP (Telephony Service over IP).
  
"VOIP"6,
  
// A personal number is associated with a particular person, and may be routed
  // to either a MOBILE or FIXED_LINE number. Some more information can be found
  // here: http://en.wikipedia.org/wiki/Personal_Numbers
  
"PERSONAL_NUMBER"7,
  
"PAGER"8,
  
// Used for 'Universal Access Numbers' or 'Company Numbers'. They may be
  // further routed to specific offices, but allow one number to be used for a
  // company.
  
"UAN"9,
  
// Used for 'Voice Mail Access Numbers'.
  
"VOICEMAIL"10,
  
// A phone number is of type UNKNOWN when it does not fit any of the known
  // patterns for a specific region.
  
"UNKNOWN": -1
};


// copied this from i18n.phonenumbers.PhoneNumberUtil.ValidationResult in https://code.google.com/p/libphonenumber/source/browse/trunk/javascript/i18n/phonenumbers/phonenumberutil.js and again put the keys in quotes.
// Also: added NOT_A_NUMBER to match i18n.phonenumbers.Error.NOT_A_NUMBER
var validationError = {
  
"IS_POSSIBLE"0,
  
"INVALID_COUNTRY_CODE"1,
  
"TOO_SHORT"2,
  
"TOO_LONG"3,
  
"NOT_A_NUMBER"4
};


// exports
goog.exportSymbol('intlTelInputUtils', {});
goog.exportSymbol('intlTelInputUtils.formatNumber'formatNumber);
goog.exportSymbol('intlTelInputUtils.formatNumberE164'formatNumberE164);
goog.exportSymbol('intlTelInputUtils.getExampleNumber'getExampleNumber);
goog.exportSymbol('intlTelInputUtils.getNumberType'getNumberType);
goog.exportSymbol('intlTelInputUtils.getValidationError'getValidationError);
goog.exportSymbol('intlTelInputUtils.isValidNumber'isValidNumber);
goog.exportSymbol('intlTelInputUtils.numberType'numberType);
goog.exportSymbol('intlTelInputUtils.validationError'validationError);
?>
Онлайн: 0
Реклама