ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 7.98 kB
JavaScript
var PhoneHandler=function(){return this},CSStateHandler=(PhoneHandler.prototype={processSubscriberNumber:function(number,fields,regionSettings){var last=number.search(/[xwtp,;]/i);-1<last?(0<last&&(fields.subscriberNumber=number.substring(0,last)),fields.extension=number.substring(last).replace("x","")):number.length&&(fields.subscriberNumber=number),regionSettings.plan.getFieldLength("maxLocalLength")&&fields.subscriberNumber&&fields.subscriberNumber.length>regionSettings.plan.getFieldLength("maxLocalLength")&&(fields.invalid=!0)},processFieldWithSubscriberNumber:function(fieldName,length,number,currentChar,fields,regionSettings,noExtractTrunk){var end;return void 0!==length&&0<length?(end=length,"0"===regionSettings.plan.getTrunkCode()&&"0"===number.charAt(0)&&(end+=regionSettings.plan.getTrunkCode().length)):end=currentChar+1-length,void 0!==fields[fieldName]?this.processSubscriberNumber(number,fields,regionSettings):(fields[fieldName]=number.substring(0,end),number.length>end&&this.processSubscriberNumber(number.substring(end),fields,regionSettings)),{number:""}},processField:function(fieldName,length,number,currentChar,fields,regionSettings){var end,ret={};return void 0!==length&&0<length?(end=length,"0"===regionSettings.plan.getTrunkCode()&&"0"===number.charAt(0)&&(end+=regionSettings.plan.getTrunkCode().length)):end=currentChar+1-length,void 0!==fields[fieldName]?(this.processSubscriberNumber(number,fields,regionSettings),ret.number=""):(fields[fieldName]=number.substring(0,end),ret.number=number.length>end?number.substring(end):""),ret},trunk:function(number,currentChar,fields,regionSettings){return{number:number=void 0!==fields.trunkAccess?(this.processSubscriberNumber(number,fields,regionSettings),""):(regionSettings=regionSettings.plan.getTrunkCode().length,fields.trunkAccess=number.substring(0,regionSettings),number.length>regionSettings?number.substring(regionSettings):"")}},plus:function(number,currentChar,fields,regionSettings){var ret={};return void 0!==fields.iddPrefix?(this.processSubscriberNumber(number,fields,regionSettings),ret.number=""):(fields.iddPrefix=number.substring(0,1),ret={number:number.substring(1),table:"idd"}),ret},idd:function(number,currentChar,fields,regionSettings){var ret={};return void 0!==fields.iddPrefix?(this.processSubscriberNumber(number,fields,regionSettings),ret.number=""):(fields.iddPrefix=number.substring(0,currentChar+1),ret={number:number.substring(currentChar+1),table:"idd"}),ret},country:function(number,currentChar,fields,regionSettings){return fields.countryCode=number.substring(0,currentChar+1),fields=fields.countryCode.replace(/[wWpPtT\+#\*]/g,""),{number:number.substring(currentChar+1),countryCode:fields}},cic:function(number,currentChar,fields,regionSettings){return this.processField("cic",regionSettings.plan.getFieldLength("cic"),number,currentChar,fields,regionSettings)},service:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("serviceCode"),number,currentChar,fields,regionSettings,!1)},area:function(number,currentChar,fields,regionSettings){var end,last=number.search(/[xwtp]/i),last=-1<last?last:number.length;return 0<regionSettings.plan.getFieldLength("areaCode")?(end=regionSettings.plan.getFieldLength("areaCode"),regionSettings.plan.getTrunkCode()===number.charAt(0)&&(end+=regionSettings.plan.getTrunkCode().length,last-=regionSettings.plan.getTrunkCode().length)):end=currentChar+1-regionSettings.plan.getFieldLength("areaCode"),void 0===regionSettings.plan.getFieldLength("maxLocalLength")||void 0!==fields.trunkAccess||void 0!==fields.mobilePrefix||void 0!==fields.countryCode||last>regionSettings.plan.getFieldLength("maxLocalLength")?(fields.areaCode=number.substring(0,end),number.length>end&&this.processSubscriberNumber(number.substring(end),fields,regionSettings)):this.processSubscriberNumber(number,fields,regionSettings),void 0!==regionSettings.plan.getFindExtensions()&&void 0!==fields.subscriberNumber&&-1<(currentChar=fields.subscriberNumber.indexOf("-"))&&(fields.subscriberNumber=fields.subscriberNumber.substring(0,currentChar),fields.extension=fields.subscriberNumber.substring(currentChar+1)),{number:""}},none:function(number,currentChar,fields,regionSettings){return 0<number.length&&(this.processSubscriberNumber(number,fields,regionSettings),0<currentChar)&¤tChar<number.length&&(fields.invalid=!0),{number:""}},vsc:function(number,currentChar,fields,regionSettings){var length;return{number:number=void 0===fields.vsc?(length=regionSettings.plan.getFieldLength("vsc")||0,fields.vsc=number.substring(0,currentChar=0<length?length:currentChar+1-length),number.length>currentChar?"^"+number.substring(currentChar):""):(this.processSubscriberNumber(number,fields,regionSettings),"")}},cell:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("mobilePrefix",regionSettings.plan.getFieldLength("mobilePrefix"),number,currentChar,fields,regionSettings,!1)},personal:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("personal"),number,currentChar,fields,regionSettings,!1)},emergency:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("emergency",regionSettings.plan.getFieldLength("emergency"),number,currentChar,fields,regionSettings,!0)},premium:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("premium"),number,currentChar,fields,regionSettings,!1)},special:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("special"),number,currentChar,fields,regionSettings,!1)},service2:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("service2"),number,currentChar,fields,regionSettings,!1)},service3:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("service3"),number,currentChar,fields,regionSettings,!1)},service4:function(number,currentChar,fields,regionSettings){return this.processFieldWithSubscriberNumber("serviceCode",regionSettings.plan.getFieldLength("service4"),number,currentChar,fields,regionSettings,!1)},cic2:function(number,currentChar,fields,regionSettings){return this.processField("cic",regionSettings.plan.getFieldLength("cic2"),number,currentChar,fields,regionSettings)},cic3:function(number,currentChar,fields,regionSettings){return this.processField("cic",regionSettings.plan.getFieldLength("cic3"),number,currentChar,fields,regionSettings)},start:function(number,currentChar,fields,regionSettings){return{number:number}},local:function(number,currentChar,fields,regionSettings){return this.processSubscriberNumber(number,fields,regionSettings),{number:""}}},function(){return this}),USStateHandler=(CSStateHandler.prototype=new PhoneHandler(),CSStateHandler.prototype.special=function(number,currentChar,fields,regionSettings){return"0"===number.charAt(0)?(fields.trunkAccess=number.charAt(0),fields.areaCode=number.substring(1,currentChar)):fields.areaCode=number.substring(0,currentChar),this.processSubscriberNumber(number.substring(currentChar),fields,regionSettings),{number:""}},function(){return this}),PhoneHandlerFactory=(USStateHandler.prototype=new PhoneHandler(),USStateHandler.prototype.vsc=function(number,currentChar,fields,regionSettings){return fields.vsc=number,{number:""}},function(locale,plan){return new(void 0!==plan.getContextFree()&&"boolean"==typeof plan.getContextFree()&&!1===plan.getContextFree()?CSStateHandler:"US"!==(locale&&locale.getRegion()||"ZZ")?PhoneHandler:USStateHandler)});module.exports=PhoneHandlerFactory;