Ok, I can just simply add my configuration parameters using ComponentTag.put(). 
Also reloading works (probably didn't work in the first case due to the bug in 
RichText.js).

I will remove the AbstractDojoWidgetBehavior class.

Thanks,
Bart.

> -----Oorspronkelijk bericht-----
> Van: Vincent Demay [mailto:[EMAIL PROTECTED]
> Verzonden: dinsdag 17 april 2007 11:35
> 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
> 
> Bart Molenkamp a écrit :
> > 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).
> >
> More than creating widget, TargetRefresherManager ensure also that the
> widget will be created before all appendJavascript interpretation which
> is quite usefull when we want add some javascript dealing with the
> widget created by an ajax response
> > 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?
> >
> Probably yes, Dojo actually parse all attributes in a "dojoType tags" to
> use each one as a setter of the class attribute (if exists) during
> widget creation. So It should work expect if there is a bug in dojo ;)
> > 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,
> >
> no pb !
> > Bart.
> >
> --
> Vincent
> >
> >> -----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