ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
3 lines • 3.13 kB
JavaScript
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){switch(locale){
// !loadLocaleData
case"dummy":console.log("Should never happen"),callback()}}module.exports=function(ilib){var WebpackLoader=function(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 filename,tzName,dir=Path.dirname(pathname),base=Path.basename(pathname,"json"),dataName=base,locale=void 0;if(dir){var locpath=/(^|\/)([a-z][a-z][a-z]?(\/[A-Z][a-z][a-z][a-z])?(\/[A-Z][A-Z](\/[A-Z]+)?)?)$/.exec(dir);locpath&&(locale=new Locale(locpath[2].replace(/\//g,"-")))}filename=locale&&locale.getSpec()||("ilibmanifest"===base?"localmanifest":"root");dataName=base;dir&&(locale?dataName+="_"+filename:"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,"_");var data=this.getData(dataName,tzName);data?"function"==typeof cb&&cb(data):alreadyLoaded.has(filename)?"function"==typeof cb&&cb():(console.log("WebpackLoader._loadFile: loading "+pathname+(sync?" sync":" async")+" as "+filename+".js"),alreadyLoaded.add(filename),loadLocaleData(this.ilib,filename,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)};