Skip to content
Snippets Groups Projects

Issue #3183032: Use checkbox for single class option

2 files
+ 35
9
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -122,7 +122,7 @@ class LinkClassFieldWidget extends LinkWidget {
protected function getModeOptions($key = NULL) {
$options = [
'force_class' => $this->t('Class are automatically added'),
'select_class' => $this->t('Let users select a class from a list'),
'select_class' => $this->t('Let users select a class'),
'manual' => $this->t('Users can set a class manually'),
];
@@ -157,13 +157,26 @@ class LinkClassFieldWidget extends LinkWidget {
case 'select_class':
/** @var \Drupal\link\LinkItemInterface $item */
$classes_available = $this->getSelectOptions($this->getSetting('link_class_select'));
$default_value = !empty($options['attributes']['class']) ? $options['attributes']['class'] : '';
$element['options']['attributes']['class'] = [
'#type' => 'select',
'#title' => $this->t('Select a style'),
'#options' => ['' => $this->t('- None -')] + $classes_available,
'#default_value' => $default_value,
];
if (count($classes_available) === 1) {
$single_class = key($classes_available);
$default_classes = !empty($options['attributes']['class']) ? $options['attributes']['class'] : '';
$default_value = in_array($single_class, explode(' ', $default_classes), TRUE);
$element['options']['attributes']['class'] = [
'#type' => 'checkbox',
'#title' => $classes_available[$single_class],
'#default_value' => $default_value,
'#return_value' => $single_class,
];
}
else {
$default_value = !empty($options['attributes']['class']) ? $options['attributes']['class'] : '';
$element['options']['attributes']['class'] = [
'#type' => 'select',
'#title' => $this->t('Select a style'),
'#options' => ['' => $this->t('- None -')] + $classes_available,
'#default_value' => $default_value,
];
}
break;
case 'force_class':
@@ -178,6 +191,19 @@ class LinkClassFieldWidget extends LinkWidget {
return $element;
}
/**
* {@inheritdoc}
*/
public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
foreach ($values as &$value) {
// Filter out empty (and invalid) classes.
if (array_key_exists('class', $value['options']['attributes']) && empty($value['options']['attributes']['class'])) {
unset($value['options']['attributes']['class']);
}
}
return parent::massageFormValues($values, $form, $form_state);
}
/**
* Convert textarea lines into an array.
*
Loading