"use strict"; import socket from "../socket"; export function generateChannelContextMenu($root, channel, network) { const typeMap = { lobby: "network", channel: "chan", query: "query", special: "chan", }; const closeMap = { lobby: "Remove", channel: "Leave", query: "Close", special: "Close", }; let items = [ { label: channel.name, type: "item", class: typeMap[channel.type], link: `/chan-${channel.id}`, }, { type: "divider", }, ]; // Add menu items for lobbies if (channel.type === "lobby") { items = [ ...items, { label: "Edit this network…", type: "item", class: "edit", link: `/edit-network/${network.uuid}`, }, { label: "Join a channel…", type: "item", class: "join", action: () => (network.isJoinChannelShown = true), }, { label: "List all channels", type: "item", class: "list", action: () => socket.emit("input", { target: channel.id, text: "/list", }), }, { label: "List ignored users", type: "item", class: "list", action: () => socket.emit("input", { target: channel.id, text: "/ignorelist", }), }, network.status.connected ? { label: "Disconnect", type: "item", class: "disconnect", action: () => socket.emit("input", { target: channel.id, text: "/disconnect", }), } : { label: "Connect", type: "item", class: "connect", action: () => socket.emit("input", { target: channel.id, text: "/connect", }), }, ]; } // Add menu items for channels if (channel.type === "channel") { items.push({ label: "Edit topic", type: "item", class: "edit", action() { channel.editTopic = true; $root.switchToChannel(channel); }, }); items.push({ label: "List banned users", type: "item", class: "list", action() { socket.emit("input", { target: channel.id, text: "/banlist", }); }, }); } // Add menu items for queries if (channel.type === "query") { items.push({ label: "User information", type: "item", class: "action-whois", action() { $root.switchToChannel(channel); socket.emit("input", { target: channel.id, text: "/whois " + channel.name, }); }, }); } // Add close menu item items.push({ label: closeMap[channel.type], type: "item", class: "close", action() { $root.closeChannel(channel); }, }); return items; } export function generateUserContextMenu($root, channel, network, user) { const currentChannelUser = channel.users.find((u) => u.nick === network.nick) || {}; const whois = () => { const chan = $root.$store.getters.findChannelOnCurrentNetwork(user.nick); if (chan) { $root.switchToChannel(chan); } socket.emit("input", { target: channel.id, text: "/whois " + user.nick, }); }; const items = [ { label: user.nick, type: "item", class: "user", action: whois, }, { type: "divider", }, { label: "User information", type: "item", class: "action-whois", action: whois, }, { label: "Direct messages", type: "item", class: "action-query", action() { const chan = $root.$store.getters.findChannelOnCurrentNetwork(user.nick); if (chan) { $root.switchToChannel(chan); } socket.emit("input", { target: channel.id, text: "/query " + user.nick, }); }, }, ]; if (currentChannelUser.mode === "@") { items.push({ label: "Kick", type: "item", class: "action-kick", action() { socket.emit("input", { target: channel.id, text: "/kick " + user.nick, }); }, }); if (user.mode === "@") { items.push({ label: "Revoke operator (-o)", type: "item", class: "action-op", action() { socket.emit("input", { target: channel.id, text: "/deop " + user.nick, }); }, }); } else { items.push({ label: "Give operator (+o)", type: "item", class: "action-op", action() { socket.emit("input", { target: channel.id, text: "/op " + user.nick, }); }, }); } if (user.mode === "+") { items.push({ label: "Revoke voice (-v)", type: "item", class: "action-voice", action() { socket.emit("input", { target: channel.id, text: "/devoice " + user.nick, }); }, }); } else { items.push({ label: "Give voice (+v)", type: "item", class: "action-voice", action() { socket.emit("input", { target: channel.id, text: "/voice " + user.nick, }); }, }); } } return items; } export function generateRemoveNetwork($root, lobby) { return [ { label: lobby.name, type: "item", class: "network", }, { type: "divider", }, { label: "Yes, remove this", type: "item", action() { lobby.closed = true; socket.emit("input", { target: Number(lobby.id), text: "/quit", }); }, }, { label: "Cancel", type: "item", }, ]; }