Same name and namespace in other branches
  1. 8.x-2.x src/Plugin/Field/FieldWidget/ColorFieldWidgetBox.php \Drupal\color_field\Plugin\Field\FieldWidget\ColorFieldWidgetBox::formElement() 1 comment

Overrides ColorFieldWidgetBase::formElement

File

src/Plugin/Field/FieldWidget/ColorFieldWidgetBox.php, line 97

Class

ColorFieldWidgetBox
Plugin implementation of the color_field box widget.

Namespace

Drupal\color_field\Plugin\Field\FieldWidget

Code

public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) : array {
    $settings = [];
    $element = parent::formElement($items, $delta, $element, $form, $form_state);
    // Ensure the default value is the required format.
    if ($element['color']['#default_value']) {
        $element['color']['#default_value'] = strtoupper($element['color']['#default_value']);
        if (strlen($element['color']['#default_value']) === 6) {
            $element['color']['#default_value'] = '#' . $element['color']['#default_value'];
        }
    }
    elseif ($element['#required']) {
        // If the element is required but has no default value and the element is
        // hidden like the color boxes widget does, prevent HTML5 Validation from
        // being invisible and blocking save with no apparent reason.
        $element['color']['#attributes']['class'][] = 'color_field_widget_box__color';
    }
    $element['#attached']['library'][] = 'color_field/color-field-widget-box';
    // Set Drupal settings.
    $settings[$element['#uid']] = [
        'required' => $this->fieldDefinition
            ->isRequired(),
    ];
    $default_colors = $this->getSetting('default_colors');
    preg_match_all("/#[0-9A-F]{6}/i", $default_colors, $default_colors, PREG_SET_ORDER);
    foreach ($default_colors as $color) {
        $settings[$element['#uid']]['palette'][] = $color[0];
    }
    $element['#attached']['drupalSettings']['color_field']['color_field_widget_box']['settings'] = $settings;
    $element['color']['#suffix'] = "<div class='color-field-widget-box-form' id='" . $element['#uid'] . "'></div>";
    return $element;
}