View source
<?php
namespace Drupal\jquery_colorpicker\Element;
use Drupal\Component\Utility\Html;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Render\Element\FormElement;
class JQueryColorpicker extends FormElement {
public function getInfo() {
$class = get_class($this);
return [
'#input' => TRUE,
'#maxlength' => 7,
'#size' => 7,
'#element_validate' => [
[
$class,
'validateElement',
],
],
'#jquery_colorpicker_background' => 'select.png',
'#pre_render' => [
[
$class,
'preRenderjQueryColorpicker',
],
],
'#process' => [
'Drupal\\Core\\Render\\Element\\RenderElement::processAjaxForm',
[
$class,
'processElement',
],
],
'#theme' => 'jquery_colorpicker',
'#theme_wrappers' => [
'form_element',
],
'#attached' => [
'library' => [
'jquery_colorpicker/element',
],
],
];
}
public static function validateElement(&$element, FormStateInterface $form_state) {
if (strlen($element['#value'])) {
$jquery_colorpicker_service = \Drupal::service('jquery_colorpicker.service');
$color = $jquery_colorpicker_service
->formatColor($element['#value']);
if ($color != $element['#value']) {
$form_state
->setValueForElement($element, $color);
}
$error = $jquery_colorpicker_service
->validateColor($element['#value']);
if ($error) {
$form_state
->setError($element, $error);
}
}
}
public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
if ($input !== FALSE && $input !== NULL) {
return is_scalar($input) ? (string) $input : '';
}
return NULL;
}
public static function preRenderjQueryColorpicker(array $element) {
$element['#attributes']['type'] = 'text';
Element::setAttributes($element, [
'id',
'name',
'value',
'size',
'maxlength',
]);
static::setAttributes($element, [
'form-jquery_colorpicker',
]);
return $element;
}
public static function processElement(&$element, FormStateInterface $form_state, &$complete_form) {
$element['#id'] = Html::getUniqueID('edit-' . implode('-', $element['#parents']));
$backgrounds = [
'select.png',
'select2.png',
];
$background = isset($element['#jquery_colorpicker_background']) && in_array($element['#jquery_colorpicker_background'], $backgrounds) ? $element['#jquery_colorpicker_background'] : 'select.png';
$background_url = file_create_url('libraries/jquery_colorpicker/images/' . $background);
$element['#attached']['drupalSettings']['jqueryColorpicker']['elements'][$element['#id']]['background'] = $background_url;
return $element;
}
}