]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/tabcompleter.js
Merge.
[irc/quakenet/qwebirc.git] / js / ui / tabcompleter.js
index 41c21ae4574422245168b721c676395deb65a3ab..25a0d665ae3dd91a4c979028c48b44a66b7b2507 100644 (file)
@@ -29,6 +29,8 @@ qwebirc.ui.TabCompleterFactory = new Class({
         obj = qwebirc.ui.ChannelNameTabCompleter;
       } else if(ltext.match(/^\/(q|query|msg) /i)) {
         obj = qwebirc.ui.QueryTabCompleter;
+      } else if(w.type == qwebirc.ui.WINDOW_QUERY) {
+        obj = qwebirc.ui.QueryNickTabCompleter;
       } else if(w.type == qwebirc.ui.WINDOW_CHANNEL) {
         /* "slug[TAB]" == "slug: " */
         if(preword == "") {
@@ -65,19 +67,19 @@ qwebirc.ui.TabCompleterFactory = new Class({
 });
 
 qwebirc.ui.TabIterator = new Class({
-  initialize: function(prefix, list) {
+  initialize: function(client, prefix, list) {
     this.prefix = prefix;
     if(!$defined(list) || list.length == 0) {
       this.list = null;
     } else {
       var l = [];
       
-      var prefixl = prefix.toIRCCompletion();
+      var prefixl = qwebirc.irc.toIRCCompletion(client, prefix);
       
       /* convert the nick list to IRC lower case, stripping all non letters
        * before comparisions */
       for(var i=0;i<list.length;i++) {
-        var l2 = list[i].toIRCCompletion();
+        var l2 = qwebirc.irc.toIRCCompletion(client, list[i]);
         
         if(l2.startsWith(prefixl))
           l.push(list[i]);
@@ -104,11 +106,11 @@ qwebirc.ui.TabIterator = new Class({
 });
 
 qwebirc.ui.BaseTabCompleter = new Class({
-  initialize: function(prefix, existingNick, suffix, list) {
+  initialize: function(client, prefix, existingNick, suffix, list) {
     this.existingNick = existingNick;
     this.prefix = prefix;
     this.suffix = suffix;
-    this.iterator = new qwebirc.ui.TabIterator(existingNick, list);
+    this.iterator = new qwebirc.ui.TabIterator(client, existingNick, list);
   },
   get: function() {
     var n = this.iterator.next();
@@ -123,7 +125,15 @@ qwebirc.ui.BaseTabCompleter = new Class({
 qwebirc.ui.QueryTabCompleter = new Class({
   Extends: qwebirc.ui.BaseTabCompleter,
   initialize: function(prefix, existingNick, suffix, window) {
-    this.parent(prefix, existingNick, suffix, window.client.lastNicks);
+    this.parent(window.client, prefix, existingNick, suffix, window.client.lastNicks);
+  }
+});
+
+qwebirc.ui.QueryNickTabCompleter = new Class({
+  Extends: qwebirc.ui.BaseTabCompleter,
+  initialize: function(prefix, existingText, suffix, window) {
+    var nick = window.name
+    this.parent(window.client, prefix, existingText, suffix, [nick]);
   }
 });
 
@@ -132,11 +142,27 @@ qwebirc.ui.ChannelNameTabCompleter = new Class({
   initialize: function(prefix, existingText, suffix, window) {
 
     /* WTB map */
-    var l = [];    
-    for(var c in window.client.channels)
-      l.push(c);
+    var l = [];
+    var wa = window.parentObject.windows[window.parentObject.getClientId(window.client)];
+    
+    for(var c in window.client.channels) {
+      var w = wa[c];
       
-    this.parent(prefix, existingText, suffix, l);
+      /* redundant? */
+      if($defined(w))
+        w = w.lastSelected;
+        
+      l.push([w, c]);
+    }
+    
+    l.sort(function(a, b) {
+      return b[0] - a[0];
+    });
+
+    var l2 = [];    
+    for(var i=0;i<l.length;i++)
+      l2.push(l[i][1]);
+    this.parent(window.client, prefix, existingText, suffix, l2);
   }
 });
 
@@ -145,6 +171,6 @@ qwebirc.ui.ChannelUsersTabCompleter = new Class({
   initialize: function(prefix, existingText, suffix, window) {
     var nc = window.client.tracker.getSortedByLastSpoke(window.name);
 
-    this.parent(prefix, existingText, suffix, nc);
+    this.parent(window.client, prefix, existingText, suffix, nc);
   }
 });