Elemento makes it easy to create custom elements. As for Elemento, custom elements are a composite of HTML elements and / or other custom elements. They're ordinary classes that can hold state or register event handlers. The only requirement is to implement IsElement<E extends Element>
and return a root element:
Copy import static org.jboss.elemento.Elements.*;
class TodoItemElement implements IsElement<HTMLElement> {
private final HTMLElement root;
private final HTMLInputElement toggle;
private final HTMLElement label;
private final HTMLInputElement summary;
TodoItemElement(TodoItem item) {
this.root = li().data("item", item.id)
.add(div().css("view")
.add(toggle = input(checkbox).css("toggle")
.checked(item.completed)
.element())
.add(label = label().text(item.text).element())
.add(destroy = button().css("destroy").element()))
.add(summary = input(text).css("edit").element())
.element();
this.root.classList.toggle("completed", item.completed);
}
@Override
public HTMLElement element() {
return root;
}
// event handlers omitted
}
Copy import static org.jboss.elemento.Elements.ul;
TodoItemRepository repository = ...;
TodoItemElement[] itemElements = repository.items().stream()
.map(TodoItemElement::new)
.toArray();
ul().addAll(itemElements).element();