diff --git a/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php index c99dee5..9b25bdc 100644 --- a/core/lib/Drupal/Core/Field/WidgetBase.php +++ b/core/lib/Drupal/Core/Field/WidgetBase.php @@ -149,6 +149,11 @@ $cardinality = $this->fieldDefinition->getFieldStorageDefinition()->getCardinality(); $parents = $form['#parents']; + if ($cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED && !$form_state->isProgrammed()) { + $id_prefix = implode('-', array_merge($parents, array($field_name))); + $wrapper_id = Html::getUniqueId($id_prefix . '-add-more-wrapper'); + } + // Determine the number of widgets to display. switch ($cardinality) { case FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED: @@ -207,6 +212,20 @@ '#default_value' => $items[$delta]->_weight ?: $delta, '#weight' => 100, ); + + $element['remove_item'] = array( + '#type' => 'submit', + '#value' => $this->t('Remove item'), + '#submit' => array(array(get_class($this), 'removeItemSubmit')), + '#ajax' => array( + 'callback' => array(get_class($this), 'removeItemAjax'), + 'wrapper' => $wrapper_id, + 'effect' => 'fade', + ), + '#name' => implode('_', array_merge($parents, array($field_name, $delta, 'remove_item'))), + '#attributes' => array('class' => array('field-remove-item-submit')), + '#limit_validation_errors' => array(array_merge($parents, array($field_name))), + ); } $elements[$delta] = $element; @@ -227,8 +246,6 @@ // Add 'add more' button, if not working with a programmed form. if ($cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED && !$form_state->isProgrammed()) { - $id_prefix = implode('-', array_merge($parents, array($field_name))); - $wrapper_id = Html::getUniqueId($id_prefix . '-add-more-wrapper'); $elements['#prefix'] = '