/** Focus the last item in the list (if any). */ private void focusLast() { if (listElement.hasChildNodes()) { Element lastElement = listElement.getLastElementChild(); select(lastElement); lastElement.focus(); } }
/** Focus the first item in the list (if any). */ private void focusFirst() { if (listElement.hasChildNodes()) { Element firstElement = listElement.getFirstElementChild(); select(firstElement); firstElement.focus(); } }
/** * Focus the next item in the list, or the first item if we are already at the last. In the case * the list doesn't currently have focus, focus the first element. */ private void focusNext() { final Element current = Elements.getDocument().getActiveElement(); if (current.getParentElement().isEqualNode(listElement)) { final Element next = current.getNextElementSibling(); if (next != null) { select(next); next.focus(); } else { focusFirst(); } } else { // we don't actually have focus, focus the first element focusFirst(); } }
/** * Focus the previous item in the list, or the last item if we are already at the first. In the * case the list doesn't currently have focus, focus the first element. */ private void focusPrevious() { final Element current = Elements.getDocument().getActiveElement(); if (current.getParentElement().isEqualNode(listElement)) { final Element prev = current.getPreviousElementSibling(); if (prev != null) { select(prev); prev.focus(); } else { focusLast(); } } else { // we don't actually have focus, focus the first element focusFirst(); } }
/** Hide the popup. */ public void hide() { // restore previous focus state if (previousFocus != null) { previousFocus.focus(); previousFocus = null; } popupElement.getStyle().setOpacity(0); new Timer() { @Override public void run() { if (popupElement != null) { // detach assist popup popupElement.getParentNode().removeChild(popupElement); popupElement = null; } // remove all items from popup element listElement.setInnerHTML(""); } }.schedule(250); // remove the keyboard listener listElement.removeEventListener(Event.KEYDOWN, keyboardListener); Elements.getDocument().removeEventListener(Event.KEYDOWN, keyboardListener); // remove the mouse listener Elements.getDocument().removeEventListener(Event.MOUSEDOWN, popupListener); }
Element elementToFocus = listElement.getFirstElementChild(); elementToFocus.setAttribute("selected", "true"); elementToFocus.focus();