]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/baseui.js
Allow queries for cross-domain /SAY.
[irc/quakenet/qwebirc.git] / js / ui / baseui.js
index 93e371b4dcac67c3a9c21ee9677079e7284381c9..86d980ed8b01ae044e01ffc1bd2c5f6a9a5a7f04 100644 (file)
@@ -59,7 +59,7 @@ qwebirc.ui.BaseUI = new Class({
     if(!this.firstClient) {
       this.firstClient = true;
       w.addLine("", "qwebirc v" + qwebirc.VERSION);
-      w.addLine("", "Copyright (C) 2008-2009 Chris Porter and the qwebirc project.");
+      w.addLine("", "Copyright (C) 2008-2010 Chris Porter and the qwebirc project.");
       w.addLine("", "http://www.qwebirc.org");
       w.addLine("", "Licensed under the GNU General Public License, Version 2.");
     }
@@ -174,12 +174,42 @@ qwebirc.ui.BaseUI = new Class({
       tricked into getting themselves glined
     */
   loginBox: function(callback, initialNickname, initialChannels, autoConnect, autoNick) {
-    qwebirc.ui.GenericLoginBox(this.parentElement, callback, initialNickname, initialChannels, autoConnect, autoNick, this.options.networkName);
+    this.postInitialize();
+
+    this.addCustomWindow("Connection details", qwebirc.ui.ConnectPane, "connectpane", {
+      initialNickname: initialNickname, initialChannels: initialChannels, autoConnect: autoConnect, networkName: this.options.networkName, callback: callback, autoNick: autoNick
+    }, qwebirc.ui.WINDOW_CONNECT);
   },
   focusChange: function(newValue) {
     var window_ = this.getActiveWindow();
     if($defined(window_))
       window_.focusChange(newValue);
+  },
+  signedOn: function() {
+    this.poller = new qwebirc.xdomain.Poller(this.oobMessage.bind(this));
+  },
+  oobMessage: function(message) {
+    var c = message.splitMax(" ", 2);
+    if(c.length != 2)
+      return;
+
+    var command = c[0];
+    if(command != "CMD")
+      return;
+
+    var d = c[1].splitMax(" ", 2);
+    if(d.length != 2)
+      return;
+
+    var command = d[0];
+    var args = d[1];
+    if(command == "SAY") {
+      var w = this.getActiveIRCWindow();
+      if($defined(w) && (w.type == qwebirc.ui.WINDOW_CHANNEL || w.type == qwebirc.ui.WINDOW_QUERY)) {
+        w.client.exec("/SAY " + args);
+        return;
+      }
+    }
   }
 });
 
@@ -190,7 +220,7 @@ qwebirc.ui.StandardUI = new Class({
     this.parent(parentElement, windowClass, uiName, options);
 
     this.tabCompleter = new qwebirc.ui.TabCompleterFactory(this);
-    this.uiOptions = new qwebirc.ui.DefaultOptionsClass(this);
+    this.uiOptions = new qwebirc.ui.DefaultOptionsClass(this, options.uiOptionsArg);
     this.customWindows = {};
     
     var ev;
@@ -255,7 +285,7 @@ qwebirc.ui.StandardUI = new Class({
   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[qwebirc.ui.CUSTOM_CLIENT][w.identifier];
@@ -266,7 +296,7 @@ qwebirc.ui.StandardUI = new Class({
 
     return w;
   },
-  addCustomWindow: function(windowName, class_, cssClass, options) {
+  addCustomWindow: function(windowName, class_, cssClass, options, type) {
     if(!$defined(options))
       options = {};
       
@@ -275,7 +305,7 @@ qwebirc.ui.StandardUI = new Class({
       return;
     }
     
-    var d = this.newCustomWindow(windowName, true);
+    var d = this.newCustomWindow(windowName, true, type);
     this.customWindows[windowName] = d;
     
     d.addEvent("close", function() {
@@ -293,7 +323,9 @@ qwebirc.ui.StandardUI = new Class({
     d.setSubWindow(ew);
   },
   embeddedWindow: function() {
-    this.addCustomWindow("Embedding wizard", qwebirc.ui.EmbedWizard, "embeddedwizard", {baseURL: this.options.baseURL});
+    this.addCustomWindow("Add webchat to your site", qwebirc.ui.EmbedWizard, "embeddedwizard", {baseURL: this.options.baseURL, uiOptions: this.uiOptions, optionsCallback: function() {
+      this.optionsWindow();
+    }.bind(this)});
   },
   optionsWindow: function() {
     this.addCustomWindow("Options", qwebirc.ui.OptionsPane, "optionspane", this.uiOptions);
@@ -320,8 +352,12 @@ qwebirc.ui.StandardUI = new Class({
     /* doesn't really belong here */
     if(name == "whois") {
       return ["span", function(nick) {
-        this.client.exec("/WHOIS " + nick);
-      }.bind(window)];
+        if(this.uiOptions.QUERY_ON_NICK_CLICK) {
+          window.client.exec("/QUERY " + nick);
+        } else {
+          window.client.exec("/WHOIS " + nick);
+        }
+      }.bind(this)];
     }
 
     return null;
@@ -333,7 +369,7 @@ qwebirc.ui.StandardUI = new Class({
     this.tabCompleter.reset();
   },
   setModifiableStylesheet: function(name) {
-    this.__styleSheet = new qwebirc.ui.style.ModifiableStylesheet("/css/" + name + qwebirc.FILE_SUFFIX + ".mcss");
+    this.__styleSheet = new qwebirc.ui.style.ModifiableStylesheet(qwebirc.global.staticBaseURL + "css/" + name + qwebirc.FILE_SUFFIX + ".mcss");
     
     if($defined(this.options.hue)) {
       this.setModifiableStylesheetValues(this.options.hue, 0, 0);
@@ -377,23 +413,8 @@ qwebirc.ui.NotificationUI = new Class({
   }
 });
 
-qwebirc.ui.NewLoginUI = new Class({
-  Extends: qwebirc.ui.NotificationUI,
-  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, this.options.networkName);
-  }
-});
-
 qwebirc.ui.QuakeNetUI = new Class({
-  Extends: qwebirc.ui.NewLoginUI,
+  Extends: qwebirc.ui.NotificationUI,
   urlDispatcher: function(name, window) {
     if(name == "qwhois") {
       return ["span", function(auth) {
@@ -411,10 +432,56 @@ qwebirc.ui.QuakeNetUI = new Class({
       };
       
       /* HACK */
-      var foo = function() { document.location = "/auth?logout=1"; };
+      var foo = function() { document.location = qwebirc.global.dynamicBaseURL + "auth?logout=1"; };
       foo.delay(500);
     }
   }
 });
 
 qwebirc.ui.RootUI = qwebirc.ui.QuakeNetUI;
+
+qwebirc.ui.RequestTransformHTML = function(options) {
+  var HREF_ELEMENTS = {
+    "IMG": 1
+  };
+
+  var update = options.update;
+  var onSuccess = options.onSuccess;
+
+  var fixUp = function(node) {
+    if(node.nodeType != 1)
+      return;
+
+    var tagName = node.nodeName.toUpperCase();
+    if(HREF_ELEMENTS[tagName]) {
+      var attr = node.getAttribute("transform_attr");
+      var value = node.getAttribute("transform_value");
+      if($defined(attr) && $defined(value)) {
+        node.removeAttribute("transform_attr");
+        node.removeAttribute("transform_value");
+        node.setAttribute(attr, qwebirc.global.staticBaseURL + value);
+      }
+    }
+
+    for(var i=0;i<node.childNodes.length;i++)
+      fixUp(node.childNodes[i]);
+  };
+
+  delete options["update"];
+  options.onSuccess = function(tree, elements, html, js) {
+    var container = new Element("div");
+    container.set("html", html);
+    fixUp(container);
+    update.empty();
+
+    while(container.childNodes.length > 0) {
+      var x = container.firstChild;
+      container.removeChild(x);
+      update.appendChild(x);
+    }
+    onSuccess();
+  };
+
+  return new Request.HTML(options);
+};
+