Bart Molenkamp a écrit :
Done. Vincent, could you please check if this is the way to go?
Hope everything is ok for you (about refresh). It seems ok for me thx.

--
Vincent
Thanks,
Bart.

-----Oorspronkelijk bericht-----
Van: Bart Molenkamp
Verzonden: dinsdag 17 april 2007 12:15
Aan: wicket-dev@incubator.apache.org
Onderwerp: RE: [Wicket-autocvs] SF.net SVN: wicket-stuff: [1935] 
branches/wicket-1.3/wicket-
contrib-dojo/ src/main/java/org/wicketstuff/dojo

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: wicket-dev@incubator.apache.org
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: wicket-dev@incubator.apache.org
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