]> jfr.im git - irc/quakenet/qwebirc.git/commitdiff
IRCClient classes are now mootoolsified.
authorChris Porter <redacted>
Thu, 19 Jun 2008 17:18:07 +0000 (18:18 +0100)
committerChris Porter <redacted>
Thu, 19 Jun 2008 17:18:07 +0000 (18:18 +0100)
bin/yuicompressor-2.3.5.jar [new file with mode: 0644]
compile.bat [new file with mode: 0644]
static/js/irc/baseirc.js
static/js/irc/commandparser.js
static/js/irc/ircclient.js
static/js/irc/ircconnection.js [moved from static/js/tcp.js with 100% similarity]
static/js/irc/irctracker.js
static/js/jslib.js
static/js/ui/uglyui.js
static/uitest.html

diff --git a/bin/yuicompressor-2.3.5.jar b/bin/yuicompressor-2.3.5.jar
new file mode 100644 (file)
index 0000000..3f92c34
Binary files /dev/null and b/bin/yuicompressor-2.3.5.jar differ
diff --git a/compile.bat b/compile.bat
new file mode 100644 (file)
index 0000000..beb84cc
--- /dev/null
@@ -0,0 +1,19 @@
+@echo off\r
+del compiled.js\r
+del concat.js\r
+cd static\js\r
+copy version.js + jslib.js + irc\ircconnection.js + irc\irclib.js + irc\baseirc.js + irc\irctracker.js + irc\commandparser.js + irc\ircclient.js + ui\uibase.js + ui\colour.js + ui\theme.js + ui\uglyui.js ..\..\concat.js /b\r
+cd ..\..\r
+java -jar bin\yuicompressor-2.3.5.jar concat.js > compiled.js\r
+\r
+if %errorlevel% == 0 goto ok\r
+\r
+del compiled.js\r
+pause\r
+goto ene\r
+\r
+:ok\r
+del concat.js\r
+goto end\r
+\r
+:end\r
index 24a957b0915ea20d6610e5872039950e8486b415..02af0f75c3a1610bbb67246175ec7d33be7eab8c 100644 (file)
@@ -10,23 +10,35 @@ var RegisteredCTCPs = {
   "CLIENTINFO": function(x) { return "PING VERSION TIME USERINFO CLIENTINFO"; }\r
 };\r
 \r
