gamja/components/buffer-header.js

116 lines
3 KiB
JavaScript
Raw Normal View History

import { html, Component } from "../lib/index.js";
import linkify from "../lib/linkify.js";
import { strip as stripANSI } from "../lib/ansi.js";
import { BufferType, NetworkStatus } from "../state.js";
2020-06-25 12:30:21 -04:00
2021-01-22 05:53:17 -05:00
const UserStatus = {
HERE: "here",
GONE: "gone",
OFFLINE: "offline",
};
function NickStatus(props) {
var textMap = {
2021-01-22 05:53:17 -05:00
[UserStatus.HERE]: "User is online",
[UserStatus.GONE]: "User is away",
[UserStatus.OFFLINE]: "User is offline",
};
var text = textMap[props.status];
return html`<span class="status status-${props.status}" title=${text}>●</span>`;
}
2020-06-25 12:30:21 -04:00
export default function BufferHeader(props) {
2021-03-09 13:10:22 -05:00
function handleCloseClick(event) {
2020-06-25 12:30:21 -04:00
event.preventDefault();
props.onClose();
}
2021-03-02 10:13:49 -05:00
function handleJoinClick(event) {
event.preventDefault();
props.onJoin();
}
2021-03-08 12:15:04 -05:00
function handleAddNetworkClick(event) {
event.preventDefault();
props.onAddNetwork();
}
2021-03-09 13:10:22 -05:00
function handleManageNetworkClick(event) {
event.preventDefault();
props.onManageNetwork();
}
2020-06-25 12:30:21 -04:00
var description = null;
2020-06-26 06:08:14 -04:00
if (props.buffer.serverInfo) {
2021-01-22 05:53:17 -05:00
switch (props.network.status) {
2021-01-22 12:29:22 -05:00
case NetworkStatus.DISCONNECTED:
2021-01-22 05:53:17 -05:00
description = "Disconnected";
break;
2021-01-22 12:29:22 -05:00
case NetworkStatus.CONNECTING:
2021-01-22 05:53:17 -05:00
description = "Connecting...";
break;
2021-01-22 12:29:22 -05:00
case NetworkStatus.REGISTERING:
description = "Logging in...";
break;
case NetworkStatus.REGISTERED:
2021-01-22 05:53:17 -05:00
var serverInfo = props.buffer.serverInfo;
description = `Connected to ${serverInfo.name}`;
break;
}
2020-06-26 06:08:14 -04:00
} else if (props.buffer.topic) {
description = linkify(stripANSI(props.buffer.topic));
} else if (props.buffer.who) {
var who = props.buffer.who;
2020-06-26 06:45:27 -04:00
var realname = stripANSI(who.realname || "");
2021-01-22 05:53:17 -05:00
var status = UserStatus.HERE;
2020-06-26 06:45:27 -04:00
if (who.away) {
2021-01-22 05:53:17 -05:00
status = UserStatus.GONE;
}
if (props.buffer.offline) {
2021-01-22 05:53:17 -05:00
status = UserStatus.OFFLINE;
2020-06-26 06:45:27 -04:00
}
description = html`<${NickStatus} status=${status}/> ${realname} (${who.username}@${who.hostname})`;
} else if (props.buffer.offline) {
// User is offline, but we don't have WHO information
2021-01-22 05:53:17 -05:00
description = html`<${NickStatus} status=${UserStatus.OFFLINE}/> ${props.buffer.name}`;
}
2021-03-02 10:13:49 -05:00
var actions = null;
switch (props.buffer.type) {
case BufferType.SERVER:
2021-03-09 13:10:22 -05:00
if (props.isBouncer) {
if (props.network.isupport.get("BOUNCER_NETID")) {
actions = html`
<a href="#" onClick=${handleJoinClick}>Join</a>
${" "}
<a href="#" onClick=${handleManageNetworkClick}>Manage network</a>
`;
} else {
actions = html`
<a href="#" onClick=${handleAddNetworkClick}>Add network</a>
${" "}
<a href="#" onClick=${handleCloseClick}>Disconnect</a>
`;
}
2021-03-08 12:15:04 -05:00
} else {
2021-03-09 13:10:22 -05:00
actions = html`
<a href="#" onClick=${handleJoinClick}>Join</a>
${" "}
<a href="#" onClick=${handleCloseClick}>Disconnect</a>
`;
2021-03-08 12:15:04 -05:00
}
break;
case BufferType.CHANNEL:
2021-03-09 13:10:22 -05:00
actions = html`<a href="#" onClick=${handleCloseClick}>Part</a>`;
break;
case BufferType.NICK:
actions = html`<a href="#" onClick=${handleCloseClick}>Close</a>`;
break;
}
2020-06-25 12:30:21 -04:00
return html`
2020-06-26 06:08:14 -04:00
<span class="description">${description}</span>
2021-03-09 13:10:22 -05:00
<span class="actions">${actions}</span>
2020-06-25 12:30:21 -04:00
`;
}