Does anybody know the history as to why GWT's Label widget uses a <div> instead of a <label> tag?
The label tag allows the label to be tied to another element, such as the input tag, for accessibility, yet that seems lost with the Label widget. Seems like Label was a misnomer and should have been called Text to parallel HTML. As for myself, I essentially copied the GWT Label widget source to make my own Label that creates a <label> instead. It's below if anybody cares. I removed all of the deprecated stuff from GWT Label since it's a new class. And I don't set the default style to be gwt- Label since that would surely match more than expected and use esf- Label just for keeping it in sync. And because it's a label tag, the label can also be HTML or Text. package com.esignforms.open.gwt.client.widget; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasAllMouseHandlers; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseDownHandler; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseMoveHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.event.dom.client.MouseUpEvent; import com.google.gwt.event.dom.client.MouseUpHandler; import com.google.gwt.event.dom.client.MouseWheelEvent; import com.google.gwt.event.dom.client.MouseWheelHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.i18n.client.BidiUtils; import com.google.gwt.i18n.client.HasDirection; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasText; import com.google.gwt.user.client.ui.HasWordWrap; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; /** * A widget that creates a <label> tag. This code was based on the Google com.google.gwt.user.client.ui.Label widget that * creates a DIV/SPAN, with all of the deprecated code removed. */ public class Label extends Widget implements HasHorizontalAlignment, HasText, HasWordWrap, HasDirection, HasClickHandlers, HasAllMouseHandlers { /** * Creates a Label widget that wraps an existing <div> or <span> * element. * * This element must already be attached to the document. If the element is * removed from the document, you must call * {...@link RootPanel#detachNow(Widget)}. * * @param element the element to be wrapped */ public static Label wrap(Element element) { // Assert that the element is attached. assert Document.get().getBody().isOrHasChild(element); Label label = new Label(element); // Mark it attached and remember it for cleanup. label.onAttach(); RootPanel.detachOnWindowClose(label); return label; } private HorizontalAlignmentConstant horzAlign; /** * Creates an empty label. */ public Label() { setElement(Document.get().createLabelElement()); setStyleName("esf-Label"); } /** * Creates a label with the specified text. * * @param text the new label's text */ public Label(String text) { this(); setText(text); } /** * Creates a label with the specified text. * * @param text the new label's text * @param wordWrap <code>false</code> to disable word wrapping */ public Label(String text, boolean wordWrap) { this(text); setWordWrap(wordWrap); } /** * This constructor may be used by subclasses to explicitly use an existing * element. This element must be a <label> element. * * @param element the element to be used */ protected Label(Element element) { setElement(element); assert element.getTagName().equalsIgnoreCase("label"); } public HandlerRegistration addClickHandler(ClickHandler handler) { return addDomHandler(handler, ClickEvent.getType()); } public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { return addDomHandler(handler, MouseDownEvent.getType()); } public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) { return addDomHandler(handler, MouseMoveEvent.getType()); } public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { return addDomHandler(handler, MouseOutEvent.getType()); } public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { return addDomHandler(handler, MouseOverEvent.getType()); } public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) { return addDomHandler(handler, MouseUpEvent.getType()); } public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) { return addDomHandler(handler, MouseWheelEvent.getType()); } public Direction getDirection() { return BidiUtils.getDirectionOnElement(getElement()); } public HorizontalAlignmentConstant getHorizontalAlignment() { return horzAlign; } public String getText() { return getElement().getInnerText(); } /** * Returns the HTML if it is set to HTML. * @return the getInnerHTML of the element. */ public String getHTML() { return getElement().getInnerHTML(); } public boolean getWordWrap() { return !getElement().getStyle().getProperty("whiteSpace").equals ("nowrap"); } public void setDirection(Direction direction) { BidiUtils.setDirectionOnElement(getElement(), direction); } public void setHorizontalAlignment(HorizontalAlignmentConstant align) { horzAlign = align; getElement().getStyle().setProperty("textAlign", align.getTextAlignString()); } public void setText(String text) { getElement().setInnerText(text); } /** * Sets the label value to be the specified HTML. * @param html the HTML value of the label. */ public void setHTML(String html) { getElement().setInnerHTML(html); } public void setWordWrap(boolean wrap) { getElement().getStyle().setProperty("whiteSpace", wrap ? "normal" : "nowrap"); } } -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.