From: Chris Porter Date: Wed, 3 Jun 2009 23:45:18 +0000 (+0100) Subject: Add kick support to menu, only visible when opped. X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/commitdiff_plain/7555d60175ffba754be164c0eee035eee49a056d?hp=5f2808af69256656fead748a8c5ee46f41177ce1 Add kick support to menu, only visible when opped. --- diff --git a/js/ui/frontends/qui.js b/js/ui/frontends/qui.js index 31f8b2e..f89fda4 100644 --- a/js/ui/frontends/qui.js +++ b/js/ui/frontends/qui.js @@ -424,14 +424,18 @@ qwebirc.ui.QUI.Window = new Class({ e.addClass("menu"); qwebirc.ui.MENU_ITEMS.forEach(function(x) { - var e2 = new Element("a"); - e.appendChild(e2); - - e2.href = "#"; - e2.set("text", "- " + x[0]); - - e2.addEvent("focus", function() { this.blur() }.bind(e2)); - e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(x[1]); }.bind(this)); + var text = x[0], fn = x[1], visible_fn = x[2]; + + if(visible_fn == qwebirc.ui.menuitems.fns.always || visible_fn.apply(this)) { + var e2 = new Element("a"); + e.appendChild(e2); + + e2.href = "#"; + e2.set("text", "- " + text); + + e2.addEvent("focus", function() { this.blur() }.bind(e2)); + e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(fn); }.bind(this)); + } }.bind(this)); return e; }, diff --git a/js/ui/menuitems.js b/js/ui/menuitems.js index c5c0523..3f9ee89 100644 --- a/js/ui/menuitems.js +++ b/js/ui/menuitems.js @@ -1,13 +1,43 @@ +qwebirc.ui.menuitems = {fns: {}}; + +qwebirc.ui.menuitems.fns.always = function() { + return true; +}; + +qwebirc.ui.menuitems.fns.is_opped = function() { + var channel = this.name; /* window name */ + var myNick = this.client.nickname; + + var entry = this.client.tracker.getNickOnChannel(myNick, channel); + if(!$defined(entry)) + return false; /* shouldn't happen */ + + /* TODO: improve (halfops) */ + return entry.prefixes.indexOf("@") != -1; +}; + +/* + [text, command_fn, visible_predicate] + + - text is the text shown to the user in the menu + - command_fn is executed when they click + (this will be the current window) + - visible_predicate will be executed to determine whether or not to show the item + (this will be the current window) +*/ qwebirc.ui.MENU_ITEMS = [ ["whois", function(nick) { this.client.exec("/WHOIS " + nick); - }], + }, qwebirc.ui.menuitems.fns.always], ["query", function(nick) { this.client.exec("/QUERY " + nick); - }], + }, qwebirc.ui.menuitems.fns.always], ["slap", function(nick) { this.client.exec("/ME slaps " + nick + " around a bit with a large fishbot"); - }] + }, qwebirc.ui.menuitems.fns.always], + ["kick", function(nick) { /* TODO: disappear when we're deopped */ + this.client.exec("/KICK " + nick + " wibble"); + }, qwebirc.ui.menuitems.fns.is_opped] ]; qwebirc.ui.UI_COMMANDS = [