gamja/components/buffer-header.js

71 lines
1.8 KiB
JavaScript
Raw Normal View History

2020-06-25 12:30:21 -04:00
import { html, Component } from "/lib/index.js";
2020-07-13 07:00:49 -04:00
import linkify from "/lib/linkify.js";
import { strip as stripANSI } from "/lib/ansi.js";
import { BufferType } from "/state.js";
2020-06-25 12:30:21 -04:00
const Status = {
HERE: "here",
GONE: "gone",
OFFLINE: "offline",
};
function NickStatus(props) {
var textMap = {
[Status.HERE]: "User is online",
[Status.GONE]: "User is away",
[Status.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) {
function handlePartClick(event) {
event.preventDefault();
props.onClose();
}
var description = null;
2020-06-26 06:08:14 -04:00
if (props.buffer.serverInfo) {
2021-01-11 12:12:28 -05:00
// TODO: print current connection status
2020-06-26 06:08:14 -04:00
var serverInfo = props.buffer.serverInfo;
description = `Connected to ${serverInfo.name}`;
} 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 || "");
var status = Status.HERE;
2020-06-26 06:45:27 -04:00
if (who.away) {
status = Status.GONE;
}
if (props.buffer.offline) {
status = Status.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
description = html`<${NickStatus} status=${Status.OFFLINE}/> ${props.buffer.name}`;
}
var closeText = "Close";
switch (props.buffer.type) {
case BufferType.SERVER:
closeText = "Disconnect";
break;
case BufferType.CHANNEL:
closeText = "Part";
break;
}
2020-06-25 12:30:21 -04:00
return html`
2020-06-26 06:08:14 -04:00
<span class="description">${description}</span>
2020-06-25 12:30:21 -04:00
<span class="actions">
<a href="#" onClick=${handlePartClick}>${closeText}</a>
2020-06-25 12:30:21 -04:00
</span>
`;
}