mirror of
https://codeberg.org/emersion/gamja
synced 2025-03-15 00:47:46 +01:00
Make nick links clickable
This commit is contained in:
parent
4485950b67
commit
c05af5bb6d
@ -48,6 +48,7 @@ export default class App extends Component {
|
|||||||
this.handleConnectSubmit = this.handleConnectSubmit.bind(this);
|
this.handleConnectSubmit = this.handleConnectSubmit.bind(this);
|
||||||
this.handleBufferListClick = this.handleBufferListClick.bind(this);
|
this.handleBufferListClick = this.handleBufferListClick.bind(this);
|
||||||
this.handleComposerSubmit = this.handleComposerSubmit.bind(this);
|
this.handleComposerSubmit = this.handleComposerSubmit.bind(this);
|
||||||
|
this.handleNickClick = this.handleNickClick.bind(this);
|
||||||
|
|
||||||
if (window.localStorage && localStorage.getItem("autoconnect")) {
|
if (window.localStorage && localStorage.getItem("autoconnect")) {
|
||||||
var connectParams = JSON.parse(localStorage.getItem("autoconnect"));
|
var connectParams = JSON.parse(localStorage.getItem("autoconnect"));
|
||||||
@ -310,11 +311,23 @@ export default class App extends Component {
|
|||||||
this.connect(connectParams);
|
this.connect(connectParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleNickClick(nick) {
|
||||||
|
this.open(nick);
|
||||||
|
}
|
||||||
|
|
||||||
isChannel(name) {
|
isChannel(name) {
|
||||||
// TODO: use the ISUPPORT token if available
|
// TODO: use the ISUPPORT token if available
|
||||||
return irc.STD_CHANNEL_TYPES.indexOf(name[0]) >= 0;
|
return irc.STD_CHANNEL_TYPES.indexOf(name[0]) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open(target) {
|
||||||
|
if (this.isChannel(target)) {
|
||||||
|
this.client.send({ command: "JOIN", params: [target] });
|
||||||
|
}
|
||||||
|
this.createBuffer(target);
|
||||||
|
this.switchBuffer(target);
|
||||||
|
}
|
||||||
|
|
||||||
close(target) {
|
close(target) {
|
||||||
if (target == SERVER_BUFFER) {
|
if (target == SERVER_BUFFER) {
|
||||||
this.client.close();
|
this.client.close();
|
||||||
@ -342,6 +355,14 @@ export default class App extends Component {
|
|||||||
}
|
}
|
||||||
this.client.close();
|
this.client.close();
|
||||||
break;
|
break;
|
||||||
|
case "query":
|
||||||
|
var nick = args[0];
|
||||||
|
if (!nick) {
|
||||||
|
console.error("Missing nickname");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.open(nick);
|
||||||
|
break;
|
||||||
case "close":
|
case "close":
|
||||||
var target = this.state.activeBuffer;
|
var target = this.state.activeBuffer;
|
||||||
if (!target || target == SERVER_BUFFER) {
|
if (!target || target == SERVER_BUFFER) {
|
||||||
@ -444,7 +465,7 @@ export default class App extends Component {
|
|||||||
${topbar}
|
${topbar}
|
||||||
<${ScrollManager} target=${this.buffer} scrollKey=${this.state.activeBuffer}>
|
<${ScrollManager} target=${this.buffer} scrollKey=${this.state.activeBuffer}>
|
||||||
<section id="buffer" ref=${this.buffer}>
|
<section id="buffer" ref=${this.buffer}>
|
||||||
<${Buffer} buffer=${activeBuffer}/>
|
<${Buffer} buffer=${activeBuffer} onNickClick=${this.handleNickClick}/>
|
||||||
</section>
|
</section>
|
||||||
</>
|
</>
|
||||||
<${Composer} ref=${this.composer} readOnly=${this.state.activeBuffer == SERVER_BUFFER} onSubmit=${this.handleComposerSubmit}/>
|
<${Composer} ref=${this.composer} readOnly=${this.state.activeBuffer == SERVER_BUFFER} onSubmit=${this.handleComposerSubmit}/>
|
||||||
|
@ -13,7 +13,7 @@ function djb2(s) {
|
|||||||
function Nick(props) {
|
function Nick(props) {
|
||||||
function handleClick(event) {
|
function handleClick(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// TODO
|
props.onClick();
|
||||||
}
|
}
|
||||||
|
|
||||||
var colorIndex = djb2(props.nick) % 16 + 1;
|
var colorIndex = djb2(props.nick) % 16 + 1;
|
||||||
@ -25,6 +25,12 @@ function Nick(props) {
|
|||||||
function LogLine(props) {
|
function LogLine(props) {
|
||||||
var msg = props.message;
|
var msg = props.message;
|
||||||
|
|
||||||
|
function createNick(nick) {
|
||||||
|
return html`
|
||||||
|
<${Nick} nick=${nick} onClick=${() => props.onNickClick(nick)}/>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
var date = new Date(msg.tags["time"]);
|
var date = new Date(msg.tags["time"]);
|
||||||
var timestamp = date.toLocaleTimeString(undefined, {
|
var timestamp = date.toLocaleTimeString(undefined, {
|
||||||
timeStyle: "short",
|
timeStyle: "short",
|
||||||
@ -46,32 +52,32 @@ function LogLine(props) {
|
|||||||
var action = text.slice(actionPrefix.length, -1);
|
var action = text.slice(actionPrefix.length, -1);
|
||||||
|
|
||||||
lineClass = "me-tell";
|
lineClass = "me-tell";
|
||||||
content = html`* <${Nick} nick=${msg.prefix.name}/> ${linkify(action)}`;
|
content = html`* ${createNick(msg.prefix.name)} ${linkify(action)}`;
|
||||||
} else {
|
} else {
|
||||||
lineClass = "talk";
|
lineClass = "talk";
|
||||||
content = html`${"<"}<${Nick} nick=${msg.prefix.name}/>${">"} ${linkify(text)}`;
|
content = html`${"<"}${createNick(msg.prefix.name)}${">"} ${linkify(text)}`;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "JOIN":
|
case "JOIN":
|
||||||
content = html`
|
content = html`
|
||||||
<${Nick} nick=${msg.prefix.name}/> has joined
|
${createNick(msg.prefix.name)} has joined
|
||||||
`;
|
`;
|
||||||
break;
|
break;
|
||||||
case "PART":
|
case "PART":
|
||||||
content = html`
|
content = html`
|
||||||
<${Nick} nick=${msg.prefix.name}/> has left
|
${createNick(msg.prefix.name)} has left
|
||||||
`;
|
`;
|
||||||
break;
|
break;
|
||||||
case "NICK":
|
case "NICK":
|
||||||
var newNick = msg.params[0];
|
var newNick = msg.params[0];
|
||||||
content = html`
|
content = html`
|
||||||
<${Nick} nick=${msg.prefix.name}/> is now known as <${Nick} nick=${newNick}/>
|
${createNick(msg.prefix.name)} is now known as <${Nick} nick=${newNick}/>
|
||||||
`;
|
`;
|
||||||
break;
|
break;
|
||||||
case "TOPIC":
|
case "TOPIC":
|
||||||
var topic = msg.params[1];
|
var topic = msg.params[1];
|
||||||
content = html`
|
content = html`
|
||||||
<${Nick} nick=${msg.prefix.name}/> changed the topic to: ${linkify(topic)}
|
${createNick(msg.prefix.name)} changed the topic to: ${linkify(topic)}
|
||||||
`;
|
`;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -91,7 +97,7 @@ export default function Buffer(props) {
|
|||||||
return html`
|
return html`
|
||||||
<div class="logline-list">
|
<div class="logline-list">
|
||||||
${props.buffer.messages.map((msg) => html`
|
${props.buffer.messages.map((msg) => html`
|
||||||
<${LogLine} message=${msg}/>
|
<${LogLine} message=${msg} onNickClick=${props.onNickClick}/>
|
||||||
`)}
|
`)}
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user