1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00
jappix_ynh/source/app/javascripts/errors.js
2014-11-25 23:42:38 +01:00

210 lines
No EOL
5.3 KiB
JavaScript

/*
Jappix - An open social platform
These are the error functions for Jappix
-------------------------------------------------
License: AGPL
Author: Valérian Saliou
*/
// Bundle
var Errors = (function () {
/**
* Alias of this
* @private
*/
var self = {};
/**
* Shows the given error output
* @public
* @param {string} condition
* @param {string} reason
* @param {string} type
* @return {undefined}
*/
self.show = function(condition, reason, type) {
try {
// Enough data to output the error
if(condition || reason) {
// Initialize the error text
var eText = '';
// Any error condition
if(condition) {
eText += condition;
}
// Any error type
if(type && eText) {
eText += ' (' + type + ')';
}
// Any error reason
if(reason) {
if(eText) {
eText += ' - ';
}
eText += reason;
}
// We reveal the error
Board.openThisError(1);
// Create the error text
$('#board .one-board.error[data-id="1"] span').text(eText);
}
// Not enough data to output the error: output a generic board
else {
Board.openThisError(2);
}
} catch(e) {
Console.error('Errors.show', e);
}
};
/**
* Handles the error from a packet and return true if any error
* @public
* @param {object} packet
* @return {boolean}
*/
self.handle = function(packet) {
/* REF: http://xmpp.org/extensions/xep-0086.html */
try {
// Initialize
var type, code, reason, condition;
var node = $(packet);
// First level error (connection error)
if(node.is('error')) {
// Get the value
code = node.attr('code');
// Specific error reason
switch(code) {
case '401':
reason = Common._e("Authorization failed");
break;
case '409':
reason = Common._e("Registration failed, please choose a different username");
break;
case '503':
reason = Common._e("Service unavailable");
break;
case '500':
reason = Common._e("Internal server error, try later");
break;
default:
reason = node.find('text').text();
break;
}
// Remove the general wait item (security)
Interface.removeGeneralWait();
// Show reconnect pane
if(Connection.current_session && Connection.connected) {
// Anonymous?
if(Utils.isAnonymous()) {
Connection.createReconnect('anonymous');
} else {
Connection.createReconnect('normal');
}
}
// Show the homepage (security)
else if(!Connection.current_session || !Connection.connected) {
$('#home').show();
Interface.title('home');
}
// Still connected? (security)
if(Common.isConnected()) {
con.disconnect();
}
Console.error('First level error received.');
}
// Second level error (another error)
else if(node.find('error').size()) {
type = node.find('error').attr('type');
reason = node.find('error text').text();
condition = packet.getElementsByTagName('error').item(0).childNodes.item(0).nodeName.replace(/-/g, ' ');
Console.error('Second level error received.');
} else {
return false;
}
// Show the error board
self.show(condition, reason, type);
// Return there's an error
return true;
} catch(e) {
Console.error('Errors.handle', e);
}
};
/**
* Handles the error reply of a packet
* @public
* @param {object} packet
* @return {boolean}
*/
self.handleReply = function(packet) {
try {
return self.handle(packet.getNode());
} catch(e) {
Console.error('Errors.handleReply', e);
}
};
/**
* Handles the error reply for a message
* @public
* @param {object} packet
* @return {boolean}
*/
self.handleMessage = function(packet) {
try {
if(!self.handleReply(packet)) {
Message.handle(packet);
}
} catch(e) {
Console.error('Errors.handleMessage', e);
}
};
/**
* Return class scope
*/
return self;
})();