import { anchorme, html } from "./index.js"; function linkifyChannel(text, transformChannel) { // Don't match punctuation at the end of the channel name const channelRegex = /(?:^|\s)(#[^\s]+[^\s.?!…():;,])/gid; var children = []; var match; var last = 0; while ((match = channelRegex.exec(text)) !== null) { var channel = match[1]; var [start, end] = match.indices[1]; children.push(text.substring(last, start)); children.push(transformChannel(channel)); last = end; } children.push(text.substring(last)); return children; } export default function linkify(text, onChannelClick) { function transformChannel(channel) { function onClick(event) { event.preventDefault(); onChannelClick(channel); } return html` ${channel}`; } var links = anchorme.list(text); var children = []; var last = 0; links.forEach((match) => { const prefix = text.substring(last, match.start) children.push(...linkifyChannel(prefix, transformChannel)); var proto = match.protocol || "https://"; if (match.isEmail) { proto = "mailto:"; } var url = match.string; if (!url.startsWith(proto)) { url = proto + url; } children.push(html`${match.string}`); last = match.end; }); const suffix = text.substring(last) children.push(...linkifyChannel(suffix, transformChannel)); return children; }