livebook/assets/js/morphdom_callbacks.js
Jonatan Kłosko 8dea99e600
Support inputs (#328)
* Render basic input

* Make each cell type a separate struct

* Add operation to set input value

* Prototype communication

* Make input name editable

* Refactoring

* Unify cell attribute setters

* IO tests

* Document input communication protocol in Runtime

* Add more tests

* Add persistence

* Fix status update on cell attributes change

* Rework persistence

* Integrate input cell with insert mode

* Add missing users keybinding

* Mimic autofocus for dynamically inserted elements

* Support input type selection

* Support URL input and set up validation

* Convert input error into a more meaningful io error

* Add missing client checks

* Consume every input only once per evaluation

* Fixes
2021-06-08 12:33:50 +02:00

26 lines
676 B
JavaScript

const callbacks = {
onBeforeElUpdated(from, to) {
// Keep element attributes starting with data-js-
// which we set on the client.
for (const attr of from.attributes) {
if (attr.name.startsWith("data-js-")) {
to.setAttribute(attr.name, attr.value);
}
}
},
onNodeAdded(node) {
// Mimic autofocus for dynamically inserted elements
if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute("autofocus")) {
node.focus();
if (node.setSelectionRange && node.value) {
const lastIndex = node.value.length;
node.setSelectionRange(lastIndex, lastIndex);
}
}
},
};
export default callbacks;