You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/08/22 17:50:19 UTC

svn commit: r568664 - in /tapestry/tapestry4/trunk: tapestry-examples/Workbench/src/context/ tapestry-examples/Workbench/src/context/WEB-INF/ tapestry-examples/Workbench/src/context/images/ tapestry-framework/src/java/org/apache/tapestry/components/ ta...

Author: jkuhnert
Date: Wed Aug 22 08:50:16 2007
New Revision: 568664

URL: http://svn.apache.org/viewvc?rev=568664&view=rev
Log:
-) Made Rollover work with LinkSubmit.  Fixes TAPESTRY-400. 
-) Updated workbench palette page to use rollover with LinkSubmit.

Added:
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/images/Continue-focus.gif   (with props)
Modified:
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html Wed Aug 22 08:50:16 2007
@@ -28,7 +28,8 @@
 	<tr>
 		<td></td>
 		<td><input jwcid="update"/>
-			<input jwcid="continue"/></td>
+			<a jwcid="continue"><image jwcid="continueRollover" /></a>
+            </td>
 	</tr>
 </table>
 

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page Wed Aug 22 08:50:16 2007
@@ -15,55 +15,59 @@
    limitations under the License.
 -->
 
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
+<!DOCTYPE page-specification PUBLIC
+        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
+        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
+
 <page-specification class="org.apache.tapestry.workbench.palette.Palette">
-  
-  <property name="clientValidationEnabled" persist="client" initial-value="true"/>
- 
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
-  
-  <component id="form" type="Form">
-    <binding name="delegate" value="bean:delegate"/>
-    <binding name="clientValidationEnabled" value="clientValidationEnabled"/>
-    <binding name="refresh" value="listener:doRefresh"/>
-    <binding name="success" value="listener:doAdvance"/>    
-  </component>
-  
-  <component id="inputEnabled" type="Checkbox">
-    <binding name="value" value="clientValidationEnabled"/> 
-    <binding name="onchange" value="literal:tapestry.form.submit(this.form);"/>
-  </component>
-
-  <component id="inputColorSort" type="PropertySelection">
-  	<binding name="value" value="sort"/>
-  	<binding name="model" value="literal:None=NONE,Label=LABEL,Value=VALUE,Manual=USER"/>
-    <binding name="onchange">
-      literal:tapestry.form.refresh(this.form);
-    </binding>
-  </component>
-  
-  <component id="inputColor" type="contrib:Palette">
-    <binding name="model" value="colorModel"/>
-    <binding name="selected" value="selectedColors"/>
-    <binding name="sort" value="sort"/>
-    <binding name="tableClass" value="literal:palette"/>
-    <binding name="displayName" value="literal:Colors"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-  <component id="update" type="ImageSubmit">
-    <binding name="image" value="asset:update"/>
-  </component>
-  
-  <component id="continue" type="ImageSubmit">
-  	<binding name="image" value="asset:continue"/>
-  </component>
- 
-  <asset name="continue" path="images/Continue.gif"/>
-  <asset name="update" path="images/Update.gif"/>
-  
+
+    <property name="clientValidationEnabled" persist="client" initial-value="true"/>
+
+    <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
+
+    <component id="form" type="Form">
+        <binding name="delegate" value="bean:delegate"/>
+        <binding name="clientValidationEnabled" value="clientValidationEnabled"/>
+        <binding name="refresh" value="listener:doRefresh"/>
+        <binding name="success" value="listener:doAdvance"/>
+    </component>
+
+    <component id="inputEnabled" type="Checkbox">
+        <binding name="value" value="clientValidationEnabled"/>
+        <binding name="onchange" value="literal:tapestry.form.submit(this.form);"/>
+    </component>
+
+    <component id="inputColorSort" type="PropertySelection">
+        <binding name="value" value="sort"/>
+        <binding name="model" value="literal:None=NONE,Label=LABEL,Value=VALUE,Manual=USER"/>
+        <binding name="onchange">
+            literal:tapestry.form.refresh(this.form);
+        </binding>
+    </component>
+
+    <component id="inputColor" type="contrib:Palette">
+        <binding name="model" value="colorModel"/>
+        <binding name="selected" value="selectedColors"/>
+        <binding name="sort" value="sort"/>
+        <binding name="tableClass" value="literal:palette"/>
+        <binding name="displayName" value="literal:Colors"/>
+        <binding name="validators" value="validators:required"/>
+    </component>
+
+    <component id="update" type="ImageSubmit">
+        <binding name="image" value="asset:update"/>
+    </component>
+
+    <component id="continue" type="LinkSubmit" />
+
+    <component id="continueRollover" type="Rollover">
+        <binding name="image" value="asset:continue" />
+        <binding name="mouseOver" value="asset:continueFocus" />
+    </component>
+
+    <asset name="continue" path="images/Continue.gif"/>
+    <asset name="continueFocus" path="images/Continue-focus.gif"/>
+    <asset name="update" path="images/Update.gif"/>
+
 </page-specification>
 

