Replacable class that provides IDs for elements and widgets. By default, asks XDOM for a new unique ID, but can
be customized and replaced to (for example) provide an ID based on specific attributes about the widget or its
location in the application.
While not required, IDs are strongly encouraged to be legal to use in CSS expressions without any escaping, as
various tools such as HtmlLayoutContainer, DomQuery, and XElement will do no escaping when using them. According
to http://www.w3.org/TR/CSS21/grammar.html#scanner, these IDs should match this grammar:
%option case-insensitive
h [0-9a-f]
nonascii [\240-\377]
unicode \\{h}{1,6}(\r\n|[ \t\r\n\f])?
escape {unicode}|\\[^\r\n\f0-9a-f]
nmstart [_a-z]|{nonascii}|{escape}
nmchar [_a-z0-9-]|{nonascii}|{escape}
ident -?{nmstart}{nmchar}*
or roughly expressed as a regex,
-?[_a-zA-Z][_a-zA-Z0-9-]*
.
You can replace the default implementation of this class with your own type that extends it through a replace-with
directive in your module file, something like this:
<replace-with class="path.to.my.CustomDomIdProvider">
<when-type-is class="com.sencha.gxt.core.client.dom.DomIdProvider" />
</replace-with>
In that custom implementation, you can override the two non-static methods:
generateIdForElement(com.google.gwt.dom.client.Element)
, and
generateIdForWidget(com.google.gwt.user.client.ui.Widget)
.