hswidget
Version:
Helpful Scripts UI widgets
126 lines • 12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeAhead = void 0;
const hsutil_1 = require("hsutil");
const log = new hsutil_1.Log('TypeAhead');
const mithril_1 = __importDefault(require("mithril"));
function emphasize(item, match) {
const re = new RegExp(match, 'gi');
const decorations = item
.replace(re, (m) => `<b>${m}</b>`)
.split('<')
.map((s) => {
if (s.startsWith('/b>')) {
return mithril_1.default('span', { name: item }, s.slice(3));
}
else if (s.startsWith('b>')) {
return mithril_1.default('b', { name: item }, s.slice(2));
}
else {
return mithril_1.default('span', { name: item }, s);
}
});
return mithril_1.default('span', decorations);
}
class GetList {
constructor(map) {
this.map = map;
this.list = [];
}
search(list) {
if (typeof list === 'string') {
if (this.url !== list) {
this.url = list;
mithril_1.default.request({ method: "GET", url: list })
.then((data) => this.captureList(data, this.map))
.catch((e) => log.warn(`requesting ${list}: ${e.toString()}`));
}
}
else {
this.captureList(list, this.map);
}
}
captureList(list, map) {
this.list = map ? map(list) : list;
}
}
class TypeAhead {
constructor() {
this.gl = new GetList();
}
oninit(node) {
node.state.inputNode = '';
node.state.hidePopdown = true;
node.state.value = '';
node.state.typeAheadList = [];
node.state.onsubmit = node.attrs.onsubmit;
node.state.autocomplete = node.attrs.autocomplete === undefined ? true : node.attrs.autocomplete;
}
view(node) {
this.gl.search(node.attrs.list);
const nosubmit = () => log.warn('no submit function defined');
const getList = (typed) => node.state.typeAheadList = this.gl.list.filter(l => l.match(new RegExp(typed, 'gi')));
const submit = (v) => {
node.state.inputNode.setSelectionRange(0, node.state.inputNode.value.length);
node.state.hidePopdown = true;
return (node.state.onsubmit || nosubmit)(v, node.state.typeAheadList);
};
const select = (e) => {
if (e) {
const selected = e.target.attributes.name.value;
node.state.inputNode.value = selected;
node.state.typeAheadList = getList(selected);
submit(selected);
}
};
const oninput = (e) => {
const n = node.state.inputNode = e.target;
const typed = node.state.value = n.value;
if (typed.length > 0) {
node.state.typeAheadList = getList(typed);
if (node.state.autocomplete) {
autoComplete(typed, node);
}
}
};
const keyPressed = (e) => {
const n = node.state.inputNode = e.target;
node.state.hidePopdown = false;
if (e.code === 'Enter') {
submit(n.value);
}
else if (e.code === 'Escape') {
node.state.hidePopdown = true;
}
else if (e.code === 'Backspace' && n.textLength > 0) {
const input = n.textContent;
if (input.length > 0) {
n.value = input.slice(0);
}
}
};
const selector = node.state.value ? '.hs_typeahead_value' : '.hs_typeahead_placeholder';
return mithril_1.default('.hs_form', [
mithril_1.default(`input.hs_typeahead_input${selector}`, {
contenteditable: true,
placeholder: node.attrs.placeholder,
autofocus: node.attrs.autofocus || true,
onkeydown: keyPressed,
oninput: oninput
}, mithril_1.default.trust(node.state.value ? node.state.value : node.attrs.placeholder)),
node.state.hidePopdown ? undefined :
mithril_1.default('.hs_typeahead_list', node.state.typeAheadList.map((l) => mithril_1.default('', { onclick: select }, emphasize(l, node.state.value))))
]);
}
}
exports.TypeAhead = TypeAhead;
function autoComplete(typed, node) {
const n = node.state.inputNode;
const startOfLineInput = new RegExp(`^${typed}`, 'gi');
n.value = node.state.typeAheadList.filter((l) => l.match(startOfLineInput))[0] || typed;
n.setSelectionRange(typed.length, n.value.length);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZUFoZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1R5cGVBaGVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2Q0EsbUNBQTZCO0FBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxZQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDaEUsc0RBQXdCO0FBSXhCLFNBQVMsU0FBUyxDQUFDLElBQVcsRUFBRSxLQUFZO0lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJO1NBQ25CLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLEdBQUcsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFO1FBQ2QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLE9BQU8saUJBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE9BQU8saUJBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDSCxPQUFPLGlCQUFDLENBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxPQUFPLGlCQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FB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