Yaffs site version 1.1
[yaffs-website] / web / modules / contrib / advagg / src / Render / HtmlResponseAttachmentsProcessor.php
1 <?php
2
3 namespace Drupal\advagg\Render;
4
5 use Drupal\Core\Asset\AttachedAssetsInterface;
6 use Drupal\Core\Render\AttachmentsResponseProcessorInterface;
7 use Drupal\Core\Render\HtmlResponseAttachmentsProcessor as CoreHtmlResponseAttachmentsProcessor;
8
9 /**
10  * Processes attachments of HTML responses.
11  *
12  * This class is used by the rendering service to process the #attached part of
13  * the render array, for HTML responses.
14  *
15  * To render attachments to HTML for testing without a controller, use the
16  * 'bare_html_page_renderer' service to generate a
17  * Drupal\Core\Render\HtmlResponse object. Then use its getContent(),
18  * getStatusCode(), and/or the headers property to access the result.
19  *
20  * @see template_preprocess_html()
21  * @see \Drupal\Core\Render\AttachmentsResponseProcessorInterface
22  * @see \Drupal\Core\Render\BareHtmlPageRenderer
23  * @see \Drupal\Core\Render\HtmlResponse
24  * @see \Drupal\Core\Render\MainContent\HtmlRenderer
25  */
26 class HtmlResponseAttachmentsProcessor extends CoreHtmlResponseAttachmentsProcessor implements AttachmentsResponseProcessorInterface {
27
28   /**
29    * {@inheritdoc}
30    */
31   protected function processAssetLibraries(AttachedAssetsInterface $assets, array $placeholders) {
32     $variables = ['prefetch' => []];
33     $render_type = 'html';
34
35     // Print styles - if present.
36     if (isset($placeholders['styles'])) {
37       // Optimize CSS if necessary, but only during normal site operation.
38       $optimize_css = !defined('MAINTENANCE_MODE') && $this->config->get('css.preprocess');
39       $variables['styles'] = $this->cssCollectionRenderer->render($this->assetResolver->getCssAssets($assets, $optimize_css));
40       $variables['prefetch'] = isset($variables['styles']['prefetch']) ? $variables['styles']['prefetch'] : [];
41       unset($variables['styles']['prefetch']);
42
43       // Allow other modules to alter the assets before rendering.
44       // Call hook_advagg_asset_render_alter().
45       $asset_type = 'styles';
46       $this->moduleHandler->alter('advagg_asset_render', $variables['styles'], $render_type, $asset_type);
47     }
48
49     // Print scripts - if any are present.
50     if (isset($placeholders['scripts']) || isset($placeholders['scripts_bottom'])) {
51       // Optimize JS if necessary, but only during normal site operation.
52       $optimize_js = !defined('MAINTENANCE_MODE') && !\Drupal::state()->get('system.maintenance_mode') && $this->config->get('js.preprocess');
53       list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, $optimize_js);
54       $variables['scripts'] = $this->jsCollectionRenderer->render($js_assets_header);
55       $variables['prefetch'] += isset($variables['scripts']['prefetch']) ? $variables['scripts']['prefetch'] : [];
56       unset($variables['scripts']['prefetch']);
57
58       // Allow other modules to alter the assets before rendering.
59       // Call hook_advagg_asset_render_alter().
60       $asset_type = 'scripts';
61       $this->moduleHandler->alter('advagg_asset_render', $variables['scripts'], $render_type, $asset_type);
62
63       $variables['scripts_bottom'] = $this->jsCollectionRenderer->render($js_assets_footer);
64       $variables['prefetch'] += isset($variables['scripts_bottom']['prefetch']) ? $variables['scripts_bottom']['prefetch'] : [];
65       unset($variables['scripts_bottom']['prefetch']);
66
67       // Allow other modules to alter the assets before rendering.
68       // Call hook_advagg_asset_render_alter().
69       $asset_type = 'scripts_bottom';
70       $this->moduleHandler->alter('advagg_asset_render', $variables['scripts_bottom'], $render_type, $asset_type);
71     }
72
73     // Merge prefetch and styles or scripts.
74     $prefetch = array_unique($variables['prefetch'], SORT_REGULAR);
75     // Allow other modules to alter the assets before rendering.
76     // Call hook_advagg_asset_render_alter().
77     $asset_type = 'prefetch';
78     $this->moduleHandler->alter('advagg_asset_render', $prefetch, $render_type, $asset_type);
79     if (isset($placeholders['styles'])) {
80       $variables['styles'] = array_merge($prefetch, $variables['styles']);
81     }
82     else {
83       $variables['scripts'] = array_merge($prefetch, $variables['scripts']);
84     }
85     unset($variables['prefetch']);
86     return $variables;
87   }
88
89 }