From 39de18473466de6c4266872e159e69ef5387e386 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 3 Sep 2024 21:08:13 +0200 Subject: readme: accept patches on Codeberg --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1e71e17..c7b87e2 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ gamja can be configured via a [configuration file] and via [URL parameters]. ## Contributing -Send patches on the [mailing list], report bugs on the [issue tracker]. Discuss -in [#soju on Libera Chat]. +Send patches on [Codeberg] or on the [mailing list], report bugs on the +[issue tracker]. Discuss in [#soju on Libera Chat]. ## License @@ -47,6 +47,7 @@ AGPLv3, see LICENSE. Copyright (C) 2020 The gamja Contributors [gamja]: https://sr.ht/~emersion/gamja/ +[Codeberg]: https://codeberg.org/emersion/gamja [mailing list]: https://lists.sr.ht/~emersion/public-inbox [issue tracker]: https://todo.sr.ht/~emersion/gamja [Parcel]: https://parceljs.org -- cgit v1.2.3 From 9bcfd088c24495659145f3e7c58513eb5c9b72d3 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 7 Sep 2024 12:31:07 +0200 Subject: components/member-list: remove dead code --- components/member-list.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/components/member-list.js b/components/member-list.js index 283892d..f539f76 100644 --- a/components/member-list.js +++ b/components/member-list.js @@ -22,25 +22,6 @@ class MemberItem extends Component { } render() { - // XXX: If we were feeling creative we could generate unique colors for - // each item in ISUPPORT CHANMODES. But I am not feeling creative. - const membmap = { - "~": "owner", - "&": "admin", - "@": "op", - "%": "halfop", - "+": "voice", - }; - const membclass = membmap[this.props.membership[0]] || ""; - let membership = ""; - if (this.props.membership) { - membership = html` - - ${this.props.membership} - - `; - }; - let title; let user = this.props.user; let classes = ["nick"]; -- cgit v1.2.3 From 301f1332728c427e3be7a6fa19148ec9d0012ef7 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 7 Sep 2024 12:36:13 +0200 Subject: lib/irc: move over STD_MEMBERSHIP_NAMES --- components/membership.js | 14 +++----------- lib/irc.js | 8 ++++++++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/components/membership.js b/components/membership.js index 36b3d73..f5ddde4 100644 --- a/components/membership.js +++ b/components/membership.js @@ -1,21 +1,13 @@ import { html, Component } from "../lib/index.js"; -// XXX: If we were feeling creative we could generate unique colors for -// each item in ISUPPORT CHANMODES. But I am not feeling creative. -const names = { - "~": "owner", - "&": "admin", - "@": "op", - "%": "halfop", - "+": "voice", -}; - export default function Membership(props) { if (!this.props.value) { return null; } - const name = names[this.props.value[0]] || ""; + // XXX: If we were feeling creative we could generate unique colors for + // each item in ISUPPORT CHANMODES. But I am not feeling creative. + const name = irc.STD_MEMBERSHIP_NAMES[this.props.value[0]] || ""; return html` ${this.props.value} diff --git a/lib/irc.js b/lib/irc.js index dafa99b..708a614 100644 --- a/lib/irc.js +++ b/lib/irc.js @@ -77,6 +77,14 @@ export const ERR_SASLALREADY = "907"; export const STD_MEMBERSHIPS = "~&@%+"; export const STD_CHANTYPES = "#&+!"; +export const STD_MEMBERSHIP_NAMES = { + "~": "owner", + "&": "admin", + "@": "operator", + "%": "halfop", + "+": "voice", +}; + const tagEscapeMap = { ";": "\\:", " ": "\\s", -- cgit v1.2.3 From 6be24e8ed9baef410063edfd801191193e49f3df Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 7 Sep 2024 12:37:10 +0200 Subject: lib/irc: unexport STD_MEMBERSHIPS and STD_CHANTYPES --- lib/irc.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/irc.js b/lib/irc.js index 708a614..46400df 100644 --- a/lib/irc.js +++ b/lib/irc.js @@ -74,9 +74,6 @@ export const ERR_SASLTOOLONG = "905"; export const ERR_SASLABORTED = "906"; export const ERR_SASLALREADY = "907"; -export const STD_MEMBERSHIPS = "~&@%+"; -export const STD_CHANTYPES = "#&+!"; - export const STD_MEMBERSHIP_NAMES = { "~": "owner", "&": "admin", @@ -85,6 +82,9 @@ export const STD_MEMBERSHIP_NAMES = { "+": "voice", }; +const STD_MEMBERSHIPS = "~&@%+"; +const STD_CHANTYPES = "#&+!"; + const tagEscapeMap = { ";": "\\:", " ": "\\s", -- cgit v1.2.3 From 9e68316467eb71e9cab69e9cfab688cda7bbe667 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 7 Sep 2024 12:45:49 +0200 Subject: components/buffer: use case-mapping when displaying MODE messages --- components/buffer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/buffer.js b/components/buffer.js index 3112a57..86054c3 100644 --- a/components/buffer.js +++ b/components/buffer.js @@ -199,8 +199,7 @@ class LogLine extends Component { content = html` * ${createNick(msg.prefix.name)} sets mode ${msg.params.slice(1).join(" ")} `; - // TODO: case-mapping - if (buf.name !== target) { + if (server.cm(buf.name) !== server.cm(target)) { content = html`${content} on ${target}`; } break; -- cgit v1.2.3 From e1a15ceeb92e59e14b20d7749322d9ee40a43a0b Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 7 Sep 2024 17:59:01 +0200 Subject: components/membership: fix missing import --- components/membership.js | 1 + 1 file changed, 1 insertion(+) diff --git a/components/membership.js b/components/membership.js index f5ddde4..9f7b4c3 100644 --- a/components/membership.js +++ b/components/membership.js @@ -1,4 +1,5 @@ import { html, Component } from "../lib/index.js"; +import * as irc from "../lib/irc.js"; export default function Membership(props) { if (!this.props.value) { -- cgit v1.2.3 From a3b375ab3f07b794c8f98265fb15680b995b1e2e Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 8 Sep 2024 12:47:37 +0200 Subject: components/membership: fix operator color --- style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/style.css b/style.css index d601eb3..b5b364e 100644 --- a/style.css +++ b/style.css @@ -302,7 +302,7 @@ button.danger:hover { .membership.admin { color: blue; } -.membership.op { +.membership.operator { color: var(--green); } .membership.halfop { -- cgit v1.2.3 From 26792ec386c0afc44003397bc5bc6a8d2ebc142a Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 8 Sep 2024 12:48:07 +0200 Subject: components/buffer: add human-readable channel mode changes References: https://todo.sr.ht/~emersion/gamja/162 --- components/buffer.js | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++- lib/irc.js | 8 ++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/components/buffer.js b/components/buffer.js index 86054c3..3a4452c 100644 --- a/components/buffer.js +++ b/components/buffer.js @@ -196,8 +196,78 @@ class LogLine extends Component { break; case "MODE": target = msg.params[0]; + let modeStr = msg.params[1]; + + let user = html`* ${createNick(msg.prefix.name)}`; + + // TODO: use irc.forEachChannelModeUpdate() + if (buf.type == BufferType.CHANNEL && modeStr.length === 2 && server.cm(buf.name) === server.cm(target)) { + let plusMinus = modeStr[0]; + let mode = modeStr[1]; + let arg = msg.params[2]; + + let verb; + switch (mode) { + case "b": + verb = plusMinus === "+" ? "added" : "removed"; + content = html`${user} has ${verb} a ban on ${arg}`; + break; + case "e": + verb = plusMinus === "+" ? "added" : "removed"; + content = html`${user} has ${verb} a ban exemption on ${arg}`; + break; + case "l": + if (plusMinus === "+") { + content = html`${user} has set the channel user limit to ${arg}`; + } else { + content = html`${user} has unset the channel user limit`; + } + break; + case "i": + verb = plusMinus === "+" ? "marked": "unmarked"; + content = html`${user} has ${verb} as invite-only`; + break; + case "m": + verb = plusMinus === "+" ? "marked": "unmarked"; + content = html`${user} has ${verb} as moderated`; + break; + case "s": + verb = plusMinus === "+" ? "marked": "unmarked"; + content = html`${user} has ${verb} as secret`; + break; + case "t": + verb = plusMinus === "+" ? "locked": "unlocked"; + content = html`${user} has ${verb} the channel topic`; + break; + case "n": + verb = plusMinus === "+" ? "allowed": "denied"; + content = html`${user} has ${verb} external messages to this channel`; + break; + } + if (content) { + break; + } + + // Channel membership modes + let membership; + for (let prefix in irc.STD_MEMBERSHIP_MODES) { + if (irc.STD_MEMBERSHIP_MODES[prefix] === mode) { + membership = irc.STD_MEMBERSHIP_NAMES[prefix]; + break; + } + } + if (membership && arg) { + let verb = plusMinus === "+" ? "granted" : "revoked"; + let preposition = plusMinus === "+" ? "to" : "from"; + content = html` + ${user} has ${verb} ${membership} privileges ${preposition} ${createNick(arg)} + `; + break; + } + } + content = html` - * ${createNick(msg.prefix.name)} sets mode ${msg.params.slice(1).join(" ")} + ${user} sets mode ${msg.params.slice(1).join(" ")} `; if (server.cm(buf.name) !== server.cm(target)) { content = html`${content} on ${target}`; diff --git a/lib/irc.js b/lib/irc.js index 46400df..11ea578 100644 --- a/lib/irc.js +++ b/lib/irc.js @@ -82,6 +82,14 @@ export const STD_MEMBERSHIP_NAMES = { "+": "voice", }; +export const STD_MEMBERSHIP_MODES = { + "~": "q", + "&": "a", + "@": "o", + "%": "h", + "+": "v", +}; + const STD_MEMBERSHIPS = "~&@%+"; const STD_CHANTYPES = "#&+!"; -- cgit v1.2.3 From 35e924258aee664ef0728c2712ec1f0d9c565f38 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 8 Sep 2024 12:50:00 +0200 Subject: components/buffer: drop leading asterisk for MODE messages This is inconsistent with other messages. --- components/buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/buffer.js b/components/buffer.js index 3a4452c..3b160e3 100644 --- a/components/buffer.js +++ b/components/buffer.js @@ -198,7 +198,7 @@ class LogLine extends Component { target = msg.params[0]; let modeStr = msg.params[1]; - let user = html`* ${createNick(msg.prefix.name)}`; + let user = html`${createNick(msg.prefix.name)}`; // TODO: use irc.forEachChannelModeUpdate() if (buf.type == BufferType.CHANNEL && modeStr.length === 2 && server.cm(buf.name) === server.cm(target)) { -- cgit v1.2.3