public function formElement(FieldItemListInterface
$items,
$delta, array
$element, array &
$form, FormStateInterface
$form_state) { /** @var \Drupal\link\LinkItemInterface $item */
$item =
$items[$delta];
$element['uri'
] =
[ '#type' => 'url',
'#title' =>
$this->
t('URL'
),
'#placeholder' =>
$this->
getSetting('placeholder_url'
),
// The current field value could have been entered by a different user.
// However, if it is inaccessible to the current user, do not display it
// to them.
'#default_value'
=> (!
$item->
isEmpty() && (\Drupal::
currentUser()->
hasPermission('link to any page'
) ||
$item->
getUrl()->
access())) ?
static::
getUriAsDisplayableString($item->uri
) : NULL,
'#element_validate' =>
[[static::
class, 'validateUriElement'
]],
'#maxlength' => 2048,
'#required' =>
$element['#required'
],
'#link_type' =>
$this->
getFieldSetting('link_type'
),
];
// If the field is configured to support internal links, it cannot use the
// 'url' form element and we have to do the validation ourselves.
if ($this->
supportsInternalLinks()) { $element['uri'
]['#type'
] = 'entity_autocomplete';
// @todo The user should be able to select an entity type. Will be fixed