cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guillaume Déflache (JIRA) <j...@apache.org>
Subject [jira] Commented: (COCOON-1825) Ajax errror when an active state widget become invisible state widget
Date Sat, 14 Oct 2006 11:04:37 GMT
    [ 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="{@id}"/>
> +    <span id="{@id}"><xsl:apply-templates/></span>
>    </xsl:template>
>    
>    <!--+
>        | fi:struct - has no visual representation by default
>        +-->
>    <xsl:template match="fi:struct">
> -    <xsl:apply-templates/>
> +     <span id="{@id}"><xsl:apply-templates/></span>
>    </xsl:template>
>  
>    <!--+
>        | fi:group - has no visual representation by default
>        +-->
>    <xsl:template match="fi:group">
> -    <xsl:apply-templates/>
> +    <span id="{@id}"><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

       

Mime
View raw message