Added: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/images/Continue-focus.gif
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/images/Continue-focus.gif?rev=568664&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/images/Continue-focus.gif
------------------------------------------------------------------------------
    svn:mime-type = image/gif

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java Wed Aug 22 08:50:16 2007
@@ -34,7 +34,8 @@
      * Returns the desired scheme (i.e., "http" or "https") for the link, or
      * null to not output a specific scheme (in which case the URL will fall
      * under the incoming request's scheme).
-     * 
+     *
+     * @return The scheme portion of the url to be generated. 
      * @since 4.0
      */
 
@@ -44,7 +45,8 @@
      * Returns the desired port (i.e., "80" or "443") for the link, or null to
      * not output a specific port (in which case the URL will fall under the
      * incoming request's port).
-     * 
+     *
+     * @return The http port to use.
      * @since 4.1
      */
 
@@ -52,7 +54,8 @@
 
     /**
      * Returns whether this service link component is enabled or disabled.
-     * 
+     *
+     * @return True if disabled, false otherwise.
      * @since 0.2.9
      */
 
@@ -60,7 +63,8 @@
 
     /**
      * Returns the anchor defined for this link, or null for no anchor.
-     * 
+     *
+     * @return The <code>#anchorid</code> portion of the url to be generated - if any.
      * @since 3.0
      */
 
@@ -69,7 +73,8 @@
     /**
      * Returns the name of the target window or frame for this link, or null if
      * current window or frame is to be used.
-     * 
+     *
+     * @return The <code>target="_this"</code> portion of the link to be generated - if any.
      * @since 4.0
      */
     String getTarget();
@@ -82,8 +87,14 @@
      * This was created for use by {@link org.apache.tapestry.html.Rollover} to
      * set mouse over and mouse out handlers on the {@link ILinkComponent} that
      * wraps it, but can be used for many other things as well.
-     * 
+     *
+     * @param type
+     *          The type of event to add.
+     * @param functionName
+     *          The name of the client side javascript function to generate.
+     *
      * @since 0.2.9
+     * @deprecated To be removed in Tapestry 4.1.4. 
      */
 
     void addEventHandler(LinkEventType type, String functionName);
@@ -93,6 +104,10 @@
      * link is not disabled) to provide a
      * {@link org.apache.tapestry.engine.EngineServiceLink} that the renderer
      * can convert into a URL.
+     *
+     * @param cycle
+     *          The current request.
+     * @return A {@link ILink} instance representing the link information for this component.
      */
 
     ILink getLink(IRequestCycle cycle);
@@ -102,10 +117,13 @@
      * the link render any additional attributes. These are informal parameters,
      * plus any attributes related to events. This is only invoked for
      * non-disabled links.
-     * 
+     *
+     * @param writer
+     *          Markup writer to write content to.
+     * @param cycle
+     *          The current request.
      * @since 3.0
      */
 
-    void renderAdditionalAttributes(IMarkupWriter writer,
-            IRequestCycle cycle);
+    void renderAdditionalAttributes(IMarkupWriter writer, IRequestCycle cycle);
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java Wed Aug 22 08:50:16 2007
@@ -22,14 +22,14 @@
 /**
  * A base class for building components that correspond to HTML form elements. All such components
  * must be wrapped (directly or indirectly) by a {@link Form} component.
- * 
+ *
  * @author Howard Lewis Ship
  * @author Paul Ferraro
  * @since 1.0.3
  */
 public abstract class AbstractFormComponent extends AbstractComponent implements IFormComponent
 {
-    
+
     public abstract IForm getForm();
 
     public abstract void setForm(IForm form);
@@ -55,7 +55,7 @@
      */
 
     public abstract String getIdParameter();
-    
+
     /**
      * Invoked by {@link AbstractComponent#render(IMarkupWriter, IRequestCycle)} to actually 
      * render the component (with any parameter values already set). 
@@ -64,7 +64,7 @@
      * {@link #renderFormComponent(IMarkupWriter, IRequestCycle)} or 
      * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)}. 
      * Those two are the methods that subclasses should implement. 
-     *  
+     *
      * @see org.apache.tapestry.AbstractComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
      *      org.apache.tapestry.IRequestCycle)
      */
@@ -73,26 +73,26 @@
         IForm form = TapestryUtils.getForm(cycle, this);
 
         setForm(form);
-        
+
         if (form.wasPrerendered(writer, this))
             return;
-        
+
         IValidationDelegate delegate = form.getDelegate();
-        
+
         delegate.setFormComponent(this);
-        
+
         setName(form);
-        
+
         if (form.isRewinding())
         {
             if (!isDisabled())
             {
                 rewindFormComponent(writer, cycle);
             }
-            
+
             // This is for the benefit of the couple of components (LinkSubmit) that allow a body.
             // The body should render when the component rewinds.
-            
+
             if (getRenderBodyOnRewind())
                 renderBody(writer, cycle);
         }
@@ -100,15 +100,15 @@
         {
             if (!NullWriter.class.isInstance(writer))
                 form.setFormFieldUpdating(true);
-            
+
             renderFormComponent(writer, cycle);
-            
+
             if (getCanTakeFocus() && !isDisabled())
             {
-                delegate.registerForFocus(
-                        this,
-                        delegate.isInError() ? ValidationConstants.ERROR_FIELD
-                                : ValidationConstants.NORMAL_FIELD);
+                delegate.registerForFocus(this,
+                                          delegate.isInError()
+                                          ? ValidationConstants.ERROR_FIELD
+                                          : ValidationConstants.NORMAL_FIELD);
             }
 
         }
@@ -121,7 +121,7 @@
      * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)} should leave this method returning
      * false. Remember that if the component is {@link IFormComponent#isDisabled() disabled} then
      * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)} won't be invoked.
