UNPKG

ilib

Version:

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

1 lines 3.08 kB
var Loader=require("./Loader.js"),Path=require("./Path.js"),Locale=require("./Locale.js"),ISet=require("./ISet.js"),Utils=require("./Utils.js"),JSUtils=require("./JSUtils.js"),alreadyLoaded=new ISet();function loadLocaleData(ilib,locale,callback){"dummy"===locale&&(console.log("Should never happen"),callback())}module.exports=function(ilib){function WebpackLoader(ilib){this.parent.call(this,ilib),this.ilib=ilib,this.manifests={},this.includePath.push("")}return(WebpackLoader.prototype=new Loader).parent=Loader,(WebpackLoader.prototype.constructor=WebpackLoader).prototype.name="WebpackLoader",WebpackLoader.prototype.getData=function(dataName,tzName){return"zoneinfo"===dataName?this.ilib.data.zoneinfo[tzName]:this.ilib.data[dataName]},WebpackLoader.prototype._loadFile=function(pathname,sync,cb){var tzName,locpath,dir=Path.dirname(pathname),base=Path.basename(pathname,"json"),dataName=base,locale=void 0,locale=(locpath=(locale=dir&&(locpath=/(^|\/)([a-z][a-z][a-z]?(\/[A-Z][a-z][a-z][a-z])?(\/[A-Z][A-Z](\/[A-Z]+)?)?)$/.exec(dir))?new Locale(locpath[2].replace(/\//g,"-")):locale)&&locale.getSpec()||("ilibmanifest"===base?"localmanifest":"root"),dataName=base,dir&&(locale?dataName+="_"+locpath:"charset"===dir||"charmaps"===dir?dataName=dir+"_"+base:"zoneinfo/"===dir.substring(0,9)&&(dataName="zoneinfo",tzName=pathname.substring(9).substring(0,-5))),dataName=dataName.replace(/[\.:\(\)\/\\\+\-]/g,"_"),this.getData(dataName,tzName));locale?"function"==typeof cb&&cb(locale):alreadyLoaded.has(locpath)?"function"==typeof cb&&cb():(console.log("WebpackLoader._loadFile: loading "+pathname+(sync?" sync":" async")+" as "+locpath+".js"),alreadyLoaded.add(locpath),loadLocaleData(this.ilib,locpath,function(callback,data){data=data&&"object"==typeof data&&"function"==typeof data.installLocale?this.getData(dataName,tzName):data,callback&&"function"==typeof callback&&callback(data)}.bind(this,cb)))},WebpackLoader.prototype._exists=function(dir,file){return!1},WebpackLoader.prototype._loadLocaleFile=function(path,sync,callback){var base=Path.basename(path,".js");alreadyLoaded.has(base)?callback():(console.log("WebpackLoader._loadLocaleFile: loading "+path+(sync?" sync":" async")),alreadyLoaded.add(base),loadLocaleData(this.ilib,base,function(callback,data){callback(data)}.bind(this,callback)))},WebpackLoader.prototype._ensureManifest=function(locale,dir,callback){this.manifests[dir]?callback(this.manifests[dir]):this._loadLocaleFile(Path.join(dir,"remotemanifest.js"),!1,ilib.bind(this,function(manifest){manifest?(this.manifests[dir]=manifest.files,callback(manifest.files)):callback()}))},WebpackLoader.prototype.ensureLocale=function(locale,dir,callback){this._ensureManifest(locale,dir,ilib.bind(this,function(manifest){var filesToLoad=Utils.getSublocales(locale).map(function(sublocale){return sublocale+".js"}).filter(function(file){return!manifest||-1<Loader.indexOf(manifest,file)});JSUtils.callAll(filesToLoad,ilib.bind(this,function(arr,cb){this._loadLocaleFile(arr[0],!1,cb)}),function(results){callback(results)})}))},new WebpackLoader(ilib)};