hswidget
Version:
Helpful Scripts UI widgets
71 lines • 7.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EditTextarea = void 0;
const hsutil_1 = require("hsutil");
const log = new hsutil_1.Log('EditTextarea');
const mithril_1 = __importDefault(require("mithril"));
const Popup_1 = require("./Popup");
const Widget_1 = require("./Widget");
const EditLabel_1 = require("./EditLabel");
class EditTextarea extends Widget_1.Widget {
oninit(node) {
node.state.editable = false;
node.state.hasFocus = false;
node.state.update = (newValue) => node.attrs.update(newValue);
node.state.blur = (e) => {
node.state.editable = false;
node.state.hasFocus = false;
const content = e.target.value;
node.state.update(content);
};
node.state.toggleEditable = () => node.state.editable = !node.state.editable;
node.state.adjustTextAreaHeight = (dom) => {
if (dom && dom.classList) {
while (!dom.classList.contains('hsedit_textarea')) {
dom = dom.parentElement;
}
const scHeight = dom.scrollHeight;
const height = parseInt(window.getComputedStyle(dom).height);
const h = Math.max(height, scHeight);
dom.style.height = h > 0 ? `${h}px` : 'auto';
const listRow = dom.parentElement.parentElement;
if (listRow.classList.contains('hsedit_list_row')) {
listRow.style.height = h > 0 ? `${h + (node.state.editable ? 4 : 0)}px` : 'auto';
}
}
};
}
onupdate(node) {
if (node.state.editable) {
if (!node.state.hasFocus) {
node.dom.value = node.children || '';
node.dom.focus();
node.dom.select();
node.state.hasFocus = true;
}
node.state.adjustTextAreaHeight(node.dom);
}
}
view(node) {
const onEvent = this.attrs(node.attrs, {
onclick: node.state.toggleEditable,
onupdate: (n) => node.state.adjustTextAreaHeight(n.dom)
});
const children = node.children.join(',');
const html = EditLabel_1.makeHtml('' + children).replace(/\n/g, '<p>');
const content = children ? mithril_1.default.trust(html) : node.attrs.placeholder ?? 'click to enter';
const attrs = () => node.attrs.popup ? Popup_1.Popup.arm(node.attrs.popup, onEvent) : onEvent;
const def = children ? '' : '.default';
return node.state.editable ?
mithril_1.default(`textarea.hs_edit_textarea`, this.attrs(node.attrs, {
wrap: 'physical',
onblur: node.state.blur,
}), content)
: mithril_1.default(`.hs_edit_textarea${def}`, attrs(), content);
}
}
exports.EditTextarea = EditTextarea;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRpdFRleHRhcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VkaXRUZXh0YXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFvQ0EsbUNBQXNDO0FBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxZQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUUsc0RBQXVDO0FBQ3ZDLG1DQUF1QztBQUN2QyxxQ0FDd0M7QUFDeEMsMkNBQTJDO0FBUzNDLE1BQWEsWUFBYSxTQUFRLGVBQU07SUFPcEMsTUFBTSxDQUFDLElBQW1DO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxRQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBTyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBdUIsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixH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