You are here

protected function HtmlResponseAttachmentsProcessor::processAssetLibraries in Advanced CSS/JS Aggregation 8.2

Processes asset libraries into render arrays.

Parameters

\Drupal\Core\Asset\AttachedAssetsInterface $assets: The attached assets collection for the current response.

array $placeholders: The placeholders that exist in the response.

Return value

array An array keyed by asset type, with keys:

  • styles
  • scripts
  • scripts_bottom

Overrides HtmlResponseAttachmentsProcessor::processAssetLibraries

File

src/Render/HtmlResponseAttachmentsProcessor.php, line 31

Class

HtmlResponseAttachmentsProcessor
Processes attachments of HTML responses.

Namespace

Drupal\advagg\Render

Code

protected function processAssetLibraries(AttachedAssetsInterface $assets, array $placeholders) {
  $variables = [
    'prefetch' => [],
  ];
  $render_type = 'html';

  // Print styles - if present.
  if (isset($placeholders['styles'])) {

    // Optimize CSS if necessary, but only during normal site operation.
    $optimize_css = !defined('MAINTENANCE_MODE') && $this->config
      ->get('css.preprocess');
    $variables['styles'] = $this->cssCollectionRenderer
      ->render($this->assetResolver
      ->getCssAssets($assets, $optimize_css));
    $variables['prefetch'] = isset($variables['styles']['prefetch']) ? $variables['styles']['prefetch'] : [];
    unset($variables['styles']['prefetch']);

    // Allow other modules to alter the assets before rendering.
    // Call hook_advagg_asset_render_alter().
    $asset_type = 'styles';
    $this->moduleHandler
      ->alter('advagg_asset_render', $variables['styles'], $render_type, $asset_type);
  }

  // Print scripts - if any are present.
  if (isset($placeholders['scripts']) || isset($placeholders['scripts_bottom'])) {

    // Optimize JS if necessary, but only during normal site operation.
    $optimize_js = !defined('MAINTENANCE_MODE') && !\Drupal::state()
      ->get('system.maintenance_mode') && $this->config
      ->get('js.preprocess');
    list($js_assets_header, $js_assets_footer) = $this->assetResolver
      ->getJsAssets($assets, $optimize_js);
    $variables['scripts'] = $this->jsCollectionRenderer
      ->render($js_assets_header);
    $variables['prefetch'] += isset($variables['scripts']['prefetch']) ? $variables['scripts']['prefetch'] : [];
    unset($variables['scripts']['prefetch']);

    // Allow other modules to alter the assets before rendering.
    // Call hook_advagg_asset_render_alter().
    $asset_type = 'scripts';
    $this->moduleHandler
      ->alter('advagg_asset_render', $variables['scripts'], $render_type, $asset_type);
    $variables['scripts_bottom'] = $this->jsCollectionRenderer
      ->render($js_assets_footer);
    $variables['prefetch'] += isset($variables['scripts_bottom']['prefetch']) ? $variables['scripts_bottom']['prefetch'] : [];
    unset($variables['scripts_bottom']['prefetch']);

    // Allow other modules to alter the assets before rendering.
    // Call hook_advagg_asset_render_alter().
    $asset_type = 'scripts_bottom';
    $this->moduleHandler
      ->alter('advagg_asset_render', $variables['scripts_bottom'], $render_type, $asset_type);
  }

  // Merge prefetch and styles or scripts.
  $prefetch = array_unique($variables['prefetch'], SORT_REGULAR);

  // Allow other modules to alter the assets before rendering.
  // Call hook_advagg_asset_render_alter().
  $asset_type = 'prefetch';
  $this->moduleHandler
    ->alter('advagg_asset_render', $prefetch, $render_type, $asset_type);
  if (isset($placeholders['styles'])) {
    $variables['styles'] = array_merge($prefetch, $variables['styles']);
  }
  else {
    $variables['scripts'] = array_merge($prefetch, $variables['scripts']);
  }
  unset($variables['prefetch']);
  return $variables;
}