Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 49 |
ImageButton | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
156 | |
0.00% |
0 / 49 |
getInfo | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
valueCallback | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 22 |
|||
preRenderButton | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 18 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Render\Element\ImageButton. | |
*/ | |
namespace Drupal\Core\Render\Element; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Render\Element; | |
/** | |
* Provides a form element for a submit button with an image. | |
* | |
* @FormElement("image_button") | |
*/ | |
class ImageButton extends Submit { | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getInfo() { | |
$info = parent::getInfo(); | |
unset($info['name']); | |
return array( | |
'#return_value' => TRUE, | |
'#has_garbage_value' => TRUE, | |
'#src' => NULL, | |
'#theme_wrappers' => array('input__image_button'), | |
) + $info; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function valueCallback(&$element, $input, FormStateInterface $form_state) { | |
if ($input !== FALSE) { | |
if (!empty($input)) { | |
// If we're dealing with Mozilla or Opera, we're lucky. It will | |
// return a proper value, and we can get on with things. | |
return $element['#return_value']; | |
} | |
else { | |
// Unfortunately, in IE we never get back a proper value for THIS | |
// form element. Instead, we get back two split values: one for the | |
// X and one for the Y coordinates on which the user clicked the | |
// button. We'll find this element in the #post data, and search | |
// in the same spot for its name, with '_x'. | |
$input = $form_state->getUserInput(); | |
foreach (explode('[', $element['#name']) as $element_name) { | |
// chop off the ] that may exist. | |
if (substr($element_name, -1) == ']') { | |
$element_name = substr($element_name, 0, -1); | |
} | |
if (!isset($input[$element_name])) { | |
if (isset($input[$element_name . '_x'])) { | |
return $element['#return_value']; | |
} | |
return NULL; | |
} | |
$input = $input[$element_name]; | |
} | |
return $element['#return_value']; | |
} | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function preRenderButton($element) { | |
$element['#attributes']['type'] = 'image'; | |
Element::setAttributes($element, array('id', 'name', 'value')); | |
$element['#attributes']['src'] = file_url_transform_relative(file_create_url($element['#src'])); | |
if (!empty($element['#title'])) { | |
$element['#attributes']['alt'] = $element['#title']; | |
$element['#attributes']['title'] = $element['#title']; | |
} | |
$element['#attributes']['class'][] = 'image-button'; | |
if (!empty($element['#button_type'])) { | |
$element['#attributes']['class'][] = 'image-button--' . $element['#button_type']; | |
} | |
$element['#attributes']['class'][] = 'js-form-submit'; | |
$element['#attributes']['class'][] = 'form-submit'; | |
if (!empty($element['#attributes']['disabled'])) { | |
$element['#attributes']['class'][] = 'is-disabled'; | |
} | |
return $element; | |
} | |
} |