function AssetResolver::getCssAssets
Same name in other branches
- 9 core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()
- 8.9.x core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()
- 11.x core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()
File
-
core/
lib/ Drupal/ Core/ Asset/ AssetResolver.php, line 124
Class
- AssetResolver
- The default asset resolver.
Namespace
Drupal\Core\AssetCode
public function getCssAssets(AttachedAssetsInterface $assets, $optimize, ?LanguageInterface $language = NULL) {
if (!$assets->getLibraries()) {
return [];
}
$libraries_to_load = $this->getLibrariesToLoad($assets);
foreach ($libraries_to_load as $key => $library) {
[
$extension,
$name,
] = explode('/', $library, 2);
$definition = $this->libraryDiscovery
->getLibraryByName($extension, $name);
if (empty($definition['css'])) {
unset($libraries_to_load[$key]);
}
}
$libraries_to_load = array_values($libraries_to_load);
if (!$libraries_to_load) {
return [];
}
if (!isset($language)) {
$language = $this->languageManager
->getCurrentLanguage();
}
$theme_info = $this->themeManager
->getActiveTheme();
// Add the theme name to the cache key since themes may implement
// hook_library_info_alter().
$cid = 'css:' . $theme_info->getName() . ':' . $language->getId() . Crypt::hashBase64(serialize($libraries_to_load)) . (int) $optimize;
if ($cached = $this->cache
->get($cid)) {
return $cached->data;
}
$css = [];
$default_options = [
'type' => 'file',
'group' => CSS_AGGREGATE_DEFAULT,
'weight' => 0,
'media' => 'all',
'preprocess' => TRUE,
];
foreach ($libraries_to_load as $key => $library) {
[
$extension,
$name,
] = explode('/', $library, 2);
$definition = $this->libraryDiscovery
->getLibraryByName($extension, $name);
foreach ($definition['css'] as $options) {
$options += $default_options;
// Copy the asset library license information to each file.
$options['license'] = $definition['license'];
// Files with a query string cannot be preprocessed.
if ($options['type'] === 'file' && $options['preprocess'] && str_contains($options['data'], '?')) {
$options['preprocess'] = FALSE;
}
// Always add a tiny value to the weight, to conserve the insertion
// order.
$options['weight'] += count($css) / 30000;
// CSS files are being keyed by the full path.
$css[$options['data']] = $options;
}
}
// Allow modules and themes to alter the CSS assets.
$this->moduleHandler
->alter('css', $css, $assets, $language);
$this->themeManager
->alter('css', $css, $assets, $language);
if (!empty($css)) {
// Sort CSS items, so that they appear in the correct order.
uasort($css, [
static::class,
'sort',
]);
if ($optimize) {
$css = \Drupal::service('asset.css.collection_optimizer')->optimize($css, array_values($libraries_to_load), $language);
}
}
$this->cache
->set($cid, $css, CacheBackendInterface::CACHE_PERMANENT, [
'library_info',
]);
return $css;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.