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.
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\Asset
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 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 ; } |
Please login to continue.