UNPKG

ilib

Version:

iLib is a cross-engine library of internationalization (i18n) classes written in pure JS

2 lines 4.05 kB
// !data name var ilib=require("../index.js"),Utils=require("./Utils.js"),Locale=require("./Locale.js"),IString=require("./IString.js"),Name=require("./Name.js"),isPunct=require("./isPunct.js"),NameFmt=function(options){var sync=!0;switch(this.style="short",this.loadParams={},options&&(options.locale&&(this.locale="string"==typeof options.locale?new Locale(options.locale):options.locale),options.style&&(this.style=options.style),options.components&&(this.components=options.components),void 0!==options.sync&&(sync=!!options.sync),void 0!==options.loadParams)&&(this.loadParams=options.loadParams),this.defaultEuroTemplate=new IString("{prefix} {givenName} {middleName} {familyName}{suffix}"),this.defaultAsianTemplate=new IString("{prefix}{familyName}{givenName}{middleName}{suffix}"),this.useFirstFamilyName=!1,this.style){default:case"s":case"short":this.style="short";break;case"m":case"medium":this.style="medium";break;case"l":case"long":this.style="long";break;case"f":case"full":this.style="full";break;case"fs":case"formal_short":this.style="formal_short";break;case"fl":case"formal_long":this.style="formal_long";break;case"fam":case"familiar":this.style="familiar"}this.locale=this.locale||new Locale(),isPunct._init(sync,this.loadParams,ilib.bind(this,function(){Utils.loadData({object:"Name",locale:this.locale,name:"name.json",sync:sync,loadParams:this.loadParams,callback:ilib.bind(this,function(info){this.info=info||Name.defaultInfo,this._init(),options&&"function"==typeof options.onLoad&&options.onLoad(this)})})}))};NameFmt.prototype={_init:function(){if(this.comps={},this.components){var valids={p:1,g:1,m:1,f:1,s:1,h:1},arr=this.components.split("");this.comps={};for(var i=0;i<arr.length;i++)valids[arr[i].toLowerCase()]&&(this.comps[arr[i].toLowerCase()]=!0)}else{var comps=this.info.components[this.style];"string"==typeof comps?comps.split("").forEach(ilib.bind(this,function(c){this.comps[c]=!0})):this.comps=comps}this.template=new IString(this.info.format),"es"===this.locale.language&&"long"!==this.style&&"full"!==this.style&&(this.useFirstFamilyName=!0),this.isAsianLocale="asian"===this.info.nameStyle},_adjoinAuxillaries:function(parts,namePrefix){var start,i,prefixArray;if(this.info.auxillaries&&(2<parts.length||namePrefix))for(start=0;start<parts.length-1;start++)for(i=parts.length;start<i;i--)(prefixArray=parts.slice(start,i)).join(" ").toLowerCase().replace(/[,\.]/g,"")in this.info.auxillaries&&(parts.splice(start,i+1-start,prefixArray.concat(parts[i])),i=start);return parts},getLocale:function(){return this.locale},getStyle:function(){return this.style},getComponents:function(){return this.components},format:function(name){var familyNameParts,isAsianName,modified,currentLanguage=this.locale.getLanguage();if(name&&"object"==typeof name)return"boolean"==typeof(name=name instanceof Name?name:new Name(name,{locale:this.locale})).isAsianName&&!name.isAsianName||Name._isEuroName([name.givenName,name.middleName,name.familyName].join(""),currentLanguage)?(isAsianName=!1,(modified=name.clone()).suffix&&!1===isPunct(modified.suffix.charAt(0))&&(modified.suffix=" "+modified.suffix),this.useFirstFamilyName&&name.familyName&&(1<(familyNameParts=modified.familyName.trim().split(" ")).length&&(familyNameParts=this._adjoinAuxillaries(familyNameParts,name.prefix)),modified.familyName=familyNameParts[0]),modified._joinNameArrays()):(isAsianName=!0,modified=name),familyNameParts=this.template&&isAsianName===this.isAsianLocale?this.template:isAsianName?this.defaultAsianTemplate:this.defaultEuroTemplate,modified.honorific&&("fg"!==this.order&&!isAsianName||"ko"===currentLanguage?modified.prefix||(modified.prefix=modified.honorific):modified.suffix||(modified.suffix=modified.honorific)),name={prefix:this.comps.p&&modified.prefix||"",givenName:this.comps.g&&modified.givenName||"",middleName:this.comps.m&&modified.middleName||"",familyName:this.comps.f&&modified.familyName||"",suffix:this.comps.s&&modified.suffix||""},familyNameParts.format(name).replace(/\s+/g," ").trim()}},module.exports=NameFmt;