hswidget
Version:
Helpful Scripts UI widgets
92 lines • 7.85 kB
JavaScript
import { Log } from 'hsutil';
const log = new Log('EditLabel');
import m from "mithril";
import { Popup } from './Popup';
import { Widget } from './Widget';
export class EditLabel extends Widget {
onupdate(node) {
const dom = node.dom;
if (dom && node.state.editable && document.activeElement !== node.dom) {
dom.value = node.children || '';
dom.focus();
dom.select();
}
}
oninit(node) {
node.state.editable = false;
node.state.blur = (e) => {
node.state.editable = false;
node.attrs.update(e.target.value);
};
node.state.makeEditable = () => {
node.state.editable = true;
};
node.state.blurIfReturn = (key) => {
key.which === 13 ? key.target.blur() : '';
};
}
view(node) {
const children = node.children.join(',');
const html = makeHtml('' + children);
const content = children ? m.trust(html) : node.attrs.placeholder ?? 'click to enter';
const spanAttrs = this.attrs(node.attrs, { onclick: node.state.makeEditable });
const inputAttrs = this.attrs(node.attrs, { onblur: node.state.blur, onkeyup: node.state.blurIfReturn });
const def = children ? '' : '.default';
return node.state.editable ?
m(`input.hsedit_label`, inputAttrs, '')
: m(`span.hsedit_label${def}`, Popup.arm(node.attrs.popup, spanAttrs), content);
}
}
export class EditDate extends EditLabel {
oninit(node) {
super.oninit(node);
node.state.update = node.attrs.update;
node.attrs.update = (newValue) => {
if (newValue) {
const date = new Date(newValue);
const result = isNaN(date.getTime()) ? 'invalid date' : date.toDateString().slice(4);
node.state.update(result);
}
else {
node.state.update(undefined);
}
};
}
view(node) {
let content = node.children;
if (!content || content === '') {
content = new Date().toDateString();
content = content.slice(4);
}
return super.view(node);
}
}
let convert;
export function makeHtml(content) {
async function loadShowdown() {
try {
log.info(`loading showdown...`);
const showdown = await import('showdown');
log.info(`showdown loaded, creating converter...`);
const converter = new showdown.Converter({
tables: true,
ghCompatibleHeaderId: true,
smartIndentationFix: true,
takslists: true,
strikethrough: true
});
convert = converter.makeHtml.bind(converter);
}
catch (e) {
log.warn(`converting '${content}': ${e}`);
}
}
if (convert) {
return convert(content);
}
else {
loadShowdown();
return content;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRpdExhYmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VkaXRMYWJlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFlLFFBQVEsQ0FBQztBQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pFLE9BQU8sQ0FBQyxNQUFxQixTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFhLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQWUsTUFBTSxFQUFjLE1BQU8sVUFBVSxDQUFDO0FBVTVELE1BQU0sT0FBTyxTQUFVLFNBQVEsTUFBTTtJQUtqQyxRQUFRLENBQUMsSUFBcUM7UUFDMUMsTUFBTSxHQUFHLEdBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN6QixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFTLElBQUssQ0FBQyxHQUFHLEVBQUU7WUFDeEUsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNoQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQWdDO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUssRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUNELElBQUks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