public AssetResolver::getCssAssets(AttachedAssetsInterface $assets, $optimize)
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.
\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.
array A (possibly optimized) collection of CSS assets.
Overrides AssetResolverInterface::getCssAssets
https://www.drupal.org/node/1887918#separate-concerns
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; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Asset!AssetResolver.php/function/AssetResolver::getCssAssets/8.1.x