aboutsummaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--components/buffer.js75
-rw-r--r--components/member-list.js19
-rw-r--r--components/membership.js15
3 files changed, 76 insertions, 33 deletions
diff --git a/components/buffer.js b/components/buffer.js
index 3112a57..3b160e3 100644
--- a/components/buffer.js
+++ b/components/buffer.js
@@ -196,11 +196,80 @@ 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(" ")}
`;
- // TODO: case-mapping
- if (buf.name !== target) {
+ if (server.cm(buf.name) !== server.cm(target)) {
content = html`${content} on ${target}`;
}
break;
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`
- <span class="membership ${membclass}" title=${membclass}>
- ${this.props.membership}
- </span>
- `;
- };
-
let title;
let user = this.props.user;
let classes = ["nick"];
diff --git a/components/membership.js b/components/membership.js
index 36b3d73..9f7b4c3 100644
--- a/components/membership.js
+++ b/components/membership.js
@@ -1,21 +1,14 @@
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",
-};
+import * as irc from "../lib/irc.js";
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`
<span class="membership ${name}" title=${name}>
${this.props.value}