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);