From 17f7af82314e556a216e1c56f556ef97231fa3d4 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:11:22 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/term/widgets/arrows.js | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 js/term/widgets/arrows.js diff --git a/js/term/widgets/arrows.js b/js/term/widgets/arrows.js new file mode 100644 index 0000000..944a2e9 --- /dev/null +++ b/js/term/widgets/arrows.js @@ -0,0 +1,70 @@ +var Comp = Require('com/compat'); + +var Node = Require('term/widgets/node'); +var Box = Require('term/widgets/box'); +var Helpers = Require('term/helpers'); +var Button = Require('term/widgets/button'); + + +// Add up and down arrow buttons on the right outside of a widget +// options.arrows: {up:'[-]',down:'[+]',width:3,height:1,fg:'red',bg:'default'}} +module.exports = function (parent,options,up,down,nocontrol) { + var bbox; + // Bbox computing for button positions; relatives can only be resolved to screen + // coordinates? + bbox=Helpers.bbox(parent.screen,options); + parent._.up = new Button({ + screen: parent.screen, + top: bbox.top+1, + height: options.arrows.height||1, + left: bbox.left+bbox.width, + width: options.arrows.width||3, + content: options.arrows.up||'[-]', + align: 'center', + style: { + fg:options.arrows.fg||'red', + bg: options.arrows.bg||'white', + bold:true, + }, + autoFocus: false, + hidden:options.hidden, + mouse: true + }); + parent._.up.on('press',up); + parent.screen.append(parent._.up); + parent._.down = new Button({ + screen: this.screen, + top: bbox.top+bbox.height-1-(options.arrows.height||1), + height: options.arrows.height||1, + left: bbox.left+bbox.width, + width: options.arrows.width||3, + content: options.arrows.down||'[+]', + align: 'center', + style: { + fg:options.arrows.fg||'red', + bg: options.arrows.bg||'white', + bold:true, + }, + autoFocus: false, + hidden:options.hidden, + mouse: true + }); + parent._.down.on('press',down); + parent.screen.append(parent._.down); + if (!nocontrol) { + parent._hide=parent.hide; + parent.hide = function() { + parent._hide(); + if (parent._.up) parent._.up.hide(); + if (parent._.down) parent._.down.hide(); + parent.screen.render(); + } + parent._show = parent.show; + parent.show = function() { + parent._show(); + if (parent._.up) parent._.up.show(); + if (parent._.down) parent._.down.show(); + parent.screen.render(); + } + } +}