-     * 
+     *
      * @return false; override this method to change.
      */
     protected boolean getRenderBodyOnRewind()
@@ -143,19 +143,19 @@
     {
         getForm().getDelegate().writeSuffix(writer, cycle, this, null);
     }
-    
+
     protected void setName(IForm form)
     {
         setName(form.getElementId(this));
     }
-    
+
     /**
      * {@inheritDoc}
      */
     protected void generateClientId()
     {
     }
-    
+
     /**
      * {@inheritDoc}
      */
@@ -163,18 +163,18 @@
     {
         if (getPage() == null)
             return null;
-        
+
         IForm form = (IForm) getPage().getRequestCycle().getAttribute(TapestryUtils.FORM_ATTRIBUTE);
         if (form == null)
             return null;
 
         return form.peekClientId(this);
     }
-    
+
     /**
      * Returns false. Subclasses that might be required must override this method. Typically, this
      * involves checking against the component's validators.
-     * 
+     *
      * @since 4.0
      */
     public boolean isRequired()
@@ -185,7 +185,7 @@
     /**
      * Invoked from {@link #renderComponent(IMarkupWriter, IRequestCycle)} 
      * to render the component. 
-     *  
+     *
      * @param writer
      * @param cycle
      */
@@ -195,7 +195,7 @@
      * Invoked from {@link #renderComponent(IMarkupWriter, IRequestCycle)} to rewind the 
      * component. If the component is {@link IFormComponent#isDisabled() disabled} 
      * this will not be invoked. 
-     * 
+     *
      * @param writer
      * @param cycle
      */

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java Wed Aug 22 08:50:16 2007
@@ -40,7 +40,9 @@
      * Determine if this submit component was clicked.
      * 
      * @param cycle
+     *          The current request.
      * @param name
+     *          The name of this form element.
      * @return true if this submit was clicked
      */
     protected abstract boolean isClicked(IRequestCycle cycle, String name);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java Wed Aug 22 08:50:16 2007
@@ -87,8 +87,9 @@
 
                 writer.attribute("href", getDirectService().getLink(true, dsp).getURL());
                 writer.attribute("onClick", js + "," + json.toString() + "); return false;");                        
-            } else {
-
+            }
+            else
+            {
                 writer.attribute("href", "javascript:" + js + ");");
             }
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java?rev=568664&r1=568663&r2=568664&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java Wed Aug 22 08:50:16 2007
@@ -14,19 +14,14 @@
 
 package org.apache.tapestry.html;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
+import org.apache.tapestry.*;
 import org.apache.tapestry.components.ILinkComponent;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.LinkSubmit;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Combines a link component (such as
@@ -35,7 +30,7 @@
  * Navigator and Internet Explorer. [ <a
  * href="../../../../../ComponentReference/Rollover.html">Component Reference
  * </a>]
- * 
+ *
  * @author Howard Lewis Ship
  */
 
@@ -45,45 +40,58 @@
     /**
      * Converts an {@link IAsset}binding into a usable URL. Returns null if the
      * binding does not exist or the binding's value is null.
+     *
+     * @param asset
+     *          The asset to generate a url for.
+     * @return The url to the asset resource, or null if it couldn't be generated.
      */
 
     protected String getAssetURL(IAsset asset)
     {
-        if (asset == null) return null;
+        if (asset == null)
+            return null;
 
         return asset.buildURL();
     }
 
     protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
     {
-        // No body, so we skip it all if not rewinding (assumes no side effects
-        // on
-        // accessors).
+        // No body, so we skip it all if not rewinding
+        // (assumes no side effects on accessors).
 
-        if (cycle.isRewinding()) 
+        if (cycle.isRewinding())
             return;
 
         String imageURL = null;
         String mouseOverURL = null;
         String mouseOutURL = null;
         boolean dynamic = false;
-        String imageId = null;
+        String imageId;
+        boolean linkDisabled = false;
 
         PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
 
-        ILinkComponent serviceLink = (ILinkComponent) cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-        
+        Object serviceLink = cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
         if (serviceLink == null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("Rollover.must-be-contained-by-link"), this, null, null);
+        {
+            serviceLink = cycle.getAttribute(LinkSubmit.ATTRIBUTE_NAME);
+
+            if (serviceLink != null)
+                linkDisabled = ((IFormComponent) serviceLink).isDisabled();
+        } else
+        {
+            linkDisabled = ((ILinkComponent) serviceLink).isDisabled();
+        }
 
-        boolean linkDisabled = serviceLink.isDisabled();
+        if (serviceLink == null)
+            throw new ApplicationRuntimeException(Tapestry.getMessage("Rollover.must-be-contained-by-link"), this, null, null);
 
         if (linkDisabled)
         {
             imageURL = getAssetURL(getDisabled());
 
-            if (imageURL == null) imageURL = getAssetURL(getImage());
+            if (imageURL == null)
+                imageURL = getAssetURL(getImage());
         }
         else
         {
@@ -103,17 +111,17 @@
 
         if (dynamic)
         {
-            if (mouseOverURL == null) 
+            if (mouseOverURL == null)
                 mouseOverURL = imageURL;
 
-            if (mouseOutURL == null) 
+            if (mouseOutURL == null)
                 mouseOutURL = imageURL;
 
             imageId = writeScript(cycle, pageRenderSupport, serviceLink, mouseOverURL, mouseOutURL);
-            
+
             writer.attribute("id", imageId);
         }
-        
+
         renderInformalParameters(writer, cycle);
 
         writer.closeTag();
@@ -124,23 +132,23 @@
 
     public abstract IScript getScript();
 
-    private String writeScript(IRequestCycle cycle, PageRenderSupport pageRenderSupport, ILinkComponent link,
-            String mouseOverImageURL, String mouseOutImageURL)
+    private String writeScript(IRequestCycle cycle, PageRenderSupport pageRenderSupport,
+                               Object link, String mouseOverImageURL, String mouseOutImageURL)
     {
         String imageId = pageRenderSupport.getUniqueString(getId());
-        
+
         String preloadedMouseOverImageURL = pageRenderSupport.getPreloadedImageReference(this, mouseOverImageURL);
         String preloadedMouseOutImageURL = pageRenderSupport.getPreloadedImageReference(this, mouseOutImageURL);
-        
+
         Map symbols = new HashMap();
-        
+
         symbols.put("link", link);
         symbols.put("imageId", imageId);
         symbols.put("mouseOverImageURL", preloadedMouseOverImageURL);
         symbols.put("mouseOutImageURL", preloadedMouseOutImageURL);
-        
+
         getScript().execute(this, cycle, pageRenderSupport, symbols);
-        
+
         return imageId;
     }