friendica-addons/jappixmini/jappix/js/features.js

214 lines
4.6 KiB
JavaScript
Raw Permalink Normal View History

2012-04-17 23:12:24 +00:00
/*
Jappix - An open social platform
This is the server features JS script for Jappix
-------------------------------------------------
License: AGPL
Author: Vanaryon
Last revision: 01/06/11
*/
// Gets the features of a server
function getFeatures() {
/* REF: http://xmpp.org/extensions/xep-0030.html */
// Get the main values
var to = getServer();
var caps = con.server_caps;
var xml = null;
// Try to get the stored data
if(caps)
xml = XMLFromString(getPersistent('caps', caps));
// Any stored data?
if(xml) {
handleFeatures(xml);
logThis('Read server CAPS from cache.');
}
// Not stored (or no CAPS)!
else {
var iq = new JSJaCIQ();
iq.setTo(to);
iq.setType('get');
iq.setQuery(NS_DISCO_INFO);
con.send(iq, handleDiscoInfos);
logThis('Read server CAPS from network.');
}
}
// Handles the features of a server
function handleFeatures(xml) {
// Selector
var selector = $(xml);
// Markers
var pep = false;
var pubsub = false;
var archive = false;
var archive_auto = false;
var archive_manual = false;
var archive_manage = false;
var archive_pref = false;
var commands = false;
// Scan the features
if(selector.find('identity[category=pubsub][type=pep]').size())
pep = true;
if(selector.find('feature[var=' + NS_PUBSUB + ']').size())
pubsub = true;
if(selector.find('feature[var=' + NS_URN_ARCHIVE + ']').size())
archive = true;
if(selector.find('feature[var=' + NS_URN_AR_AUTO + ']').size())
archive_auto = true;
if(selector.find('feature[var=' + NS_URN_AR_MANUAL + ']').size())
archive_manual = true;
if(selector.find('feature[var=' + NS_URN_AR_MANAGE + ']').size())
archive_manage = true;
if(selector.find('feature[var=' + NS_URN_AR_PREF + ']').size())
archive_pref = true;
if(selector.find('feature[var=' + NS_COMMANDS + ']').size())
commands = true;
// Enable the pep elements if available
if(pep) {
// Update our database
enableFeature('pep');
// Get the microblog
getInitMicroblog();
// Get the notifications
getNotifications();
// Geolocate the user
geolocate();
// Enable microblogging send tools
waitMicroblog('sync');
$('.postit.attach').css('display', 'block');
logThis('XMPP server supports PEP.', 3);
}
// Disable microblogging send tools (no PEP!)
else {
waitMicroblog('unsync');
logThis('XMPP server does not support PEP.', 2);
}
// Enable the pubsub features if available
if(pubsub)
enableFeature(NS_PUBSUB);
// Enable the archiving features if available
if(archive)
enableFeature(NS_URN_ARCHIVE);
// Enable the archiving sub-features if available
if(archive_pref)
enableFeature(NS_URN_AR_PREF);
if(archive_auto)
enableFeature(NS_URN_AR_AUTO);
if(archive_manual)
enableFeature(NS_URN_AR_MANUAL);
if(archive_manage)
enableFeature(NS_URN_AR_MANAGE);
// Enable the commands features if available
if(commands)
enableFeature(NS_COMMANDS);
// Hide the private life fieldset if nothing to show
if(!pep && !archive_pref)
$('#options fieldset.privacy').hide();
// Apply the features
applyFeatures('talk');
// Process the buddy-list height
if(pep)
adaptRoster();
return false;
}
// The function to apply the features to an element
function applyFeatures(id) {
// Path to the elements
var path = '#' + id + ' .';
// PEP features
if(enabledPEP())
$(path + 'pep-hidable').show();
// PubSub features
if(enabledPubSub())
$(path + 'pubsub-hidable').show();
// Archives features
if(enabledArchives() || enabledArchives('auto') || enabledArchives('manual') || enabledArchives('manage')) {
$(path + 'archives-hidable:not(.pref)').show();
// Sub-feature: archives preferences
if(enabledArchives('pref'))
$(path + 'archives-hidable.pref').show();
}
// Commands features
if(enabledCommands())
$(path + 'commands-hidable').show();
// XMPP links (browser feature)
if(navigator.registerProtocolHandler)
$(path + 'xmpplinks-hidable').show();
}
// Enables a feature
function enableFeature(feature) {
setDB('feature', feature, 'true');
}
// Checks if a feature is enabled
function enabledFeature(feature) {
if(getDB('feature', feature) == 'true')
return true;
else
return false;
}
// Returns the XMPP server PEP support
function enabledPEP() {
return enabledFeature('pep');
}
// Returns the XMPP server PubSub support
function enabledPubSub() {
return enabledFeature(NS_PUBSUB);
}
// Returns the XMPP server archives support
function enabledArchives(sub) {
var xmlns = NS_URN_ARCHIVE;
// Any sub element sent?
if(sub)
xmlns += ':' + sub;
return enabledFeature(xmlns);
}
// Returns the XMPP server commands support
function enabledCommands() {
return enabledFeature(NS_COMMANDS);
}