@muban/muban
Version:
Writing components for server-rendered HTML
54 lines (53 loc) • 2.25 kB
JavaScript
import { attrBinding } from './dom/attrBinding';
import { checkedBinding, checkedValueBinding } from './dom/checkedBinding';
import { cssBinding } from './dom/cssBinding';
import { disableBinding, enableBinding } from './dom/enableDisableBinding';
import { eventBinding, createEventBinding } from './dom/eventBinding';
import { hasFocusBinding } from './dom/hasFocusBinding';
import { htmlBinding } from './dom/htmlBinding';
import { styleBinding } from './dom/styleBinding';
import { submitBinding } from './dom/submitBinding';
import { textBinding } from './dom/textBinding';
import { textInputBinding } from './dom/textInputBinding';
import { valueBinding } from './dom/valueBinding';
import { hiddenBinding, visibleBinding } from './dom/visibleHiddenBinding';
export const bindingsList = {
event: eventBinding,
click: createEventBinding('click'),
mousedown: createEventBinding('mousedown'),
mouseenter: createEventBinding('mouseenter'),
mouseleave: createEventBinding('mouseleave'),
mousemove: createEventBinding('mousemove'),
mouseout: createEventBinding('mouseout'),
mouseover: createEventBinding('mouseover'),
mouseup: createEventBinding('mouseup'),
submit: submitBinding,
text: textBinding,
html: htmlBinding,
css: cssBinding,
style: styleBinding,
attr: attrBinding,
visible: visibleBinding,
hidden: hiddenBinding,
enable: enableBinding,
disable: disableBinding,
hasFocus: hasFocusBinding,
value: valueBinding,
checked: checkedBinding,
checkedValue: checkedValueBinding,
textInput: textInputBinding,
// bindings that only store data used by other bindings, but not execute any logic
allowUnset: (() => undefined),
initialValueSource: (() => undefined),
// selectedOptions // for multi-select list
// options binding (need to decide if needed, or what to do if options are already rendered in the HTML)
};
export function registerDomBinding(name, fn) {
if (name in bindingsList) {
// eslint-disable-next-line no-console
console.error(`Binding "${name}" has already been registered`);
return;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
bindingsList[name] = fn;
}