You are here

public function AssetResolver::getCssAssets in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()
  2. 9 core/lib/Drupal/Core/Asset/AssetResolver.php \Drupal\Core\Asset\AssetResolver::getCssAssets()

File

core/lib/Drupal/Core/Asset/AssetResolver.php, line 112

Class

AssetResolver
The default asset resolver.

Namespace

Drupal\Core\Asset

Code

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,
  ];
  foreach ($libraries_to_load as $library) {
    [
      $extension,
      $name,
    ] = explode('/', $library, 2);
    $definition = $this->libraryDiscovery
      ->getLibraryByName($extension, $name);
    if (isset($definition['css'])) {
      foreach ($definition['css'] as $options) {
        $options += $default_options;

        // 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::class,
    'sort',
  ]);
  if ($optimize) {
    $css = \Drupal::service('asset.css.collection_optimizer')
      ->optimize($css);
  }
  $this->cache
    ->set($cid, $css, CacheBackendInterface::CACHE_PERMANENT, [
    'library_info',
  ]);
  return $css;
}