diff --git a/client/js/lounge.js b/client/js/lounge.js index 440920f2..53f8acef 100644 --- a/client/js/lounge.js +++ b/client/js/lounge.js @@ -182,14 +182,12 @@ $(function() { input.val(""); resetInputHeight(input.get(0)); - if (text.indexOf("/collapse") === 0) { - $(".chan.active .toggle-preview.opened").click(); - return; - } - - if (text.indexOf("/expand") === 0) { - $(".chan.active .toggle-preview:not(.opened)").click(); - return; + if (text.charAt(0) === "/") { + const args = text.substr(1).split(" "); + const cmd = args.shift().toLowerCase(); + if (typeof utils.inputCommands[cmd] === "function" && utils.inputCommands[cmd](args)) { + return; + } } socket.emit("input", { @@ -198,18 +196,6 @@ $(function() { }); }); - function findCurrentNetworkChan(name) { - name = name.toLowerCase(); - - return $(".network .chan.active") - .parent(".network") - .find(".chan") - .filter(function() { - return $(this).data("title").toLowerCase() === name; - }) - .first(); - } - $("button#set-nick").on("click", function() { utils.toggleNickEditor(true); @@ -266,7 +252,7 @@ $(function() { chat.on("click", ".inline-channel", function() { var name = $(this).data("chan"); - var chan = findCurrentNetworkChan(name); + var chan = utils.findCurrentNetworkChan(name); if (chan.length) { chan.click(); @@ -284,7 +270,7 @@ $(function() { chat.on("click", ".user", function() { var name = $(this).data("name"); - var chan = findCurrentNetworkChan(name); + var chan = utils.findCurrentNetworkChan(name); if (chan.length) { chan.click(); diff --git a/client/js/utils.js b/client/js/utils.js index 07b1d328..04974c13 100644 --- a/client/js/utils.js +++ b/client/js/utils.js @@ -7,6 +7,8 @@ var serverHash = -1; var lastMessageId = -1; module.exports = { + inputCommands: {collapse, expand, join}, + findCurrentNetworkChan, serverHash, lastMessageId, confirmExit, @@ -19,6 +21,18 @@ module.exports = { requestIdleCallback, }; +function findCurrentNetworkChan(name) { + name = name.toLowerCase(); + + return $(".network .chan.active") + .parent(".network") + .find(".chan") + .filter(function() { + return $(this).data("title").toLowerCase() === name; + }) + .first(); +} + function resetHeight(element) { element.style.height = element.style.minHeight; } @@ -29,6 +43,27 @@ function forceFocus() { input.trigger("click").focus(); } +function collapse() { + $(".chan.active .toggle-button.opened").click(); + return true; +} + +function expand() { + $(".chan.active .toggle-button:not(.opened)").click(); + return true; +} + +function join(args) { + const channel = args[0]; + if (channel) { + const chan = findCurrentNetworkChan(channel); + if (chan.length) { + chan.click(); + return true; + } + } +} + function toggleNickEditor(toggle) { $("#nick").toggleClass("editable", toggle); $("#nick-value").attr("contenteditable", toggle);