-function BaseIRCClient(nickname, view) {\r
-  var self = this;\r
-  this.nickname = nickname;\r
-  this.signedOn = false;\r
-  this.pmodes = ["b", "k,", "o", "l", "v"];\r
-  this.channels = {}\r
-  var nextctcp = 0;\r
+var BaseIRCClient = new Class({\r
+  Implements: [Options],\r
+  options: {\r
+    nickname: "WCunset",\r
+  },\r
+  initialize: function(options) {\r
+    this.setOptions(options);\r
+\r
+    this.nickname = this.options.nickname;\r
+    \r
+    this.__signedOn = false;\r
+    this.pmodes = ["b", "k,", "o", "l", "v"];\r
+    this.channels = {}\r
+    this.nextctcp = 0;    \r
+\r
+    this.connection = new IRCConnection({initialNickname: this.nickname, onRecv: this.dispatch.bind(this)});\r
   \r
-  /* attempt javascript inheritence! */\r
-  this.dispatch = function(data) {\r
+    this.send = this.connection.send.bind(this.connection);\r
+    this.connect = this.connection.connect.bind(this.connection);\r
+    this.disconnect = this.connection.disconnect;\r
+  },\r
+  dispatch: function(data) {\r
     var message = data[0];\r
     if(message == "connect") {\r
-      view.connected();\r
+      this.connected();\r
     } else if(message == "disconnect") {\r
-      view.disconnected();\r
+      this.disconnected();\r
     } else if(message == "c") {\r
-      var command = data[1];\r
+      var command = data[1].toUpperCase();\r
        \r
       var prefix = data[2];\r
       var sl = data[3];\r
@@ -36,206 +48,194 @@ function BaseIRCClient(nickname, view) {
       if(!n)\r
         n = command;  \r
 \r
-      var o = view["irc_" + n];\r
-      if(!o)\r
-        o = self["irc_" + n];\r
+      var o = this["irc_" + n];\r
       \r
       if(o) {\r
-        var r = o(prefix, sl);\r
+        var r = o.attempt([prefix, sl], this);\r
         if(!r)\r
-          view.rawNumeric(command, prefix, sl);\r
+          this.rawNumeric(command, prefix, sl);\r
       } else {\r
-        view.rawNumeric(command, prefix, sl);\r
+        this.rawNumeric(command, prefix, sl);\r
       }\r
     }\r
-  }\r
-  \r
-  this.irc_RPL_WELCOME = function(prefix, params) {\r
-    self.nickname = params[0];\r
+  },\r
+\r
+  irc_RPL_WELCOME: function(prefix, params) {\r
+    this.nickname = params[0];\r
     \r
-    self.signedOn = true;\r
-    view.signedOn(self.nickname);\r
-  }\r
-  \r
-  this.irc_ERR_NICKNAMEINUSE = function(prefix, params) {\r
-    if(self.signedOn == false) {\r
-      var newnick = params[1] + "_";\r
-      if(newnick == self.lastnick)\r
-        newnick = "webchat" + Math.floor(Math.random() * 1024 * 1024);\r
+    this.__signedOn = true;\r
+    this.signedOn(this.nickname);\r
+  },\r
+  irc_ERR_NICKNAMEINUSE: function(prefix, params) {\r
+    if(this.__signedOn)\r
+      return;\r
+    \r
+    var newnick = params[1] + "_";\r
+    if(newnick == this.lastnick)\r
+      newnick = "webchat" + Math.floor(Math.random() * 1024 * 1024);\r
 \r
-      self.send("NICK " + newnick);\r
-      self.lastnick = newnick;\r
-    }\r
-  }\r
-  \r
-  this.irc_NICK = function(prefix, params) {\r
+    this.send("NICK " + newnick);\r
+    this.lastnick = newnick;\r
+  },\r
+  irc_NICK: function(prefix, params) {\r
     var user = prefix;\r
     var oldnick = user.hostToNick();\r
     var newnick = params[0];\r
     \r
-    if(self.nickname == oldnick)\r
-      self.nickname = newnick;\r
+    if(this.nickname == oldnick)\r
+      this.nickname = newnick;\r
       \r
-    view.nickChanged(user, newnick);\r
+    this.nickChanged(user, newnick);\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_QUIT = function(prefix, params) {\r
+  },\r
+  irc_QUIT: function(prefix, params) {\r
     var user = prefix;\r
     \r
     var message = params.indexFromEnd(-1);\r
     \r
-    view.userQuit(user, message);\r
+    this.userQuit(user, message);\r
     \r
     return true;\r
-  }\r
-\r
-  this.irc_PART = function(prefix, params) {\r
+  },\r
+  irc_PART: function(prefix, params) {\r
     var user = prefix;\r
     var channel = params[0];\r
     var message = params[1];\r
 \r
     var nick = user.hostToNick();\r
     \r
-    if((nick == self.nickname) && self.channels[channel])\r
-      delete self.channels[channel];\r
-    view.userPart(user, channel, message);\r
+    if((nick == this.nickname) && this.channels[channel])\r
+      delete this.channels[channel];\r
+      \r
+    this.userPart(user, channel, message);\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_KICK = function(prefix, params) {\r
+  },\r
+  irc_KICK: function(prefix, params) {\r
     var kicker = prefix;\r
     var channel = params[0];\r
     var kickee = params[1];\r
     var message = params[2];\r
     \r
-    if((kickee == self.nickname) && self.channels[channel])\r
-      delete self.channels[channel];\r
-    view.userKicked(kicker, channel, kickee, message);\r
+    if((kickee == this.nickname) && this.channels[channel])\r
+      delete this.channels[channel];\r
+      \r
+    this.userKicked(kicker, channel, kickee, message);\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_PING = function(prefix, params) {\r
-    self.send("PONG :" + params.indexFromEnd(-1));\r
+  },\r
+  irc_PING: function(prefix, params) {\r
+    this.send("PONG :" + params.indexFromEnd(-1));\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_JOIN = function(prefix, params) {\r
+  },\r
+  irc_JOIN: function(prefix, params) {\r
     var channel = params[0];\r
     var user = prefix;\r
     var nick = user.hostToNick();\r
     \r
-    if(nick == self.nickname)\r
-      self.channels[channel] = true;\r
+    if(nick == this.nickname)\r
+      this.channels[channel] = true;\r
       \r
-    view.userJoined(user, channel);\r
+    this.userJoined(user, channel);\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_TOPIC = function(prefix, params) {\r
+  },\r
+  irc_TOPIC: function(prefix, params) {\r
     var user = prefix;\r
     var channel = params[0];\r
     var topic = params.indexFromEnd(-1);\r
     \r
-    view.channelTopic(user, channel, topic);\r
+    this.channelTopic(user, channel, topic);\r
     \r
     return true;\r
-  }\r
-  \r
-  var processCTCP = function(message) {\r
-    if(message.charAt(0) == "\x01") {\r
-      if(message.charAt(message.length - 1) == "\x01") {\r
-        message = message.substr(1, message.length - 2);\r
-      } else {\r
-        message = message.substr(1);\r
-      }\r
-      return message.splitMax(" ", 2);\r
+  },\r
+  processCTCP: function(message) {\r
+    if(message.charAt(0) != "\x01")\r
+      return;\r
+    \r
+    if(message.charAt(message.length - 1) == "\x01") {\r
+      message = message.substr(1, message.length - 2);\r
+    } else {\r
+      message = message.substr(1);\r
     }\r
-  }\r
-  \r
-  this.irc_PRIVMSG = function(prefix, params) {\r
+    return message.splitMax(" ", 2);\r
+  },\r
+  irc_PRIVMSG: function(prefix, params) {\r
     var user = prefix;\r
     var target = params[0];\r
     var message = params.indexFromEnd(-1);\r
     \r
-    var ctcp = processCTCP(message);\r
+    var ctcp = this.processCTCP(message);\r
     if(ctcp) {\r
       var type = ctcp[0].toUpperCase();\r
       \r
-      var replyfn = registeredCTCPs[type];\r
+      var replyfn = RegisteredCTCPs[type];\r
       if(replyfn) {\r
         var t = new Date().getTime() / 1000;\r
-        if(t > nextctcp)\r
-          self.send("NOTICE " + user.hostToNick() + " :\x01" + type + " " + replyfn(ctcp[1]) + "\x01");\r
-        nextctcp = t + 5;\r
+        if(t > this.nextctcp)\r
+          this.send("NOTICE " + user.hostToNick() + " :\x01" + type + " " + replyfn(ctcp[1]) + "\x01");\r
+        this.nextctcp = t + 5;\r
       }\r
       \r
-      if(target == self.nickname) {\r
-        view.userCTCP(user, type, ctcp[1]);\r
+      if(target == this.nickname) {\r
+        this.userCTCP(user, type, ctcp[1]);\r
       } else {\r
-        view.channelCTCP(user, target, type, ctcp[1]);\r
+        this.channelCTCP(user, target, type, ctcp[1]);\r
       }\r
     } else {\r
-      if(target == self.nickname) {\r
-        view.userPrivmsg(user, message);\r
+      if(target == this.nickname) {\r
+        this.userPrivmsg(user, message);\r
       } else {\r
-        view.channelPrivmsg(user, target, message);\r
+        this.channelPrivmsg(user, target, message);\r
       }\r
     }\r
     \r
     return true;\r
-  }\r
-\r
-  this.irc_NOTICE = function(prefix, params) {\r
+  },\r
+  irc_NOTICE: function(prefix, params) {\r
     var user = prefix;\r
     var target = params[0];\r
     var message = params.indexFromEnd(-1);\r
     \r
     if(user == "") {\r
-      view.serverNotice(message);\r
-    } else if(target == self.nickname) {\r
-      var ctcp = processCTCP(message);\r
+      this.serverNotice(message);\r
+    } else if(target == this.nickname) {\r
+      var ctcp = this.processCTCP(message);\r
       if(ctcp) {\r
-        view.userCTCPReply(user, ctcp[0], ctcp[1]);\r
+        this.userCTCPReply(user, ctcp[0], ctcp[1]);\r
       } else {\r
-        view.userNotice(user, message);\r
+        this.userNotice(user, message);\r
       }\r
     } else {\r
-      view.channelNotice(user, target, message);\r
+      this.channelNotice(user, target, message);\r
     }\r
     \r
     return true;\r
-  }\r
-\r
-  this.irc_INVITE = function(prefix, params) {\r
+  },\r
+  irc_INVITE: function(prefix, params) {\r
     var user = prefix;\r
     var channel = params.indexFromEnd(-1);\r
     \r
-    view.userInvite(user, channel);\r
+    this.userInvite(user, channel);\r
     \r
     return true;\r
-  }\r
-\r
-  this.irc_ERROR = function(prefix, params) {\r
+  },\r
+  irc_ERROR: function(prefix, params) {\r
     var message = params.indexFromEnd(-1);\r
     \r
-    view.serverError(message);\r
+    this.serverError(message);\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_MODE = function(prefix, params) {\r
+  },\r
+  irc_MODE: function(prefix, params) {\r
     var user = prefix;\r
     var target = params[0];\r
     var args = params.slice(1);\r
     \r
-    if(target == self.nickname) {\r
-      view.userMode(args);\r
+    if(target == this.nickname) {\r
+      this.userMode(args);\r
     } else {\r
       var modes = args[0].split("");\r
       var xargs = args.slice(1);\r
@@ -245,82 +245,70 @@ function BaseIRCClient(nickname, view) {
       var pos = 0;\r
       var cmode = "+";\r
       \r
-      forEach(modes, function(mode) {\r
+      modes.each(function(mode) {\r
         if((mode == "+") || (mode == "-")) {\r
           cmode = mode;\r
           return;\r
         }\r
 \r
-        if(self.pmodes[mode]) { \r
+        if(this.pmodes[mode]) { \r
           d = [cmode, mode, xargs[carg++]]\r
         } else {\r
           d = [cmode, mode]\r
         }\r
         \r
         data.push(d);\r
-      });\r
+      }, this);\r
       \r
-      view.channelMode(user, target, data, args);\r
+      this.channelMode(user, target, data, args);\r
     }\r
     \r
     return true;\r
-  }\r
-  \r
-  this.irc_RPL_ISUPPORT = function(prefix, params) {\r
+  },  \r
+  irc_RPL_ISUPPORT: function(prefix, params) {\r
     var supported = params.slice(1, -1);\r
     var supportedhash = {};\r
     \r
     for(var i=0;i<supported.length;i++) {\r
       var l = supported[i].splitMax("=", 2);\r
-      view.supported(l[0], l[1]);\r
+      this.supported(l[0], l[1]);\r
     }\r
-  }\r
-  \r
-  this.irc_RPL_MYINFO = function(prefix, params) {\r
+  },  \r
+  irc_RPL_MYINFO: function(prefix, params) {\r
     var pmodes = params[5].split("");\r
-    self.pmodes = {}\r
-    forEach(pmodes, function(pmode) {\r
-      self.pmodes[pmode] = true;\r
-    });\r
-  }\r
-  \r
-  this.irc_RPL_NAMREPLY = function(prefix, params) {\r
+    this.pmodes = {}\r
+    \r
+    pmodes.each(function(pmode) {\r
+      this.pmodes[pmode] = true;\r
+    }, this);\r
+  },  \r
+  irc_RPL_NAMREPLY: function(prefix, params) {\r
     var channel = params[2];    \r
     var names = params[3];\r
     \r
-    view.channelNames(channel, names.split(" "));\r
+    this.channelNames(channel, names.split(" "));\r
     \r
     return true;\r
-  }\r
-\r
-  this.irc_RPL_ENDOFNAMES = function(prefix, params) {\r
+  },\r
+  irc_RPL_ENDOFNAMES: function(prefix, params) {\r
     var channel = params[1];\r
 \r
-    view.channelNames(channel, []);\r
+    this.channelNames(channel, []);\r
     return true;\r
-  }\r
-\r
-  this.irc_RPL_NOTOPIC = function(prefix, params) {\r
+  },\r
+  irc_RPL_NOTOPIC: function(prefix, params) {\r
     return true;\r
-  }\r
-  \r
-  this.irc_RPL_TOPIC = function(prefix, params) {\r
+  },  \r
+  irc_RPL_TOPIC: function(prefix, params) {\r
     var channel = params[1];\r
     var topic = params.indexFromEnd(-1);\r
     \r
-    if(self.channels[channel]) {\r
-      view.initialTopic(channel, topic);\r
+    if(this.channels[channel]) {\r
+      this.initialTopic(channel, topic);\r
       return true;\r
     }\r
-  }\r
-  \r
-  this.irc_RPL_TOPICWHOTIME = function(prefix, params) {\r
+  },  \r
+  irc_RPL_TOPICWHOTIME: function(prefix, params) {\r
     return true;\r
   }\r
-  \r
-  this.connection = new IRCConnection({initialNickname: nickname, onRecv: this.dispatch});\r
-  \r
-  this.send = this.connection.send.bind(this.connection);\r
-  this.connect = this.connection.connect.bind(this.connection);\r
-  this.disconnect = this.connection.disconnect;\r
-}\r
+});\r
index fb0b8f0e79bb5e4240f5e9c584a671b6ad1532c4..0eb60b582094ad257a6625f8adb8bd096654dedd 100644 (file)
@@ -7,69 +7,8 @@ var CommandParser = new Class({
       "Q": "QUERY"\r
     };\r
     \r
-    this.send = parentObject.__send;\r
+    this.send = parentObject.send;\r
     this.parentObject = parentObject;\r
-    \r
-    this.commands = {\r
-      ME: [true, undefined, undefined, function(args) {\r
-        if(args == undefined)\r
-          args = "";\r
-        this.send("PRIVMSG " + w.name + " :\x01ACTION " + args + "\x01");\r
-        this.newTargetLine(w.name, "ACTION", args);\r
-      }],\r
-      CTCP: [false, 3, 2, function(args) {\r
-        var target = args[0];\r
-        var type = args[1].toUpperCase();\r
-        var message = args[2];\r
-        \r
-        if(message == undefined)\r
-          message = "";\r
-\r
-        if(message == "") {\r
-          this.send("PRIVMSG " + target + " :\x01" + type + "\x01");\r
-        } else {\r
-          this.send("PRIVMSG " + target + " :\x01" + type + " " + message + "\x01");\r
-        }\r
-      \r
-        this.newTargetLine(target, "CTCP", message, {"x": type});\r
-      }],\r
-      PRIVMSG: [false, 2, 2, function(args) {\r
-        var target = args[0];\r
-        var message = args[1];\r
-        \r
-        this.newTargetLine(target, "MSG", message, {});\r
-        \r
-        this.send("PRIVMSG " + target + " :" + message);\r
-      }],\r
-      NOTICE: [false, 2, 2, function(args) {\r
-        var target = args[0];\r
-        var message = args[1];\r
-\r
-        this.newTargetLine(target, "NOTICE", message);\r
-        this.send("NOTICE " + target + " :" + message);\r
-      }],\r
-      QUERY: [false, 2, 1, function(args) {\r
-        this.parentObject.newWindow(args[0], WINDOW_QUERY, true);\r
-\r
-        if((args.length > 1) && (args[1] != ""))\r
-          return ["SAY", args[1]];\r
-      }],\r
-      SAY: [true, undefined, undefined, function(args) {\r
-        if(args == undefined)\r
-          args = "";\r
-          \r
-        return ["PRIVMSG", this.parentObject.getActiveWindow().name + " " + args]\r
-      }],\r
-      KICK: [true, 3, 2, function(args) {\r
-        var channel = args[0];\r
-        var target = args[1];\r
-        var message = args[2];\r
-        if(!message)\r
-          message = "";\r
-        \r
-        this.send("KICK " + channel + " " + target + " :" + message);\r
-      }]\r
-    };    \r
   },\r
   newTargetLine: function(target, type, message, extra) {\r
     if(!extra)\r
@@ -109,7 +48,7 @@ var CommandParser = new Class({
       command = aliascmd;\r
     \r
     for(;;) {\r
-      var cmdopts = this.commands[command];\r
+      var cmdopts = this["cmd_" + command];\r
       if(!cmdopts) {\r
         if(args) {\r
           this.send(command + " " + args);\r
@@ -145,5 +84,64 @@ var CommandParser = new Class({
       command = ret[0];\r
       args = ret[1];\r
     }\r
-  }\r
+  },\r
+  \r
+  \r
+  cmd_ME: [true, undefined, undefined, function(args) {\r
+    if(args == undefined)\r
+      args = "";\r
+    return ["SAY", "\x01ACTION " + args + "\x01"];\r
+  }],\r
+  cmd_CTCP: [false, 3, 2, function(args) {\r
+    var target = args[0];\r
+    var type = args[1].toUpperCase();\r
+    var message = args[2];\r
+    \r
+    if(message == undefined)\r
+      message = "";\r
+\r
+    if(message == "") {\r
+      this.send("PRIVMSG " + target + " :\x01" + type + "\x01");\r
+    } else {\r
+      this.send("PRIVMSG " + target + " :\x01" + type + " " + message + "\x01");\r
+    }\r
+  \r
+    this.newTargetLine(target, "CTCP", message, {"x": type});\r
+  }],\r
+  cmd_PRIVMSG: [false, 2, 2, function(args) {\r
+    var target = args[0];\r
+    var message = args[1];\r
+    \r
+    this.newTargetLine(target, "MSG", message, {});\r
+    \r
+    this.send("PRIVMSG " + target + " :" + message);\r
+  }],\r
+  cmd_NOTICE: [false, 2, 2, function(args) {\r
+    var target = args[0];\r
+    var message = args[1];\r
+\r
+    this.newTargetLine(target, "NOTICE", message);\r
+    this.send("NOTICE " + target + " :" + message);\r
+  }],\r
+  cmd_QUERY: [false, 2, 1, function(args) {\r
+    this.parentObject.newWindow(args[0], WINDOW_QUERY, true);\r
+\r
+    if((args.length > 1) && (args[1] != ""))\r
+      return ["SAY", args[1]];\r
+  }],\r
+  cmd_SAY: [true, undefined, undefined, function(args) {\r
+    if(args == undefined)\r
+      args = "";\r
+      \r
+    return ["PRIVMSG", this.parentObject.getActiveWindow().name + " " + args]\r
+  }],\r
+  KICK: [true, 3, 2, function(args) {\r
+    var channel = args[0];\r
+    var target = args[1];\r
+    var message = args[2];\r
+    if(!message)\r
+      message = "";\r
+    \r
+    this.send("KICK " + channel + " " + target + " :" + message);\r
+  }],\r
 });\r
index 513a045211b1d726c26693a41ec39adc8c55a454..82991cb9cefb900ae0eb143c50cb50cd95cb3f3a 100644 (file)
@@ -1,57 +1,53 @@
-function IRCClient(nickname, ui, autojoin) {\r
-  var self = this;\r
-  this.prefixes = "@+";\r
-  this.modeprefixes = "ov";\r
-  this.windows = {};\r
-  \r
-  var newLine = function(window, type, data) {\r
+var IRCClient = new Class({\r
+  Extends: BaseIRCClient,\r
+  options: {\r
+    nickname: "WCunset",\r
+    autojoin: "",\r
+  },\r
+  initialize: function(options, ui) {\r
+    this.parent(options);\r
+\r
+    this.ui = ui;\r
+\r
+    this.prefixes = "@+";\r
+    this.modeprefixes = "ov";\r
+    this.windows = {};\r
+    \r
+    this.commandparser = new CommandParser(this);\r
+    this.exec = this.commandparser.dispatch.bind(this.commandparser);\r
+\r
+    this.statusWindow = this.ui.newClient(this);\r
+  },\r
+  newLine: function(window, type, data) {\r
     if(!data)\r
       data = {};\r
       \r
-    var w = self.getWindow(window);\r
+    var w = this.getWindow(window);\r
     if(w) {\r
       w.addLine(type, data);\r
     } else {\r
-      self.statusWindow.addLine(type, data);\r
+      this.statusWindow.addLine(type, data);\r
     }\r
-  }\r
-  this.newLine = newLine;\r
-  \r
-  var newChanLine = function(channel, type, user, extra) {\r
+  },\r
+  newChanLine: function(channel, type, user, extra) {\r
     if(!extra)\r
       extra = {};\r
 \r
     extra["n"] = user.hostToNick();\r
     extra["h"] = user.hostToHost();\r
     extra["c"] = channel;\r
-    extra["-"] = self.nickname;\r
+    extra["-"] = this.nickname;\r
     \r
-    newLine(channel, type, extra);\r
-  }\r
-  \r
-  var newServerLine = function(type, data) {\r
-    self.statusWindow.addLine(type, data);\r
-  }\r
-\r
-  var newActiveLine = function(type, data) {\r
-    ui.getActiveWindow().addLine(type, data);\r
-  }\r
-  \r
-  this.rawNumeric = function(numeric, prefix, params) {\r
-    newServerLine("RAW", {"n": "numeric", "m": params.slice(1).join(" ")});\r
-  }\r
-  \r
-  this.signedOn = function(nickname) {\r
-    self.tracker = new IRCTracker();\r
-    self.nickname = nickname;\r
-    newServerLine("SIGNON");\r
-    \r
-    if(autojoin)\r
-      self.__send("JOIN " + autojoin);\r
-  }\r
-\r
-  this.updateNickList = function(channel) {\r
-    var n1 = self.tracker.getChannel(channel);\r
+    this.newLine(channel, type, extra);\r
+  },\r
+  newServerLine: function(type, data) {\r
+    this.statusWindow.addLine(type, data);\r
+  },\r
+  newActiveLine: function(type, data) {\r
+    this.ui.getActiveWindow().addLine(type, data);\r
+  },\r
+  updateNickList: function(channel) {\r
+    var n1 = this.tracker.getChannel(channel);\r
     var names = new Array();\r
     var tff = String.fromCharCode(255);\r
     var nh = {}\r
@@ -63,7 +59,7 @@ function IRCClient(nickname, ui, autojoin) {
       \r
       if(nc.prefixes.length > 0) {\r
         var c = nc.prefixes.charAt(0);\r
-        nx = String.fromCharCode(self.prefixes.indexOf(c)) + n.toIRCLower();\r
+        nx = String.fromCharCode(this.prefixes.indexOf(c)) + n.toIRCLower();\r
         nh[nx] = c + n;\r
       } else {\r
         nx = tff + n.toIRCLower();\r
@@ -75,326 +71,295 @@ function IRCClient(nickname, ui, autojoin) {
     names.sort();\r
     \r
     var sortednames = new Array();\r
-    forEach(names, function(name) {\r
+    names.each(function(name) {\r
       sortednames.push(nh[name]);\r
     });\r
     \r
-    var w = self.getWindow(channel);\r
+    var w = this.getWindow(channel);\r
     if(w)\r
       w.updateNickList(sortednames);\r
-  }\r
-  \r
-  this.getWindow = function(name) {\r
-    return self.windows[name];\r
-  }\r
-  \r
-  this.newWindow = function(name, type, select) {\r
-    var w = self.getWindow(name);\r
+  },\r
+  getWindow: function(name) {\r
+    return this.windows[name];\r
+  },\r
+  newWindow: function(name, type, select) {\r
+    var w = this.getWindow(name);\r
     if(!w) {\r
-      w = self.windows[name] = ui.newWindow(self, type, name);\r
+      w = this.windows[name] = this.ui.newWindow(this, type, name);\r
       \r
       w.addEvent("close", function(w) {\r
-        delete self.windows[name];\r
-      });\r
+        delete this.windows[name];\r
+      }.bind(this));\r
     }\r
     \r
     if(select)\r
-      ui.selectWindow(w);\r
+      this.ui.selectWindow(w);\r
       \r
     return w;\r
-  }\r
+  },\r
+  getActiveWindow: function() {\r
+    return this.ui.getActiveWindow();\r
+  },\r
+  getNickname: function() {\r
+    return this.nickname;\r
+  },\r
+  addPrefix: function(nickchanentry, prefix) {\r
+    var ncp = nickchanentry.prefixes + prefix;\r
+    var prefixes = [];\r
+    \r
+    /* O(n^2) */\r
+    for(var i=0;i<this.prefixes.length;i++) {\r
+      var pc = this.prefixes.charAt(i);\r
+      var index = ncp.indexOf(pc);\r
+      if(index != -1)\r
+        prefixes.push(pc);\r
+    }\r
+    \r
+    nickchanentry.prefixes = prefixes.join("");\r
+  },\r
+  removePrefix: function(nickchanentry, prefix) {\r
+    nickchanentry.prefixes = nickchanentry.prefixes.replaceAll(prefix, "");\r
+  },\r
   \r
-  this.userJoined = function(user, channel) {\r
+  /* from here down are events */\r
+  rawNumeric: function(numeric, prefix, params) {\r
+    this.newServerLine("RAW", {"n": "numeric", "m": params.slice(1).join(" ")});\r
+  },\r
+  signedOn: function(nickname) {\r
+    this.tracker = new IRCTracker();\r
+    this.nickname = nickname;\r
+    this.newServerLine("SIGNON");\r
+    \r
+    if(this.autojoin)\r
+      this.send("JOIN " + this.autojoin);\r
+  },\r
+  userJoined: function(user, channel) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
     \r
-    if((nick == self.nickname) && !self.getWindow(channel))\r
-      self.newWindow(channel, WINDOW_CHANNEL, true);\r
-    self.tracker.addNickToChannel(nick, channel);\r
+    if((nick == this.nickname) && !this.getWindow(channel))\r
+      this.newWindow(channel, WINDOW_CHANNEL, true);\r
+    this.tracker.addNickToChannel(nick, channel);\r
 \r
-    newChanLine(channel, "JOIN", user);\r
-    \r
-    self.updateNickList(channel);\r
-  }\r
-  \r
-  this.userPart = function(user, channel, message) {\r
+    this.newChanLine(channel, "JOIN", user);\r
+    this.updateNickList(channel);\r
+  },\r
+  userPart: function(user, channel, message) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
         \r
-    if(nick == self.nickname) {\r
-      self.tracker.removeChannel(channel);\r
+    if(nick == this.nickname) {\r
+      this.tracker.removeChannel(channel);\r
     } else {\r
-      self.tracker.removeNickFromChannel(nick, channel);\r
-      newChanLine(channel, "PART", user, {"m": message});\r
+      this.tracker.removeNickFromChannel(nick, channel);\r
+      this.newChanLine(channel, "PART", user, {"m": message});\r
     }\r
   \r
-    self.updateNickList(channel);\r
+    this.updateNickList(channel);\r
     \r
-    var w = self.getWindow(channel)\r
+    var w = this.getWindow(channel)\r
     if(w)\r
       w.close();\r
-  }\r
-\r
-  this.userKicked = function(kicker, channel, kickee, message) {\r
-    if(kickee == self.nickname) {\r
-      self.tracker.removeChannel(channel);\r
-      self.getWindow(channel).close();\r
+  },\r
+  userKicked: function(kicker, channel, kickee, message) {\r
+    if(kickee == this.nickname) {\r
+      this.tracker.removeChannel(channel);\r
+      this.getWindow(channel).close();\r
     } else {\r
-      self.tracker.removeNickFromChannel(kickee, channel);\r
-      self.updateNickList(channel);\r
+      this.tracker.removeNickFromChannel(kickee, channel);\r
+      this.updateNickList(channel);\r
     }\r
       \r
-    newChanLine(channel, "KICK", kicker, {"v": kickee, "m": message});\r
-  }\r
-  \r
-  this.channelMode = function(user, channel, modes, raw) {\r
-    forEach(modes, function(mo) {\r
+    this.newChanLine(channel, "KICK", kicker, {"v": kickee, "m": message});\r
+  },\r
+  channelMode: function(user, channel, modes, raw) {\r
+    modes.each(function(mo) {\r
       var direction = mo[0];\r
       var mode = mo[1];\r
 \r
-      var prefixindex = self.modeprefixes.indexOf(mode);\r
+      var prefixindex = this.modeprefixes.indexOf(mode);\r
       if(prefixindex == -1)\r
         return;\r
         \r
       var nick = mo[2];\r
-      var prefixchar = self.prefixes.charAt(prefixindex);\r
+      var prefixchar = this.prefixes.charAt(prefixindex);\r
 \r
-      var nc = self.tracker.getOrCreateNickOnChannel(nick, channel);\r
+      var nc = this.tracker.getOrCreateNickOnChannel(nick, channel);\r
       if(direction == "-") {\r
-        self.removePrefix(nc, prefixchar);\r
+        this.removePrefix(nc, prefixchar);\r
       } else {\r
-        self.addPrefix(nc, prefixchar);\r
+        this.addPrefix(nc, prefixchar);\r
       }\r
-    });\r
+    }, this);\r
 \r
-    newChanLine(channel, "MODE", user, {"m": raw.join(" ")});\r
+    this.newChanLine(channel, "MODE", user, {"m": raw.join(" ")});\r
     \r
-    self.updateNickList(channel);\r
-  }\r
-\r
-  this.userQuit = function(user, message) {\r
+    this.updateNickList(channel);\r
+  },\r
+  userQuit: function(user, message) {\r
     var nick = user.hostToNick();\r
     \r
-    var channels = self.tracker.getNick(nick);\r
+    var channels = this.tracker.getNick(nick);\r
     \r
     var clist = [];\r
     for(var c in channels) {\r
       clist.push(c);\r
-      newChanLine(c, "QUIT", user, {"m": message});\r
+      this.newChanLine(c, "QUIT", user, {"m": message});\r
     }\r
     \r
-    self.tracker.removeNick(nick);\r
+    this.tracker.removeNick(nick);\r
     \r
-    forEach(clist, function(cli) {\r
-      self.updateNickList(cli);\r
-    });\r
-  }\r
-\r
-  this.nickChanged = function(user, newnick) {\r
+    clist.each(function(cli) {\r
+      this.updateNickList(cli);\r
+    }, this);\r
+  },\r
+  nickChanged: function(user, newnick) {\r
     var oldnick = user.hostToNick();\r
     \r
-    if(oldnick == self.nickname)\r
-      self.nickname = newnick;\r
+    if(oldnick == this.nickname)\r
+      this.nickname = newnick;\r
       \r
-    self.tracker.renameNick(oldnick, newnick);\r
+    this.tracker.renameNick(oldnick, newnick);\r
 \r
-    var channels = self.tracker.getNick(newnick);\r
+    var channels = this.tracker.getNick(newnick);\r
     \r
     for(var c in channels) {\r
-      newChanLine(c, "NICK", user, {"w": newnick});\r
+      this.newChanLine(c, "NICK", user, {"w": newnick});\r
       /* TODO: rename queries */\r
-      self.updateNickList(c);\r
+      this.updateNickList(c);\r
     }\r
-  }\r
-  \r
-  this.channelTopic = function(user, channel, topic) {\r
-    newChanLine(channel, "TOPIC", user, {"m": topic});\r
-    self.getWindow(channel).updateTopic(topic);\r
-  }\r
-  \r
-  this.initialTopic = function(channel, topic) {\r
-    self.getWindow(channel).updateTopic(topic);\r
-  }\r
-  \r
-  this.channelCTCP = function(user, channel, type, args) {\r
+  },\r
+  channelTopic: function(user, channel, topic) {\r
+    this.newChanLine(channel, "TOPIC", user, {"m": topic});\r
+    this.getWindow(channel).updateTopic(topic);\r
+  },\r
+  initialTopic: function(channel, topic) {\r
+    this.getWindow(channel).updateTopic(topic);\r
+  },\r
+  channelCTCP: function(user, channel, type, args) {\r
     if(args == undefined)\r
       args = "";\r
 \r
     if(type == "ACTION") {\r
-      newChanLine(channel, "CHANACTION", user, {"m": args, "c": channel});\r
+      this.newChanLine(channel, "CHANACTION", user, {"m": args, "c": channel});\r
       return;\r
     }\r
     \r
-    newChanLine(channel, "CHANCTCP", user, {"x": type, "m": args, "c": channel});\r
-  }\r
-  \r
-  this.userCTCP = function(user, type, args) {\r
+    this.newChanLine(channel, "CHANCTCP", user, {"x": type, "m": args, "c": channel});\r
+  },\r
+  userCTCP: function(user, type, args) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
     if(args == undefined)\r
       args = "";\r
     \r
     if(type == "ACTION") {      \r
-      self.newWindow(nick, WINDOW_QUERY);\r
-      newLine(nick, "PRIVACTION", {"m": args, "x": type, "h": host, "n": nick});\r
+      this.newWindow(nick, WINDOW_QUERY);\r
+      this.newLine(nick, "PRIVACTION", {"m": args, "x": type, "h": host, "n": nick});\r
       return;\r
     }\r
     \r
-    if(self.getWindow(nick)) {\r
-      newLine(nick, "PRIVCTCP", {"m": args, "x": type, "h": host, "n": nick, "-": self.nickname});\r
+    if(this.getWindow(nick)) {\r
+      this.newLine(nick, "PRIVCTCP", {"m": args, "x": type, "h": host, "n": nick, "-": this.nickname});\r
     } else {\r
-      newActiveLine("PRIVCTCP", {"m": args, "x": type, "h": host, "n": nick, "-": self.nickname});\r
+      this.newActiveLine("PRIVCTCP", {"m": args, "x": type, "h": host, "n": nick, "-": this.nickname});\r
     }\r
-  }\r
-  \r
-  this.userCTCPReply = function(user, type, args) {\r
+  },\r
+  userCTCPReply: function(user, type, args) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
     if(args == undefined)\r
       args = "";\r
     \r
-    if(self.getWindow(nick)) {\r
-      newLine(nick, "CTCPREPLY", {"m": args, "x": type, "h": host, "n": nick, "-": self.nickname});\r
+    if(this.getWindow(nick)) {\r
+      this.newLine(nick, "CTCPREPLY", {"m": args, "x": type, "h": host, "n": nick, "-": this.nickname});\r
     } else {\r
-      newActiveLine("CTCPREPLY", {"m": args, "x": type, "h": host, "n": nick, "-": self.nickname});\r
+      this.newActiveLine("CTCPREPLY", {"m": args, "x": type, "h": host, "n": nick, "-": this.nickname});\r
     }\r
-  }\r
-  \r
-  this.channelPrivmsg = function(user, channel, message) {\r
-    newChanLine(channel, "CHANMSG", user, {"m": message});\r
-  }\r
-\r
-  this.channelNotice = function(user, channel, message) {\r
-    newChanLine(channel, "CHANNOTICE", user, {"m": message});\r
-  }\r
-\r
-  this.userPrivmsg = function(user, message) {\r
+  },\r
+  channelPrivmsg: function(user, channel, message) {\r
+    this.newChanLine(channel, "CHANMSG", user, {"m": message});\r
+  },\r
+  channelNotice: function(user, channel, message) {\r
+    this.newChanLine(channel, "CHANNOTICE", user, {"m": message});\r
+  },\r
+  userPrivmsg: function(user, message) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
     \r
-    self.newWindow(nick, WINDOW_QUERY);\r
+    this.newWindow(nick, WINDOW_QUERY);\r
     \r
-    newLine(nick, "PRIVMSG", {"m": message, "h": host, "n": nick});\r
-  }\r
-  \r
-  this.serverNotice = function(message) {\r
-    newServerLine("SERVERNOTICE", {"m": message});\r
-  }\r
-  \r
-  this.userNotice = function(user, message) {\r
+    this.newLine(nick, "PRIVMSG", {"m": message, "h": host, "n": nick});\r
+  },\r
+  serverNotice: function(message) {\r
+    this.newServerLine("SERVERNOTICE", {"m": message});\r
+  },\r
+  userNotice: function(user, message) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
 \r
-    if(self.getWindow(nick)) {\r
-      newLine(nick, "PRIVNOTICE", {"m": message, "h": host, "n": nick});\r
+    if(this.getWindow(nick)) {\r
+      this.newLine(nick, "PRIVNOTICE", {"m": message, "h": host, "n": nick});\r
     } else {\r
-      newActiveLine("PRIVNOTICE", {"m": message, "h": host, "n": nick});\r
+      this.newActiveLine("PRIVNOTICE", {"m": message, "h": host, "n": nick});\r
     }\r
-  }\r
-  \r
-  this.userInvite = function(user, channel) {\r
+  },\r
+  userInvite: function(user, channel) {\r
     var nick = user.hostToNick();\r
     var host = user.hostToHost();\r
 \r
-    newServerLine("INVITE", {"c": channel, "h": host, "n": nick});\r
-  }\r
-  \r
-  this.userMode = function(modes) {\r
-    newServerLine("UMODE", {"m": modes, "n": self.nickname});\r
-  }\r
-  \r
-  this.addPrefix = function(nickchanentry, prefix) {\r
-    var ncp = nickchanentry.prefixes + prefix;\r
-    var prefixes = new Array();\r
-    \r
-    /* O(n^2) */\r
-    for(var i=0;i<self.prefixes.length;i++) {\r
-      var pc = self.prefixes.charAt(i);\r
-      var index = ncp.indexOf(pc);\r
-      if(index != -1)\r
-        prefixes.push(pc);\r
-    }\r
-    \r
-    nickchanentry.prefixes = prefixes.join("");\r
-  }\r
-  \r
-  this.removePrefix = function(nickchanentry, prefix) {\r
-    nickchanentry.prefixes = nickchanentry.prefixes.replaceAll(prefix, "");\r
-  }\r
-\r
-  this.channelNames = function(channel, names) {\r
+    this.newServerLine("INVITE", {"c": channel, "h": host, "n": nick});\r
+  },\r
+  userMode: function(modes) {\r
+    this.newServerLine("UMODE", {"m": modes, "n": this.nickname});\r
+  },\r
+  channelNames: function(channel, names) {\r
     if(names.length == 0) {\r
-      self.updateNickList(channel);\r
+      this.updateNickList(channel);\r
       return;\r
     }\r
     \r
-    forEach(names, function(nick) {\r
+    names.each(function(nick) {\r
       var prefixes = [];\r
       var splitnick = nick.split("");\r
       \r
-      var i = 0;\r
-      forEach(splitnick, function(c) {\r
-        if(self.prefixes.indexOf(c) == -1) {\r
+      splitnick.every(function(c, i) {\r
+        if(this.prefixes.indexOf(c) == -1) {\r
           nick = nick.substr(i);\r
-          return true;\r
+          return false;\r
         }\r
         \r
         prefixes.push(c);\r
-        i++;\r
-      });\r
+        return true;\r
+      }, this);\r
 \r
-      var nc = self.tracker.addNickToChannel(nick, channel);\r
-      forEach(prefixes, function(p) {\r
-        self.addPrefix(nc, p);\r
-      });\r
-    });\r
-  }\r
-  \r
-  this.disconnected = function() {\r
-    for(var x in this.parent.channels) {\r
-      ui.closeWindow(x);\r
-    }\r
+      var nc = this.tracker.addNickToChannel(nick, channel);\r
+      prefixes.each(function(p) {\r
+        this.addPrefix(nc, p);\r
+      }, this);\r
+    }, this);\r
+  },\r
+  disconnected: function() {\r
+    for(var x in this.parent.channels)\r
+      this.ui.closeWindow(x);\r
 \r
-    self.tracker = undefined;\r
+    this.tracker = undefined;\r
     \r
-    newServerLine("DISCONNECT");\r
-    self.disconnect();\r
-  }\r
-  \r
-  this.supported = function(key, value) {\r
+    this.newServerLine("DISCONNECT");\r
+  },\r
+  supported: function(key, value) {\r
     if(key == "PREFIX") {\r
       var l = (value.length - 2) / 2;\r
 \r
-      self.modeprefixes = value.substr(1, l);\r
-      self.prefixes = value.substr(l + 2, l);\r
-    }    \r
-  }\r
-  \r
-  this.connected = function() {\r
-    newServerLine("CONNECT");\r
-  }\r
-  \r
-  this.serverError = function(message) {\r
-    newServerLine("ERROR", {"m": message});\r
-  }\r
-\r
-  this.getActiveWindow = function() {\r
-    return ui.getActiveWindow();\r
-  }\r
-    \r
-  this.getNickname = function() {\r
-    return self.nickname;\r
-  }\r
-  \r
-  this.parent = new BaseIRCClient(nickname, this);\r
-  this.__send = this.parent.send;\r
-  \r
-  this.commandparser = new CommandParser(this);\r
-  this.dispatch = this.commandparser.dispatch.bind(this.commandparser);\r
-\r
-  this.statusWindow = ui.newClient(self);\r
-\r
-  this.connect = this.parent.connect;\r
-  this.disconnect = this.parent.disconnect;\r
-}\r
-\r
+      this.modeprefixes = value.substr(1, l);\r
+      this.prefixes = value.substr(l + 2, l);\r
+      alert(this.prefixes);\r
+    }\r
+  },\r
+  connected: function() {\r
+    this.newServerLine("CONNECT");\r
+  },\r
+  serverError: function(message) {\r
+    this.newServerLine("ERROR", {"m": message});\r
+  }\r
+});\r
index 48dcaa0b63935a6952eba36704423c43c92fc259..d301a4f9a45243f336a6c30eecc2c1556c978692 100644 (file)
@@ -8,7 +8,7 @@ var IRCTracker = new Class({
     this.nicknames = {};\r
   },\r
   isEmpty: function(hash) {\r
-    for(var x in y)\r
+    for(var x in hash)\r
       return false;\r
     return true;\r
   },\r
index deb7763f31a89fdf74c8f408d92f6c151e1f8c28..e2f1e9891d6f8fa90893990410a24d03b39fc9ee 100644 (file)
@@ -7,12 +7,6 @@ Array.prototype.indexFromEnd = function(d) {
   return p[d];\r
 }\r
 \r
-var forEach = function(x, fn) {\r
-  for(var i=0;i<x.length;i++)\r
-    if(fn(x[i]))\r
-      return;\r
-}\r
-\r
 /* how horribly inefficient */\r
 String.prototype.replaceAll = function(f, t) {\r
   var i = this.indexOf(f);\r
index 0e30a52c75de2e1b82c081dcfe47cdccd201f97f..a1474dc7061260d03f310bacef2554778df172bf 100644 (file)
@@ -37,7 +37,7 @@ var UglyUIWindow = new Class({
         new Event(e).stop();\r
         \r
         if(type == WINDOW_CHANNEL)\r
-          this.client.dispatch("/PART " + name);\r
+          this.client.exec("/PART " + name);\r
 \r
         this.close();\r
       }.bind(this));\r
@@ -52,7 +52,7 @@ var UglyUIWindow = new Class({
     while(n.firstChild)\r
       n.removeChild(n.firstChild);\r
 \r
-    forEach(nicks, function(nick) {\r
+    nicks.each(function(nick) {\r
       var e = new Element("div");\r
       n.appendChild(e);\r
       e.appendChild(document.createTextNode(nick));\r
@@ -140,7 +140,7 @@ var UglyUI = new Class({
     form.addEvent("submit", function(e) {\r
       new Event(e).stop();\r
     \r
-      this.getActiveWindow().client.dispatch(inputbox.value);\r
+      this.getActiveWindow().client.exec(inputbox.value);\r
       inputbox.value = "";\r
     }.bind(this));\r
     parentElement.appendChild(form);  \r
index 2d9552cee458733ab80176422c3998c86e2da9ce..2e5b58eab92038d40ebb20bf00d1f189c286ec8f 100644 (file)
@@ -7,22 +7,22 @@
   <script type="text/javascript" src="js/mootools-1.2-core.js"></script>\r
   <script type="text/javascript" src="js/version.js"></script>\r
   <script type="text/javascript" src="js/jslib.js"></script>\r
-  <script type="text/javascript" src="js/ui/uibase.js"></script>\r
-  <script type="text/javascript" src="js/ui/colour.js"></script>\r
-  <script type="text/javascript" src="js/ui/theme.js"></script>\r
-  <script type="text/javascript" src="js/ui/uglyui.js"></script>\r
-  <script type="text/javascript" src="js/tcp.js"></script>\r
+  <script type="text/javascript" src="js/irc/ircconn.js"></script>\r
   <script type="text/javascript" src="js/irc/irclib.js"></script>\r
   <script type="text/javascript" src="js/irc/baseirc.js"></script>\r
   <script type="text/javascript" src="js/irc/irctracker.js"></script>\r
   <script type="text/javascript" src="js/irc/commandparser.js"></script>\r
   <script type="text/javascript" src="js/irc/ircclient.js"></script>\r
+  <script type="text/javascript" src="js/ui/uibase.js"></script>\r
+  <script type="text/javascript" src="js/ui/colour.js"></script>\r
+  <script type="text/javascript" src="js/ui/theme.js"></script>\r
+  <script type="text/javascript" src="js/ui/uglyui.js"></script>\r
   <script type="text/javascript">  \r
     window.addEvent("domready", function() {\r
       var theme = new Theme();\r
       var ui = new UglyUI($("ircui"), theme);\r
 \r
-      var IRC = new IRCClient("mcgoogle", ui);\r
+      var IRC = new IRCClient({nickname: "mcgoogle"}, ui);\r
       \r
       IRC.connect();\r
     });\r