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


Reply via email to