public function AssetResolver::getCssAssets in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()
Returns the CSS assets for the current response's libraries.
It returns the CSS assets in order, according to the SMACSS categories specified in the assets' weights:
This ensures proper cascading of styles so themes can easily override module styles through CSS selectors.
Themes may replace module-defined CSS files by adding a stylesheet with the same filename. For example, themes/bartik/system-menus.css would replace modules/system/system-menus.css. This allows themes to override complete CSS files, rather than specific selectors, when necessary.
Also invokes hook_css_alter(), to allow CSS assets to be altered.
Parameters
\Drupal\Core\Asset\AttachedAssetsInterface $assets: The assets attached to the current response.
bool $optimize: Whether to apply the CSS asset collection optimizer, to return an optimized CSS asset collection rather than an unoptimized one.
Return value
array A (possibly optimized) collection of CSS assets.
Overrides AssetResolverInterface::getCssAssets
See also
https://www.drupal.org/node/1887918#separate-concerns
File
- core/
lib/ Drupal/ Core/ Asset/ AssetResolver.php, line 112
Class
- AssetResolver
- The default asset resolver.
Namespace
Drupal\Core\AssetCode
public function getCssAssets(AttachedAssetsInterface $assets, $optimize) {
$theme_info = $this->themeManager
->getActiveTheme();
// Add the theme name to the cache key since themes may implement
// hook_library_info_alter().
$libraries_to_load = $this
->getLibrariesToLoad($assets);
$cid = 'css:' . $theme_info
->getName() . ':' . 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,
'browsers' => [],
];
foreach ($libraries_to_load as $library) {
list($extension, $name) = explode('/', $library, 2);
$definition = $this->libraryDiscovery
->getLibraryByName($extension, $name);
if (isset($definition['css'])) {
foreach ($definition['css'] as $options) {
$options += $default_options;
$options['browsers'] += [
'IE' => TRUE,
'!IE' => TRUE,
];
// Files with a query string cannot be preprocessed.
if ($options['type'] === 'file' && $options['preprocess'] && strpos($options['data'], '?') !== FALSE) {
$options['preprocess'] = FALSE;
}
// Always add a tiny value to the weight, to conserve the insertion
// order.
$options['weight'] += count($css) / 1000;
// 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);
$this->themeManager
->alter('css', $css, $assets);
// Sort CSS items, so that they appear in the correct order.
uasort($css, 'static::sort');
// Allow themes to remove CSS files by CSS files full path and file name.
// @todo Remove in Drupal 9.0.x.
if ($stylesheet_remove = $theme_info
->getStyleSheetsRemove()) {
foreach ($css as $key => $options) {
if (isset($stylesheet_remove[$key])) {
unset($css[$key]);
}
}
}
if ($optimize) {
$css = \Drupal::service('asset.css.collection_optimizer')
->optimize($css);
}
$this->cache
->set($cid, $css, CacheBackendInterface::CACHE_PERMANENT, [
'library_info',
]);
return $css;
}