formatted
This commit is contained in:
parent
a28135dc11
commit
d6ecd65a81
128
matrix/format.ts
Normal file
128
matrix/format.ts
Normal file
@ -0,0 +1,128 @@
|
||||
import { thousandsSeparator, toHHMMSS, timeSince } from '@squeebot/core/lib/common';
|
||||
import { HTMLFormatter } from '@squeebot/core/lib/types';
|
||||
|
||||
export class MatrixFormatter extends HTMLFormatter {
|
||||
colors: { [key: string]: string } = {
|
||||
black: '#000000',
|
||||
darkblue: '#00007f',
|
||||
green: '#009300',
|
||||
red: '#ff0000',
|
||||
brown: '#7f0000',
|
||||
purple: '#9c009c',
|
||||
gold: '#fc7f00',
|
||||
yellow: '#ffff00',
|
||||
limegreen: '#00fc00',
|
||||
cyan: '#00ffff',
|
||||
lightblue: '#0000fc',
|
||||
blue: '#009393',
|
||||
pink: '#ff00ff',
|
||||
darkgray: '#7f7f7f',
|
||||
gray: '#d2d2d2',
|
||||
white: '#ffffff'
|
||||
};
|
||||
|
||||
public color(color: string, msg: string): string {
|
||||
return `<span data-mx-color="${this.colors[color] || '#000000'}">${msg}</span>`;
|
||||
}
|
||||
|
||||
compose(objs: any): any {
|
||||
const str = [];
|
||||
|
||||
for (const i in objs) {
|
||||
const elem = objs[i];
|
||||
|
||||
const elemType = elem[0];
|
||||
let elemValue = elem[1];
|
||||
const elemParams = elem[2];
|
||||
|
||||
if (!elemValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let valueColor = null;
|
||||
|
||||
// Special types
|
||||
if (elemParams && elemParams.type) {
|
||||
switch (elemParams.type) {
|
||||
case 'time':
|
||||
elemValue = new Date(elemValue).toString();
|
||||
break;
|
||||
case 'metric':
|
||||
elemValue = thousandsSeparator(elemValue);
|
||||
break;
|
||||
case 'timesince':
|
||||
elemValue = timeSince(elemValue);
|
||||
break;
|
||||
case 'duration':
|
||||
elemValue = toHHMMSS(elemValue);
|
||||
break;
|
||||
case 'description':
|
||||
valueColor = 'blue';
|
||||
elemValue = `"${elemValue}"`;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Currently, disregard image fields.
|
||||
if (elemType === 'image') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Bold value
|
||||
if (elemType === 'bold' || elemType === 'b' || elemType === 'strong') {
|
||||
elemValue = this.format('bold', elemValue);
|
||||
}
|
||||
|
||||
// Italic value
|
||||
if (elemType === 'italic' || elemType === 'i' || elemType === 'em' || elemType === 'emphasis') {
|
||||
elemValue = this.format('italic', elemValue);
|
||||
}
|
||||
|
||||
// Underlined value
|
||||
if (elemType === 'underline' || elemType === 'ul') {
|
||||
elemValue = this.format('underline', elemValue);
|
||||
}
|
||||
|
||||
// Colorize the value
|
||||
if (elemParams?.color) {
|
||||
valueColor = elemParams.color;
|
||||
}
|
||||
|
||||
// Add the label, if present
|
||||
if (elemParams?.label) {
|
||||
// Set label color to default
|
||||
let labelColor = 'green';
|
||||
if (elemParams.color) {
|
||||
labelColor = elemParams.color;
|
||||
}
|
||||
|
||||
if (!valueColor) {
|
||||
valueColor = 'blue';
|
||||
}
|
||||
|
||||
// Handle array label
|
||||
// Prefer the label over the icon version.
|
||||
let label = elemParams.label;
|
||||
if (typeof label === 'object') {
|
||||
label = elemParams.label[elemParams.label.length - 1];
|
||||
} else {
|
||||
label = label;
|
||||
}
|
||||
|
||||
// Add colon
|
||||
label = `${label}:`;
|
||||
|
||||
if (valueColor && valueColor === labelColor) {
|
||||
str.push(this.color(valueColor, label + ' ' + elemValue));
|
||||
} else {
|
||||
str.push(this.color(labelColor, label) + ' ' + (valueColor ? this.color(valueColor, elemValue) : elemValue));
|
||||
}
|
||||
} else {
|
||||
str.push(valueColor ? this.color(valueColor, elemValue) : elemValue);
|
||||
}
|
||||
}
|
||||
|
||||
// May return an object, but your protocol must support it.
|
||||
return str.join(' ');
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"name": "matrix",
|
||||
"description": "Matrix.org Service for Squeebot 3",
|
||||
"tags": ["service", "matrix"],
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.3",
|
||||
"dependencies": ["control?"],
|
||||
"npmDependencies": ["matrix-bot-sdk@0.5.19"]
|
||||
}
|
||||
|
@ -20,12 +20,13 @@ import { logger } from '@squeebot/core/lib/core';
|
||||
import {
|
||||
EMessageType,
|
||||
Formatter,
|
||||
HTMLFormatter,
|
||||
IMessage,
|
||||
IMessageTarget,
|
||||
Protocol
|
||||
} from '@squeebot/core/lib/types';
|
||||
|
||||
import { MatrixFormatter } from './format';
|
||||
|
||||
class MatrixMessageAdapter implements IMessage {
|
||||
public time: Date = new Date();
|
||||
public resolved = false;
|
||||
@ -70,7 +71,7 @@ class MatrixMessageAdapter implements IMessage {
|
||||
}
|
||||
|
||||
class MatrixProtocol extends Protocol {
|
||||
public format: Formatter = new HTMLFormatter();
|
||||
public format: Formatter = new MatrixFormatter();
|
||||
public type = 'MatrixProtocol';
|
||||
public nameCache: Map<string, string> = new Map<string, string>();
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
"plugins": [
|
||||
{
|
||||
"name": "matrix",
|
||||
"version": "1.0.2"
|
||||
"version": "1.0.3"
|
||||
}
|
||||
],
|
||||
"typescript": true
|
||||
|
Loading…
Reference in New Issue
Block a user