]> git.mxchange.org Git - friendica-addons.git/blobdiff - jappixmini/jappix/js/features.js
jappixmini: include jappix source
[friendica-addons.git] / jappixmini / jappix / js / features.js
diff --git a/jappixmini/jappix/js/features.js b/jappixmini/jappix/js/features.js
new file mode 100644 (file)
index 0000000..4944be0
--- /dev/null
@@ -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);
+}