forked from verdnatura/hedera-web
71 lines
1.4 KiB
JavaScript
71 lines
1.4 KiB
JavaScript
|
|
module.exports = new Class({
|
|
basePath: null,
|
|
path: null,
|
|
moduleName: null,
|
|
resolvers: null,
|
|
status: null,
|
|
|
|
initialize(basePath, path) {
|
|
const aux = path.split('/');
|
|
const moduleName = aux[aux.length - 1];
|
|
|
|
this.basePath = basePath;
|
|
this.path = path;
|
|
this.moduleName = moduleName;
|
|
},
|
|
|
|
async load() {
|
|
switch(this.status) {
|
|
case 'ready':
|
|
return;
|
|
case 'loading':
|
|
return new Promise((resolve, reject) => {
|
|
this.resolvers.push(status => {
|
|
if (status == 'error')
|
|
return reject(new Error(`Module could not be loaded`));
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
this.status = 'loading';
|
|
this.resolvers = [];
|
|
const absPath = `${this.basePath}/${this.path}`;
|
|
const requests = [
|
|
Vn.includeJs(`${absPath}/${this.moduleName}.js`),
|
|
Vn.loadXml(`${absPath}/ui.xml`)
|
|
];
|
|
|
|
try {
|
|
await Vn.Locale.load(absPath);
|
|
} catch(err) {
|
|
console.err(err);
|
|
}
|
|
|
|
try {
|
|
await Promise.all(requests);
|
|
const klassName = this.toCamelCase(this.moduleName);
|
|
this.klass = Hedera[klassName];
|
|
this.status = 'ready';
|
|
} catch (err) {
|
|
this.status = 'error';
|
|
console.error(err);
|
|
}
|
|
|
|
for (const resolver of this.resolvers)
|
|
resolver(this.status);
|
|
|
|
this.resolvers = null;
|
|
}
|
|
|
|
,toCamelCase(dashedName) {
|
|
var camelCase = dashedName.charAt(0).toUpperCase();
|
|
camelCase += dashedName.substr(1).replace(/\w-\w/g, function(token) {
|
|
return token.charAt(0) + token.charAt(2).toUpperCase();
|
|
});
|
|
return camelCase;
|
|
}
|
|
});
|
|
|