diff mod_admin_web/admin_web/www_files/js/main.js @ 288:9233d7ee3c09

mod_admin_web: Initial PoC commit
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 17 Dec 2010 03:34:53 +0100
parents
children a9e69088e678
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_admin_web/admin_web/www_files/js/main.js	Fri Dec 17 03:34:53 2010 +0100
@@ -0,0 +1,136 @@
+var BOSH_SERVICE = 'http://localhost:5280/http-bind/';
+var show_log = false;
+
+Strophe.addNamespace('S2SPUBSUB', 'http://prosody.im/streams/s2s');
+Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub');
+Strophe.addNamespace('CAPS', 'http://jabber.org/protocol/caps');
+
+var localJID = null;
+var connection   = null;
+
+var pubsubHost = null; /* TODO: Replace this inside Lua */
+
+function log(msg) {
+    var entry = $('<div></div>').append(document.createTextNode(msg));
+    $('#log').append(entry);
+}
+
+function rawInput(data) {
+    log('RECV: ' + data);
+}
+
+function rawOutput(data) {
+    log('SENT: ' + data);
+}
+
+function _cbNewS2S(e) {
+    var items, retract, id, jid;
+    items = e.getElementsByTagName('item');
+    for (i = 0; i < items.length; i++) {
+        id = items[i].attributes['id'].value;
+        jid = items[i].getElementsByTagName('session')[0].attributes['jid'].value;
+        if (items[i].getElementsByTagName('out')[0]) {
+            $('#s2sout').append('<li id="' + id + '">' + jid + '</li>');
+        } else {
+            $('#s2sin').append('<li id="' + id + '">' + jid + '</li>');
+        }
+    }
+    retract = e.getElementsByTagName('retract')[0];
+    if (retract) {
+        id = retract.attributes['id'].value;
+        $('#' + id).remove();
+    }
+    return true;
+}
+
+function onConnect(status) {
+    if (status == Strophe.Status.CONNECTING) {
+        log('Strophe is connecting.');
+    } else if (status == Strophe.Status.CONNFAIL) {
+        log('Strophe failed to connect.');
+        showConnect();
+    } else if (status == Strophe.Status.DISCONNECTING) {
+        log('Strophe is disconnecting.');
+    } else if (status == Strophe.Status.DISCONNECTED) {
+        log('Strophe is disconnected.');
+        showConnect();
+    } else if (status == Strophe.Status.AUTHFAIL) {
+        log('Authentication failed');
+        if (connection) {
+            connection.disconnect();
+        }
+    } else if (status == Strophe.Status.CONNECTED) {
+        log('Strophe is connected.');
+        showDisconnect();
+	pubsubHost = 'pubsub.' + connection.domain;
+        connection.send($iq({to: pubsubHost, type: 'set', id: connection.getUniqueId()}).c('pubsub', {xmlns: Strophe.NS.PUBSUB})
+                .c('subscribe', {node: Strophe.NS.S2SPUBSUB, jid: connection.jid}));
+        connection.addHandler(_cbNewS2S, Strophe.NS.PUBSUB + '#event', 'message');
+        connection.sendIQ($iq({to: pubsubHost, type: 'get', id: connection.getUniqueId()}).c('pubsub', {xmlns: Strophe.NS.PUBSUB})
+                .c('items', {node: Strophe.NS.S2SPUBSUB}), _cbNewS2S);
+    }
+}
+
+function showConnect() {
+    var jid = $('#jid');
+    var pass = $('#pass');
+    var button = $('#connect').get(0);
+
+    button.value = 'connect';
+    pass.show();
+    jid.show();
+    $('.container').hide();
+    $('#cred label').show();
+    $('#cred br').show();
+    $('ul').empty();
+}
+
+function showDisconnect() {
+    var jid = $('#jid');
+    var pass = $('#pass');
+    var button = $('#connect').get(0);
+
+    button.value = 'disconnect';
+    pass.hide();
+    jid.hide();
+    $('.container').show();
+    $('#cred label').hide();
+    $('#cred br').hide();
+}
+
+$(document).ready(function () {
+    connection = new Strophe.Connection(BOSH_SERVICE);
+    if (show_log) {
+        $('#log_container').show();
+        connection.rawInput = rawInput;
+        connection.rawOutput = rawOutput;
+    }
+
+    $("#log_toggle").click(function () {
+        $("#log").toggle();
+      });
+
+    $('#cred').bind('submit', function (event) {
+        var button = $('#connect').get(0);
+        var jid = $('#jid');
+        var pass = $('#pass');
+        localJID = jid.get(0).value;
+
+        if (button.value == 'connect') {
+            $('#log').empty();
+            connection.connect(localJID,
+               pass.get(0).value,
+               onConnect);
+        } else {
+            connection.disconnect();
+        }
+        event.preventDefault();
+    });
+
+});
+
+window.onunload = window.onbeforeunload = function() {
+    if (connection) {
+        connection.disconnect();
+    }
+}