]> git.babelmonkeys.de Git - adhocweb.git/blob - js/main.js
621596162d3ce61b9068efa0eed6c07c7fd9605e
[adhocweb.git] / js / main.js
1 var BOSH_SERVICE = 'http://localhost:5280/http-bind/';
2 var show_log = true;
3
4 var localJID = null;
5 var connection   = null;
6
7 var commandCenter = null;
8
9 function log(msg) {
10     var entry = $('<div></div>').append(document.createTextNode(msg));
11     $('#log').append(entry);
12 }
13
14 function rawInput(data) {
15     log('RECV: ' + data);
16 }
17
18 function rawOutput(data) {
19     log('SENT: ' + data);
20 }
21
22 function getFeatures(jid) {
23     var cb, ecb;
24     cb = function(result) { /* Callback */
25         commandCenter.getCommandNodes(function(items) { $('#output').empty(); $('#output').append(items) });
26     }
27     ecb = function(result) { /* Errback */
28         $('#output').append("<p>" + jid + " does NOT support AdHoc commands</p>");
29     }
30     commandCenter.checkFeatures(jid, cb, ecb);
31 }
32
33 function onConnect(status) {
34     if (status == Strophe.Status.CONNECTING) {
35         log('Strophe is connecting.');
36     } else if (status == Strophe.Status.CONNFAIL) {
37         log('Strophe failed to connect.');
38         showConnect();
39     } else if (status == Strophe.Status.DISCONNECTING) {
40         log('Strophe is disconnecting.');
41     } else if (status == Strophe.Status.DISCONNECTED) {
42         log('Strophe is disconnected.');
43         showConnect();
44     } else if (status == Strophe.Status.AUTHFAIL) {
45         log('Authentication failed');
46         if (connection) {
47             connection.disconnect();
48         }
49     } else if (status == Strophe.Status.CONNECTED) {
50         log('Strophe is connected.');
51         $('#queryJID').val(connection.domain);
52         $('#query').show();
53         commandCenter = new Adhoc("#output", function() {
54                 $("<input type='button' value='Start over'/>").bind("click", function() {
55                         $('#output').empty();
56                         commandCenter.getCommandNodes(function(items) { $('#output').append(items) });
57                 }).appendTo('#output');
58         });
59         getFeatures(connection.domain);
60     }
61 }
62
63 function showConnect() {
64     var jid = $('#jid');
65     var pass = $('#pass');
66     var button = $('#connect').get(0);        
67
68     button.value = 'connect';
69     $('#query').hide();
70     pass.show();
71     jid.show();
72     $('#cred label').show();
73     $('#cred br').show();
74     $('#output').empty();
75 }
76
77 function showDisconnect() {
78     var jid = $('#jid');
79     var pass = $('#pass');
80     var button = $('#connect').get(0);        
81
82     button.value = 'disconnect';
83     pass.hide();
84     jid.hide();
85     $('#cred label').hide();
86     $('#cred br').hide();
87 }
88
89 $(document).ready(function () {
90     connection = new Strophe.Connection(BOSH_SERVICE);
91     if (show_log) {
92         $('#log_container').show();
93         connection.rawInput = rawInput;
94         connection.rawOutput = rawOutput;
95     }
96
97     $("#log_toggle").click(function () {
98         $("#log").toggle();
99       });
100
101     $('#cred').bind('submit', function (event) {
102         var button = $('#connect').get(0);
103         var jid = $('#jid');
104         var pass = $('#pass');        
105         localJID = jid.get(0).value;
106
107         if (button.value == 'connect') {
108             showDisconnect();
109             $('#log').empty();
110             connection.connect(localJID,
111                pass.get(0).value,
112                onConnect);
113         } else {
114             connection.disconnect();
115         }
116         event.preventDefault();
117     });
118
119     $('#queryForm').bind('submit', function (event) {
120         getFeatures($('#queryJID').val());
121         event.preventDefault();
122     });
123 });
124
125 window.onunload = window.onbeforeunload = function() {
126     if (connection) {
127         connection.disconnect();
128     }
129 }