From 2341228efd02bcd4c99214885a5214826bfffa5c Mon Sep 17 00:00:00 2001
From: Přemysl Eric Janouch <p@janouch.name>
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-70-g09d2