You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/12/02 17:53:24 UTC

[1/2] ISIS-486: action prompts shown in modal dialog.

Updated Branches:
  refs/heads/master 81b200fbb -> 3b6fa937b


http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/fixtures/SystemFixtures.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/fixtures/SystemFixtures.java b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/fixtures/SystemFixtures.java
index fa78dc8..a774d10 100644
--- a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/fixtures/SystemFixtures.java
+++ b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/fixtures/SystemFixtures.java
@@ -25,7 +25,7 @@ import org.jmock.Mockery;
 
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
 
 public final class SystemFixtures {
@@ -41,7 +41,7 @@ public final class SystemFixtures {
             final String linkId, 
             final ObjectAdapterMemento adapterMemento,
             final ObjectAction noAction, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider,
+            final ActionPromptProvider actionPromptModalWindowProvider,
             final Link<T> returns) {
         context.checking(new Expectations() {
             {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
index 4a40a03..73863e1 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
@@ -227,6 +227,8 @@ public class ToDoItems {
         //
         
         container.persist(toDoItem);
+        container.flush();
+        container.informUser("new todo item created!");
         return toDoItem;
     }
     
@@ -239,7 +241,6 @@ public class ToDoItems {
     }
 
     
-    
     // //////////////////////////////////////
     // Injected Services
     // //////////////////////////////////////
@@ -250,5 +251,4 @@ public class ToDoItems {
     @javax.inject.Inject
     private ClockService clockService;
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
index b937fc3..46d45d0 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
@@ -41,10 +41,11 @@ isis.viewer.wicket.datePickerPattern=dd-mm-yy
 #isis.viewer.wicket.datePickerPattern=dd/mm/y
 
 
-#isis.viewer.wicket.suppressRememberMe=true
-
 
 # default is for wicket tags to be stripped in production (Isis SERVER mode == Wicket deployment mode), 
 # not stripped otherwise (Isis' PROTOTYPE mode == Wicket's DEVELOPMENT mode)
 # isis.viewer.wicket.stripWicketTags=false
 
+#isis.viewer.wicket.suppressRememberMe=true
+#isis.viewer.wicket.disableModalDialogs=true
+

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
index b937fc3..830ae0c 100644
--- a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
+++ b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
@@ -42,6 +42,7 @@ isis.viewer.wicket.datePickerPattern=dd-mm-yy
 
 
 #isis.viewer.wicket.suppressRememberMe=true
+#isis.viewer.wicket.disableModalDialogs=true
 
 
 # default is for wicket tags to be stripped in production (Isis SERVER mode == Wicket deployment mode), 


[2/2] git commit: ISIS-486: action prompts shown in modal dialog.

Posted by da...@apache.org.
ISIS-486: action prompts shown in modal dialog.

... now the default, unless disabled using "isis.viewer.wicket.disableModalDialogs" property.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3b6fa937
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3b6fa937
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3b6fa937

Branch: refs/heads/master
Commit: 3b6fa937be26d3c25c07caef66d9916a6a97757e
Parents: 81b200f
Author: Dan Haywood <da...@apache.org>
Authored: Mon Dec 2 16:53:13 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Dec 2 16:53:13 2013 +0000

----------------------------------------------------------------------
 .../wicket/viewer/IsisWicketApplication.java    |   6 +-
 .../wicket/model/models/ActionExecutor.java     |   3 +-
 .../viewer/wicket/model/models/ActionModel.java |  21 ++++-
 .../wicket/model/models/ActionPrompt.java       |  41 ++++++++++
 .../models/ActionPromptModalWindowProvider.java |  38 ---------
 .../model/models/ActionPromptProvider.java      |  37 +++++++++
 .../model/models/ApplicationActionsModel.java   |   6 +-
 .../actionprompt/ActionPromptModalWindow.java   |  82 +++++++++++++++++++
 .../ui/components/actions/ActionPanel.java      |  54 ++++++------
 .../actions/ActionParametersFormPanel.html      |   7 --
 .../actions/ActionParametersFormPanel.java      |  75 +++++++++++++----
 .../ui/components/actions/spinning-icon.gif     | Bin 5266 -> 0 bytes
 .../additionallinks/EntityActionUtil.java       |   4 +-
 .../cssmenu/AppActionsCssMenuFactory.java       |   4 +-
 .../cssmenu/AppActionsCssMenuLinkFactory.java   |   4 +-
 .../components/collection/CollectionPanel.java  |  13 +--
 .../ajaxtable/BulkActionsLinkFactory.java       |   4 +-
 .../CollectionContentsAsAjaxTablePanel.java     |  16 ++--
 .../entity/EntityActionLinkFactory.java         |   4 +-
 .../entity/header/EntityHeaderPanel.java        |   4 +-
 .../properties/EntityPropertiesPanel.html       |   8 --
 .../entity/properties/spinning-icon.gif         | Bin 2693 -> 0 bytes
 .../components/scalars/ScalarPanelAbstract.java |   4 +-
 .../widgets/cssmenu/ActionLinkFactory.java      |   4 +-
 .../cssmenu/ActionLinkFactoryAbstract.java      |  27 +++---
 .../widgets/cssmenu/CssMenuBuilder.java         |  12 +--
 .../components/widgets/cssmenu/CssMenuItem.java |   6 +-
 .../viewer/wicket/ui/errors/JGrowlUtil.java     |   6 +-
 .../viewer/wicket/ui/pages/PageAbstract.css     |  51 +++++++-----
 .../viewer/wicket/ui/pages/PageAbstract.html    |   9 ++
 .../viewer/wicket/ui/pages/PageAbstract.java    |  37 ++-------
 .../ui/pages/actionprompt/ActionPromptPage.html |   2 +-
 .../wicket/ui/pages/entity/EntityPage.java      |   2 +-
 .../ui/pages/jquery.isis.wicket.viewer.js       |  34 ++++++--
 .../viewer/wicket/ui/pages/spinning-icon.gif    | Bin 0 -> 2693 bytes
 .../wicket/ui/fixtures/SystemFixtures.java      |   4 +-
 .../dom/src/main/java/dom/todo/ToDoItems.java   |   4 +-
 .../webapp/WEB-INF/viewer_wicket.properties     |   5 +-
 .../webapp/WEB-INF/viewer_wicket.properties     |   1 +
 39 files changed, 407 insertions(+), 232 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index d5610f3..9090864 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -265,9 +265,9 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
         }
     }
 
-    private void mountPage(final String mountPath, final PageType entity) {
-        final Class<? extends Page> entityPageClass = this.pageClassRegistry.getPageClass(entity);
-        mount(new MountedMapper(mountPath, entityPageClass));
+    private void mountPage(final String mountPath, final PageType pageType) {
+        final Class<? extends Page> pageClass = this.pageClassRegistry.getPageClass(pageType);
+        mount(new MountedMapper(mountPath, pageClass));
     }
 
     private void buildCssBundle() {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionExecutor.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionExecutor.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionExecutor.java
index 729055e..d634262 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionExecutor.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionExecutor.java
@@ -21,7 +21,6 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import java.io.Serializable;
 
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.Form;
 
@@ -31,6 +30,6 @@ import org.apache.wicket.markup.html.form.Form;
  */
 public interface ActionExecutor extends Serializable {
 
-    void executeActionAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
+    boolean executeActionAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 693e4ea..a84c005 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -27,7 +27,6 @@ import java.util.regex.Pattern;
 
 import com.google.common.collect.Maps;
 
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.Identifier;
@@ -250,6 +249,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     private Map<Integer, ScalarModel> arguments = Maps.newHashMap();
     private ActionExecutor executor;
 
+
     private ActionModel(final PageParameters pageParameters) {
         this(newObjectAdapterMementoFrom(pageParameters), newActionMementoFrom(pageParameters), actionModeFrom(pageParameters));
 
@@ -408,6 +408,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         // from getObject()/reExecute
         detach(); // force re-execute
         
+        // TODO: think we need another field to determine if args have been populated.
         final ObjectAdapter results = executeAction();
         this.actionMode = Mode.RESULTS;
         
@@ -450,6 +451,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return arguments;
     }
 
+
+    
     public ActionExecutor getExecutor() {
         return executor;
     }
@@ -466,6 +469,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         for (ScalarModel argumentModel : arguments.values()) {
             argumentModel.setObject((ObjectAdapter)null);
         }
+        this.actionMode = determineMode(actionMemento.getAction());
     }
 
     /**
@@ -479,7 +483,19 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return bookmarkPolicy.value() == BookmarkPolicy.AS_ROOT && safeSemantics;
     }
 
+    
+    // //////////////////////////////////////
+
+    private ActionPrompt actionPrompt;
 
+    public void setActionPrompt(ActionPrompt actionPrompt) {
+        this.actionPrompt = actionPrompt;
+    }
+
+    public ActionPrompt getActionPrompt() {
+        return actionPrompt;
+    }
+    
     //////////////////////////////////////////////////
     // Dependencies (from context)
     //////////////////////////////////////////////////
@@ -488,7 +504,4 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return IsisContext.getOidMarshaller();
     }
 
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPrompt.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPrompt.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPrompt.java
new file mode 100644
index 0000000..f1898a5
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPrompt.java
@@ -0,0 +1,41 @@
+/*
+ *  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 org.apache.isis.viewer.wicket.model.models;
+
+import java.io.Serializable;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+/**
+ * Decouples the {@link ActionModel} from its (modal window) prompt.
+ */
+public interface ActionPrompt extends Serializable {
+
+    void setPanel(Component component, AjaxRequestTarget target);
+    
+    void show(AjaxRequestTarget target);
+    
+    String getContentId();
+
+    void close(AjaxRequestTarget target);
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptModalWindowProvider.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptModalWindowProvider.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptModalWindowProvider.java
deleted file mode 100644
index 028c92c..0000000
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptModalWindowProvider.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- *  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 org.apache.isis.viewer.wicket.model.models;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-
-public interface ActionPromptModalWindowProvider {
-
-    public static class Util{
-
-        public static ActionPromptModalWindowProvider getFrom(Component component) {
-            final Page page = component.getPage();
-            if(page instanceof ActionPromptModalWindowProvider) {
-                final ActionPromptModalWindowProvider provider = (ActionPromptModalWindowProvider) page;
-                return provider;
-            } 
-            // else
-            return null;
-        }}
-
-    public ModalWindow getActionPromptModalWindow();
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
new file mode 100644
index 0000000..5ed5151
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
@@ -0,0 +1,37 @@
+/**
+ *  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 org.apache.isis.viewer.wicket.model.models;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+
+public interface ActionPromptProvider {
+
+    public static class Util{
+
+        public static ActionPromptProvider getFrom(Component component) {
+            final Page page = component.getPage();
+            if(page instanceof ActionPromptProvider) {
+                final ActionPromptProvider provider = (ActionPromptProvider) page;
+                return provider;
+            } 
+            // else
+            return null;
+        }}
+
+    public ActionPrompt getActionPrompt();
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ApplicationActionsModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ApplicationActionsModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ApplicationActionsModel.java
index 4bf2b77..824601d 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ApplicationActionsModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ApplicationActionsModel.java
@@ -30,18 +30,18 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 public class ApplicationActionsModel extends ModelAbstract<List<ObjectAdapter>> {
 
     private static final long serialVersionUID = 1L;
-    private ActionPromptModalWindowProvider actionPromptModalWindowProvider;
+    private ActionPromptProvider actionPromptModalWindowProvider;
 
     @Override
     protected List<ObjectAdapter> load() {
         return getServiceAdapters();
     }
 
-    public void setActionPromptModalWindowProvider(ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+    public void setActionPromptModalWindowProvider(ActionPromptProvider actionPromptModalWindowProvider) {
         this.actionPromptModalWindowProvider = actionPromptModalWindowProvider;
     }
     
-    public ActionPromptModalWindowProvider getActionPromptModalWindowProvider() {
+    public ActionPromptProvider getActionPromptModalWindowProvider() {
         return actionPromptModalWindowProvider;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
new file mode 100644
index 0000000..3878e57
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
@@ -0,0 +1,82 @@
+/**
+ *  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 org.apache.isis.viewer.wicket.ui.components.actionprompt;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+
+public class ActionPromptModalWindow extends ModalWindow implements ActionPrompt {
+
+    private static final long serialVersionUID = 1L;
+
+    public static ActionPromptModalWindow getActionPromptModalWindowIfEnabled(ActionPromptModalWindow modalWindow) {
+        return !isActionPromptModalDialogDisabled() ? modalWindow : null;
+    }
+
+    public static boolean isActionPromptModalDialogDisabled() {
+        return getConfiguration().getBoolean("isis.viewer.wicket.disableModalDialogs", false);
+    }
+
+    private static IsisConfiguration getConfiguration() {
+        return IsisContext.getConfiguration();
+    }
+
+    public static ActionPromptModalWindow newModalWindow(String id) {
+        ActionPromptModalWindow modalWindow = new ActionPromptModalWindow(id);
+        modalWindow.setAutoSize(true);
+        modalWindow.setResizable(false);
+        modalWindow.setCssClassName("w_isis");
+        return modalWindow;
+    }
+
+
+    // //////////////////////////////////////
+    
+    
+    public ActionPromptModalWindow(String id) {
+        super(id);
+        setMaskType(MaskType.SEMI_TRANSPARENT);
+    }
+    
+    @Override
+    public void setPanel(Component component, AjaxRequestTarget target) {
+        setContent(component);
+    }
+
+    
+    @Override
+    public void show(AjaxRequestTarget target) {
+        
+        // http://stackoverflow.com/questions/8013364/how-to-defeat-browser-dialog-popup-when-calling-wicket-setresponsepage-from-mo/8679946#8679946
+        target.prependJavaScript("Wicket.Window.unloadConfirmation = false;");
+        
+        super.show(target);
+        
+        StringBuilder builder = new StringBuilder();
+        builder.append("$('.first-field input').focus();\n");
+        builder.append("Wicket.Window.get().autoSizeWindow();\n");
+        target.appendJavaScript(builder.toString());
+
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index 05d3135..71b4026 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -25,8 +25,6 @@ import java.util.List;
 import com.google.common.base.Throwables;
 import com.google.common.collect.Iterables;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -145,41 +143,34 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
     
     /**
      * @param feedbackForm - for feedback messages.
+     * @return 
      */
     @Override
-    public void executeActionAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
+    public boolean executeActionAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
 
         permanentlyHide(ComponentType.ENTITY_ICON_AND_TITLE);
 
         ObjectAdapter targetAdapter = null;
-        boolean clearArgs = true;
         try {
-            try {
-                targetAdapter = getModel().getTargetAdapter();
-
-                // no concurrency exception, so continue...
-                clearArgs = executeActionOnTargetAndProcessResults(targetAdapter, target, feedbackForm);
-
-            } catch (ConcurrencyException ex) {
+            targetAdapter = getModel().getTargetAdapter();
 
-                // second attempt should succeed, because the Oid would have
-                // been updated in the attempt
-                if (targetAdapter == null) {
-                    targetAdapter = getModel().getTargetAdapter();
-                }
+            // no concurrency exception, so continue...
+            return executeActionOnTargetAndProcessResults(targetAdapter, target, feedbackForm);
 
-                
-                // forward onto the target page with the concurrency exception
-                ResultType.OBJECT.addResults(this, targetAdapter, ex);
+        } catch (ConcurrencyException ex) {
 
-                getMessageBroker().addWarning(ex.getMessage());
-                return;
-            }
-        } finally {
-            if(clearArgs) {
-                getActionModel().clearArguments();
+            // second attempt should succeed, because the Oid would have
+            // been updated in the attempt
+            if (targetAdapter == null) {
+                targetAdapter = getModel().getTargetAdapter();
             }
+
             
+            // forward onto the target page with the concurrency exception
+            ResultType.OBJECT.addResults(this, targetAdapter, ex);
+
+            getMessageBroker().addWarning(ex.getMessage());
+            return false;
         }
     }
 
@@ -187,11 +178,15 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
      * @param target 
      * @return whether to clear args or not (they aren't if there was a validation exception)
      */
-    private boolean executeActionOnTargetAndProcessResults(ObjectAdapter targetAdapter, AjaxRequestTarget target, Form<?> feedbackForm) {
+    private boolean executeActionOnTargetAndProcessResults(
+            final ObjectAdapter targetAdapter, 
+            final AjaxRequestTarget target, final Form<?> feedbackForm) {
 
-        // validate the action parameters (if any)
         final ActionModel actionModel = getActionModel();
+        
+        // validate the action parameters (if any)
         final String invalidReasonIfAny = actionModel.getReasonInvalidIfAny();
+        
         if (invalidReasonIfAny != null) {
             raiseWarning(target, feedbackForm, invalidReasonIfAny);
             return false;
@@ -213,7 +208,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
                 bookmarkPage(actionModel);
             }
 
-            return false;
+            return true;
 
         } catch (RuntimeException ex) {
 
@@ -229,7 +224,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
                     final ResultType resultType = ResultType.determineFor(null);
                     resultType.addResults(this, null);
                 }
-                
+
                 return false;
             }
             
@@ -256,7 +251,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
             
             // there's no need to abort the transaction, it will have already been done
             // (in IsisTransactionManager#executeWithinTransaction(...)).
-
         }
         return recognizedErrorIfAny;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.html
index a716300..4cc1e56 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.html
@@ -31,13 +31,6 @@
 				    	<div class="buttons">
 				    		<input type="submit" wicket:id="okButton" value="OK" class="ok"/>
                             <input type="submit" wicket:id="cancelButton" value="Cancel" class="cancel"/>
-                            <div id="veil"> 
-                                <div class="imgHolder">
-                                    <wicket:link>
-                                        <img src="/images/spinning-icon.gif"/>
-                                    </wicket:link>
-                                </div>
-                            </div>
 				    	</div>
 			    	</fieldset>
 				</form>

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index c22f08f..5b5d012 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -25,40 +25,36 @@ import static org.hamcrest.CoreMatchers.nullValue;
 
 import java.util.List;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
+import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.model.IModel;
 
 import org.apache.isis.core.commons.ensure.Ensure;
-import org.apache.isis.core.commons.lang.ObjectExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionExecutor;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.util.MementoFunctions;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.ResultType;
+import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel;
-import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
+import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
+import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -76,6 +72,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
     private static final String ID_ACTION_PARAMETERS = "parameters";
 
     private final ActionExecutor actionExecutor;
+    private final ActionPrompt actionPromptIfAny;
 
     public ActionParametersFormPanel(final String id, final ActionModel model) {
         super(id, model);
@@ -83,6 +80,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
         Ensure.ensureThatArg(model.getExecutor(), is(not(nullValue())));
 
         this.actionExecutor = model.getExecutor();
+        this.actionPromptIfAny = model.getActionPrompt();
         buildGui();
     }
 
@@ -160,29 +158,72 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
 
                 @Override
                 public void onSubmit(AjaxRequestTarget target, Form<?> form) {
-                    actionExecutor.executeActionAndProcessResults(target, form);
+                    boolean succeeded = actionExecutor.executeActionAndProcessResults(target, form);
+                    if(succeeded) {
+                        // the Wicket ajax callbacks will have just started to hide the veil
+                        // we now show it once more, so that a veil continues to be shown until the
+                        // new page is rendered.
+                        target.appendJavaScript("isisShowVeil();\n");
+                    } else {
+                        if (actionPromptIfAny != null) {
+                            
+                            final StringBuilder builder = new StringBuilder();
+
+                            // ensure any jGrowl errors are shown
+                            // (normally would be flushed when traverse to next page).
+                            String errorMessagesIfAny = JGrowlUtil.asJGrowlCalls(IsisContext.getMessageBroker());
+                            builder.append(errorMessagesIfAny);
+                            
+                            // resize, to show any feedback messages.
+                            builder.append("Wicket.Window.get().autoSizeWindow();\n");
+
+                            // append the JS to the response. 
+                            String buf = builder.toString();
+                            target.appendJavaScript(buf);
+                            target.add(form);
+                        }
+                    }
                 };
+
+                /**
+                 * On validation error
+                 */
+                @Override
+                protected void onError(AjaxRequestTarget target, Form<?> form) {
+                    super.onError(target, form);
+                    if(actionPromptIfAny != null) {
+                        // resize, to show any feedback messages.
+                        target.appendJavaScript("Wicket.Window.get().autoSizeWindow();");
+                    }
+                    target.add(form);
+                }
             };
+            okButton.add(new JGrowlBehaviour());
             add(okButton);
-            Button cancelButton = new Button(ID_CANCEL_BUTTON) {
+            
+            AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON) {
                 private static final long serialVersionUID = 1L;
 
                 @Override
-                public void onSubmit() {
-                    // no-op works fine for prompt modal dialog, but need to do something else if modal dialog disabled
+                public void onSubmit(final AjaxRequestTarget target, Form<?> form) {
+                    if(actionPromptIfAny != null) {
+                        getActionModel().clearArguments();
+                        actionPromptIfAny.close(target);
+                    }
                 };
             };
+            // so can submit with invalid content (eg mandatory params missing)
+            cancelButton.setDefaultFormProcessing(false);
             add(cancelButton);
             
             // TODO: hide cancel button if dialogs disabled, as not yet implemented.
-            if(!PageAbstract.isActionPromptModalDialogEnabled()) {
+            if(ActionPromptModalWindow.isActionPromptModalDialogDisabled()) {
                 cancelButton.setVisible(false);
             }
         }
 
-
         private List<ActionParameterMemento> buildParameterMementos(final List<ObjectActionParameter> parameters) {
-            final List<ActionParameterMemento> parameterMementoList = Lists.transform(parameters, MementoFunctions.fromActionParameter());
+            final List<ActionParameterMemento> parameterMementoList = Lists.transform(parameters, ObjectAdapterMemento.Functions.fromActionParameter());
             // we copy into a new array list otherwise we get lazy evaluation =
             // reference to a non-serializable object
             return Lists.newArrayList(parameterMementoList);

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/spinning-icon.gif
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/spinning-icon.gif b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/spinning-icon.gif
deleted file mode 100644
index 75e3b1e..0000000
Binary files a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/spinning-icon.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
index bd14335..03632d7 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
@@ -61,7 +61,7 @@ public final class EntityActionUtil {
     public static List<LinkAndLabel> entityActions(
             final EntityModel entityModel, 
             final ObjectAssociation association, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
         final ObjectAdapter adapter = entityModel.load(ConcurrencyChecking.NO_CHECK);
         final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
index ca875aa..ddf0f32 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.progmodel.facets.actions.notinservicemenu.NotInServiceMenuFacet;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.ApplicationActionsModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
@@ -121,7 +121,7 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
     private List<CssMenuItem> buildMenuItems(
             final List<String> serviceNamesInOrder, 
             final Map<String, List<LogicalServiceAction>> serviceActionsByName, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         
         final List<CssMenuItem> menuItems = Lists.newArrayList();
         for (String serviceName : serviceNamesInOrder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
index 5298364..ebe5eb7 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChec
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactoryAbstract;
 
 class AppActionsCssMenuLinkFactory extends ActionLinkFactoryAbstract {
@@ -36,7 +36,7 @@ class AppActionsCssMenuLinkFactory extends ActionLinkFactoryAbstract {
     @Override
     public LinkAndLabel newLink(
             final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         
         ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index 671e0c8..fc0e893 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -30,10 +30,11 @@ import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
 
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
 import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
@@ -43,7 +44,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
  * Panel for rendering entity collection; analogous to (any concrete subclass
  * of) {@link ScalarPanelAbstract}.
  */
-public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implements ActionPromptModalWindowProvider {
+public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implements ActionPromptProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -123,13 +124,13 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
     // ActionPromptModalWindowProvider
     // ///////////////////////////////////////////////////////////////////
     
-    private ModalWindow actionPromptModalWindow;
-    public ModalWindow getActionPromptModalWindow() {
-        return PageAbstract.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
+    private ActionPromptModalWindow actionPromptModalWindow;
+    public ActionPromptModalWindow getActionPrompt() {
+        return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
     }
     
     private void addActionPromptModalWindow() {
-        this.actionPromptModalWindow = PageAbstract.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
+        this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
         addOrReplace(actionPromptModalWindow);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
index ffdc949..0b5feb5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
@@ -47,7 +47,7 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.util.MementoFunctions;
 import org.apache.isis.viewer.wicket.model.util.ObjectAdapterFunctions;
@@ -73,7 +73,7 @@ final class BulkActionsLinkFactory implements ActionLinkFactory {
             final ObjectAdapterMemento serviceAdapterMemento, 
             final ObjectAction objectAction, 
             final String linkId, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         
         final ActionMemento actionMemento = new ActionMemento(objectAction);
         final AbstractLink link = new Link<Object>(linkId) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index ec22d77..ce34577 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -53,8 +53,9 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.common.SelectionHandler;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
 import org.apache.isis.viewer.wicket.ui.components.collection.CollectionCountProvider;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ColumnAbstract;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterPropertyColumn;
@@ -63,14 +64,13 @@ import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
-import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
  * {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel
  * collection of entity}s rendered using {@link AjaxFallbackDefaultDataTable}.
  */
-public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider, ActionPromptModalWindowProvider {
+public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider, ActionPromptProvider {
 
     private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectAction.Filters.bulk());
 
@@ -144,7 +144,7 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
 
     private void buildEntityActionsGui(
             final List<ObjectAction> bulkActions, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         final EntityCollectionModel model = getModel();
         
         if(bulkActions.isEmpty() || model.isParented()) {
@@ -278,13 +278,13 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
     // ActionPromptModalWindowProvider
     // ///////////////////////////////////////////////////////////////////
     
-    private ModalWindow actionPromptModalWindow;
-    public ModalWindow getActionPromptModalWindow() {
-        return PageAbstract.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
+    private ActionPromptModalWindow actionPromptModalWindow;
+    public ActionPromptModalWindow getActionPrompt() {
+        return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
     }
     
     private void addActionPromptModalWindow() {
-        this.actionPromptModalWindow = PageAbstract.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
+        this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
         addOrReplace(actionPromptModalWindow);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
index e8c5a0e..ebf69c8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
@@ -34,7 +34,7 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactoryAbstract;
@@ -53,7 +53,7 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
     }
 
     @Override
-    public LinkAndLabel newLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+    public LinkAndLabel newLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, final ActionPromptProvider actionPromptModalWindowProvider) {
         final ObjectAdapter adapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
         
         final Boolean persistent = adapter.representsPersistent();

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 55fd23f..5d5ea6c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -45,7 +45,7 @@ import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -111,7 +111,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
 
             if(!topLevelActions.isEmpty()) {
                 final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(adapterMemento, getServiceAdapters(), topLevelActions, linkFactory);
-                final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions", ActionPromptModalWindowProvider.Util.getFrom(this));
+                final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions", ActionPromptProvider.Util.getFrom(this));
 
                 this.addOrReplace(cssMenuPanel);
             } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
index cf53fdc..32eb15a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
@@ -39,14 +39,6 @@
             			    	<input type="submit" class="edit" wicket:id="edit"/>
             			    	<input type="submit" class="ok" wicket:id="ok"/>
             			    	<input type="submit" class="cancel" wicket:id="cancel"/>
-            
-                                <div id="veil" style="position:fixed;"> 
-                                    <div class="imgHolder">
-                                        <wicket:link>
-                                            <img src="/images/spinning-icon.gif"/>
-                                        </wicket:link>
-                                    </div>
-                                </div>
             			    </div>
                         </div>
                         <div wicket:id="middleColumn">

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/spinning-icon.gif
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/spinning-icon.gif b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/spinning-icon.gif
deleted file mode 100644
index 0e2b686..0000000
Binary files a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/spinning-icon.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 86d0946..898da32 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -40,7 +40,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -241,7 +241,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY) {
             final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
             final EntityModel parentEntityModel = new EntityModel(parentMemento);
-            final ActionPromptModalWindowProvider provider = ActionPromptModalWindowProvider.Util.getFrom(this);
+            final ActionPromptProvider provider = ActionPromptProvider.Util.getFrom(this);
             entityActions = EntityActionUtil.entityActions(parentEntityModel, scalarModel.getPropertyMemento().getProperty(), provider);
         } else {
             entityActions = null;

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactory.java
index 2fbb784..a13db85 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactory.java
@@ -24,9 +24,9 @@ import java.io.Serializable;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 
 public interface ActionLinkFactory extends Serializable {
 
-    LinkAndLabel newLink(ObjectAdapterMemento adapter, ObjectAction noAction, String linkId, ActionPromptModalWindowProvider actionPromptModalWindowProvider);
+    LinkAndLabel newLink(ObjectAdapterMemento adapter, ObjectAction noAction, String linkId, ActionPromptProvider actionPromptModalWindowProvider);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
index a25e267..19f244f 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
@@ -36,11 +36,14 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
+import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -60,7 +63,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
     
     /**
      * Either creates a link for the action be rendered in a {@link ModalWindow}, or (if none can be
-     * {@link ActionPromptModalWindowProvider#getActionPromptModalWindow() provided}, or creates a link to 
+     * {@link ActionPromptProvider#getActionPrompt() provided}, or creates a link to 
      * the {@link ActionPromptPage} (ie the {@link PageClassRegistry registered page} for 
      * {@link PageType#ACTION_PROMPT action}s).
      * 
@@ -71,27 +74,25 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
     protected AbstractLink newLink(
             final String linkId, 
             final ObjectAdapter objectAdapter, final ObjectAction action, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptProvider) {
         
-        final ModalWindow modalWindow = actionPromptModalWindowProvider.getActionPromptModalWindow();
-        if(modalWindow != null) {
+        final ActionPrompt actionPrompt = actionPromptProvider.getActionPrompt();
+        if(actionPrompt != null) {
             final ActionModel actionModel = ActionModel.create(objectAdapter, action);
+            actionModel.setActionPrompt(actionPrompt);
             AjaxLink<Object> link = new AjaxLink<Object>(linkId) {
                 private static final long serialVersionUID = 1L;
 
                 @Override
                 public void onClick(AjaxRequestTarget target) {
 
-                    final Component actionPromptPanel = 
-                            getComponentFactoryRegistry().createComponent(
-                                    ComponentType.ACTION_PROMPT, modalWindow.getContentId(), actionModel);
+                    final ActionPanel actionPromptPanel = 
+                            (ActionPanel) getComponentFactoryRegistry().createComponent(
+                            ComponentType.ACTION_PROMPT, actionPrompt.getContentId(), actionModel);
 
-                    modalWindow.setTitle(actionModel.getTitle());
-                    modalWindow.setContent(actionPromptPanel);
+                    actionPrompt.setPanel(actionPromptPanel, target);
+                    actionPrompt.show(target);
 
-                    // http://stackoverflow.com/questions/8013364/how-to-defeat-browser-dialog-popup-when-calling-wicket-setresponsepage-from-mo/8679946#8679946
-                    target.prependJavaScript("Wicket.Window.unloadConfirmation = false;");
-                    modalWindow.show(target);
                 }
             };
             link.add(new CssClassAppender("noVeil"));

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
index 5e87cee..4bebb5e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.progmodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.progmodel.facets.actions.notcontributed.NotContributedFacet;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem.Builder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel.Style;
 
@@ -71,7 +71,7 @@ public class CssMenuBuilder {
 
     public CssMenuPanel buildPanel(
             final String wicketId, final String rootName, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         final CssMenuItem findUsing = CssMenuItem.newMenuItem(rootName).build();
         addMenuItems(findUsing, actions, actionPromptModalWindowProvider);
         final CssMenuPanel cssMenuPanel = new CssMenuPanel(wicketId, Style.SMALL, Collections.singletonList(findUsing));
@@ -81,7 +81,7 @@ public class CssMenuBuilder {
     private void addMenuItems(
             final CssMenuItem parent, 
             final List<ObjectAction> actions, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         addMenuItemsForActionsOfType(parent, actions, ActionType.USER, actionPromptModalWindowProvider);
         if ( isExploring() || isPrototyping()) {
             addMenuItemsForActionsOfType(parent, actions, ActionType.EXPLORATION, actionPromptModalWindowProvider);
@@ -113,7 +113,7 @@ public class CssMenuBuilder {
             final CssMenuItem parent, 
             final List<ObjectAction> actions, 
             final ActionType type, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, Filters.asPredicate(ObjectAction.Filters.ofType(type)));
         for (final ObjectAction action : filterActionsOfType) {
             addMenuItem(parent, action, actionPromptModalWindowProvider);
@@ -123,14 +123,14 @@ public class CssMenuBuilder {
     private void addMenuItem(
             final CssMenuItem parent, 
             final ObjectAction action, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         addMenuItemForAction(parent, action, actionPromptModalWindowProvider);
     }
 
     private void addMenuItemForAction(
             final CssMenuItem parent, 
             final ObjectAction action, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
         
         final NotContributedFacet notContributed = action.getFacet(NotContributedFacet.class);
         if (notContributed != null && notContributed.toActions()) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
index 15ac0da..e31bd0c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
@@ -52,7 +52,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -269,7 +269,7 @@ public class CssMenuItem implements Serializable {
             final ObjectAdapterMemento targetAdapterMemento, 
             final ObjectAction objectAction, 
             final ActionLinkFactory cssMenuLinkFactory, 
-            final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+            final ActionPromptProvider actionPromptModalWindowProvider) {
 
         // check visibility
         final AuthenticationSession session = getAuthenticationSession();
@@ -347,7 +347,7 @@ public class CssMenuItem implements Serializable {
      * Creates a {@link Builder} for a submenu item where the provided {@link ActionLinkFactory} is able to provide the target adapter. 
      * @param page 
      */
-    public Builder newSubMenuItem(final ObjectAction objectAction, final ActionLinkFactory cssMenuLinkFactory, final ActionPromptModalWindowProvider actionPromptModalWindowProvider) {
+    public Builder newSubMenuItem(final ObjectAction objectAction, final ActionLinkFactory cssMenuLinkFactory, final ActionPromptProvider actionPromptModalWindowProvider) {
 
         final LinkAndLabel linkAndLabel = cssMenuLinkFactory.newLink(null, objectAction, PageAbstract.ID_MENU_LINK, actionPromptModalWindowProvider);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
index e049695..8dafd29 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
@@ -41,8 +41,8 @@ public class JGrowlUtil {
         return buf.toString();
     }
 
-    private static void addJGrowlCall(final String msg2, final String cssClassSuffix, boolean sticky, final StringBuilder buf) {
-        final String msg = msg2.replaceAll("\"", "\'");
+    public static void addJGrowlCall(final String origMsg, final String cssClassSuffix, boolean sticky, final StringBuilder buf) {
+        final String msg = origMsg.replaceAll("\"", "\'");
         buf.append("$.jGrowl(\"").append(msg).append('\"');
         buf.append(", {");
         buf.append("theme: \"jgrowl-").append(cssClassSuffix).append("\"");
@@ -50,7 +50,7 @@ public class JGrowlUtil {
             buf.append(", sticky: true");
         }
         buf.append("}");
-        buf.append(");");
+        buf.append(");\n");
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index c9e688f..0bb2be5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -686,12 +686,10 @@ div.scalarPanel {
 /******** fix for select2 on ModalWindow ********/
 /* http://osdir.com/ml/users-wicket.apache.org/2013-09/msg00165.html */
 
-.select2-drop,
-.select2-drop {
+div.select2-drop {
 	z-index: 30001
 }
 
-.select2-drop-mask,
 .select2-drop-mask {
     z-index: 30000
 }
@@ -699,15 +697,18 @@ div.scalarPanel {
 
 /******** action prompt modal dialog ********/
 
+
 .wicket-modal .w_content_container {
   background-color: #E4E4DB;
-  border-radius:4px;
-  -moz-border-radius:4px;
-  -webkit-border-radius:4px;
+}
+
+.actionPanel {
+    width: 680px;
 }
 
 .actionPanel .myBlockContainer {
     margin:20px;
+    padding: 20px;
     width: 600px;
     min-height: 200px;
 }
@@ -716,20 +717,17 @@ div.scalarPanel {
 	display: none;
 }
 
-div.wicket-modal div.w_content_2 {
-	padding-top: 0em;
-  padding-right: 20px;
-  background-color: #E4E4DB;
-  border-radius:4px;
-  -moz-border-radius:4px;
-  -webkit-border-radius:4px;
-}
-
 div.wicket-modal div.w_content_3 {
 	border: 0px;
 }
 
-div.wicket-modal div.w_content {
+div.wicket-modal div.w_content_3,
+div.wicket-modal div.w_content_2,
+div.wicket-modal div.w_content_1,
+div.wicket-modal div.w_content,
+.wicket-modal .w_content_container,
+.w_isis,
+.actionPanel {
   border-radius:4px;
   -moz-border-radius:4px;
   -webkit-border-radius:4px;
@@ -854,18 +852,29 @@ div#jGrowl div.jGrowl-closer {
 
 
 
+/* ModalWindow tweaks */
+
+div.wicket-mask-dark {  
+    filter: alpha(opacity=40);
+    opacity: 0.4; 
+}
+
+
 /* veil */
 
 #veil {
-    display: none;
+    z-index: 40000; 
+    background-image: none; 
+	background-color: black;
+	
+	display: none;
 	position:absolute;
 	top:0;
 	left:0;
-	z-index=99999;
 	height: 100%;
 	width: 100%;
-	background: rgb(210, 240, 243) transparent;
-	background-color:rgba(210, 240, 243,0.5);
+	opacity: 0.4;
+    filter: alpha(opacity=40);
 }
 
 #veil div.imgHolder {
@@ -876,7 +885,7 @@ div#jGrowl div.jGrowl-closer {
     margin-left: auto;
     margin-right: auto;
     display: block;
-    margin-top: 7em;
+    margin-top: 3em;
 } 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
index cf1b290..dd6d977 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
@@ -64,6 +64,15 @@
 			</div>
 
             <div wicket:id="actionPromptModalWindow"/>
+            
+            <div id="veil"> 
+                <div class="imgHolder">
+                    <wicket:link>
+                        <img src="spinning-icon.gif"/>
+                    </wicket:link>
+                </div>
+            </div>
+            
 
 			<div id="footer">
 				<div class="links">

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 2d60545..3d7f4b0 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -61,7 +61,8 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.ApplicationActionsModel;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
 import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
@@ -69,6 +70,7 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
 import org.apache.isis.viewer.wicket.ui.errors.ExceptionModel;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 import org.apache.isis.viewer.wicket.ui.pages.about.AboutPage;
@@ -78,7 +80,7 @@ import org.apache.isis.viewer.wicket.ui.util.Components;
 /**
  * Convenience adapter for {@link WebPage}s built up using {@link ComponentType}s.
  */
-public abstract class PageAbstract extends WebPage implements ActionPromptModalWindowProvider {
+public abstract class PageAbstract extends WebPage implements ActionPromptProvider {
 
 
     private static Logger LOG = LoggerFactory.getLogger(PageAbstract.class);
@@ -326,39 +328,16 @@ public abstract class PageAbstract extends WebPage implements ActionPromptModalW
     // ActionPromptModalWindowProvider
     // ///////////////////////////////////////////////////////////////////
     
-    private ModalWindow actionPromptModalWindow;
-    public ModalWindow getActionPromptModalWindow() {
-        return PageAbstract.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
+    private ActionPromptModalWindow actionPromptModalWindow;
+    public ActionPrompt getActionPrompt() {
+        return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
     }
 
     private void addActionPromptModalWindow() {
-        this.actionPromptModalWindow = PageAbstract.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
+        this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); 
         addOrReplace(actionPromptModalWindow);
     }
 
-    // TODO: tidy-up
-    public static ModalWindow newModalWindow(String id) {
-        ModalWindow actionPromptModalWindow = new ModalWindow(id);
-        //actionPromptModalWindow.setResizable(false);
-        actionPromptModalWindow.setAutoSize(true);
-        actionPromptModalWindow.setCssClassName("w_isis");
-        return actionPromptModalWindow;
-    }
-
-    public static ModalWindow getActionPromptModalWindowIfEnabled(ModalWindow modalWindow) {
-        boolean enable = isActionPromptModalDialogEnabled();
-        if(!enable) {
-            // no-op
-            return null;
-        }
-        return modalWindow;
-    }
-
-    public static boolean isActionPromptModalDialogEnabled() {
-        return IsisContext.getConfiguration().getBoolean("isis.viewer.wicket.enableModalDialogs", false);
-    }
-    
-
     
     // ///////////////////////////////////////////////////////////////////
     // Convenience

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
index 0c377c8..5f50349 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
@@ -24,7 +24,7 @@
       lang="en">
 	<wicket:head>
 		<wicket:link>
-			<link href="ActionPage.css" rel="stylesheet" type="text/css"/>
+			<link href="ActionPromptPage.css" rel="stylesheet" type="text/css"/>
 		</wicket:link>
 	</wicket:head>
 	<body>

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index cbc1980..d34b217 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptModalWindowProvider;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index d67a66b..2926c19 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -17,17 +17,37 @@
  *  under the License.
  */
 $(document).ready(function() {
-    var showVeil = function() {
-        $('#veil').show(); 
-    };
+
+    isisShowVeil = function() {
+        $("#veil").stop().show();
+    }
+    isisFadeInVeil = function() {
+        $("#veil").fadeIn(750);
+    }
+    isisHideVeil = function() {
+        $("#veil").stop().hide();
+    }
+
+    /* for modal dialogs */
+    Wicket.Event.subscribe(
+            '/ajax/call/beforeSend', function(attributes, jqXHR, settings) {
+                isisFadeInVeil();
+            });
+    Wicket.Event.subscribe(
+            '/ajax/call/complete', function(attributes, jqXHR, settings) {
+                isisHideVeil();
+            });
+    
+
     
-    $('.buttons .okButton:not(.noVeil)').click(showVeil);
-    $('.buttons .ok:not(.noVeil)').click(showVeil);
-    $('.cssSubMenuItemsPanel .cssSubMenuItem a:not(.noVeil)').click(showVeil);
+    /* only seem to work in non-modal situation */
+    $('.buttons .okButton:not(.noVeil)').click(isisShowVeil);
+    $('.buttons .ok:not(.noVeil)').click(isisShowVeil);
+    $('.cssSubMenuItemsPanel .cssSubMenuItem a:not(.noVeil)').click(isisShowVeil);
+
     
     $('.first-field input').focus();
     
-    
     $('div.collectionContentsAsAjaxTablePanel > table.contents > tbody > tr.reloaded-after-concurrency-exception') 
         .livequery(function(){
             x=$(this);

http://git-wip-us.apache.org/repos/asf/isis/blob/3b6fa937/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif
new file mode 100644
index 0000000..0e2b686
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif differ