Author: ivaynberg
Date: Fri Feb 16 13:58:21 2007
New Revision: 508607
URL: http://svn.apache.org/viewvc?view=rev&rev=508607
Log:
WICKET-288
Added:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WicketEventReference.java
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/wicket-event.js
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AbstractDefaultAjaxBehavior.java
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/internal/HeaderResponse.java
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AbstractDefaultAjaxBehavior.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AbstractDefaultAjaxBehavior.java?view=diff&rev=508607&r1=508606&r2=508607
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AbstractDefaultAjaxBehavior.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AbstractDefaultAjaxBehavior.java
Fri Feb 16 13:58:21 2007
@@ -21,6 +21,7 @@
import wicket.ResourceReference;
import wicket.behavior.AbstractAjaxBehavior;
import wicket.markup.html.IHeaderResponse;
+import wicket.markup.html.WicketEventReference;
import wicket.markup.html.resources.JavascriptResourceReference;
import wicket.settings.IDebugSettings;
import wicket.util.string.AppendingStringBuffer;
@@ -71,16 +72,18 @@
public void renderHead(IHeaderResponse response)
{
super.renderHead(response);
-
+
final IDebugSettings debugSettings =
Application.get().getDebugSettings();
response.renderJavascriptReference(JAVASCRIPT);
+
response.renderJavascriptReference(WicketEventReference.INSTANCE);
if (debugSettings.isAjaxDebugModeEnabled())
{
-
response.renderJavascript("wicketAjaxDebugEnable=true;",
"wicket-ajax-debug-enable");
-
response.renderJavascriptReference(JAVASCRIPT_DEBUG_DRAG);
- response.renderJavascriptReference( JAVASCRIPT_DEBUG);
+
response.renderJavascript("wicketAjaxDebugEnable=true;",
"wicket-ajax-debug-enable");
+
response.renderJavascriptReference(JAVASCRIPT_DEBUG_DRAG);
+ response.renderJavascriptReference(JAVASCRIPT_DEBUG);
+
}
}
@@ -221,8 +224,10 @@
* @param target
* The AJAX target
*/
- // TODO rename this to onEvent or something? respond is mostly the same
as onRender
- // this is not the case this is still the event handling period.
respond is called
+ // TODO rename this to onEvent or something? respond is mostly the same
as
+ // onRender
+ // this is not the case this is still the event handling period.
respond is
+ // called
// in the RequestCycle on the AjaxRequestTarget..
protected abstract void respond(AjaxRequestTarget target);
Added:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WicketEventReference.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WicketEventReference.java?view=auto&rev=508607
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WicketEventReference.java
(added)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WicketEventReference.java
Fri Feb 16 13:58:21 2007
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package wicket.markup.html;
+
+import wicket.ResourceReference;
+import wicket.markup.html.resources.JavascriptResourceReference;
+
+/**
+ * Resource reference to wicket-event.js which is used to allow events via
+ * javascript
+ *
+ * @author ivaynberg
+ */
+public class WicketEventReference extends JavascriptResourceReference
+{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Singleton instance of this reference
+ */
+ public static final ResourceReference INSTANCE = new
WicketEventReference();
+
+ private WicketEventReference()
+ {
+ super(WicketEventReference.class, "wicket-event.js");
+ }
+
+
+}
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/internal/HeaderResponse.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/internal/HeaderResponse.java?view=diff&rev=508607&r1=508606&r2=508607
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/internal/HeaderResponse.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/internal/HeaderResponse.java
Fri Feb 16 13:58:21 2007
@@ -25,12 +25,14 @@
import wicket.ResourceReference;
import wicket.Response;
import wicket.markup.html.IHeaderResponse;
+import wicket.markup.html.WicketEventReference;
import wicket.util.string.JavascriptUtils;
/**
* Default implementation of the [EMAIL PROTECTED] IHeaderResponse} interface.
*
* @author Matej Knopp
+ * @author Igor Vaynberg (ivaynberg)
*/
public class HeaderResponse implements IHeaderResponse
{
@@ -67,9 +69,10 @@
CharSequence url = RequestCycle.get().urlFor(reference);
renderCSSReference(url.toString(), null);
}
-
+
/**
- * @see
wicket.markup.html.IHeaderResponse#renderCSSReference(wicket.ResourceReference,
java.lang.String)
+ * @see
wicket.markup.html.IHeaderResponse#renderCSSReference(wicket.ResourceReference,
+ * java.lang.String)
*/
public void renderCSSReference(ResourceReference reference, String
media)
{
@@ -84,9 +87,10 @@
{
renderCSSReference(url, null);
}
-
+
/**
- * @see
wicket.markup.html.IHeaderResponse#renderCSSReference(java.lang.String,
java.lang.String)
+ * @see
wicket.markup.html.IHeaderResponse#renderCSSReference(java.lang.String,
+ * java.lang.String)
*/
public void renderCSSReference(String url, String media)
{
@@ -129,18 +133,19 @@
}
}
-
+
/**
- * @see
wicket.markup.html.IHeaderResponse#renderJavascript(java.lang.CharSequence,
java.lang.String)
+ * @see
wicket.markup.html.IHeaderResponse#renderJavascript(java.lang.CharSequence,
+ * java.lang.String)
*/
public void renderJavascript(CharSequence javascript, String id)
{
List token = Arrays.asList(new Object[] { javascript, id });
- if (wasRendered(token) == false)
+ if (wasRendered(token) == false)
{
JavascriptUtils.writeJavascript(getResponse(),
javascript, id);
markRendered(token);
- }
+ }
}
/**
@@ -170,20 +175,24 @@
{
return response;
}
-
+
/**
* @see
wicket.markup.html.IHeaderResponse#renderOnDomReadyJavascript(java.lang.String)
*/
public void renderOnDomReadyJavascript(String javascript)
{
- JavascriptUtils.writeJavascript(getResponse(),
"Wicket.Event.add(window, \"domready\", function() { " + javascript + ";});");
+ renderJavascriptReference(WicketEventReference.INSTANCE);
+ JavascriptUtils.writeJavascript(getResponse(),
+ "Wicket.Event.add(window, \"domready\",
function() { " + javascript + ";});");
}
-
+
/**
* @see
wicket.markup.html.IHeaderResponse#renderOnLoadJavascript(java.lang.String)
*/
public void renderOnLoadJavascript(String javascript)
{
- JavascriptUtils.writeJavascript(getResponse(),
"Wicket.Event.add(window, \"load\", function() { " + javascript + ";});");
+ renderJavascriptReference(WicketEventReference.INSTANCE);
+ JavascriptUtils.writeJavascript(getResponse(),
+ "Wicket.Event.add(window, \"load\", function()
{ " + javascript + ";});");
}
}
Added:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/wicket-event.js
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/wicket-event.js?view=auto&rev=508607
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/wicket-event.js
(added)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/wicket-event.js
Fri Feb 16 13:58:21 2007
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Wicket Ajax Support
+ *
+ * @author Igor Vaynberg
+ * @author Matej Knopp
+ */
+
+if (Function.prototype.bind == null) {
+ Function.prototype.bind = function(object) {
+ var __method = this;
+ return function() {
+ return __method.apply(object, arguments);
+ }
+ }
+}
+
+// Wicket Namespace
+
+if (typeof(Wicket) == "undefined")
+ Wicket = { };
+
+/**
+ * Events related code
+ * Based on code from Mootools (http://mootools.net)
+ */
+
+Wicket.Event = {
+ // adds an event of specified type to the element
+ // also supports the domready event on window
+ // domready is event fired when the DOM is complete, but before loading
external resources (images, ...)
+ add: function(element, type, fn) {
+ // is the event domready?
+ if (element == window && type == "domready") {
+ Wicket.Event.addDomReadyEvent(fn);
+ } else {
+ if (element.addEventListener){
+ element.addEventListener((type == 'mousewheel'
&& window.gecko) ? 'DOMMouseScroll' : type, fn, false);
+ } else {
+ fn = fn.bind(element);
+ element.attachEvent('on'+type, fn);
+ }
+ }
+ return element;
+ },
+
+ // handlers that will be fired on dom ready event
+ domReadyHandlers : new Array(),
+
+ // fires the dom ready event and cleanup the handlers
+ fireDomReadyHandlers : function() {
+ var h = Wicket.Event.domReadyHandlers;
+ while (h.length > 0) {
+ var c = h.shift();
+ c();
+ }
+ Wicket.Event.domReadyHandlers = null;
+ },
+
+ // adds the dom ready event
+ addDomReadyEvent : function(fn) {
+ // is the window already loaded?
+ if (window.loaded) {
+ fn();
+ } else if (!window.events || !window.events.domready) {
+ // register the handler
+ Wicket.Event.domReadyHandlers.push(fn);
+
+ // callback
+ var domReady = function() {
+ if (window.loaded)
+ return;
+ window.loaded = true;
+
+ // if there was a timer, clean it (khtml,
safari)
+ if (Wicket.Event.domReadyTimer) {
+
clearTimeout(Wicket.Event.domReadyTimer);
+ Wicket.Event.domReadyTimer = null;
+ }
+
+ // invoke the handlers
+ Wicket.Event.fireDomReadyHandlers();
+ }.bind(this);
+
+ if (document.readyState && (Wicket.Browser.isKHTML() ||
Wicket.Browser.isSafari())) {
+ //safari and konqueror don't support the event -
simulate it through a timeou
+ Wicket.Event.domReadyTimer =
window.setTimeout(function() {
+ if (document.readyState == "loaded" ||
+ document.readyState == "complete") {
+ domReady();
+ }
+ }, 1);
+ } else if (document.readyState &&
Wicket.Browser.isIE()) {
+ // internet explorer - use script with defer
attribute
+ document.write("<script id=ie_ready defer
src=javascript:void(0)><\/script>");
+
document.getElementById('ie_ready').onreadystatechange = function() {
+ if (this.readyState == 'complete')
domReady();
+ };
+ } else {
+ // other browsers
+ Wicket.Event.add(document, "DOMContentLoaded",
domReady);
+ }
+ } else {
+ window.addEventListener("domready", fn, false);
+ }
+ }
+}