X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=jappixmini%2Fjappix%2Fjs%2Ffeatures.js;fp=jappixmini%2Fjappix%2Fjs%2Ffeatures.js;h=4944be0a215e76de80c9d81f8e699fa5b914a56e;hb=302b2820d104de9f597804da175eccbb7c9c98b1;hp=0000000000000000000000000000000000000000;hpb=61eb1f0d187f639b623b478381973ef93d14f90d;p=friendica-addons.git diff --git a/jappixmini/jappix/js/features.js b/jappixmini/jappix/js/features.js new file mode 100644 index 00000000..4944be0a --- /dev/null +++ b/jappixmini/jappix/js/features.js @@ -0,0 +1,213 @@ +/* + +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); +}