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/receipts.js
2014-11-25 23:42:38 +01:00

201 lines
No EOL
4.6 KiB
JavaScript

/*
Jappix - An open social platform
These are the receipts JS scripts for Jappix
-------------------------------------------------
License: AGPL
Author: Valérian Saliou
*/
// Bundle
var Receipts = (function () {
/**
* Alias of this
* @private
*/
var self = {};
/**
* Checks if we can send a receipt request
* @public
* @param {string} hash
* @return {boolean}
*/
self.request = function(hash) {
has_support = false;
try {
// Entity have support for receipt?
if($('#' + hash + ' .message-area').attr('data-receipts') == 'true') {
has_support = true;
}
} catch(e) {
Console.error('Receipts.request', e);
} finally {
return has_support;
}
};
/**
* Checks if there is a receipt request
* @public
* @param {object} packet
* @return {boolean}
*/
self.has = function(packet) {
has_receipt = false;
try {
// Any receipt request?
if(packet.getChild('request', NS_URN_RECEIPTS)) {
has_receipt = true;
}
} catch(e) {
Console.error('Receipts.has', e);
} finally {
return has_receipt;
}
};
/**
* Checks if there is a received reply
* @public
* @param {object} packet
* @return {boolean}
*/
self.hasReceived = function(packet) {
has_received = false;
try {
// Any received reply?
if(packet.getChild('received', NS_URN_RECEIPTS)) {
has_received = true;
}
} catch(e) {
Console.error('Receipts.received', e);
} finally {
return has_received;
}
};
/**
* Sends a received notification
* @public
* @param {string} type
* @param {string} to
* @param {string} id
* @return {undefined}
*/
self.sendReceived = function(type, to, id) {
try {
var aMsg = new JSJaCMessage();
aMsg.setTo(to);
aMsg.setID(id);
// Any type?
if(type) {
aMsg.setType(type);
}
// Append the received node
aMsg.appendNode('received', {'xmlns': NS_URN_RECEIPTS, 'id': id});
con.send(aMsg);
Console.log('Sent received to: ' + to);
} catch(e) {
Console.error('Receipts.sendReceived', e);
}
};
/**
* Tells the message has been received
* @public
* @param {string} hash
* @param {string} id
* @return {boolean}
*/
self.messageReceived = function(hash, id) {
try {
// Line selector
var path = $('#' + hash + ' .one-line[data-id="' + id + '"]');
// Add a received marker
path.attr('data-received', 'true')
.removeAttr('data-lost');
// Group selector
var group = path.parent();
// Remove the group marker
if(!group.find('.one-line[data-lost]').size()) {
group.find('b.name').removeClass('talk-images')
.removeAttr('title');
}
} catch(e) {
Console.error('Receipts.messageReceived', e);
} finally {
return false;
}
};
/**
* Checks if the message has been received
* @public
* @param {string} hash
* @param {string} id
* @return {undefined}
*/
self.checkReceived = function(hash, id) {
try {
// Fire a check 10 seconds later
$('#' + hash + ' .one-line[data-id="' + id + '"]').oneTime('10s', function() {
var this_sel = $(this);
// Not received?
if(this_sel.attr('data-received') != 'true') {
// Add a "lost" marker
this_sel.attr('data-lost', 'true');
// Add a warn on the buddy-name
this_sel.parent().find('b.name').addClass('talk-images')
.attr(
'title',
Common._e("Your friend seems not to have received your message(s)!")
);
}
});
} catch(e) {
Console.error('Receipts.checkReceived', e);
}
};
/**
* Return class scope
*/
return self;
})();