Author: jrthomerson
Date: Sun May 15 23:43:51 2011
New Revision: 1103577

URL: http://svn.apache.org/viewvc?rev=1103577&view=rev
Log:
fixes WICKET-3630

Modified:
    
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java

Modified: 
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java?rev=1103577&r1=1103576&r2=1103577&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
 Sun May 15 23:43:51 2011
@@ -28,6 +28,7 @@ import org.apache.wicket.ajax.AbstractDe
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.IAjaxCallDecorator;
 import org.apache.wicket.ajax.calldecorator.CancelEventIfNoAjaxDecorator;
+import org.apache.wicket.behavior.IBehavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.CSSPackageResource;
 import org.apache.wicket.markup.html.JavascriptPackageResource;
@@ -261,7 +262,7 @@ public class ModalWindow extends Panel
                add(empty = new WebMarkupContainer(getContentId()));
 
                add(newCloseButtonBehavior());
-               add(new WindowClosedBehavior());
+               add(newWindowClosedBehavior());
 
                
add(JavascriptPackageResource.getHeaderContribution(JAVASCRIPT));
                ResourceReference CSS = newCssResource();
@@ -950,40 +951,62 @@ public class ModalWindow extends Panel
        }
 
        /**
+        * @author Russell Morrisey
+        */
+       protected interface IWindowClosedBehavior extends IBehavior
+       {
+               CharSequence getCallbackScript();
+       }
+
+       /**
+        * Handles the work that the window closed behavior is expected to 
perform; may be called by
+        * alternate implementors of IWindowClosedBehavior.
+        * 
+        * @param target
+        *            The current AjaxRequestTarget
+        */
+       protected final void respondOnWindowClosed(AjaxRequestTarget target)
+       {
+               shown = false;
+
+               // should we cleanup the pagemap?
+               if (deletePageMap == true)
+               {
+                       // get the pagemap
+                       Session session = Session.get();
+                       IPageMap pageMap = 
session.pageMapForName(getPageMapName(), false);
+
+                       // if there is any remove it
+                       if (pageMap != null)
+                       {
+                               session.removePageMap(pageMap);
+                               deletePageMap = false;
+                       }
+               }
+
+               if (windowClosedCallback != null)
+               {
+                       windowClosedCallback.onClose(target);
+               }
+       }
+
+       /**
         * @author Matej Knopp
         */
        private class WindowClosedBehavior extends AbstractDefaultAjaxBehavior
+               implements
+                       IWindowClosedBehavior
        {
                private static final long serialVersionUID = 1L;
 
                @Override
                protected void respond(AjaxRequestTarget target)
                {
-                       shown = false;
-
-                       // should we cleanup the pagemap?
-                       if (deletePageMap == true)
-                       {
-                               // get the pagemap
-                               Session session = Session.get();
-                               IPageMap pageMap = 
session.pageMapForName(getPageMapName(), false);
-
-                               // if there is any remove it
-                               if (pageMap != null)
-                               {
-                                       session.removePageMap(pageMap);
-                                       deletePageMap = false;
-                               }
-                       }
-
-                       if (windowClosedCallback != null)
-                       {
-                               windowClosedCallback.onClose(target);
-                       }
+                       respondOnWindowClosed(target);
                }
 
                @Override
-               protected CharSequence getCallbackScript()
+               public CharSequence getCallbackScript()
                {
                        return super.getCallbackScript();
                }
@@ -1147,7 +1170,7 @@ public class ModalWindow extends Panel
                // notification request
                if ((isCustomComponent() == false && deletePageMap) || 
windowClosedCallback != null)
                {
-                       WindowClosedBehavior behavior = 
getBehaviors(WindowClosedBehavior.class).get(0);
+                       IWindowClosedBehavior behavior = 
getBehaviors(IWindowClosedBehavior.class).get(0);
                        buffer.append("settings.onClose = function() { ");
                        buffer.append(behavior.getCallbackScript());
                        buffer.append(" };\n");
@@ -1249,4 +1272,14 @@ public class ModalWindow extends Panel
        {
                return new CloseButtonBehavior();
        }
+
+       /**
+        * Gives the possibility to provide custom {@link IAjaxCallDecorator}
+        * 
+        * @return the behavior that should be used for the window close event
+        */
+       protected IWindowClosedBehavior newWindowClosedBehavior()
+       {
+               return new WindowClosedBehavior();
+       }
 }


Reply via email to