/* 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); }