Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Porter <slug@qwebirc.org>2010-04-24 15:39:58 (GMT)
committer Chris Porter <slug@qwebirc.org>2010-04-24 15:39:58 (GMT)
commitbf656fce558a9588f6eea8f35f6a1be4f2e99397 (patch)
treea8ed12a2e9e83f397f357639d1ed1579fb659e78
parent7c8b8cd744ff08cc5a2481d6157e2346ce5cfd2b (diff)
Add menu item support for crazy non-standard operator modes.
-rw-r--r--js/irc/ircclient.js22
-rw-r--r--js/ui/menuitems.js2
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) {