You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/08/22 02:03:32 UTC
svn commit: r687907 - in /wicket/sandbox/knopp/experimental:
wicket-examples/src/main/java/org/apache/wicket/ajax/
wicket/src/main/java/org/apache/wicket/ajaxng/
wicket/src/main/java/org/apache/wicket/ajaxng/js/
Author: knopp
Date: Thu Aug 21 17:03:32 2008
New Revision: 687907
URL: http://svn.apache.org/viewvc?rev=687907&view=rev
Log:
more stuff to go
Modified:
wicket/sandbox/knopp/experimental/wicket-examples/src/main/java/org/apache/wicket/ajax/TestPage1.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributesImpl.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/FunctionList.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
Modified: wicket/sandbox/knopp/experimental/wicket-examples/src/main/java/org/apache/wicket/ajax/TestPage1.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-examples/src/main/java/org/apache/wicket/ajax/TestPage1.java?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket-examples/src/main/java/org/apache/wicket/ajax/TestPage1.java (original)
+++ wicket/sandbox/knopp/experimental/wicket-examples/src/main/java/org/apache/wicket/ajax/TestPage1.java Thu Aug 21 17:03:32 2008
@@ -16,7 +16,13 @@
*/
package org.apache.wicket.ajax;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.wicket.ajaxng.AjaxEventBehavior;
+import org.apache.wicket.ajaxng.AjaxRequestAttributes;
+import org.apache.wicket.ajaxng.AjaxRequestAttributesImpl;
+import org.apache.wicket.ajaxng.FunctionList;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
@@ -32,10 +38,65 @@
public TestPage1()
{
WebMarkupContainer c1 = new WebMarkupContainer("c1");
- c1.add(new AjaxEventBehavior("click") {
-
+ c1.add(new AjaxEventBehavior("click")
+ {
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxBehavior#getAttributes()
+ */
+ @Override
+ public AjaxRequestAttributes getAttributes()
+ {
+ return new AjaxRequestAttributesImpl(super.getAttributes())
+ {
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxRequestAttributesImpl#getUrlArguments()
+ */
+ @Override
+ public Map<String, Object> getUrlArguments()
+ {
+ Map<String, Object> args = new HashMap<String, Object>();
+
+ args.put("key 1", "value\n\t1");
+
+ return args;
+ }
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxRequestAttributesImpl#getBeforeHandlers()
+ */
+ @Override
+ public FunctionList getBeforeHandlers()
+ {
+ return super.getBeforeHandlers().add("function(i) { WicketNG.Log.debug('before!'); }").add(0, "function(i) { WicketNG.Log.debug('b!'); }");
+ }
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxRequestAttributesImpl#getSuccessHandlers()
+ */
+ @Override
+ public FunctionList getSuccessHandlers()
+ {
+ return super.getSuccessHandlers().add("function(i) { WicketNG.Log.debug('after!'); }");
+ }
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxRequestAttributesImpl#getPreconditions()
+ */
+ @Override
+ public FunctionList getPreconditions()
+ {
+ return super.getPreconditions().add("function(i) { return true;}");
+ }
+ /**
+ * @see org.apache.wicket.ajaxng.AjaxRequestAttributesImpl#getUrlArgumentMethods()
+ */
+ @Override
+ public FunctionList getUrlArgumentMethods()
+ {
+ return super.getUrlArgumentMethods().add("function(i) { return { x:i.event.clientX,y:i.event.clientY }; }");
+ }
+ };
+ }
});
- c1.add(new org.apache.wicket.ajax.AjaxEventBehavior("onclick") {
+ c1.add(new org.apache.wicket.ajax.AjaxEventBehavior("onclick")
+ {
/**
* @see org.apache.wicket.ajax.AjaxEventBehavior#onEvent(org.apache.wicket.ajax.AjaxRequestTarget)
*/
@@ -44,7 +105,7 @@
{
}
});
-
+
add(c1);
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java Thu Aug 21 17:03:32 2008
@@ -17,7 +17,10 @@
package org.apache.wicket.ajaxng;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
@@ -39,7 +42,7 @@
private static final long serialVersionUID = 1L;
private final List<Component> boundComponents = new ArrayList<Component>();
-
+
/**
* Construct.
*/
@@ -47,20 +50,26 @@
{
}
-
- private final static ResourceReference YUI_BASE = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/yui-base/yui-base.js");
- private final static ResourceReference YUI_OOP = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/oop/oop.js");
- private final static ResourceReference YUI_EVENT = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/event/event.js");
- private final static ResourceReference YUI_DOM = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/dom/dom.js");
- private final static ResourceReference YUI_NODE = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/node/node.js");
- private final static ResourceReference YUI_IO = new JavascriptResourceReference(AjaxBehavior.class, "js/yui3/io/io.js");
- private final static ResourceReference AJAX_NG = new JavascriptResourceReference(AjaxBehavior.class, "js/wicket-ajax-ng.js");
+ private final static ResourceReference YUI_BASE = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/yui-base/yui-base.js");
+ private final static ResourceReference YUI_OOP = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/oop/oop.js");
+ private final static ResourceReference YUI_EVENT = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/event/event.js");
+ private final static ResourceReference YUI_DOM = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/dom/dom.js");
+ private final static ResourceReference YUI_NODE = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/node/node.js");
+ private final static ResourceReference YUI_IO = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/yui3/io/io.js");
+ private final static ResourceReference AJAX_NG = new JavascriptResourceReference(
+ AjaxBehavior.class, "js/wicket-ajax-ng.js");
/**
* Wicket javascript namespace.
*/
- public final static String WICKET_NS = "WicketNG";
-
+ public final static String WICKET_NS = "WicketNG";
+
public void renderHead(Component component, IHeaderResponse response)
{
response.renderJavascriptReference(YUI_BASE);
@@ -70,38 +79,38 @@
response.renderJavascriptReference(YUI_NODE);
response.renderJavascriptReference(YUI_IO);
response.renderJavascriptReference(AJAX_NG);
-
+
CharSequence prefix = RequestCycle.get().urlFor(AjaxRequestTarget.DUMMY);
-
+
StringBuilder config = new StringBuilder();
- config.append(WICKET_NS +".ajax.globalSettings.urlPrefix='");
+ config.append(WICKET_NS + ".ajax.globalSettings.urlPrefix='");
config.append(prefix);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamComponentId='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamComponentId='");
config.append(AjaxUrlCodingStrategy.PARAM_COMPONENT_ID);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamTimestamp='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamTimestamp='");
config.append(AjaxUrlCodingStrategy.PARAM_TIMESTAMP);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamPageId='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamPageId='");
config.append(AjaxUrlCodingStrategy.PARAM_PAGE_ID);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamFormId='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamFormId='");
config.append(AjaxUrlCodingStrategy.PARAM_FORM_ID);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamListenerInterface='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamListenerInterface='");
config.append(AjaxUrlCodingStrategy.PARAM_LISTENER_INTEFACE);
config.append("'\n");
-
- config.append(WICKET_NS +".ajax.globalSettings.urlParamBehaviorIndex='");
+
+ config.append(WICKET_NS + ".ajax.globalSettings.urlParamBehaviorIndex='");
config.append(AjaxUrlCodingStrategy.PARAM_BEHAVIOR_INDEX);
config.append("'\n");
-
+
response.renderJavascript(config, WICKET_NS + "-Config");
}
@@ -119,17 +128,44 @@
{
boundComponents.add(component);
component.setOutputMarkupId(true);
- }
+ }
+ }
+
+ public List<Component> getBoundComponents()
+ {
+ return Collections.unmodifiableList(boundComponents);
}
- protected String getAttributes(Component component)
+ /**
+ * Renders the javascript object with Ajax request attributes. The object can be used
+ * as argument for <code>RequestQueueItem</code> constructor.
+ *
+ * @param component
+ * @return attributes javascript object rendered as string.
+ */
+ public String renderAttributes(Component component)
{
- StringBuilder res = new StringBuilder();
-
- res.append("{");
-
- res.append("p:'");
- Page page = component.getPage();
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("p", escapeJavascriptString(getPageId(component.getPage())));
+
+ if (component instanceof Page == false)
+ {
+ map.put("c", escapeJavascriptString(component.getMarkupId()));
+ }
+
+ int behaviorIndex = component.getBehaviors().indexOf(this);
+
+ map.put("b", behaviorIndex);
+
+ renderAttributes(component, getAttributes(), map);
+
+ return renderMap(map);
+ }
+
+ private CharSequence getPageId(Page page)
+ {
+ StringBuilder res = new StringBuilder(5);
+
if (page.getPageMapName() != null)
{
res.append(page.getPageMapName());
@@ -138,27 +174,180 @@
res.append(page.getNumericId());
res.append(":");
res.append(page.getCurrentVersionNumber());
+
+ return res;
+ }
+
+ private String renderMap(Map<String, Object> map)
+ {
+ StringBuilder res = new StringBuilder();
+
+ if (map == null)
+ {
+ return "{}";
+ }
- res.append("'");
+ res.append("{");
+ boolean first = true;
+ for (String s : map.keySet())
+ {
+ Object value = map.get(s);
+
+ if (value == null)
+ {
+ continue;
+ }
+
+ if (!first)
+ {
+ res.append(",");
+ }
+ else
+ {
+ first = false;
+ }
+
+ res.append(s);
+ res.append(":");
- if (component instanceof Page == false)
+ res.append(value);
+
+ }
+ res.append("}");
+
+ return res.toString();
+ }
+
+ private CharSequence escapeJavascriptString(CharSequence s)
+ {
+ if (s == null)
{
- res.append(",c:'");
- res.append(component.getMarkupId());
- res.append("'");
+ return null;
}
+ StringBuilder res = new StringBuilder(s.length() + 2);
+
+ res.append("'");
- int behaviorIndex = component.getBehaviors().indexOf(this);
+ for (int i = 0; i < s.length(); ++i)
+ {
+ char c = s.charAt(i);
+ switch (c)
+ {
+ case '\'' :
+ res.append("\\'");
+ break;
+ case '\"' :
+ res.append("\\\"");
+ break;
+ case '\\':
+ res.append("\\\\");
+ break;
+ case '\n' :
+ res.append("\\n");
+ break;
+ case '\r' :
+ res.append("\\r");
+ break;
+ case '\t' :
+ res.append("\\t");
+ break;
+ default:
+ res.append(c);
+ }
+ }
- res.append(",b:");
- res.append(behaviorIndex);
+ res.append("'");
+
+ return res;
+ }
+
+ private CharSequence renderFunctionList(FunctionList list)
+ {
+ if (list == null || list.isEmpty())
+ {
+ return null;
+ }
+ else if (list.size() == 1)
+ {
+ return list.get(0);
+ }
+ else
+ {
+ StringBuilder res = new StringBuilder();
+ boolean first = true;
+ res.append("[");
+
+ for (int i = 0; i < list.size(); ++i)
+ {
+ String s = list.get(i);
- res.append("}");
+ if (!first)
+ {
+ res.append(",");
+ }
+ else
+ {
+ first = false;
+ }
+
+ res.append(s);
+ }
+
+ res.append("]");
+ return res;
+ }
+ }
+
+ private Map<String, Object> escapeMap(Map<String, Object> map)
+ {
+ if (map == null)
+ {
+ return null;
+ }
+ Map<String, Object> res = new HashMap<String, Object>();
- return res.toString();
+ for (String s : map.keySet())
+ {
+ Object value = map.get(s);
+ if (value instanceof Number == false)
+ {
+ value = escapeJavascriptString((value).toString());
+ }
+ res.put(escapeJavascriptString(s).toString(), value);
+ }
+
+ return res;
}
+ private void renderAttributes(Component component, AjaxRequestAttributes attributes,
+ Map<String, Object> map)
+ {
+ if (attributes.getForm() != null)
+ {
+ map.put("f", escapeJavascriptString(attributes.getForm().getMarkupId()));
+ }
+ map.put("m", attributes.isMultipart());
+ map.put("t", attributes.getRequesTimeout());
+ map.put("pt", attributes.getProcessingTimeout());
+ map.put("t", escapeJavascriptString(attributes.getToken()));
+ map.put("r", attributes.isRemovePrevious());
+ map.put("th", attributes.getThrottle());
+ map.put("thp", attributes.isThrottlePostpone());
+ map.put("pr", renderFunctionList(attributes.getPreconditions()));
+ map.put("be", renderFunctionList(attributes.getBeforeHandlers()));
+ map.put("s", renderFunctionList(attributes.getSuccessHandlers()));
+ map.put("e", renderFunctionList(attributes.getErrorHandlers()));
+
+ Map<String, Object> urlArguments = attributes.getUrlArguments();
+ if (urlArguments != null && !urlArguments.isEmpty())
+ {
+ map.put("u", renderMap(escapeMap(urlArguments)));
+ }
+
+ map.put("ua", renderFunctionList(attributes.getUrlArgumentMethods()));
+ }
+
public void detach(Component component)
{
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java Thu Aug 21 17:03:32 2008
@@ -42,7 +42,7 @@
js.append(AjaxBehavior.WICKET_NS + ".e('");
js.append(event);
js.append("',");
- js.append(getAttributes(component));
+ js.append(renderAttributes(component));
js.append(")");
response.renderOnDomReadyJavascript(js.toString());
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributesImpl.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributesImpl.java?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributesImpl.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributesImpl.java Thu Aug 21 17:03:32 2008
@@ -47,14 +47,14 @@
*/
public class AjaxRequestAttributesImpl implements AjaxRequestAttributes
{
- private final AjaxRequestAttributesImpl delegate;
+ private final AjaxRequestAttributes delegate;
/**
* Construct.
*
* @param delegate
*/
- public AjaxRequestAttributesImpl(AjaxRequestAttributesImpl delegate)
+ public AjaxRequestAttributesImpl(AjaxRequestAttributes delegate)
{
this.delegate = delegate;
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/FunctionList.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/FunctionList.java?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/FunctionList.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/FunctionList.java Thu Aug 21 17:03:32 2008
@@ -34,7 +34,7 @@
public FunctionList add(int index, String element)
{
- add(index, element);
+ list.add(index, element);
return this;
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js?rev=687907&r1=687906&r2=687907&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js Thu Aug 21 17:03:32 2008
@@ -154,28 +154,28 @@
logger = FirebugLogger;
}
- var logConfig = { trace: true, debug: true, info: true, error: true, "trace:GarbageCollector": false };
+ var logConfig = { disableAll: false, trace: true, debug: true, info: true, error: true, "trace:GarbageCollector": false };
W.Log =
{
trace: function()
{
- if (logConfig.trace && logConfig[arguments[0]] != false && logConfig["trace:" + arguments[0]] != false)
+ if (!logConfig.disableAll && logConfig.trace && logConfig[arguments[0]] != false && logConfig["trace:" + arguments[0]] != false)
logger.trace.apply(this, arguments);
},
debug: function()
{
- if (logConfig.debug && logConfig[arguments[0]] != false && logConfig["debug:" + arguments[0]] != false)
+ if (!logConfig.disableAll && logConfig.debug && logConfig[arguments[0]] != false && logConfig["debug:" + arguments[0]] != false)
logger.debug.apply(this, arguments);
},
info: function()
{
- if (logConfig.info && logConfig[arguments[0]] != false && logConfig["info:" + arguments[0]] != false)
+ if (!logConfig.disableAll && logConfig.info && logConfig[arguments[0]] != false && logConfig["info:" + arguments[0]] != false)
logger.info.apply(this, arguments);
},
error: function()
{
- if (logConfig.error && logConfig[arguments[0]] != false && logConfig["error:" + arguments[0]] != false)
+ if (!logConfig.disableAll && logConfig.error && logConfig[arguments[0]] != false && logConfig["error:" + arguments[0]] != false)
logger.error.apply(this, arguments);
},
setLogger: function(newLogger)
@@ -190,7 +190,7 @@
{
return logger == DummyLogger;
},
- getLogConfig: function()
+ getConfig: function()
{
return logConfig;
}
@@ -465,6 +465,7 @@
var mapToUrlParameters = function(map)
{
var res = "";
+ var key;
for (key in map)
{
var value = map[key];
@@ -518,6 +519,7 @@
}
}
+ var key;
for (key in map)
{
var value = map[key];
@@ -712,6 +714,7 @@
{
if (precondition(this) == false)
{
+ log.debug("RequestQueue", "Precondition failed - skiping item; Item: ", this, " Precondition: ", precondition);
return false;
}
}
@@ -845,13 +848,13 @@
onSuccess: function(transactionId, responseObject)
{
- log.debug("RequestQueue", "Request successful - TransactionId: ", transactionId, " Response: ", responseObject);
+ log.debug("RequestQueue", "Request successful - TransactionId: ", transactionId, " Response: ", responseObject, "Item: ", this);
},
onFailure: function(transactionId, responseObject)
{
- log.debug("RequestQueue", "Request failed - TransactionId: ", transactionId, " Response: ", responseObject);
+ log.debug("RequestQueue", "Request failed - TransactionId: ", transactionId, " Response: ", responseObject, "Item: ", this);
this.failure();
},
@@ -882,7 +885,7 @@
var url = this.buildUrl();
var cfg = this.getRequestCfg(url);
- log.debug("RequestQueue", "Initiating AJAX Request on url ", url + " with configuration ", cfg);
+ log.debug("RequestQueue", "Initiating AJAX Request on url ", { url: url }, " with configuration ", cfg);
var request = Y.io(url, cfg);