From 4b171a6a280b7f9927e95a72470daed551aa6e33 Mon Sep 17 00:00:00 2001 From: Florrie Date: Fri, 17 Jul 2020 18:48:32 -0300 Subject: socket log messages & misc npm updates --- ui.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) (limited to 'ui.js') diff --git a/ui.js b/ui.js index 2777326..6562139 100644 --- a/ui.js +++ b/ui.js @@ -1500,19 +1500,28 @@ class AppElement extends FocusElement { this.SQP.playNext(playingTrack) } + const oldName = item.name if (isGroup(item)) { if (order === 'shuffle') { - item = {items: shuffleArray(flattenGrouplike(item).items)} + item = { + name: `${oldName} (shuffled)`, + items: shuffleArray(flattenGrouplike(item).items) + } } else if (order === 'shuffle-groups') { item = shuffleOrderOfGroups(item) + item.name = `${oldName} (group order shuffled)` } else if (order === 'reverse') { - item = {items: flattenGrouplike(item).items.reverse()} + item = { + name: `${oldName} (reversed)`, + items: flattenGrouplike(item).items.reverse() + } } else if (order === 'reverse-groups') { item = reverseOrderOfGroups(item) + item.name = `${oldName} (group order reversed)` } } else { // Make it into a grouplike that just contains itself. - item = {items: [item]} + item = {name: oldName, items: [item]} } if (where === 'next' || where === 'next-selected' || where === 'end') { @@ -4396,6 +4405,10 @@ class Log extends ListScrollForm { } newLogMessage(text) { + if (this.inputs.length === 10) { + this.removeInput(this.inputs[0]) + } + const logMessage = new LogMessage(text) this.addInput(logMessage) this.fixLayout() @@ -4404,6 +4417,49 @@ class Log extends ListScrollForm { } } -class LogMessage extends Button {} +class LogMessage extends FocusElement { + constructor(text) { + super() + + this.label = new LogMessageLabel(text) + this.addChild(this.label) + } + + fixLayout() { + this.w = this.parent.contentW + this.label.w = this.contentW + this.h = this.label.h + } + + clicked(button) { + if (button === 'left') { + this.root.select(this) + return false + } + } +} + +class LogMessageLabel extends WrapLabel { + writeTextTo(writable) { + const w = this.w + const lines = this.getWrappedLines() + for (let i = 0; i < lines.length; i++) { + const text = this.processFormatting(lines[i]) + writable.write(ansi.moveCursor(this.absTop + i, this.absLeft)) + writable.write(text) + const width = ansi.measureColumns(text) + if (width < w && this.textAttributes.length) { + writable.write(ansi.setAttributes([ansi.A_RESET, ...this.textAttributes])) + writable.write(' '.repeat(w - width)) + } + } + } + + set textAttributes(val) {} + + get textAttributes() { + return this.parent.isSelected ? [40] : [] + } +} module.exports = AppElement -- cgit 1.3.0-6-gf8a5