From 2341228efd02bcd4c99214885a5214826bfffa5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Wed, 7 Sep 2022 15:33:38 +0200 Subject: xP: implement buffer line leakage Rather than on redisplay, these get cleared on reconnect. --- xP/public/xP.css | 3 +++ xP/public/xP.js | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'xP') diff --git a/xP/public/xP.css b/xP/public/xP.css index 77e89fc..05badb0 100644 --- a/xP/public/xP.css +++ b/xP/public/xP.css @@ -63,6 +63,9 @@ body { overflow-y: auto; } +.leaked { + opacity: 50%; +} .date { padding: .3rem; grid-column: span 2; diff --git a/xP/public/xP.js b/xP/public/xP.js index 7bcfeb2..1322a9b 100644 --- a/xP/public/xP.js +++ b/xP/public/xP.js @@ -195,10 +195,12 @@ rpc.addEventListener('BufferActivate', event => { }) rpc.addEventListener('BufferLine', event => { - let e = event.detail, b = buffers.get(e.bufferName) - if (b === undefined) - return - b.lines.push({when: e.when, rendition: e.rendition, items: e.items}) + let e = event.detail, b = buffers.get(e.bufferName), + line = {when: e.when, rendition: e.rendition, items: e.items} + if (b !== undefined) + b.lines.push({...line}) + if (e.leakToActive && (b = buffers.get(bufferCurrent)) !== undefined) + b.lines.push({leaked: true, ...line}) }) rpc.addEventListener('BufferClear', event => { @@ -327,7 +329,7 @@ let Content = { classes.add(c) } let fg = -1, bg = -1, inverse = false - return m('.content', {}, [mark, line.items.flatMap(item => { + return m('.content', vnode.attrs, [mark, line.items.flatMap(item => { switch (item.kind) { case 'Text': return Content.linkify(item.text, { @@ -393,8 +395,12 @@ let Buffer = { lastDateMark = dateMark } - lines.push(m('.time', {}, date.toLocaleTimeString())) - lines.push(m(Content, {}, line)) + let attrs = {} + if (line.leaked) + attrs.class = 'leaked' + + lines.push(m('.time', {...attrs}, date.toLocaleTimeString())) + lines.push(m(Content, {...attrs}, line)) }) return m('.buffer', {}, lines) }, -- cgit v1.2.3