[SYNCOPE-1029] fix + improvement for wizard management into a modal window showing footer bar
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/454af142 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/454af142 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/454af142 Branch: refs/heads/master Commit: 454af14234dda2dd64b67924322c20156df72afd Parents: bbb05c5 Author: fmartelli <fabio.marte...@gmail.com> Authored: Wed Mar 1 09:33:56 2017 +0100 Committer: fmartelli <fabio.marte...@gmail.com> Committed: Wed Mar 1 09:34:25 2017 +0100 ---------------------------------------------------------------------- .../client/console/panels/ListViewPanel.java | 8 +++++ .../markup/html/bootstrap/dialog/BaseModal.java | 30 +++++++++++++--- .../client/console/wizards/WizardMgtPanel.java | 9 +++++ .../resources/ResourceProvisionPanel.java | 19 ++++++++-- .../META-INF/resources/css/syncopeConsole.css | 38 ++++++++++++++++++-- .../client/console/panels/CoreLogPanel.html | 2 +- .../client/console/wizards/AjaxWizard.html | 1 + .../syncope/fit/console/TopologyITCase.java | 8 ++--- 8 files changed, 101 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java index 94ed492..e015621 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java @@ -372,6 +372,11 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan } @Override + protected void customActionCallback(final AjaxRequestTarget target) { + Builder.this.customActionCallback(target); + } + + @Override protected void customActionOnFinishCallback(final AjaxRequestTarget target) { Builder.this.customActionOnFinishCallback(target); } @@ -383,6 +388,9 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan }; } + protected void customActionCallback(final AjaxRequestTarget target) { + } + protected void customActionOnCancelCallback(final AjaxRequestTarget target) { } http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java index e63d69a..a5716e6 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java @@ -21,7 +21,6 @@ package org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog; import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal; import de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.Draggable; import de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.DraggableConfig; -import de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.Resizable; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -47,6 +46,7 @@ import org.slf4j.LoggerFactory; import org.apache.syncope.client.console.panels.SubmitableModalPanel; import org.apache.syncope.client.console.wicket.ajax.form.IndicatorModalCloseBehavior; import org.apache.wicket.ajax.AjaxEventBehavior; +import org.apache.wicket.event.IEvent; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; @@ -79,6 +79,8 @@ public class BaseModal<T extends Serializable> extends Modal<T> { private AjaxEventBehavior closeBehavior; + private WebMarkupContainer footer; + public BaseModal(final String id) { super(id); @@ -101,8 +103,7 @@ public class BaseModal<T extends Serializable> extends Modal<T> { components = new ArrayList<>(); // Note: not adding this would imply adding WebjarsJavaScriptResourceReference about JQuery resizable and mouse - add(new Resizable().withChildSelector(".modal-content")); - + // add(new Resizable().withChildSelector(".modal-content")); // Note: not adding this would imply adding of WebjarsJavaScriptResourceReference about JQuery draggable add(new Draggable(new DraggableConfig().withHandle(".modal-header").withCursor("move"))); @@ -229,7 +230,7 @@ public class BaseModal<T extends Serializable> extends Modal<T> { final WebMarkupContainer dialog = (WebMarkupContainer) this.get("dialog"); dialog.setMarkupId(this.getId()); - final WebMarkupContainer footer = (WebMarkupContainer) this.get("dialog:footer"); + footer = (WebMarkupContainer) this.get("dialog:footer"); footer.addOrReplace(new ListView<Component>("inputs", components) { private static final long serialVersionUID = 4949588177564901031L; @@ -238,7 +239,7 @@ public class BaseModal<T extends Serializable> extends Modal<T> { protected void populateItem(final ListItem<Component> item) { item.add(item.getModelObject()); } - }.setOutputMarkupId(true)); + }.setOutputMarkupId(true)).setOutputMarkupId(true); } /** @@ -272,6 +273,25 @@ public class BaseModal<T extends Serializable> extends Modal<T> { } } + public static class ChangeFooterVisibilityEvent extends ModalEvent { + + private static final long serialVersionUID = -6157576856659866343L; + + public ChangeFooterVisibilityEvent(final AjaxRequestTarget target) { + super(target); + } + } + + @Override + public void onEvent(final IEvent<?> event) { + if (event.getPayload() instanceof ChangeFooterVisibilityEvent) { + if (BaseModal.this.footer != null) { + final AjaxRequestTarget target = ChangeFooterVisibilityEvent.class.cast(event.getPayload()).getTarget(); + target.add(BaseModal.this.footer.setEnabled(!BaseModal.this.footer.isEnabled())); + } + } + } + //-------------------------------------------------------- // Reqired for SYNCOPE-846 //-------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java index 6c6cf0d..92bd5f9 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java @@ -211,6 +211,7 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple fragment.add(Component.class.cast(modalPanel)); container.addOrReplace(fragment); } + customActionCallback(target); } else if (event.getPayload() instanceof AjaxWizard.NewItemCancelEvent) { if (wizardInModal) { modal.close(target); @@ -357,6 +358,14 @@ public abstract class WizardMgtPanel<T extends Serializable> extends Panel imple } /** + * Custom action to perform on create/edit action callback. + * + * @param target Ajax request target. + */ + protected void customActionCallback(final AjaxRequestTarget target) { + } + + /** * Custom action to perform on close callback on finish event. * * @param target Ajax request target. http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java index fbe4907..1264c7a 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java @@ -190,15 +190,27 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> { } @Override + protected void customActionCallback(final AjaxRequestTarget target) { + // change modal foter visibility + send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target)); + } + + @Override protected void customActionOnCancelCallback(final AjaxRequestTarget target) { ResourceProvisionPanel.this.aboutRealmProvison.setVisible(true); target.add(ResourceProvisionPanel.this.aboutRealmProvison); + + // change modal foter visibility + send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target)); } @Override protected void customActionOnFinishCallback(final AjaxRequestTarget target) { ResourceProvisionPanel.this.aboutRealmProvison.setVisible(true); target.add(ResourceProvisionPanel.this.aboutRealmProvison); + + // change modal foter visibility + send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target)); } }; @@ -314,7 +326,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> { if (connObjectKeyCount != 1) { throw new RuntimeException(provision.getAnyType() + ": " + new StringResourceModel("connObjectKeyValidation", ResourceProvisionPanel.this). - getString()); + getString()); } } } @@ -335,7 +347,10 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> { public void onEvent(final IEvent<?> event) { if (event.getPayload() instanceof AjaxWizard.NewItemActionEvent) { aboutRealmProvison.setVisible(false); - ((AjaxWizard.NewItemEvent) event.getPayload()).getTarget().add(aboutRealmProvison); + final AjaxRequestTarget target = ((AjaxWizard.NewItemEvent) event.getPayload()).getTarget(); + target.add(aboutRealmProvison); + // change modal foter visibility + send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target)); } super.onEvent(event); http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css index 958a06c..0ad7824 100644 --- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css +++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css @@ -318,8 +318,9 @@ a.help span a { } .modal-body { - max-height: 500px; + max-height: 550px; overflow-y: auto; + overflow-x: hidden; } .modal { @@ -387,10 +388,14 @@ div.wizard-view div.wizard-view{ height: 360px !important; } +div.modal-body div.box-body div.wizard-buttons { + bottom: 30px; +} + .wizard-buttons { padding: 10px 0px 5px 0px; position: absolute; - bottom: 30px; + bottom: 4px; width: 100%; } @@ -1070,3 +1075,32 @@ END - EVENTS fieldset.input-group { width: 100%; } + +div.modal-content > div.modal-header { + background-color: #f0f0f0; + height: 64px; +} + +div.modal-content > div.modal-footer { + background-color: #f0f0f0; + height: 64px; +} + +.modal-body .box-body div.background-footer { + display: none !important; +} + +div.background-footer { + background-color: #f0f0f0; + display: block; + height: 64px; + margin-bottom: -15px; + margin-left: -30px; + margin-top: -25px; + width: 1300px; +} + +.logviewer-btn { + padding: 0px 16px 20px 0px; + float: right; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html index ccf729f..076f4c7 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html @@ -20,7 +20,7 @@ under the License. <wicket:panel> <span wicket:id="loggerContainer"> <div class="logs"> - <div class="pull-right"> + <div class="logviewer-btn"> <button class="btn btn-primary" wicket:id="viewer"> <span class="glyphicon glyphicon-list-alt"></span> Log Viewer </button> http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html index 96f296e..7bd13e6 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html @@ -38,6 +38,7 @@ under the License. </div> </form> </div> + <div class="background-footer"></div> <span wicket:id="outerObjectsRepeater"> <div wicket:id="outer"/> </span> http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java index 96af22e..97dc6eb 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java @@ -260,10 +260,10 @@ public class TopologyITCase extends AbstractConsoleITCase { TESTER.assertComponent("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:" + "container:content:wizard:form:view:mapping:mappingContainer:mappings:0", WebMarkupContainer.class); - TESTER.executeAjaxEvent( - "body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:" - + "wizard:form:buttons:cancel", Constants.ON_CLICK); - + formTester = TESTER.newFormTester( + "body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:wizard:form"); + formTester.submit("buttons:cancel"); + TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:dialog:footer:buttons:0:button"); TESTER.cleanupFeedbackMessages();