From 1ff18c725b98f02fbd6b32fe72046e18763255f7 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Wed, 27 Jul 2016 17:08:26 +0200 Subject: [PATCH] Editor / After adding an element with cardinality 0..1, add action is still available (see https://github.com/geonetwork/core-geonetwork/issues/1636) --- .../main/plugin/iso19139/layout/layout.xsl | 4 +-- .../records/editing/MetadataEditingApi.java | 13 +++----- .../metadatamanager/EditorService.js | 33 +++++++++++++++---- .../webapp/xslt/ui-metadata/form-builder.xsl | 24 ++++++++++++-- 4 files changed, 56 insertions(+), 18 deletions(-) diff --git a/schemas/iso19139/src/main/plugin/iso19139/layout/layout.xsl b/schemas/iso19139/src/main/plugin/iso19139/layout/layout.xsl index e1115f75398..1f7d122ded1 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/layout/layout.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/layout/layout.xsl @@ -162,7 +162,7 @@ - + @@ -325,7 +325,7 @@ + select="if ($refToDelete) then $refToDelete else gn:element"/> diff --git a/services/src/main/java/org/fao/geonet/api/records/editing/MetadataEditingApi.java b/services/src/main/java/org/fao/geonet/api/records/editing/MetadataEditingApi.java index f22104f1066..d883416ed7c 100644 --- a/services/src/main/java/org/fao/geonet/api/records/editing/MetadataEditingApi.java +++ b/services/src/main/java/org/fao/geonet/api/records/editing/MetadataEditingApi.java @@ -42,16 +42,13 @@ import org.fao.geonet.kernel.metadata.StatusActions; import org.fao.geonet.kernel.metadata.StatusActionsFactory; import org.fao.geonet.kernel.setting.SettingManager; -import org.fao.geonet.api.records.editing.AjaxEditUtils; import org.fao.geonet.utils.Xml; import org.jdom.Element; import org.jdom.JDOMException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; -import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @@ -155,7 +152,7 @@ public Element startEditing( currTab, session, allRequestParams, request, metadata.getId(), elMd, metadata.getDataInfo().getSchemaId(), showValidationErrors, - context, applicationContext, false); + context, applicationContext, false, false); } @@ -313,7 +310,7 @@ public Element saveEdits( tab, httpSession, forwardedParams, request, metadata.getId(), elMd, metadata.getDataInfo().getSchemaId(), withValidationErrors, - context, applicationContext, false); + context, applicationContext, false, false); } @@ -438,7 +435,7 @@ public Element addElement( allRequestParams.get("currTab"), httpSession, allRequestParams, request, metadata.getId(), md, metadata.getDataInfo().getSchemaId(), false, - context, applicationContext, true); + context, applicationContext, true, true); } @@ -615,7 +612,7 @@ private Element buildEditorForm( String schema, boolean showValidationErrors, ServiceContext context, - ApplicationContext applicationContext, boolean isEmbedded) throws Exception { + ApplicationContext applicationContext, boolean isEmbedded, boolean embedded) throws Exception { UserSession userSession = ApiUtils.getUserSession(session); @@ -626,7 +623,7 @@ private Element buildEditorForm( new Element("currTab").setText(tab)); // This flag is used to generate top tool bar or not gui.addContent( - new Element("reqService").setText("md.edit")); + new Element("reqService").setText(embedded ? "embedded" : "md.edit")); String iso3langCode = languageUtils.getIso3langCode(request.getLocales()); gui.addContent( new Element("language").setText(iso3langCode)); diff --git a/web-ui/src/main/resources/catalog/components/metadatamanager/EditorService.js b/web-ui/src/main/resources/catalog/components/metadatamanager/EditorService.js index a22633a1b4d..4d173f5a4e3 100644 --- a/web-ui/src/main/resources/catalog/components/metadatamanager/EditorService.js +++ b/web-ui/src/main/resources/catalog/components/metadatamanager/EditorService.js @@ -87,6 +87,21 @@ } } }; + // When adding a new element and the cardinality is 0-1, + // then hide the add control. + // When an element is removed and the cardinality is 0-1, + // then display the add control + var checkAddControls = function(element, isRemoved) { + var addElement = $(element).next(); + if (addElement !== undefined) { + var addBlock = addElement.get(0); + if ($(addBlock).hasClass('gn-add-field') && + $(addBlock).attr('data-gn-cardinality') === '0-1') { + $(addBlock).toggleClass('hidden', isRemoved ? false : true); + } + } + }; + // When adding a new element, the down control // of the previous element must be enabled and // the up control enabled only if the previous @@ -114,6 +129,11 @@ gnCurrentEdit.savedTime = moment(); gnCurrentEdit.saving = status.saving; }; + + // Remove XML header + var cleanData = function(data) { + return data.replace(/<\?xml version="1.0".*\?>\n/, ''); + }; return { buildEditUrlPrefix: function(service) { var params = ['../api/records/', @@ -154,7 +174,7 @@ 'application/x-www-form-urlencoded'} }).success(function(data) { - var snippet = $(data); + var snippet = $(cleanData(data)); if (refreshForm) { scope.refreshEditorForm(snippet); } @@ -315,7 +335,7 @@ .success(function(data) { // Append HTML snippet after current element - compile Angular var target = $('#gn-el-' + insertRef); - var snippet = $(data); + var snippet = $(cleanData(data)); if (attribute) { target.replaceWith(snippet); @@ -331,7 +351,8 @@ target[position || 'after'](snippet); // Insert snippet.slideDown(duration, function() {}); // Slide - // Adapt the move element + // Adapt the add & move element + checkAddControls(snippet); checkMoveControls(snippet); } $compile(snippet)(gnCurrentEdit.formScope); @@ -352,7 +373,7 @@ '&child=' + name).success(function(data) { // Append HTML snippet after current element - compile Angular var target = $('#gn-el-' + insertRef); - var snippet = $(data); + var snippet = $(cleanData(data)); if (target.hasClass('gn-add-field')) { target.addClass('gn-extra-field'); @@ -361,7 +382,7 @@ target[position || 'before'](snippet); // Insert snippet.slideDown(duration, function() {}); // Slide - // Adapt the move element + checkAddControls(snippet); checkMoveControls(snippet); $compile(snippet)(gnCurrentEdit.formScope); @@ -424,7 +445,7 @@ } }; - // Adapt the move element + checkAddControls(target.get(0), true); checkMoveControls(target.get(0)); target.slideUp(duration, function() { $(this).remove();}); diff --git a/web/src/main/webapp/xslt/ui-metadata/form-builder.xsl b/web/src/main/webapp/xslt/ui-metadata/form-builder.xsl index 040a7856e1c..15a71606f79 100644 --- a/web/src/main/webapp/xslt/ui-metadata/form-builder.xsl +++ b/web/src/main/webapp/xslt/ui-metadata/form-builder.xsl @@ -264,6 +264,23 @@ + + + + + + + + + + + + + + @@ -668,6 +685,8 @@ + + @@ -681,8 +700,9 @@