function color_scheme_form
Same name in other branches
- 7.x modules/color/color.module \color_scheme_form()
- 9 core/modules/color/color.module \color_scheme_form()
Form constructor for the color configuration form for a particular theme.
Parameters
$theme: The machine name of the theme whose color settings are being configured.
See also
1 call to color_scheme_form()
- color_form_system_theme_settings_alter in core/
modules/ color/ color.module - Implements hook_form_FORM_ID_alter().
1 string reference to 'color_scheme_form'
- color_form_system_theme_settings_alter in core/
modules/ color/ color.module - Implements hook_form_FORM_ID_alter().
File
-
core/
modules/ color/ color.module, line 199
Code
function color_scheme_form($complete_form, FormStateInterface $form_state, $theme) {
$info = color_get_info($theme);
$info['schemes'][''] = [
'title' => t('Custom'),
'colors' => [],
];
$color_sets = [];
$schemes = [];
foreach ($info['schemes'] as $key => $scheme) {
$color_sets[$key] = $scheme['title'];
$schemes[$key] = $scheme['colors'];
$schemes[$key] += $info['schemes']['default']['colors'];
}
// See if we're using a predefined scheme.
// Note: we use the original theme when the default scheme is chosen.
// Note: we use configuration without overrides since this information is used
// in a form and therefore without doing this would bleed overrides into
// active configuration. Furthermore, color configuration is used to write
// CSS to the file system making configuration overrides pointless.
$current_scheme = \Drupal::configFactory()->getEditable('color.theme.' . $theme)
->get('palette');
foreach ($schemes as $key => $scheme) {
if ($current_scheme == $scheme) {
$scheme_name = $key;
break;
}
}
if (empty($scheme_name)) {
if (empty($current_scheme)) {
$scheme_name = 'default';
}
else {
$scheme_name = '';
}
}
// Add scheme selector.
$default_palette = color_get_palette($theme, TRUE);
$form['scheme'] = [
'#type' => 'select',
'#title' => t('Color set'),
'#options' => $color_sets,
'#default_value' => $scheme_name,
'#attached' => [
'library' => [
'color/drupal.color',
'color/admin',
],
// Add custom JavaScript.
'drupalSettings' => [
'color' => [
'reference' => $default_palette,
'schemes' => $schemes,
],
'gradients' => $info['gradients'],
],
],
];
// Add palette fields. Use the configuration if available.
$palette = $current_scheme ?: $default_palette;
$names = $info['fields'];
$form['palette']['#tree'] = TRUE;
foreach ($palette as $name => $value) {
if (isset($names[$name])) {
$form['palette'][$name] = [
'#type' => 'textfield',
'#title' => $names[$name],
'#value_callback' => 'color_palette_color_value',
'#default_value' => $value,
'#size' => 8,
'#attributes' => [
'dir' => LanguageInterface::DIRECTION_LTR,
],
];
}
}
$form['theme'] = [
'#type' => 'value',
'#value' => $theme,
];
if (isset($info['#attached'])) {
$form['#attached'] = $info['#attached'];
unset($info['#attached']);
}
$form['info'] = [
'#type' => 'value',
'#value' => $info,
];
return $form;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.