[Zope3-dev] zope.app.form generates invalid HTML

Andreas Reuleaux reuleaux at web.de
Fri Feb 23 21:48:29 EST 2007


Try 
 
  #form\.title

i.e. you have to escape the dot otherwise
FF thinks it's for an element with class title

  <... id="form" class="title" ...>


at least that works for me in a very simple example:

  <p id="x.y">hallo</p>

  #x\.y {
    ...
  }

just my 2 cents

-Andreas


On Fri, Feb 23, 2007 at 02:13:23AM +0000, Martin Aspeli wrote:
> Hi guys,
> 
> I'm pretty sure you're not allowed dots in ids of HTML elements. At 
> least not when they are prefixed by 'form'. A zope.schema.TextLine in a 
> formlib form, for example, generates HTML like this:
> 
>   <input id="form.title" class="textType" type="text" value="Changed 
> title" size="20" name="form.title"/>
> 
> In particular, we want to style the fields to look a bit more like 
> Plone, and we have special cases for "title" and "description" that we 
> want to style by ID, not class.
> 
> However, CSS like this has no effect in Firefox or Safari:
> 
> #form.title {
>     font-size: 160%;
>     font-family: <dtml-var headingFontFamily>;
>     font-weight: normal;
>     width: 99%;
> }
> #form.description {
>     font: 100% <dtml-var fontFamily>;
>     font-weight: bold;
>     height: 6em;
>     width: 99%;
> }
> 
> Not all that surprising - it could look like I'm styling a form with 
> class="description".
> 
> I then hacked zope.app.form.widget's renderElement() function to look 
> like this:
> 
> def renderTag(tag, **kw):
>     """Render the tag. Well, not all of it, as we may want to / it."""
> 
>      if 'id' in kw:
>         kw['id'] = kw['id'].replace('.', '-')
> 
>      ...
> 
> The tests in zope.app.form still pass.
> 
> Hacky, but the alternatives are to (a) override all the widgets or (b) 
> at least provide custom ones only for the purpose of getting stylable 
> ids on various fields. renderTag() is called from a lot of places with 
> id=self.name. We could fix all those, too, of course.
> 
> I would be happy to submit a patch for either the explicit check in 
> renderTag() or for changing all calls to this in zope.app.form.
> 
> However, if someone has depended on the ids being with dots (possibly 
> not quite as likely as it may seem, since these forms are typically 
> auto-generated) then we may not have a decent way of deprecating that.
> 
> Martin
> 
> _______________________________________________
> Zope3-dev mailing list
> Zope3-dev at zope.org
> Unsub: http://mail.zope.org/mailman/options/zope3-dev/reuleaux%40web.de
> 
> 
> 
> !DSPAM:45defabb202742984811091!


More information about the Zope3-dev mailing list