Allow multiple external text urls

This commit is contained in:
Bill 2021-09-04 00:33:25 -04:00
parent 49f934b820
commit 612afb8025

View File

@ -9,6 +9,7 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca
private _definitions: Map<string, string>; private _definitions: Map<string, string>;
private _parameters: Map<string, Map<string, string>>; private _parameters: Map<string, Map<string, string>>;
private _romanNumerals: string[]; private _romanNumerals: string[];
private _pendingUrls: string[];
constructor() constructor()
{ {
@ -17,28 +18,55 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca
this._definitions = new Map(); this._definitions = new Map();
this._parameters = new Map(); this._parameters = new Map();
this._romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX', 'XXI', 'XXII', 'XXIII', 'XXIV', 'XXV', 'XXVI', 'XXVII', 'XXVIII', 'XXIX', 'XXX']; this._romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX', 'XXI', 'XXII', 'XXIII', 'XXIV', 'XXV', 'XXVI', 'XXVII', 'XXVIII', 'XXIX', 'XXX'];
this._pendingUrls = [];
} }
protected onInit(): void protected onInit(): void
{ {
this.loadLocalizationFromURL(Nitro.instance.getConfiguration<string>('external.texts.url')); //@ts-ignore
let urls: string[] = Nitro.instance.getConfiguration<string[]>('external.texts.url');
if(!Array.isArray(urls))
{
urls = [ Nitro.instance.getConfiguration<string>('external.texts.url') ];
}
this._pendingUrls = urls;
this.loadNextLocalization();
}
private loadNextLocalization(): void
{
if(!this._pendingUrls.length)
{
this.events && this.events.dispatchEvent(new NitroLocalizationEvent(NitroLocalizationEvent.LOADED));
return;
}
this.loadLocalizationFromURL(this._pendingUrls[0]);
} }
public loadLocalizationFromURL(url: string): void public loadLocalizationFromURL(url: string): void
{ {
fetch(url) fetch(url)
.then(response => response.json()) .then(response => response.json())
.then(data => this.onLocalizationLoaded(data)) .then(data => this.onLocalizationLoaded(data, url))
.catch(err => this.onLocalizationFailed(err)); .catch(err => this.onLocalizationFailed(err));
} }
private onLocalizationLoaded(data: { [index: string]: any }): void private onLocalizationLoaded(data: { [index: string]: any }, url: string): void
{ {
if(!data) return; if(!data) return;
this.parseLocalization(data); if(!this.parseLocalization(data)) return;
this.events && this.events.dispatchEvent(new NitroLocalizationEvent(NitroLocalizationEvent.LOADED)); const index = this._pendingUrls.indexOf(url);
if(index >= 0) this._pendingUrls.splice(index, 1);
this.loadNextLocalization();
} }
private onLocalizationFailed(error: Error): void private onLocalizationFailed(error: Error): void
@ -46,11 +74,13 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca
this.events && this.events.dispatchEvent(new NitroLocalizationEvent(NitroLocalizationEvent.FAILED)); this.events && this.events.dispatchEvent(new NitroLocalizationEvent(NitroLocalizationEvent.FAILED));
} }
private parseLocalization(data: { [index: string]: any }): void private parseLocalization(data: { [index: string]: any }): boolean
{ {
if(!data) return; if(!data) return false;
for(const key in data) this._definitions.set(key, data[key]); for(const key in data) this._definitions.set(key, data[key]);
return true;
} }
public getRomanNumeral(number: number): string public getRomanNumeral(number: number): string