diff options
author | Chris Porter <slug@qwebirc.org> | 2010-04-24 15:39:58 (GMT) |
---|---|---|
committer | Chris Porter <slug@qwebirc.org> | 2010-04-24 15:39:58 (GMT) |
commit | bf656fce558a9588f6eea8f35f6a1be4f2e99397 (patch) | |
tree | a8ed12a2e9e83f397f357639d1ed1579fb659e78 | |
parent | 7c8b8cd744ff08cc5a2481d6157e2346ce5cfd2b (diff) |
Add menu item support for crazy non-standard operator modes.
-rw-r--r-- | js/irc/ircclient.js | 22 | ||||
-rw-r--r-- | js/ui/menuitems.js | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/js/irc/ircclient.js b/js/irc/ircclient.js index 0356d4f..b8d5967 100644 --- a/js/irc/ircclient.js +++ b/js/irc/ircclient.js @@ -516,6 +516,28 @@ qwebirc.irc.IRCClient = new Class({ return entry.prefixes.indexOf(prefix) != -1; }, + nickOnChanHasAtLeastPrefix: function(nick, channel, prefix) { + var entry = this.tracker.getNickOnChannel(nick, channel); + if(!$defined(entry)) + return false; /* shouldn't happen */ + + /* this array is sorted */ + var pos = this.prefixes.indexOf(prefix); + if(pos == -1) + return false; /* shouldn't happen */ + + var modehash = {}; + this.prefixes.slice(0, pos + 1).split("").each(function(x) { + modehash[x] = true; + }); + + var prefixes = entry.prefixes; + for(var i=0;i<prefixes.length;i++) + if(modehash[prefixes.charAt(i)]) + return true; + + return false; + }, supported: function(key, value) { if(key == "PREFIX") { var l = (value.length - 2) / 2; diff --git a/js/ui/menuitems.js b/js/ui/menuitems.js index 05bc921..6ff3182 100644 --- a/js/ui/menuitems.js +++ b/js/ui/menuitems.js @@ -12,7 +12,7 @@ qwebirc.ui.MENU_ITEMS = function() { var channel = this.name; /* window name */ var myNick = this.client.nickname; - return this.client.nickOnChanHasPrefix(myNick, channel, "@"); + return this.client.nickOnChanHasAtLeastPrefix(myNick, channel, "@"); }; var isVoiced = function(nick) { |