]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/baseui.js
Try not to corrupt the namespaces.
[irc/quakenet/qwebirc.git] / js / ui / baseui.js
index b1cc098a2eaa56d52294c15a5a4a063a1db7bf0a..9f8b97007784ba2b37b837985b09aca4b968d350 100644 (file)
@@ -1,63 +1,45 @@
-var WINDOW_STATUS = 1;
-var WINDOW_QUERY = 2;
-var WINDOW_CHANNEL = 3;
+qwebirc.ui.WINDOW_STATUS = 1;
+qwebirc.ui.WINDOW_QUERY = 2;
+qwebirc.ui.WINDOW_CHANNEL = 3;
+qwebirc.ui.WINDOW_CUSTOM = 4;
+qwebirc.ui.WINDOW_CONNECT = 5;
+qwebirc.ui.CUSTOM_CLIENT = "custom";
 
-var UIWindow = new Class({
-  Implements: [Events],
-  initialize: function(parentObject, client, type, name, identifier) {
-    this.parentObject = parentObject;
-    this.type = type;
-    this.name = name;
-    this.active = false;
-    this.client = client;
-    this.identifier = identifier;
+qwebirc.ui.BaseUI = new Class({
+  Implements: [Events, Options],
+  options: {
+    appTitle: "QuakeNet Web IRC",
+    singleWindow: true
   },
-  updateNickList: function(nicks) {
-  },
-  updateTopic: function(topic)  {
-  },
-  close: function() {
-    this.parentObject.__closed(this);
-    this.fireEvent("close", this);
-  },
-  select: function() {
-    this.active = true;
-    this.parentObject.__setActiveWindow(this);
-  },
-  deselect: function() {
-    this.active = false;
-  },
-  addLine: function(type, line, colour) {
-  },
-  errorMessage: function(message) {
-    this.addLine("", message, "red");
-  }
-});
-
-var UI = new Class({
-  initialize: function(parentElement, windowClass, uiName) {
+  initialize: function(parentElement, windowClass, uiName, options) {
+    this.setOptions(options);
+    
     this.windows = {};
+    this.windows[qwebirc.ui.CUSTOM_CLIENT] = {};
     this.windowArray = [];
     this.windowClass = windowClass;
     this.parentElement = parentElement;
     this.parentElement.addClass("qwebirc");
     this.parentElement.addClass("qwebirc-" + uiName);
     this.firstClient = false;
+    this.commandhistory = new qwebirc.irc.CommandHistory();
   },
   newClient: function(client) {
     this.windows[client] = {}
-    var w = this.newWindow(client, WINDOW_STATUS, "Status");
+    var w = this.newWindow(client, qwebirc.ui.WINDOW_STATUS, "Status");
     this.selectWindow(w);
     if(!this.firstClient) {
       this.firstClient = true;
-      w.addLine("", "qwebirc v" + QWEBIRC_VERSION + " -- Copyright (C) 2008 Chris Porter. All rights reserved.");
+      w.addLine("", "qwebirc v" + qwebirc.VERSION);
+      w.addLine("", "Copyright (C) 2008 Chris Porter. All rights reserved.");
       w.addLine("", "http://webchat.quakenet.org/");
+      w.addLine("", "This is BETA quality software, please report bugs to slug@quakenet.org");
     }
     return w;
   },
   newWindow: function(client, type, name) {
     var identifier = name;
-    if(type == WINDOW_STATUS)
+    if(type == qwebirc.ui.WINDOW_STATUS)
       identifier = "";
       
     var w = this.windows[client][identifier] = new this.windowClass(this, client, type, name, identifier);
@@ -75,6 +57,7 @@ var UI = new Class({
     if(this.active)
       this.active.deselect();
     window.select();  /* calls setActiveWindow */
+    document.title = window.name + " - " + this.options.appTitle;
   },
   __closed: function(window) {
     if(window.active) {
@@ -83,7 +66,9 @@ var UI = new Class({
         this.windowArray = [];
       } else {
         var index = this.windowArray.indexOf(window);
-        if(index == 0) {
+        if(index == -1) {
+          return;
+        } else if(index == 0) {
           this.selectWindow(this.windowArray[1]);
         } else {
           this.selectWindow(this.windowArray[index - 1]);
@@ -95,21 +80,98 @@ var UI = new Class({
     
     delete this.windows[window.client][window.identifier];
   },
-  loginBox: function(callback, initialNickname, initialChannels) {
     /*
       this shouldn't be called by overriding classes!
+      they should implement their own!
       some form of user input MUST be received before an
       IRC connection is made, else users are going to get
       tricked into getting themselves glined
     */
+  loginBox: function(callback, initialNickname, initialChannels, autoConnect, autoNick) {
+    qwebirc.ui.GenericLoginBox(this.parentElement, callback, initialNickname, initialChannels, autoConnect, autoNick);
+  }
+});
+
+qwebirc.ui.StandardUI = new Class({
+  Extends: qwebirc.ui.BaseUI,
+  initialize: function(parentElement, windowClass, uiName, options) {
+    this.parent(parentElement, windowClass, uiName, options);
+    window.addEvent("keydown", function(x) {
+      if(!x.alt)
+        return;
+        
+      if(x.key == "a" || x.key == "A") {
+        new Event(x).stop();
+        for(var i=0;i<this.windowArray.length;i++) {
+          if(this.windowArray[i].hilighted) {
+            this.selectWindow(this.windowArray[i]);
+            break;
+          }
+        }
+      } else if(x.key >= '0' && x.key <= '9') {
+        new Event(x).stop();
+        
+        number = x.key - '0';
+        if(number == 0)
+          number = 10
+          
+        number = number - 1;
+        
+        if(number >= this.windowArray.length)
+          return;
+          
+        this.selectWindow(this.windowArray[number]);
+      }
+    }.bind(this));
+  },
+  newCustomWindow: function(name, select, type) {
+    if(!type)
+      type = qwebirc.ui.WINDOW_CUSTOM;
+      
+    var w = this.newWindow(qwebirc.ui.CUSTOM_CLIENT, type, name);
+    w.addEvent("close", function(w) {
+      delete this.windows[name];
+    }.bind(this));
+    
+    if(select)
+      this.selectWindow(w);  
 
-    var nick = prompt("Nickname:", initialNickname);
-    if(!nick) {
-      alert("Aborted.");
+    return w;
+  },
+  embeddedWindow: function() {
+    if(this.embedded) {
+      this.selectWindow(this.embedded)
       return;
     }
+    
+    this.embedded = this.newCustomWindow("Embedding wizard", true);
+    this.embedded.addEvent("close", function() {
+      this.embedded = null;
+    }.bind(this));
+        
+    var ew = new qwebirc.ui.EmbedWizard({parent: this.embedded.lines});
+    ew.addEvent("close", function() {
+      this.embedded.close();
+    }.bind(this));
+  },
+  urlDispatcher: function(name) {
+    if(name == "embedded")
+      return this.embeddedWindow.bind(this);
 
-    var chans = prompt("Channels (seperate by comma):", initialChannels);
-    callback({"nickname": nick, "autojoin": chans});
+    return null;
+  }
+});
+
+qwebirc.ui.NewLoginUI = new Class({
+  Extends: qwebirc.ui.StandardUI,
+  loginBox: function(callbackfn, initialNickname, initialChannels, autoConnect, autoNick) {
+    this.postInitialize();
+    var w = this.newCustomWindow("Connect", true, qwebirc.ui.WINDOW_CONNECT);
+    var callback = function(args) {
+      w.close();
+      callbackfn(args);
+    };
+    
+    qwebirc.ui.GenericLoginBox(w.lines, callback, initialNickname, initialChannels, autoConnect, autoNick);
   }
 });