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/27 00:15:46 UTC
svn commit: r689262 - in
/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng:
AjaxBehavior.java AjaxEventBehavior.java AjaxRequestAttributes.java
AjaxRequestAttributesImpl.java js/wicket-ajax-ng.js markup/html/AjaxLink.java
Author: knopp
Date: Tue Aug 26 15:15:44 2008
New Revision: 689262
URL: http://svn.apache.org/viewvc?rev=689262&view=rev
Log:
preventDefault
Modified:
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/AjaxRequestAttributes.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/js/wicket-ajax-ng.js
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/markup/html/AjaxLink.java
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=689262&r1=689261&r2=689262&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 Tue Aug 26 15:15:44 2008
@@ -106,6 +106,10 @@
config.append(prefix);
config.append("';\n");
+ config.append("gs.defaultPageId='");
+ config.append(getPageId(component.getPage()));
+ config.append("';\n");
+
config.append("gs.urlParamComponentId='");
config.append(AjaxUrlCodingStrategy.PARAM_COMPONENT_ID);
config.append("';\n");
@@ -201,8 +205,6 @@
{
JSONObject o = new JSONObject();
- o.put("p", getPageId(component.getPage()));
-
if (component instanceof Page == false)
{
o.put("c", component.getMarkupId());
@@ -262,7 +264,7 @@
o.put("f", attributes.getForm().getMarkupId());
}
o.put("m", attributes.isMultipart());
- o.put("t", attributes.getRequesTimeout());
+ o.put("rt", attributes.getRequesTimeout());
o.put("pt", attributes.getProcessingTimeout());
o.put("t", attributes.getToken());
o.put("r", attributes.isRemovePrevious());
@@ -273,6 +275,7 @@
renderFunctionList(o, "be", attributes.getBeforeHandlers());
renderFunctionList(o, "s", attributes.getSuccessHandlers());
renderFunctionList(o, "e", attributes.getErrorHandlers());
+ renderFunctionList(o, "rqi", attributes.getRequestQueueItemCreationListeners());
Map<String, Object> urlArguments = attributes.getUrlArguments();
if (urlArguments != null && !urlArguments.isEmpty())
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=689262&r1=689261&r2=689262&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 Tue Aug 26 15:15:44 2008
@@ -59,8 +59,15 @@
js.append(event);
js.append("',");
js.append(renderAttributes(component));
+
+ boolean allowDefault = getAttributes().allowDefault();
+ if (allowDefault)
+ {
+ js.append("," + allowDefault);
+ }
js.append(")");
response.renderOnDomReadyJavascript(js.toString());
}
+
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java?rev=689262&r1=689261&r2=689262&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java Tue Aug 26 15:15:44 2008
@@ -21,18 +21,18 @@
import org.apache.wicket.markup.html.form.Form;
/**
- * Attributes for an Ajax Request.
+ * Attributes for an Ajax Request.
*
* <hr>
- *
+ *
* <p>
* Note that some of these attributes represent javascript functions. Those functions get a
* <code>RequestQueueItem</code> instance as first argument. The instance provides access to
* following properties that the javascript functions can use:
* <dl>
* <dt>attributes</dt>
- * <dd> Object with request queue item attributes. The <code>attributes</code> Object contains following
- * properties:
+ * <dd> Object with request queue item attributes. The <code>attributes</code> Object contains
+ * following properties:
* <dl>
*
* <dt>component</dt>
@@ -262,4 +262,24 @@
* @return FunctionList or <code>null</code>
*/
FunctionList getUrlArgumentMethods();
+
+ /**
+ * Array of javascript functions invoked when a <code>RequestQueueItem</code> instance is
+ * created. The <code>RequestQueueItem</code> instance will be passed as first argument.
+ *
+ * @return FunctionList or <code>null</code>
+ */
+ FunctionList getRequestQueueItemCreationListeners();
+
+ /**
+ * Only applies for event behaviors. Returns whether the behavior should allow the default event
+ * handler to be invoked. For example if the behavior is attached to a link and
+ * {@link #allowDefault()} returns <code>false</code> (which is default value), the link's URL
+ * will not be followed. If {@link #allowDefault()} returns <code>true</code>, the link URL
+ * will be loaded (and the onclick handler fired if there is any).
+ *
+ * @return <code>true</code> if the default event handler should be invoked,
+ * <code>false</code> otherwise.
+ */
+ boolean allowDefault();
}
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=689262&r1=689261&r2=689262&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 Tue Aug 26 15:15:44 2008
@@ -26,21 +26,22 @@
* delegating the calls to another {@link AjaxRequestAttributes} instance if one is specified.
* <p>
* To extend attributes from behavior or component the following pattern can be used:
+ *
* <pre>
- * // add a precondition to super attirbutes
- * class MyBehavior extends AjaxBehavior
- * {
- * public AjaxRequestAttributes getAttributes()
+ * // add a precondition to super attirbutes
+ * class MyBehavior extends AjaxBehavior
+ * {
+ * public AjaxRequestAttributes getAttributes()
* {
* return new AjaxRequestAttributesImpl(super.getAttributes)
* {
* public FunctionList getPreconditions()
* {
- * return super.getPreconditions().add("function(requestQueueItem) { return true; }";);
+ * return super.getPreconditions().add("function(requestQueueItem) { return true; }";);
* }
* }
* }
- * }
+ * }
* </pre>
*
* @author Matej Knopp
@@ -247,4 +248,23 @@
return null;
}
}
+
+ public FunctionList getRequestQueueItemCreationListeners()
+ {
+ FunctionList result = null;
+ if (delegate != null)
+ {
+ result = delegate.getRequestQueueItemCreationListeners();
+ }
+ if (result == null)
+ {
+ result = new FunctionList();
+ }
+ return result;
+ }
+
+ public boolean allowDefault()
+ {
+ return false;
+ }
}
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=689262&r1=689261&r2=689262&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 Tue Aug 26 15:15:44 2008
@@ -145,7 +145,8 @@
trace: function() { },
debug: function() { },
info: function() { },
- error: function() { }
+ error: function() { },
+ warn: function() { }
}
var FirebugLogger =
@@ -195,6 +196,10 @@
error: function()
{
console.error.apply(this, FirebugLogger.arg("ERROR", arguments));
+ },
+ warn: function()
+ {
+ console.warn.apply(this, FirebugLogger.arg("WARN", arguments));
}
}
@@ -210,12 +215,15 @@
console.info = console.log;
if (typeof(console.debug) == "undefined")
console.debug = console.log;
+ if (typeof(console.warn) == "undefined")
+ console.warn = console.log;
}
var logConfig =
{
- disableAll: false, trace: true, debug: true, info: true, error: true,
- "trace:GarbageCollector": false, "trace:Contribution":false, "trace:Events":true
+ disableAll: false, trace: true, debug: true, info: true, error: true, warn: true,
+ "trace:GarbageCollector": false, "trace:Contribution":false, "trace:Events":false, "trace:Focus":false,
+ "trace:RequestQueue": false, "trace:General":false, "trace:Throttler": true
};
W.Log =
@@ -240,6 +248,11 @@
if (!logConfig.disableAll && logConfig.error && logConfig[arguments[0]] != false && logConfig["error:" + arguments[0]] != false)
logger.error.apply(this, arguments);
},
+ warn: function()
+ {
+ if (!logConfig.disableAll && logConfig.warn && logConfig[arguments[0]] != false && logConfig["warn:" + arguments[0]] != false)
+ logger.warn.apply(this, arguments);
+ },
setLogger: function(newLogger)
{
logger = newLogger;
@@ -764,8 +777,21 @@
return;
}
var entry = this.entries[token];
- if (entry == null)
+
+ var e = this.executionTimes[token];
+ if (!postponeTimerOnUpdate && e != null)
{
+ // get millis to reflect the real time after last invocation update
+ var now = new Date().getTime();
+ var d = now - e;
+ if (d < millis)
+ {
+ millis -= d;
+ }
+ }
+
+ if (entry == null)
+ {
entry = new ThrottlerEntry(func);
entry.timeout = window.setTimeout(bind(function() { this.execute(token) }, this), millis);
this.entries[token] = entry;
@@ -776,8 +802,8 @@
entry.func = func;
if (postponeTimerOnUpdate)
{
- window.clearTimeout(entry.timeout);
- entry.timeout = window.setTimeout(bind(this.execute, this), millis);
+ window.clearTimeout(entry.timeout);
+ entry.timeout = window.setTimeout(bind(function() { this.execute(token) }, this), millis);
log.trace("Throttler", "Postponing throttle, token:", token, ", millis:", millis, ", func:", func);
}
else
@@ -796,7 +822,12 @@
if (e == null || (e + millis) < now)
{
log.trace("Throttler", "Executing function immediately, token:", token, ", millis:", millis, ", func:", func);
- this.executionTimes[token] = now;
+ this.executionTimes[token] = now;
+ var e = this.entries[token];
+ if (e != null)
+ {
+ window.clearTimeout(e.timeout);
+ }
this.entries[token] = null;
func();
return true;
@@ -1345,7 +1376,7 @@
* negative impact on error detection.
* (doesn't work with current YUI 3 PR1 release)
*
- * t, requestTimeout - Integer Timeout in milliseconds for the AJAX request. This only
+ * rt, requestTimeout - Integer Timeout in milliseconds for the AJAX request. This only
* involves the actual communication and not the processing
* afterwards. Can be null in which case the default request
* timeout will be used.
@@ -1426,6 +1457,10 @@
* URL arguments. Each of the methods will get this
* RequestQueueItem passed and must return a
* Map<String, String> (Object).
+ *
+ * rqi, requestQueueItem - Method(s) Optional. Method or array of methods that will be invoked
+ * after the RequestQueueItem instance is created. The methods
+ * will get the request queue instance passed as first argument.
*/
var RequestQueueItem = function(attributes)
{
@@ -1460,7 +1495,7 @@
component: a.component || a.c || null,
formId: a.formId || a.f || null,
multipart: b(a.multipart || a.m),
- requestTimeout: a.requestTimeout || a.t || gs.defaultRequestTimeout,
+ requestTimeout: a.requestTimeout || a.rt || gs.defaultRequestTimeout,
processingTimeout: a.processingTimeout || a.pt || gs.defaultProcessingTimeout,
pageId: a.pageId || a.p || gs.defaultPageId,
listenerInterface: a.listenerInterface || a.l || null,
@@ -1474,16 +1509,37 @@
successHandlers: m(a.successHandlers || a.s, gs.successHandlers),
errorHandlers: m(a.errorHandlers || a.e, gs.errorHandlers),
urlArguments: a.urlArguments || a.u || null,
- urlArgumentMethods: m(a.urlArgumentMethods || a.ua, gs.urlArgumentMethods)
+ urlArgumentMethods: m(a.urlArgumentMethods || a.ua, gs.urlArgumentMethods),
+ requestQueueItem: m(a.requestQueueItem || a.rqi, gs.requestQueueItem)
}
- log.trace("RequestQueue", "Creating New Item", this.attributes);
+ log.trace("RequestQueue", "Creating New Item", this.attributes);
}
W.RequestQueueItem = RequestQueueItem;
RequestQueueItem.prototype =
- {
+ {
+ init: function()
+ {
+ if (this.initialized != true)
+ {
+ this.initialized = true;
+ var l = this.attributes.requestQueueItem;
+ for (var i = 0; i < l.length; ++i)
+ {
+ var handler = l[i];
+ try
+ {
+ handler(this);
+ }
+ catch (exception)
+ {
+ log.error("RequestQueue", "Error invoking RequestQueueItem creation listener", exception);
+ }
+ }
+ }
+ },
checkPreconditions: function()
{
var res = iterateArray(this.attributes.preconditions, bind(function(precondition)
@@ -1972,6 +2028,9 @@
log.error("RequestQueue", "Item ", item, " must contain attributes.");
return;
}
+
+ item.init();
+
var a = item.attributes;
if (a.throttlePostpone == true && a.throttle == null)
{
@@ -2101,6 +2160,7 @@
errorHandlers: [],
urlPostProcessors: [],
urlArgumentMethods: [ defaultArgumentMethod ],
+ requestQueueItem: [],
urlPrefix: "INVALID_URL_PREFIX",
urlParamComponentId: "INVALID_COMPONENT_ID_PARAM",
urlParamTimestamp: "INVALID_TIMESTAMP_PARAM",
@@ -2374,7 +2434,7 @@
return element.wicketEventHandlers;
}
- W.e = function(event, attributes)
+ W.e = function(event, attributes, allowDefault)
{
var element;
if (attributes.c == null)
@@ -2403,6 +2463,10 @@
var item = new RequestQueueItem(attributes);
item.event = event;
W.ajax.requestQueue.add(item);
+ if (allowDefault != true)
+ {
+ event.preventDefault();
+ }
}
handle = Y.on(event, f, element);
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/markup/html/AjaxLink.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/markup/html/AjaxLink.java?rev=689262&r1=689261&r2=689262&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/markup/html/AjaxLink.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/markup/html/AjaxLink.java Tue Aug 26 15:15:44 2008
@@ -18,6 +18,8 @@
import org.apache.wicket.Component;
import org.apache.wicket.ajaxng.AjaxEventBehavior;
+import org.apache.wicket.ajaxng.AjaxRequestAttributes;
+import org.apache.wicket.ajaxng.AjaxRequestAttributesImpl;
import org.apache.wicket.ajaxng.request.AjaxRequestTarget;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.link.AbstractLink;
@@ -29,6 +31,8 @@
* @since 1.2
*
* @author Igor Vaynberg (ivaynberg)
+ * @author Matej Knopp
+ * @param <T>
*
*/
public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink
@@ -71,9 +75,20 @@
{
return isLinkEnabled();
}
+
+ @Override
+ public AjaxRequestAttributes getAttributes()
+ {
+ return AjaxLink.this.getAttributes();
+ }
});
}
+ public AjaxRequestAttributes getAttributes()
+ {
+ return new AjaxRequestAttributesImpl();
+ }
+
@Override
protected void onComponentTag(ComponentTag tag)
{