Hi Vincent,

I wasn't aware of the TargetRefreshManager class. I found out that the 
DojoRichTextBehavior didn't work when the component was added to the page after 
an Ajax update (in my case I replaced some panel with another panel that 
contained the rich text editor). The solution would be call to 
dojo.hostenv.makeWidgets(); (I see this is done by the TargetRefreshManager).

But I choose to create the widgets by hand, because then I can add parameters 
to it. If you look at the DojoRichTextBehavior you can see that it's possible 
to set some properties, like height, and the toolbar template. These properties 
are passed to the createWidget call in JavaScript. Is it possible to add these 
parameters to a widget if you use the dojoType="Editor2" tag to create widgets? 

I think you're right that it might become a problem when the same widget is 
created more than once. I didn't thought about it.

We should indeed use one (and only one) way to create/maintain widgets. 
TargetRefreshManager is OK by me (thinking of it, I guess that it failed to 
create the widget due to the bug in RichText.js) if I can pass parameters on 
creation (I need the height and the custom toolbar for the Editor2 widget).

Thanks for looking at this,

Bart.

> -----Oorspronkelijk bericht-----
> Van: Vincent Demay [mailto:[EMAIL PROTECTED]
> Verzonden: dinsdag 17 april 2007 10:28
> Aan: [email protected]
> Onderwerp: Re: [Wicket-autocvs] SF.net SVN: wicket-stuff: [1935] 
> branches/wicket-1.3/wicket-
> contrib-dojo/ src/main/java/org/wicketstuff/dojo
> 
> Hi Bart
> 
> I see you added a behavior to deal with Dojo widget creating it using
> dojo.widget.createWidget. I don't understand what is the aim of this
> abstract behavior because AbstractRequireDojoBehavior can already create
> a dojo widget via an AjaxRequestTarget (see TargetRefresherManager which
> is a listener on ajaxRequest Target) but I maybe miss something.
> 
> The way we choose to create dojo widget in Wicket is adding parameters
> on the component tag. AbstractDojoWidgetBehavior deals with
> dojo.widget.createWidget and extending AbstractRequireDojoBehavior the
> widget created with this behavior could be added twice in the dojoManager.
> On the other hand it will be great to keep a unique way to create widget
> in WCD. I'm not saying the way we use now is the better but it can be
> better if we use always the same (adding attribute on component tag OR
> using dojo.widget.createWidget).
> 
> Just say me if I simply not well understand the goal of this class ;) .
> Otherwise we need to choose a *unique* way to render dojo widget and
> apply it on all widgets.
> 
> --
> Vincent
> 
> [EMAIL PROTECTED] a écrit :
> > Revision: 1935
> >           http://svn.sourceforge.net/wicket-stuff/?rev=1935&view=rev
> > Author:   molenkampb
> > Date:     2007-04-16 23:56:42 -0700 (Mon, 16 Apr 2007)
> >
> > Log Message:
> > -----------
> > * Introduced AbstractDojoWidgetBehavior that can create widgets when first 
> > rendered and after
> rerendering (by ajax)
> >
> 
> > branches/wicket-1.3/wicket-contrib-
> dojo/src/main/java/org/wicketstuff/dojo/AbstractDojoWidgetBehavior.java
> > ===================================================================
> > --- branches/wicket-1.3/wicket-contrib-
> dojo/src/main/java/org/wicketstuff/dojo/AbstractDojoWidgetBehavior.java
> (rev 0)
> > +++ branches/wicket-1.3/wicket-contrib-
> dojo/src/main/java/org/wicketstuff/dojo/AbstractDojoWidgetBehavior.java       
> 2007-04-17 06:56:42
> UTC (rev 1935)
> > @@ -0,0 +1,169 @@
> > +/**
> > + *
> > + */
> > +package org.wicketstuff.dojo;
> > +
> > +import java.util.HashMap;
> > +import java.util.Iterator;
> > +import java.util.Map;
> > +
> > +import org.apache.wicket.IRequestTarget;
> > +import org.apache.wicket.RequestCycle;
> > +import org.apache.wicket.ResourceReference;
> > +import org.apache.wicket.ajax.AjaxRequestTarget;
> > +import org.apache.wicket.markup.html.IHeaderResponse;
> > +
> > +/**
> > + * Abstract behavior implementation that deals with dojo widgets.
> > + *
> > + * @author B. Molenkamp
> > + * @version SVN: $Id$
> > + */
> > +public abstract class AbstractDojoWidgetBehavior extends 
> > AbstractRequireDojoBehavior {
> > +
> > +   /* (non-Javadoc)
> > +    * @see
> org.wicketstuff.dojo.AbstractRequireDojoBehavior#renderHead(org.apache.wicket.markup.html.IHeaderRe
> sponse)
> > +    */
> > +   @Override
> > +   public void renderHead(IHeaderResponse response) {
> > +           super.renderHead(response);
> > +
> > +           String markupId = getComponent().getMarkupId();
> > +           WidgetProperties props = getWidgetProperties();
> > +           String arrayString = props.convertToJavaScriptArray();
> > +
> > +           IRequestTarget target = RequestCycle.get().getRequestTarget();
> > +           if(!(target instanceof AjaxRequestTarget)){
> > +                   response.renderJavascript("dojo.event.connect(dojo, 
> > \"loaded\", function() {" +
> > +                                   "dojo.widget.createWidget('" + 
> > getWidgetType() + "', " + arrayString
> + ", dojo.byId('" + markupId + "'))" +
> > +                                   "});\n",
> > +                                   markupId + "onLoad");
> > +           }
> > +   }
> > +
> > +   /* (non-Javadoc)
> > +    * @see
> org.wicketstuff.dojo.AbstractRequireDojoBehavior#onComponentReRendered(org.apache.wicket.ajax.AjaxR
> equestTarget)
> > +    */
> > +   @Override
> > +   public void onComponentReRendered(AjaxRequestTarget ajaxTarget) {
> > +           super.onComponentReRendered(ajaxTarget);
> > +
> > +           String markupId = getComponent().getMarkupId();
> > +
> > +
> > +           //dojo.widget.createWidget("Editor2", {}, 
> > dojo.byId("editorContent"));
> > +           WidgetProperties props = getWidgetProperties();
> > +           String arrayString = props.convertToJavaScriptArray();
> > +           ajaxTarget.appendJavascript("dojo.widget.createWidget('" + 
> > getWidgetType() + "', " +
> arrayString + ", dojo.byId('" + markupId + "'));\n");
> > +   }
> > +
> > +   /**
> > +    * Returns the widget type.
> > +    * @return
> > +    */
> > +   protected abstract String getWidgetType();
> > +
> > +   /**
> > +    * Return the properties string that is used when creating the widget.
> > +    * @return
> > +    */
> > +   protected WidgetProperties getWidgetProperties() {
> > +           // by default return an empty map.
> > +           return new WidgetProperties();
> > +   }
> > +
> > +   /**
> > +    * A class to hold widget properties.
> > +    */
> > +   public class WidgetProperties {
> > +
> > +           private Map<String, String> properties;
> > +
> > +           public WidgetProperties() {
> > +                   this.properties = new HashMap<String, String>();
> > +           }
> > +
> > +           /**
> > +            * Adds a boolean property.
> > +            * @param name
> > +            * @param value
> > +            */
> > +           public void addProperty(String name, boolean value) {
> > +                   this.properties.put(name, Boolean.toString(value));
> > +           }
> > +
> > +           /**
> > +            * Adds an integer property
> > +            * @param name
> > +            * @param value
> > +            */
> > +           public void addProperty(String name, int value) {
> > +                   this.properties.put(name, Integer.toString(value));
> > +           }
> > +
> > +           /**
> > +            * Adds a string property (encloses the string in qoutes).
> > +            * @param name
> > +            * @param value
> > +            */
> > +           public void addProperty(String name, String value) {
> > +                   value = value.replace("\"", "\\\"");    // escape any 
> > double qoute.
> > +                   this.properties.put(name, "\"" + value + "\"");
> > +           }
> > +
> > +           /**
> > +            * Adds a resource reference property. The resource is looked 
> > up using
> > +            * Dojo's dojo.uri.dojoUri() function. Relative paths are 
> > handled.
> > +            *
> > +            * @param name
> > +            * @param reference
> > +            */
> > +           public void addProperty(String name, ResourceReference 
> > reference) {
> > +                   RequestCycle cycle = RequestCycle.get();
> > +
> > +                   ResourceReference dojo =
> AbstractDojoWidgetBehavior.this.getDojoResourceReference();
> > +                   String dojoUrl = cycle.urlFor(dojo).toString();
> > +                   dojoUrl = dojoUrl.substring(0, dojoUrl.lastIndexOf("/") 
> > + 1);
> > +
> > +                   CharSequence url = cycle.urlFor(reference);
> > +                   String relativeUrl = dojoUrl.replaceAll(".[^/]*/", 
> > "../") + url;
> > +                   this.properties.put(name, "dojo.uri.dojoUri(\"" + 
> > relativeUrl + "\")");
> > +           }
> > +
> > +           /**
> > +            * Adds a raw property. The object's toString() is called and 
> > added
> > +            * without any further conversion.
> > +            * @param name
> > +            * @param value
> > +            */
> > +           public void addRawProperty(String name, Object value) {
> > +                   this.properties.put(name, value.toString());
> > +           }
> > +
> > +           /**
> > +            * Convert the properties to a valid javascript array.
> > +            * @return
> > +            */
> > +           public String convertToJavaScriptArray() {
> > +                   // convert the properties to string
> > +                   StringBuffer propertyString = new StringBuffer("{");
> > +                   Iterator<String> i = 
> > this.properties.keySet().iterator();
> > +                   while (i.hasNext()) {
> > +                           String propertyName = i.next();
> > +                           Object property = 
> > this.properties.get(propertyName);
> > +
> > +                           propertyString.append(propertyName + ": " + 
> > property);
> > +
> > +                           // if there are more properties, separate them 
> > by a comma
> > +                           if (i.hasNext()) {
> > +                                   propertyString.append(", ");
> > +                           }
> > +                   }
> > +
> > +                   // close the property string.
> > +                   propertyString.append("}");
> > +
> > +                   return propertyString.toString();
> > +           }
> > +   }
> > +}
> >
> >
> >
> >
> 
> > This was sent by the SourceForge.net collaborative development platform, 
> > the world's largest Open
> Source development site.
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by DB2 Express
> > Download DB2 Express C - the FREE version of DB2 express and take
> > control of your XML. No limits. Just data. Click to get it now.
> > http://sourceforge.net/powerbar/db2/
> > _______________________________________________
> > Wicket-autocvs mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/wicket-autocvs
> >


Reply via email to