97 lines
1.7 KiB
JavaScript
97 lines
1.7 KiB
JavaScript
|
|
Vn.Module = new Class
|
|
({
|
|
basePath: null
|
|
,path: null
|
|
,moduleName: null
|
|
,callbacks: []
|
|
,localeReady: false
|
|
,jsReady: false
|
|
,uiReady: false
|
|
,error: false
|
|
,ready: false
|
|
|
|
,initialize: function (basePath, path)
|
|
{
|
|
var absPath = basePath +'/'+ path;
|
|
|
|
var aux = path.split ('/');
|
|
var moduleName = aux[aux.length - 1];
|
|
|
|
Vn.Locale.load (absPath,
|
|
this.onLocaleReady.bind (this));
|
|
Vn.includeJs (absPath +'/'+ moduleName +'.js',
|
|
this.onJsReady.bind (this));
|
|
Vn.loadXml (absPath +'/ui.xml',
|
|
this.onUiReady.bind (this));
|
|
|
|
this.basePath = basePath;
|
|
this.path = path;
|
|
this.moduleName = moduleName;
|
|
}
|
|
|
|
,addCallback: function (callback)
|
|
{
|
|
if (!this.ready)
|
|
this.callbacks.push (callback);
|
|
else
|
|
callback (this);
|
|
}
|
|
|
|
,onLocaleReady: function (success)
|
|
{
|
|
this.localeReady = true;
|
|
this.onReady ();
|
|
}
|
|
|
|
,onJsReady: function (success)
|
|
{
|
|
this.jsReady = true;
|
|
this.error = !success;
|
|
this.onReady ();
|
|
}
|
|
|
|
,onUiReady: function (success)
|
|
{
|
|
this.uiReady = true;
|
|
this.error = !success;
|
|
this.onReady ();
|
|
}
|
|
|
|
,onReady: function ()
|
|
{
|
|
if (!(this.localeReady && this.jsReady && this.uiReady))
|
|
return;
|
|
|
|
this.ready = true;
|
|
|
|
var klassName = this.toCamelCase (this.moduleName);
|
|
|
|
try {
|
|
this.klass = Vn[klassName];
|
|
}
|
|
catch (e)
|
|
{
|
|
this.error = true;
|
|
console.error (e);
|
|
}
|
|
|
|
var callbacks = this.callbacks;
|
|
this.callbacks = null;
|
|
|
|
for (var i = 0; i < callbacks.length; i++)
|
|
callbacks[i] (this);
|
|
}
|
|
|
|
,toCamelCase: function (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;
|
|
}
|
|
});
|
|
|