549740d440
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r192524 | seanbright | 2009-05-05 15:56:11 -0400 (Tue, 05 May 2009) | 11 lines Fix Javascript error when using astman.js in Internet Explorer. Internet Explorer (tested with 7.0) does not like trailing commas on constructs like object initializers, so get rid of them to avoid some errors. (closes issue #15026) Reported by: rajnishgiri Patches: bug15026.patch uploaded by seanbright (license 71) Tested by: seanbright ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@192525 65c4cc65-6c06-0410-ace0-fbb531ad65f3
263 lines
7.7 KiB
JavaScript
263 lines
7.7 KiB
JavaScript
/*
|
|
* Asterisk -- An open source telephony toolkit.
|
|
*
|
|
* Javascript routines or accessing manager routines over HTTP.
|
|
*
|
|
* Copyright (C) 1999 - 2006, Digium, Inc.
|
|
*
|
|
* Mark Spencer <markster@digium.com>
|
|
*
|
|
* See http://www.asterisk.org for more information about
|
|
* the Asterisk project. Please do not directly contact
|
|
* any of the maintainers of this project for assistance;
|
|
* the project provides a web site, mailing lists and IRC
|
|
* channels for your use.
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU General Public License Version 2. See the LICENSE file
|
|
* at the top of the source tree.
|
|
*
|
|
*/
|
|
|
|
|
|
function Astman() {
|
|
var me = this;
|
|
var channels = new Array;
|
|
var lastselect;
|
|
var selecttarget;
|
|
this.setURL = function(url) {
|
|
this.url = url;
|
|
};
|
|
this.setEventCallback = function(callback) {
|
|
this.eventcallback = callback;
|
|
};
|
|
this.setDebug = function(debug) {
|
|
this.debug = debug;
|
|
};
|
|
this.clickChannel = function(ev) {
|
|
var target = ev.target;
|
|
// XXX This is icky, we statically use astmanEngine to call the callback XXX
|
|
if (me.selecttarget)
|
|
me.restoreTarget(me.selecttarget);
|
|
while(!target.id || !target.id.length)
|
|
target=target.parentNode;
|
|
me.selecttarget = target.id;
|
|
target.className = "chanlistselected";
|
|
me.chancallback(target.id);
|
|
};
|
|
this.restoreTarget = function(targetname) {
|
|
var other;
|
|
target = $(targetname);
|
|
if (!target)
|
|
return;
|
|
if (target.previousSibling) {
|
|
other = target.previousSibling.previousSibling.className;
|
|
} else if (target.nextSibling) {
|
|
other = target.nextSibling.nextSibling.className;
|
|
}
|
|
if (other) {
|
|
if (other == "chanlisteven")
|
|
target.className = "chanlistodd";
|
|
else
|
|
target.className = "chanlisteven";
|
|
} else
|
|
target.className = "chanlistodd";
|
|
};
|
|
this.channelUpdate = function(msg, channame) {
|
|
var fields = new Array("callerid", "calleridname", "context", "extension", "priority", "account", "state", "link", "uniqueid" );
|
|
|
|
if (!channame || !channame.length)
|
|
channame = msg.headers['channel'];
|
|
|
|
if (!channels[channame])
|
|
channels[channame] = new Array();
|
|
|
|
if (msg.headers.event) {
|
|
if (msg.headers.event == "Hangup") {
|
|
delete channels[channame];
|
|
} else if (msg.headers.event == "Link") {
|
|
var chan1 = msg.headers.channel1;
|
|
var chan2 = msg.headers.channel2;
|
|
if (chan1 && channels[chan1])
|
|
channels[chan1].link = chan2;
|
|
if (chan2 && channels[chan2])
|
|
channels[chan2].link = chan1;
|
|
} else if (msg.headers.event == "Unlink") {
|
|
var chan1 = msg.headers.channel1;
|
|
var chan2 = msg.headers.channel2;
|
|
if (chan1 && channels[chan1])
|
|
delete channels[chan1].link;
|
|
if (chan2 && channels[chan2])
|
|
delete channels[chan2].link;
|
|
} else if (msg.headers.event == "Rename") {
|
|
var oldname = msg.headers.oldname;
|
|
var newname = msg.headers.newname;
|
|
if (oldname && channels[oldname]) {
|
|
channels[newname] = channels[oldname];
|
|
delete channels[oldname];
|
|
}
|
|
} else {
|
|
channels[channame]['channel'] = channame;
|
|
for (x=0;x<fields.length;x++) {
|
|
if (msg.headers[fields[x]])
|
|
channels[channame][fields[x]] = msg.headers[fields[x]];
|
|
}
|
|
}
|
|
} else {
|
|
channels[channame]['channel'] = channame;
|
|
for (x=0;x<fields.length;x++) {
|
|
if (msg.headers[fields[x]])
|
|
channels[channame][fields[x]] = msg.headers[fields[x]];
|
|
}
|
|
}
|
|
};
|
|
this.channelClear = function() {
|
|
channels = new Array;
|
|
}
|
|
this.channelInfo = function(channame) {
|
|
return channels[channame];
|
|
};
|
|
this.channelTable = function(callback) {
|
|
var s, x;
|
|
var cclass, count=0;
|
|
var found = 0;
|
|
var foundactive = 0;
|
|
var fieldlist = new Array("channel", "callerid", "calleridname", "context", "extension", "priority");
|
|
|
|
me.chancallback = callback;
|
|
s = "<table class='chantable' align='center'>\n";
|
|
s = s + "\t<tr class='labels' id='labels'><td>Channel</td><td>State</td><td>Caller</td><td>Location</td><td>Link</td></tr>";
|
|
count=0;
|
|
for (x in channels) {
|
|
if (channels[x].channel) {
|
|
if (count % 2)
|
|
cclass = "chanlistodd";
|
|
else
|
|
cclass = "chanlisteven";
|
|
if (me.selecttarget && (me.selecttarget == x)) {
|
|
cclass = "chanlistselected";
|
|
foundactive = 1;
|
|
}
|
|
count++;
|
|
s = s + "\t<tr class='" + cclass + "' id='" + channels[x].channel + "' onClick='astmanEngine.clickChannel(event)'>";
|
|
s = s + "<td>" + channels[x].channel + "</td>";
|
|
if (channels[x].state)
|
|
s = s + "<td>" + channels[x].state + "</td>";
|
|
else
|
|
s = s + "<td><i class='light'>unknown</i></td>";
|
|
if (channels[x].calleridname && channels[x].callerid && channels[x].calleridname != "<unknown>") {
|
|
cid = channels[x].calleridname.escapeHTML() + " <" + channels[x].callerid.escapeHTML() + ">";
|
|
} else if (channels[x].calleridname && (channels[x].calleridname != "<unknown>")) {
|
|
cid = channels[x].calleridname.escapeHTML();
|
|
} else if (channels[x].callerid) {
|
|
cid = channels[x].callerid.escapeHTML();
|
|
} else {
|
|
cid = "<i class='light'>Unknown</i>";
|
|
}
|
|
s = s + "<td>" + cid + "</td>";
|
|
if (channels[x].extension) {
|
|
s = s + "<td>" + channels[x].extension + "@" + channels[x].context + ":" + channels[x].priority + "</td>";
|
|
} else {
|
|
s = s + "<td><i class='light'>None</i></td>";
|
|
}
|
|
if (channels[x].link) {
|
|
s = s + "<td>" + channels[x].link + "</td>";
|
|
} else {
|
|
s = s + "<td><i class='light'>None</i></td>";
|
|
}
|
|
s = s + "</tr>\n";
|
|
found++;
|
|
}
|
|
}
|
|
if (!found)
|
|
s += "<tr><td colspan=" + fieldlist.length + "><i class='light'>No active channels</i></td>\n";
|
|
s += "</table>\n";
|
|
if (!foundactive) {
|
|
me.selecttarget = null;
|
|
}
|
|
return s;
|
|
};
|
|
this.parseResponse = function(t, callback) {
|
|
var msgs = new Array();
|
|
var inmsg = 0;
|
|
var msgnum = 0;
|
|
var x,y;
|
|
var s = t.responseText;
|
|
var allheaders = s.split('\r\n');
|
|
if (me.debug)
|
|
me.debug.value = "\n";
|
|
for (x=0;x<allheaders.length;x++) {
|
|
if (allheaders[x].length) {
|
|
var fields = allheaders[x].split(': ');
|
|
if (!inmsg) {
|
|
msgs[msgnum] = new Object();
|
|
msgs[msgnum].headers = new Array();
|
|
msgs[msgnum].names = new Array();
|
|
y=0;
|
|
}
|
|
msgs[msgnum].headers[fields[0].toLowerCase()] = fields[1];
|
|
msgs[msgnum].names[y++] = fields[0].toLowerCase();
|
|
if (me.debug)
|
|
me.debug.value = me.debug.value + "field " + fields[0] + "/" + fields[1] + "\n";
|
|
inmsg=1;
|
|
} else {
|
|
if (inmsg) {
|
|
if (me.debug)
|
|
me.debug.value = me.debug.value + " new message\n";
|
|
inmsg = 0;
|
|
msgnum++;
|
|
}
|
|
}
|
|
}
|
|
if (me.debug) {
|
|
me.debug.value = me.debug.value + "msgnum is " + msgnum + " and array length is " + msgs.length + "\n";
|
|
me.debug.value = me.debug.value + "length is " + msgs.length + "\n";
|
|
var x, y;
|
|
for (x=0;x<msgs.length;x++) {
|
|
for (y=0;y<msgs[x].names.length;y++) {
|
|
me.debug.value = me.debug.value + "msg "+ (x + 1) + "/" + msgs[x].names[y] + "/" + msgs[x].headers[msgs[x].names[y]] + "\n";
|
|
}
|
|
}
|
|
}
|
|
callback(msgs);
|
|
};
|
|
this.managerResponse = function(t) {
|
|
me.parseResponse(t, me.callback);
|
|
};
|
|
this.doEvents = function(msgs) {
|
|
me.eventcallback(msgs);
|
|
};
|
|
this.eventResponse = function(t) {
|
|
me.parseResponse(t, me.doEvents);
|
|
};
|
|
this.sendRequest = function(request, callback) {
|
|
var tmp;
|
|
var opt = {
|
|
method: 'get',
|
|
asynchronous: true,
|
|
onSuccess: this.managerResponse,
|
|
onFailure: function(t) {
|
|
alert("Error: " + t.status + ": " + t.statusText);
|
|
}
|
|
};
|
|
me.callback = callback;
|
|
opt.parameters = request;
|
|
tmp = new Ajax.Request(this.url, opt);
|
|
};
|
|
this.pollEvents = function() {
|
|
var tmp;
|
|
var opt = {
|
|
method: 'get',
|
|
asynchronous: true,
|
|
onSuccess: this.eventResponse,
|
|
onFailure: function(t) {
|
|
alert("Event Error: " + t.status + ": " + t.statusText);
|
|
}
|
|
};
|
|
opt.parameters="action=waitevent";
|
|
tmp = new Ajax.Request(this.url, opt);
|
|
};
|
|
};
|
|
|
|
astmanEngine = new Astman();
|