diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 3b80e47..19dcf7d 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -1,10 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7dd4803..ebcd8e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v2.0.1-SNAPSHOT] - 2021-05-04
+
+#### Enhancements
+
+[#21188] Avoiding the catalogue widget window close if the user clicks outside it
+
+
## [v2.0.0] - 2021-04-12
#### Enhancements
diff --git a/pom.xml b/pom.xml
index d85db2e..b3b2ead 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
org.gcube.portlets.gcubeckan
gcube-ckan-datacatalog
war
- 2.0.0
+ 2.0.1-SNAPSHOT
gCube CKAN Data Catalog
The gCube CKAN Data Catalog portlet
@@ -40,7 +40,7 @@
org.gcube.distribution
maven-portal-bom
- 3.6.1
+ 3.6.1-SNAPSHOT
pom
import
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
index b13066b..4eef43e 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
@@ -32,13 +32,10 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDa
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
import org.gcube.portlets.widgets.ckan2zenodopublisher.client.CkanToZendoPublisherWidget;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.CatalogueItem;
-import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEvent;
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.form.CreateDatasetForm;
import org.gcube.portlets_widgets.catalogue_sharing_widget.client.ShareCatalogueWidget;
import com.github.gwtbootstrap.client.ui.Modal;
-import com.github.gwtbootstrap.client.ui.event.HideEvent;
-import com.github.gwtbootstrap.client.ui.event.HideHandler;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.shared.HandlerManager;
@@ -94,9 +91,9 @@ public class CkanEventHandlerManager {
eventBus.addHandler(InsertMetadataEvent.TYPE, new InsertMetadataEventHandler() {
@Override
- public void onInsertMetadata(InsertMetadataEvent loadSelecteReleaseEvent) {
- GWT.log("loadSelecteReleaseEvent: "+loadSelecteReleaseEvent);
- final Modal modal = new Modal(true, true);
+ public void onInsertMetadata(InsertMetadataEvent loadSelectedItemEvent) {
+ GWT.log("onInsertMetadata: "+loadSelectedItemEvent);
+ final Modal modal = new ExtModal(true, true);
modal.setTitle(WIDGET_CREATE_TITLE);
modal.addStyleName("insert-metadata-modal-style");
@@ -104,16 +101,23 @@ public class CkanEventHandlerManager {
((Element)modal.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom");
modal.add(new CreateDatasetForm(eventBus));
modal.setCloseVisible(true);
-
- // hide any popup panel opened
- modal.addHideHandler(new HideHandler() {
+
- @Override
- public void onHide(HideEvent hideEvent) {
- GWT.log("HideEvent on modal fired");
- eventBus.fireEvent(new CloseCreationFormEvent());
- }
- });
+// // hide any popup panel opened
+// modal.addHideHandler(new HideHandler() {
+//
+// @Override
+// public void onHide(HideEvent hideEvent) {
+// GWT.log("HideEvent on modal fired");
+// GWT.log(hideEvent.toDebugString());
+// eventBus.fireEvent(new CloseCreationFormEvent());
+//
+// hideEvent.preventDefault();
+// hideEvent.stopPropagation();
+// return;
+//
+// }
+// });
GWT.log("show");
modal.show();
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/ExtModal.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/ExtModal.java
new file mode 100644
index 0000000..403b40d
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/ExtModal.java
@@ -0,0 +1,133 @@
+package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
+
+import com.github.gwtbootstrap.client.ui.Modal;
+import com.github.gwtbootstrap.client.ui.event.HideEvent;
+import com.github.gwtbootstrap.client.ui.event.HideHandler;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.Random;
+
+/**
+ * The Class ExtModal.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Apr 29, 2021
+ *
+ * This Class extends the {{@link Modal} preventing the default close of
+ * the Modal Bootstrap when clicking outside of the modal Window
+ */
+public class ExtModal extends Modal {
+
+ private String elementId;
+ private String closeElementId;
+ private Boolean closeButtoClicked = false;
+ final private ExtModal INSTANCE = this;
+
+ /**
+ * Instantiates a new ext modal.
+ */
+ public ExtModal() {
+ super();
+ setElementIds();
+ addDeferredCommandToPreventModalClose();
+ }
+
+ /**
+ * Creates an empty, hidden widget with specified show behavior.
+ *
+ * @param animated true
if the widget should be animated.
+ */
+ public ExtModal(boolean animated) {
+ super(animated, false);
+ setElementIds();
+ addDeferredCommandToPreventModalClose();
+ }
+
+ /**
+ * Creates an empty, hidden widget with specified show behavior.
+ *
+ * @param animated true
if the widget should be animated.
+ * @param dynamicSafe true
removes from RootPanel when hidden
+ */
+ public ExtModal(boolean animated, boolean dynamicSafe) {
+ super(animated, dynamicSafe);
+ setElementIds();
+ addDeferredCommandToPreventModalClose();
+ }
+
+ private void addDeferredCommandToPreventModalClose() {
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ ((Element) INSTANCE.getElement().getChildNodes().getItem(0)).getFirstChildElement()
+ .setId(closeElementId);
+ preventModalCloseWhenClickingOutside();
+
+ }
+ });
+
+ }
+
+ /**
+ * Sets the element id.
+ */
+ private void setElementIds() {
+ this.elementId = "my-modal-publish-meta" + Random.nextInt();
+ this.getElement().setId(elementId);
+
+ this.closeElementId = "my-modal-close-button" + Random.nextInt();
+ }
+
+ /**
+ * Prevent modal close when clicking outside.
+ */
+ private void preventModalCloseWhenClickingOutside() {
+
+ com.google.gwt.user.client.Element buttonCloseElement = DOM.getElementById(this.closeElementId);
+
+ if (buttonCloseElement != null) {
+
+ Event.sinkEvents(buttonCloseElement, Event.ONCLICK);
+ Event.setEventListener(buttonCloseElement, new EventListener() {
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ System.out.println("ok");
+ if (Event.ONCLICK == event.getTypeInt()) {
+ GWT.log("close event clicked");
+ closeButtoClicked = true;
+ }
+
+ }
+ });
+ } else {
+ GWT.log("button close element not found");
+ closeButtoClicked = true;
+ }
+
+ // hide any popup panel opened
+ this.addHideHandler(new HideHandler() {
+
+ @Override
+ public void onHide(HideEvent hideEvent) {
+ GWT.log("HideEvent on modal fired");
+ GWT.log(hideEvent.toDebugString());
+ GWT.log("CloseButtonClicked is: " + closeButtoClicked);
+
+ if (!closeButtoClicked) {
+ hideEvent.preventDefault();
+ hideEvent.stopPropagation();
+ }
+ }
+ });
+
+ }
+
+}