diff --git a/client/js/lounge.js b/client/js/lounge.js index 05b92298..d3c70c01 100644 --- a/client/js/lounge.js +++ b/client/js/lounge.js @@ -206,16 +206,18 @@ $(function() { }) ); renderChannel(data.chan); - var chan = sidebar.find(".chan") + + // Queries do not automatically focus, unless the user did a whois + if (data.chan.type === "query" && !data.shouldOpen) { + return; + } + + sidebar.find(".chan") .sort(function(a, b) { return $(a).data("id") - $(b).data("id"); }) - .last(); - if (!whois) { - chan = chan.filter(":not(.query)"); - } - whois = false; - chan.click(); + .last() + .click(); }); function buildChatMessage(data) { @@ -630,21 +632,46 @@ $(function() { }); }); - chat.on("click", ".inline-channel", function() { - var chan = $(".network") - .find(".chan.active") + function findCurrentNetworkChan(name) { + name = name.toLowerCase(); + + return $(".network .chan.active") .parent(".network") - .find(".chan[data-title='" + $(this).data("chan") + "']"); - if (chan.size() === 1) { + .find(".chan") + .filter(function() { + return $(this).data("title").toLowerCase() === name; + }) + .first(); + } + + chat.on("click", ".inline-channel", function() { + var name = $(this).data("chan"); + var chan = findCurrentNetworkChan(name); + + if (chan.length) { chan.click(); } else { socket.emit("input", { target: chat.data("id"), - text: "/join " + $(this).data("chan") + text: "/join " + name }); } }); + chat.on("click", ".user", function() { + var name = $(this).data("name"); + var chan = findCurrentNetworkChan(name); + + if (chan.length) { + chan.click(); + } + + socket.emit("input", { + target: chat.data("id"), + text: "/whois " + name + }); + }); + chat.on("click", ".chat", function() { setTimeout(function() { var text = ""; @@ -786,20 +813,6 @@ $(function() { }); }); - var whois = false; - chat.on("click", ".user", function() { - var user = $(this).text().trim().replace(/[+%@~&]/, ""); - if (user.indexOf("#") !== -1) { - return; - } - whois = true; - var text = "/whois " + user; - socket.emit("input", { - target: chat.data("id"), - text: text - }); - }); - chat.on("msg", ".messages", function(e, target, msg) { if (msg.self) { return; diff --git a/src/plugins/irc-events/whois.js b/src/plugins/irc-events/whois.js index 1395d7b0..6b531a35 100644 --- a/src/plugins/irc-events/whois.js +++ b/src/plugins/irc-events/whois.js @@ -12,6 +12,7 @@ module.exports = function(irc, network) { }); network.channels.push(chan); client.emit("join", { + shouldOpen: true, network: network.id, chan: chan });