diff --git a/client/css/style.css b/client/css/style.css index fbb66d0..c52a4f7 100644 --- a/client/css/style.css +++ b/client/css/style.css @@ -59,22 +59,25 @@ h2 { padding: 0 10px; width: 100%; } -#chat .channel, -#chat .network { +#chat .window { background: #fff; height: 100%; position: absolute; width: 100%; } -#chat .network .close { - display: none; -} +#chat .network .close, #chat .network .users { display: none; } #chat .network .messages { right: 0; } +#chat .query .users { + display: none; +} +#chat .query .messages { + right: 0; +} #chat .title { border-bottom: 1px solid #ccc; height: 43px; diff --git a/client/index.html b/client/index.html index 025d4cd..c7f2063 100644 --- a/client/index.html +++ b/client/index.html @@ -18,7 +18,7 @@ {{#networks}}
{{#channels}} - + {{name}} @@ -50,9 +50,9 @@ @@ -60,7 +60,7 @@ {{#messages}}
{{time}} - {{mode}}{{user}} + {{mode}}{{user}} {{text}}
{{/messages}} diff --git a/client/js/chat.js b/client/js/chat.js index a664a0e..0a5072a 100644 --- a/client/js/chat.js +++ b/client/js/chat.js @@ -65,33 +65,6 @@ $(function() { } } - chat.on("submit", "form", function() { - var input = $(this).find(".input"); - var text = input.val(); - if (text != "") { - input.val(""); - socket.emit("input", { - id: input.data("target"), - text: text - }); - } - }); - - chat.on("click", ".close", function() { - var btn = $(this); - btn.prop("disabled", true); - socket.emit("input", { - id: btn.closest(".window").data("id"), - text: "/leave" - }); - }); - - chat.on("append", ".window", function() { - var id = $(this).data("id"); - var badge = sidebar.find(".channel[data-id='" + id + "']:not(.active) .badge"); - badge.html((parseInt(badge.html()) + 1) || "1"); - }); - sidebar.on("click", ".channel", function(e) { e.preventDefault(); sidebar.find(".active").removeClass("active"); @@ -104,6 +77,56 @@ $(function() { chat.find(".window[data-id='" + id + "']") .bringToTop(); }); + + chat.on("submit", "form", function() { + var input = $(this).find(".input"); + var text = input.val(); + if (text != "") { + input.val(""); + socket.emit("input", { + id: input.data("target"), + text: text + }); + } + }); + + chat.on("click", ".close", function() { + var btn = $(this); + btn.prop("disabled", true); + socket.emit("input", { + id: btn.closest(".window").data("id"), + text: "/LEAVE" + }); + }); + + chat.on("append", ".window", function() { + var id = $(this).data("id"); + var badge = sidebar.find(".channel[data-id='" + id + "']:not(.active) .badge"); + badge.html((parseInt(badge.html()) + 1) || "1"); + }); + + chat.on("click", ".user", function(e) { + e.preventDefault(); + }); + + chat.on("dblclick", ".user", function() { + var user = $(this); + var id = user.closest(".window").data("id"); + var name = user.attr("href"); + + var channel = sidebar + .find(".channel[data-id='" + id + "']") + .siblings(".channel[data-name='" + name + "']"); + if (channel.size() != 0) { + channel.trigger("click"); + return; + } + + socket.emit("input", { + id: id, + text: "/QUERY " + name + }); + }); }); (function($) { diff --git a/lib/models.js b/lib/models.js index 49830d5..1317451 100644 --- a/lib/models.js +++ b/lib/models.js @@ -13,6 +13,7 @@ var id = 1; models.User = Backbone.Model.extend({ defaults: { + mode: "", name: "" } }); diff --git a/lib/server.js b/lib/server.js index 8bb9953..0bce119 100644 --- a/lib/server.js +++ b/lib/server.js @@ -138,22 +138,6 @@ function handleInput(input) { ); break; - case "QUERY": - var irc = network.irc; - if (!argv[1] || typeof irc === "undefined") { - break; - } - - var channels = network.get("channels"); - if (argv[1].charAt(0) != "#" && !channels.findWhere({name: argv[1]})) { - channels.add( - new models.Channel({ - name: argv[1] - }) - ); - } - break; - case "TOPIC": var irc = network.irc; if (typeof irc === "undefined") { @@ -192,6 +176,7 @@ function handleInput(input) { } break; + case "QUERY": case "WHOIS": var irc = network.irc; if (typeof irc !== "undefined") { @@ -275,6 +260,7 @@ function handleEvent(argv) { if (typeof channel == "undefined") { channel = channels.add( new models.Channel({ + type: "query", name: target }) ); @@ -551,6 +537,7 @@ function handleEvent(argv) { if (typeof channel == "undefined") { channel = channels.add( new models.Channel({ + type: "query", name: argv.args[1] }) );