Handle click on irc:// channel URLs inside buffers
References: https://todo.sr.ht/~emersion/gamja/71
This commit is contained in:
+11
-24
@@ -5,11 +5,11 @@ linkifyjs.options.defaults.defaultProtocol = "https";
|
||||
linkifyjs.registerCustomProtocol("irc");
|
||||
linkifyjs.registerCustomProtocol("ircs");
|
||||
|
||||
linkifyjs.registerPlugin('ircChannel', ({ scanner, parser, utils }) => {
|
||||
linkifyjs.registerPlugin("ircChannel", ({ scanner, parser, utils }) => {
|
||||
const { POUND, DOMAIN, TLD, LOCALHOST, UNDERSCORE, DOT, HYPHEN } = scanner.tokens;
|
||||
const START_STATE = parser.start;
|
||||
|
||||
const Channel = utils.createTokenClass('ircChannel', {
|
||||
const Channel = utils.createTokenClass("ircChannel", {
|
||||
isLink: true,
|
||||
toHref() {
|
||||
return "irc:///" + this.toString();
|
||||
@@ -36,7 +36,7 @@ linkifyjs.registerPlugin('ircChannel', ({ scanner, parser, utils }) => {
|
||||
CHAN_DIVIDER_STATE.tt(LOCALHOST, CHAN_STATE);
|
||||
});
|
||||
|
||||
export default function linkify(text, onChannelClick) {
|
||||
export default function linkify(text, onClick) {
|
||||
let links = linkifyjs.find(text);
|
||||
|
||||
let children = [];
|
||||
@@ -49,27 +49,14 @@ export default function linkify(text, onChannelClick) {
|
||||
const prefix = text.substring(last, match.start)
|
||||
children.push(prefix);
|
||||
|
||||
// TODO: handle all irc/ircs URLs
|
||||
if (match.href.startsWith("irc:///")) {
|
||||
function onClick(event) {
|
||||
event.preventDefault();
|
||||
onChannelClick(match.value);
|
||||
}
|
||||
children.push(html`
|
||||
<a
|
||||
href="${match.href}"
|
||||
onClick=${onClick}
|
||||
>${match.value}</a>
|
||||
`);
|
||||
} else {
|
||||
children.push(html`
|
||||
<a
|
||||
href=${match.href}
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>${match.value}</a>
|
||||
`);
|
||||
}
|
||||
children.push(html`
|
||||
<a
|
||||
href=${match.href}
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
onClick=${onClick}
|
||||
>${match.value}</a>
|
||||
`);
|
||||
|
||||
last = match.end;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user