color_library_info_alter(&$libraries, $extension)
Implements hook_library_info_alter().
Replaces style sheets declared in libraries with color-altered style sheets.
File
- core/modules/color/color.module, line 74
- Allows users to change the color scheme of themes.
Code
function color_library_info_alter(&$libraries, $extension) {
$themes = array_keys(\Drupal::service('theme_handler')->listInfo());
if (in_array($extension, $themes)) {
$color_paths = \Drupal::config('color.theme.' . $extension)->get('stylesheets');
if (!empty($color_paths)) {
foreach (array_keys($libraries) as $name) {
if (isset($libraries[$name]['css'])) {
// Override stylesheets.
foreach ($libraries[$name]['css'] as $category => $css_assets) {
foreach ($css_assets as $path => $metadata) {
// Loop over the path array with recolored CSS files to find matching
// paths which could replace the non-recolored paths.
foreach ($color_paths as $color_path) {
// Color module currently requires unique file names to be used,
// which allows us to compare different file paths.
if (drupal_basename($path) == drupal_basename($color_path)) {
// Replace the path to the new css file.
// This keeps the order of the stylesheets intact.
$index = array_search($path, array_keys($libraries[$name]['css'][$category]));
$preceding_css_assets = array_slice($libraries[$name]['css'][$category], 0, $index);
$succeeding_css_assets = array_slice($libraries[$name]['css'][$category], $index + 1);
$libraries[$name]['css'][$category] = array_merge(
$preceding_css_assets,
[$color_path => $metadata],
$succeeding_css_assets
);
}
}
}
}
}
}
}
}
}
Please login to continue.