hedera-web/web/js/hedera/app.js

223 lines
3.9 KiB
JavaScript
Raw Normal View History

Vn.App = new Class
({
2015-11-09 08:14:33 +00:00
Extends: Vn.Object
,initialize: function ()
{
2015-12-10 13:48:43 +00:00
window.onerror = this._onWindowError.bind (this);
window.onunload = this._onWindowUnload.bind (this);
Vn.Hash.initialize ();
2015-12-10 13:48:43 +00:00
this._isGuest = new Vn.HashParam
({
type: Boolean,
key: 'guest'
});
this._isGuest.on ('changed', this._onGuestChange, this);
var conn = new Db.Conn ();
this.link ({_conn: conn}, {'error': this._onConnError});
}
,run: function ()
{
var guest = Vn.Cookie.check ('hedera_guest');
if (guest)
Vn.Cookie.unset ('hedera_guest');
if (Vn.Cookie.check ('vn_pass'))
{
2015-12-10 13:48:43 +00:00
this._conn.open (null, null, null,
this._onAutoLogin.bind (this));
}
else if (this._isGuest.value || guest)
2015-12-10 13:48:43 +00:00
{
this._guestLogin ();
}
else
{
2015-12-10 13:48:43 +00:00
var login = this._login = new Vn.Login ({conn: this._conn});
login.on ('login', this._onLogin, this);
login.show ();
}
}
2015-12-10 13:48:43 +00:00
,_onGuestChange: function ()
{
if (this._isGuest.value)
this._guestLogin ();
}
,_guestLogin: function ()
{
this._conn.open (
null,
null,
null,
this._onGuestLogin.bind (this),
true
);
}
,_onGuestLogin: function (conn, success)
{
this._isGuest.value = undefined;
if (success)
2015-12-10 13:48:43 +00:00
{
Vn.Cookie.set ('hedera_guest', true);
2015-12-10 23:24:14 +00:00
this._onLogin ();
2015-12-10 13:48:43 +00:00
}
else
this.run ();
2015-12-10 13:48:43 +00:00
}
,_onAutoLogin: function (success)
{
if (!success)
{
Vn.Cookie.unset ('vn_pass');
this.run ();
}
else
2015-12-10 23:24:14 +00:00
this._onLogin ();
}
2015-12-10 13:48:43 +00:00
,_onLogin: function ()
{
2015-12-10 13:48:43 +00:00
this._freeLogin ();
2015-12-10 23:24:14 +00:00
2015-12-10 13:48:43 +00:00
var gui = this._gui = new Vn.Gui ({conn: this._conn});
gui.on ('logout', this._onLogout, this);
gui.show ();
}
2015-12-10 13:48:43 +00:00
,_onLogout: function (gui)
{
2015-12-10 13:48:43 +00:00
this._freeGui ();
Vn.Cookie.unset ('hedera_guest');
Vn.Cookie.unset ('vn_pass');
this.run ();
}
2015-12-10 13:48:43 +00:00
,_onWindowError: function (message, file, line)
{
var error = new Error (message);
error.fileName = file;
error.lineNumber = line;
2015-12-10 13:48:43 +00:00
this._notifyError (error);
}
2015-12-10 13:48:43 +00:00
,_onWindowUnload: function ()
{
this.unref ();
}
,_onConnError: function (conn, error)
{
if (error instanceof Vn.Error)
switch (error.domain)
{
case 'Auth':
if (error.code === 'badLogin')
Htk.Toast.showError (_('Invalid login'));
else if (error.code === 'sessionExpired')
Htk.Toast.showError (_('You\'ve been too idle'));
if (this._gui)
this._gui.logout ();
break;
case 'Version':
this._newVersion (error);
break;
case 'User':
Htk.Toast.showError (error.message);
break;
default:
console.error (error.message);
Htk.Toast.showError (_('There was an internal error'));
}
else
{
console.error (error);
this._notifyError (error);
}
}
,_newVersion: function (error)
{
if (this.newVersionBlock || this.skipVersion)
return;
this.newVersionBlock = true;
var reload;
var message = _('New version available') +"\n\n"+ error.message;
if (error.code == 'criticalVersion')
{
alert (message)
reload = true;
}
else
{
reload = confirm (message);
this.skipVersion = true;
}
if (reload)
location.reload ();
this.newVersionBlock = false;
}
2015-12-10 13:48:43 +00:00
,_notifyError: function (error)
{
Htk.Toast.showError (_('There was an internal error'));
var params = {
'file': error.fileName
,'line': error.lineNumber
,'message': error.message
,'stack': error.stack
};
var request = new XMLHttpRequest ();
request.open ('post', 'log.php', true);
request.setRequestHeader ('Content-Type',
'application/x-www-form-urlencoded');
request.send (Vn.Url.makeUri (params));
}
2015-12-10 13:48:43 +00:00
,_freeLogin: function ()
{
if (this._login)
{
this._login.disconnectByInstance (this);
this._login.hide ();
this._login.unref ();
this._login = null;
}
}
,_freeGui: function ()
{
if (this._gui)
{
this._gui.disconnectByInstance (this);
this._gui.hide ();
this._gui.unref ();
this._gui = null;
}
}
,_destroy: function ()
{
2015-12-10 13:48:43 +00:00
this._freeLogin ();
this._freeGui ();
this._conn.unref ();
}
});