diff --git a/assets/src/legacy/attributeTable.js b/assets/src/legacy/attributeTable.js
index 6f1e57ca58..b69f28bfbc 100644
--- a/assets/src/legacy/attributeTable.js
+++ b/assets/src/legacy/attributeTable.js
@@ -587,12 +587,15 @@ var lizAttributeTable = function() {
// Create button
var canCreate = false;
- if( 'editionLayers' in config && cleanName in config.editionLayers ) {
+ if ('editionLayers' in config
+ && cleanName in attributeLayersDic
+ && attributeLayersDic[cleanName] in config.editionLayers) {
var al = config.editionLayers[attributeLayersDic[cleanName]];
- if( al.capabilities.createFeature == "True" )
+ if (al.capabilities.createFeature == "True") {
canCreate = true;
+ }
}
- if( canCreate ){
+ if (canCreate) {
html+= ' ';
}
@@ -647,8 +650,9 @@ var lizAttributeTable = function() {
html+= ''; // attribute-layer-action-bar
- if( childHtml )
+ if( childHtml ) {
alc= ' showChildren';
+ }
html+= '
';
html+= '
';
html+= '
';
@@ -843,21 +847,34 @@ var lizAttributeTable = function() {
});
// Bind click on createFeature button
+ // BEWARE - This is used for creating a new line in the displayed attribute table
+ // and for creating a new child item
$('#attribute-layer-'+ cleanName + ' button.btn-createFeature-attributeTable')
.click(function(){
- if ( $('#attribute-layer-'+ cleanName + ' tr.active').length != 1) {
+ // Ask the user to click on a table line
+ // before trying to create a child feature
+ const creationContext = ($(this).hasClass('new-child')) ? 'child' : 'parent';
+ if (creationContext == 'child'
+ && $('#attribute-layer-'+ cleanName + ' tr.active').length != 1) {
$('#lizmap-edition-message').remove();
lizMap.addMessage( lizDict['attributeLayers.toolbar.btn.data.createChildFeature.no.actived'], 'info', true).attr('id','lizmap-edition-message');
return false;
}
- var parentFeatId = document.querySelector('#attribute-layer-'+ cleanName + ' tr.active lizmap-feature-toolbar').fid;
+ const parentFidElement = document.querySelector('#attribute-layer-'+ cleanName + ' tr.active lizmap-feature-toolbar');
+ var parentFeatId = (parentFidElement) ? parentFidElement.fid : null;
var parentLayerName = attributeLayersDic[ cleanName ];
var parentLayerId = config.layers[parentLayerName]['id'];
var aName = attributeLayersDic[ $(this).val() ];
- lizMap.getLayerFeature(parentLayerName, parentFeatId, function(parentFeat) {
- var lid = config.layers[aName]['id'];
- lizMap.launchEdition( lid, null, {layerId:parentLayerId,feature:parentFeat});
- });
+
+ var lid = config.layers[aName]['id'];
+ if (creationContext == 'parent') {
+ lizMap.launchEdition( lid, null, null);
+ } else {
+ lizMap.getLayerFeature(parentLayerName, parentFeatId, function(parentFeat) {
+ lizMap.launchEdition( lid, null, {layerId:parentLayerId, feature:parentFeat});
+ });
+ }
+
return false;
})
.hover(
@@ -1115,23 +1132,19 @@ var lizAttributeTable = function() {
// Add create child feature button
var canCreateChild = false;
- if( 'editionLayers' in config ){
- var editionConfig = lizMap.getLayerConfigById(
- relation.referencingLayer,
- config.editionLayers,
- 'layerId'
- );
- if( childLayerName in config.editionLayers ) {
+ if ('editionLayers' in config) {
+ if (childLayerName in config.editionLayers) {
var al = config.editionLayers[childLayerName];
- if( al.capabilities.createFeature == "True" )
+ if (al.capabilities.createFeature == "True") {
canCreateChild = true;
+ }
}
}
if( canCreateChild ){
// Add a button to create a new feature for this child layer
let childButtonItem = `
-