[ 
http://issues.apache.org/jira/browse/COCOON-1825?page=comments#action_12442276 
] 
            
Guillaume Déflache commented on COCOON-1825:
--------------------------------------------

About Antonio's last comment: I think Vincent needs to tell us why he added a 
'span' element with the 'id' attribute when there already was the 'table' 
element to "hook" the 'id' attribute to. Was that really to workaround an IE 
bug as Sylvain suggested, or was only a copy/paste error?

To sum up, for the others modifications IMHO:
1) "fi:placeholder" should be left alone as Sylvain said
2) "fi:group" and "fi:struct" should use a "div" element instead of a "span" 
one, because if we do so:
   i) hope to validate Cocoon Forms HTML generated pages remains: spans cannot 
contain block markup, whereas divs can contain both inline and block markup, so 
nested "div-fi:*'s" are more likely to produce valid HTML
   ii) this is consistent with the way "fi:union" is already handled
   also:
   iii) for rendering issues, these divs can always be made inline in CSS if 
needed
   iv) in practice groups (and structs? never used them) almost always are 
block-level anyway... 
 3) BTW the "fi:imagemap" template probably also lacks an "id" attribute... and 
I have not checked "advanced" styling, there could be more missing... (BTW 
isn't GoogleMap widget _advanced_ styling!?!)

So I volunteer to redo the 1st proposed patch with all above suggestions 
applied! :)
But please Vincent do tell us what was your purpose with the "double-id" thingy!

BTW perhaps someone could add "[PATCH]" in the subject (and fix the typo...) to 
show a patch is available?

> Ajax errror when an active state widget become invisible state widget
> ---------------------------------------------------------------------
>
>                 Key: COCOON-1825
>                 URL: http://issues.apache.org/jira/browse/COCOON-1825
>             Project: Cocoon
>          Issue Type: Bug
>          Components: Blocks: Forms
>    Affects Versions: 2.1.9
>            Reporter: vincent Demay
>         Assigned To: Antonio Gallardo
>
> Some widget (field with selection-list and styling=radio, group, etc...)  can 
> not be hidden (state=invisible)in ajax mode.
> I declare some widgets without state attribute in the form definition, my 
> form is in ajax mode, when I set the widget state to INVISIBLE, the ajax 
> response can not be applied to the form because <span 
> id="widget-name">...</span> is not available in source code.
> I think about 2 patches : 
> *putting a <span></span> in forms-field-styling.xsl where is not set
> *or modifing abstractWidgetDefinition.java in ordre to generate a placeholder 
> around each widget (but patch seems to need a lot of modification in 
> forms-field-styling.xsl too)
> Here is the patch for first 
> --- forms-field-styling.orig  2006-04-13 15:37:06.590221200 +0200
> +++ forms-field-styling.xsl   2006-04-13 15:38:22.525291200 +0200
> @@ -198,8 +198,9 @@
>      <xsl:variable name="value" select="fi:value"/>
>      <xsl:variable name="vertical" 
> select="string(fi:styling/@list-orientation) != 'horizontal'"/>
>      <xsl:choose>
> -      <xsl:when test="$vertical">
> -        <table id="{$id}" cellpadding="0" cellspacing="0" border="0" 
> title="{fi:hint}">
> +      <xsl:when test="$vertical">    
> +               <span id="{$id}">
> +          <table id="{$id}" cellpadding="0" cellspacing="0" border="0" 
> title="{fi:hint}">
>            <xsl:for-each select="fi:selection-list/fi:item">
>              <xsl:variable name="item-id" select="concat($id, ':', 
> position())"/>
>              <tr>
> @@ -224,6 +225,7 @@
>              </tr>
>            </xsl:for-each>
>          </table>
> +        </span>
>        </xsl:when>
>        <xsl:otherwise>
>          <span id="{$id}" title="{fi:hint}">
> @@ -682,22 +684,24 @@
>        | know where to insert the widget if it becomes visible
>        +-->
>    <xsl:template match="fi:placeholder">
> -    <span id="[EMAIL PROTECTED]"/>
> +    <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
>    </xsl:template>
>    
>    <!--+
>        | fi:struct - has no visual representation by default
>        +-->
>    <xsl:template match="fi:struct">
> -    <xsl:apply-templates/>
> +     <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
>    </xsl:template>
>  
>    <!--+
>        | fi:group - has no visual representation by default
>        +-->
>    <xsl:template match="fi:group">
> -    <xsl:apply-templates/>
> +    <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
>    </xsl:template>
> +  
> +  
>  
>    <xsl:template match="@*|node()" priority="-1">
>      <xsl:copy>
> Here for the second
> --- AbstractWidget.orig       2006-04-13 15:31:07.851701200 +0200
> +++ AbstractWidget.java       2006-04-13 15:30:31.446616200 +0200
> @@ -483,6 +483,10 @@
>      public void generateSaxFragment(ContentHandler contentHandler, Locale 
> locale)
>      throws SAXException {
>  
> +     AttributesImpl placeHolderAttrs = new AttributesImpl();
> +     placeHolderAttrs.addCDATAAttribute("id", getRequestParameterName());
> +        contentHandler.startElement(FormsConstants.INSTANCE_NS, 
> "placeholder", FormsConstants.INSTANCE_PREFIX_COLON + "placeholder", 
> placeHolderAttrs);
> +        
>          if (getCombinedState().isDisplayingValues()) {
>              // FIXME: we may want to strip out completely widgets that 
> aren't updated when in AJAX mode
>              String element = this.getXMLElementName();
> @@ -497,15 +501,9 @@
>  
>              generateItemSaxFragment(contentHandler, locale);
>  
> -            contentHandler.endElement(FormsConstants.INSTANCE_NS, element, 
> FormsConstants.INSTANCE_PREFIX_COLON + element);
> -
> -        } else {
> -            // Generate a placeholder that can be used later by AJAX updates
> -            AttributesImpl attrs = new AttributesImpl();
> -            attrs.addCDATAAttribute("id", getRequestParameterName());
> -            contentHandler.startElement(FormsConstants.INSTANCE_NS, 
> "placeholder", FormsConstants.INSTANCE_PREFIX_COLON + "placeholder", attrs);
> -            contentHandler.endElement(FormsConstants.INSTANCE_NS, 
> "placeholder", FormsConstants.INSTANCE_PREFIX_COLON + "placeholder");
> +            contentHandler.endElement(FormsConstants.INSTANCE_NS, element, 
> FormsConstants.INSTANCE_PREFIX_COLON + element);         
>          }
> +        contentHandler.endElement(FormsConstants.INSTANCE_NS, "placeholder", 
> FormsConstants.INSTANCE_PREFIX_COLON + "placeholder");
>      }
>  
>       public Object getAttribute(String name) {

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to