gecko-dev/extensions/irc/xul/tests/test1-static.js

467 lines
11 KiB
JavaScript

/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is JSIRC Test Client #1
*
* The Initial Developer of the Original Code is New Dimensions Consulting,
* Inc. Portions created by New Dimensions Consulting, Inc. are
* Copyright (C) 1999 New Dimenstions Consulting, Inc. All
* Rights Reserved.
*
* Contributor(s):
*
*
* Contributor(s):
* Robert Ginda, rginda@ndcico.com, original author
*/
var client = new Object();
client.COMMAND_CHAR = "/";
client.STEP_TIMEOUT = 500;
client.UPDATE_DELAY = 500;
client.INITIAL_ALIASES =
[
{name: "connect", value: "e.network.connect();"},
{name: "quit",
value: "client.quit(e.inputData ? e.inputData : 'no reason');"},
{name: "nick",
value: "if (e.server && e.inputData) " +
"e.server.sendData ('NICK ' + e.inputData + '\\n');"},
{name: "network", value: "setCurrentNetwork(e.inputData); onListChannels();"},
{name: "channel", value: "setCurrentChannel(e.inputData); onListUsers();"},
{name: "me", value: "if (e.channel) e.channel.act (e.inputData);"}
];
client.addAlias = function cli_addalias (name, value)
{
var funcName = "onInput" + name[0].toUpperCase() +
name.substr (1, name.length).toLowerCase();
try
{
client[funcName] = eval ("f = function alias_" + name + " (e) { " +
value + "}");
}
catch (ex)
{
display ("Error adding alias (" + name + "): " + ex);
}
}
client.removeAlias = function cli_remalias (name)
{
delete client[funcName];
}
client.quit = function cli_quit (reason)
{
for (var n in client.networks)
if (client.networks[n].primServ)
client.networks[n].quit (reason);
}
CIRCUser.prototype.getDecoratedNick = function usr_decoratednick()
{
var pfx;
if (typeof this.isOp != "undefined")
{
pfx = "[";
if (this.__proto__ == this.parent.parent.me)
pfx += "*";
pfx += this.isOp ? "O" : "X";
pfx += this.isVoice ? "V" : "X";
pfx += "] ";
}
else
if (this == this.parent.me)
pfx = "[*??]";
else
pfx = "[??] ";
return pfx + this.nick;
}
CIRCNetwork.prototype.getDecoratedName = function usr_decoratedname()
{
var pfx = "[";
pfx += this.isConnected() ? "online" : "offline";
pfx += "] ";
return pfx + this.name;
}
function initStatic()
{
CIRCNetwork.prototype.INITIAL_NICK = "test1";
CIRCNetwork.prototype.INITIAL_NAME = "test1";
CIRCNetwork.prototype.INITIAL_DESC = "New Now Know How";
CIRCNetwork.prototype.INITIAL_CHANNEL = "";
CIRCServer.prototype.READ_TIMEOUT = 0;
var list = document.getElementById("lstQuickList");
list.onclick = onListClick;
}
/*
* One time initilization stuff
*/
function init(obj)
{
obj.networks = new Object();
obj.eventPump = new CEventPump (10);
obj.networks["efnet"] =
new CIRCNetwork ("efnet", [{name: "irc.primenet.com", port: 6667},
{name: "irc.cs.cmu.edu", port: 6667}],
obj.eventPump);
obj.networks["linuxnet"] =
new CIRCNetwork ("linuxnet", [{name: "irc.mozilla.org", port: 6667}],
obj.eventPump);
obj.networks["hybridnet"] =
new CIRCNetwork ("hybridnet", [{name: "irc.ssc.net", port: 6667}],
obj.eventPump);
obj.primNet = obj.networks["efnet"];
if (DEBUG)
/* hook all events EXCEPT server.poll and *.event-end types
* (the 4th param inverts the match) */
obj.eventPump.addHook ([{type: "poll", set: /^(server|dcc-chat)$/},
{type: "event-end"}], event_tracer,
"event-tracer", true /* negate */);
}
function listClear (list)
{
while (list.options.length > 0)
list.options[0] = null;
}
function listFill (list, source, prop, callFlag /* optional */)
{
var ary = new Array();
listClear (list);
for (var o in source)
if (!callFlag)
ary.push (source[o][prop]);
else
ary.push (source[o][prop]());
ary.sort();
for (var i = 0; i < ary.length; i++)
list.add (new Option(ary[i]), null);
}
function listGetSelectedIndex (list)
{
var sels = new Array();
for (o in list.options)
if (list.options[o].selected)
sels[sels.length] = o;
if (sels.length == 1)
return sels[0];
else
return sels;
}
function display (line)
{
var output = document.getElementById ("output");
output.value = line + "\n" + output.value;
}
function mainstep()
{
client.eventPump.stepEvents();
setTimeout ("mainstep()", client.STEP_TIMEOUT);
}
/*
* Hook used to trace events.
*/
function event_tracer (e)
{
var name="", data="";
switch (e.set)
{
case "server":
name = e.destObject.connection.host;
if (e.type == "rawdata")
data = "'" + e.data + "'";
break;
case "channel":
name = e.destObject.name;
break;
case "user":
name = e.destObject.nick;
break;
case "httpdoc":
name = e.destObject.server + e.destObject.path;
if (e.destObject.state != "complete")
data = "state: '" + e.destObject.state + "', recieved " +
e.destObject.data.length;
else
dd ("document done:\n" + dumpObjectTree (this));
break;
case "dcc-chat":
name = e.destObject.host + ":" + e.destObject.port;
if (e.type == "rawdata")
data = "'" + e.data + "'";
break;
case "client":
if (e.type == "do-connect")
data = "attempt: " + e.attempt + "/" +
e.destObject.MAX_CONNECT_ATTEMPTS;
break;
default:
break;
}
if (name)
name = "[" + name + "]";
str = "Level " + e.level + ": '" + e.type + "', " +
e.set + name + "." + e.destMethod;
if (data)
str += "\ndata : " + data;
dd (str);
return true;
}
function updateList ()
{
if (!client.updateTimeout)
client.updateTimeout = setTimeout ("updateListNow()",
client.UPDATE_DELAY);
}
function updateListNow()
{
var quickList = document.getElementById("lstQuickList");
if (client.updateTimeout)
{
clearTimeout (client.updateTimeout);
delete client.updateTimeout;
}
switch (client.lastListType)
{
case "networks":
listFill (quickList, client.networks, "getDecoratedName",
true);
break;
case "users":
listFill (quickList, client.network.primServ.users,
"getDecoratedNick", true);
break;
case "channels":
listFill (quickList, client.network.primServ.channels, "name",
false);
break;
case "chan-users":
listFill (quickList, client.channel.users, "getDecoratedNick",
true);
break;
default:
break;
}
}
function updateStatus()
{
var status = document.getElementById ("status");
var netName = (client.network) ? client.network.name : "[no-network]";
var chanName = (client.channel) ? client.channel.name : "[no-channel]";
status.value = netName + " " + chanName;
}
function setCurrentNetwork (o)
{
var oldnetwork = client.network;
switch (typeof o)
{
case "object":
client.network = o;
break;
case "string":
var v = client.networks[o];
if (v)
client.network = v;
break;
default:
dd ("setCurrentNetwork: typeof o (" + typeof o + ") confused me.");
return false;
}
if (client.network != oldnetwork)
{
client.channel = (void 0);
client.user = (void 0);
client.cuser = (void 0);
}
var props = document.getElementById ("txtProperties");
props.value = "network: " + client.network.name + "\n" +
dumpObjectTree (client.network, 1) +
"\n============\nclient object:\n" + dumpObjectTree (client, 1);
updateStatus();
}
function setCurrentUser (o)
{
switch (typeof o)
{
case "object":
client.user = o;
break;
case "string":
if (!client.network.primServ)
return false;
var v = client.network.primServ.users[o];
if (v)
client.user = v;
break;
default:
return false;
}
var props = document.getElementById ("txtProperties");
props.value = "network user: " + client.user.nick + "\n" +
dumpObjectTree (client.user, 1) +
"\n============\nclient object:\n" + dumpObjectTree (client, 1);
updateStatus();
}
function setCurrentChannel (o)
{
var oldchannel = client.channel;
switch (typeof o)
{
case "object":
client.channel = o;
break;
case "string":
if (!client.network.primServ)
return false;
var v = client.network.primServ.channels[o];
if (v)
client.channel = v;
break;
default:
return false;
}
if (client.channel != oldchannel)
client.cuser = (void 0);
var props = document.getElementById ("txtProperties");
props.value = "channel: " + client.channel.name + "\n" +
dumpObjectTree (client.channel, 1) +
"\n============\nclient object:\n" + dumpObjectTree (client, 1);
updateStatus();
}
function setCurrentCUser (o)
{
switch (typeof o)
{
case "object":
client.cuser = o;
break;
case "string":
if (!client.channel)
return false;
var v = client.channel.users[o];
if (v)
client.cuser = v;
break;
default:
return false;
}
setCurrentUser (o.__proto__);
var props = document.getElementById ("txtProperties");
props.value = "channel user: " + client.cuser.nick + "\n" +
dumpObjectTree (client.cuser, 1) +
"\n============\nclient object:\n" + dumpObjectTree (client, 1);
updateStatus();
}