xP: convert links to link elements

This commit is contained in:
Přemysl Eric Janouch 2022-09-06 14:35:42 +02:00
parent d7b0b447b7
commit d2af6cf64c
Signed by: p
GPG Key ID: A0420B94F92B9493
2 changed files with 25 additions and 8 deletions

View File

@ -86,19 +86,19 @@ body {
padding: .1rem .3rem;
white-space: pre-wrap;
}
.content span.b {
.content .b {
font-weight: bold;
}
.content span.i {
.content .i {
font-style: italic;
}
.content span.u {
.content .u {
text-decoration: underline;
}
.content span.s {
.content .s {
text-decoration: line-through;
}
.content span.m {
.content .m {
font-family: monospace;
}

View File

@ -115,6 +115,24 @@ let BufferList = {
},
}
function linkify(text, attrs, a) {
let re = new RegExp([
/https?:\/\//,
/([^\[\](){}<>"'\s]|\([^\[\](){}<>"'\s]*\))+/,
/[^\[\](){}<>"'\s,.:]/,
].map(r => r.source).join(''), 'g')
let end = 0, match
while ((match = re.exec(text)) !== null) {
if (end < match.index)
a.push(m('span', attrs, text.substring(end, match.index)))
a.push(m('a', {href: match[0], ...attrs}, match[0]))
end = re.lastIndex
}
if (end < text.length)
a.push(m('span', attrs, text.substring(end)))
}
let Content = {
view: vnode => {
let line = vnode.children[0]
@ -139,11 +157,10 @@ let Content = {
line.items.forEach(item => {
switch (item.kind) {
case 'Text':
// TODO: Detect and transform links.
content.push(m('span', {
linkify(item.text, {
class: Array.from(classes.keys()).join(' '),
style: applyColor(fg, bg, inverse),
}, item.text))
}, content)
break
case 'Reset':
classes.clear()