Fix longstanding itemFormat/focusItemFormat issue

This commit is contained in:
Bryan Ashby 2023-02-19 19:54:46 -07:00
parent 560d608cd2
commit 62735411f6
No known key found for this signature in database
GPG Key ID: C2C1B501E4EFD994
6 changed files with 50 additions and 11 deletions

View File

@ -97,7 +97,7 @@
mci: {
VM1: {
height: 10
width: 20
width: 71
itemFormat: "|00|11{userName:<12}|08: |03{oneliner:<59.59}"
}
TM2: {
@ -229,6 +229,7 @@
VM1: {
height: 10
itemFormat: "|00|11{userName:<12}|08: |03{oneliner:<59.59}"
width: 71
}
TM2: {
focusTextStyle: first lower
@ -486,7 +487,7 @@
activityPubFollowingManager: {
config: {
selectedActorInfoFormat: "|00|15{preferredUsername}\n|02{name}\n{plainTextSummary}"
selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}"
statusIndicatorEnabled: "|00|10√"
staticIndicatorDisabled: "|00|12X"
}
@ -494,13 +495,13 @@
mci: {
VM1: {
height: 15
width: 30
width: 35
itemFormat: "|00|03{subject}|00 {statusIndicator}"
focusItemFormat: "|00|19|15{subject}|00 {statusIndicator}"
}
MT2: {
height: 15
width: 38
width: 34
}
TM3: {
focusTextStyle: first upper

View File

@ -72,10 +72,12 @@ exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule {
},
// :TODO: Only list what's enabled
protocols: ['telnet', 'ssh', 'gopher', 'nntp', 'ws', 'activitypub'],
services: {
inbound: [],
outbound: [''],
},
// :TODO: what should we really be doing here???
// services: {
// inbound: [],
// outbound: [],
// },
openRegistrations: !config.general.closedSystem,
usage: {
users: {

View File

@ -19,6 +19,7 @@ exports.debugEscapedString = debugEscapedString;
exports.stringFromNullTermBuffer = stringFromNullTermBuffer;
exports.stringToNullTermBuffer = stringToNullTermBuffer;
exports.renderSubstr = renderSubstr;
exports.renderTruncate = renderTruncate;
exports.renderStringLength = renderStringLength;
exports.ansiRenderStringLength = ansiRenderStringLength;
exports.formatByteSizeAbbr = formatByteSizeAbbr;
@ -136,13 +137,12 @@ function stylizeString(s, style) {
return s;
}
function pad(s, len, padChar, justify, stringSGR, padSGR, useRenderLen) {
function pad(s, len, padChar, justify, stringSGR, padSGR, useRenderLen = true) {
len = len || 0;
padChar = padChar || ' ';
justify = justify || 'left';
stringSGR = stringSGR || '';
padSGR = padSGR || '';
useRenderLen = _.isUndefined(useRenderLen) ? true : useRenderLen;
const renderLen = useRenderLen ? renderStringLength(s) : s.length;
const padlen = len >= renderLen ? len - renderLen : 0;
@ -290,6 +290,29 @@ function renderSubstr(str, start, length) {
return out;
}
const DefaultTruncateLen = 30;
const DefaultTruncateOmission = '...';
function renderTruncate(str, options) {
// shortcut for empty strings
if (0 === str.length) {
return str;
}
options = options || {};
options.length = options.length || DefaultTruncateLen;
options.omission = _.isString(options.omission)
? options.omission
: DefaultTruncateOmission;
let out = renderSubstr(str, 0, options.length - options.omission.length);
if (out.length < str.length) {
out += options.omission;
}
return out;
}
//
// Method to return the "rendered" length taking into account Pipe and ANSI color codes.
//
@ -464,7 +487,7 @@ function isAnsiLine(line) {
// * Pipe codes
// * Extended (CP437) ASCII - https://www.ascii-codes.com/
// * Tabs
// * Contigous 3+ spaces before the end of the line
// * Contiguous 3+ spaces before the end of the line
//
function isFormattedLine(line) {
if (renderStringLength(line) < line.length) {

View File

@ -98,12 +98,18 @@ function VerticalMenuView(options) {
sgr = index === self.focusedItemIndex ? self.getFocusSGR() : self.getSGR();
}
text = strUtil.renderTruncate(text, {
length: this.dimens.width,
omission: this.truncateOmission,
});
text = `${sgr}${strUtil.pad(
`${text}${this.styleSGR1}`,
this.dimens.width,
this.fillChar,
this.justify
)}`;
self.client.term.write(`${ansi.goto(item.row, self.position.col)}${text}`);
this.setRenderCacheItem(index, text, item.focused);
};

View File

@ -50,6 +50,7 @@ function View(options) {
this.textStyle = options.textStyle || 'normal';
this.focusTextStyle = options.focusTextStyle || this.textStyle;
this.offsetsApplied = false;
this.truncateOmission = options.truncateOmission || '';
if (options.id) {
this.setId(options.id);
@ -273,6 +274,12 @@ View.prototype.setPropertyValue = function (propName, value) {
this.validate = value;
}
break;
case 'truncateOmission':
if (_.isString(value)) {
this.truncateOmission = value;
}
break;
}
if (/styleSGR[0-9]{1,2}/.test(propName)) {