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();