Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Core\Asset;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\State\StateInterface;
|
Chris@0
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Renders CSS assets.
|
Chris@0
|
9 */
|
Chris@0
|
10 class CssCollectionRenderer implements AssetCollectionRendererInterface {
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * The state key/value store.
|
Chris@0
|
14 *
|
Chris@0
|
15 * @var \Drupal\Core\State\StateInterface
|
Chris@0
|
16 */
|
Chris@0
|
17 protected $state;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Constructs a CssCollectionRenderer.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @param \Drupal\Core\State\StateInterface $state
|
Chris@0
|
23 * The state key/value store.
|
Chris@0
|
24 */
|
Chris@0
|
25 public function __construct(StateInterface $state) {
|
Chris@0
|
26 $this->state = $state;
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * {@inheritdoc}
|
Chris@0
|
31 */
|
Chris@0
|
32 public function render(array $css_assets) {
|
Chris@0
|
33 $elements = [];
|
Chris@0
|
34
|
Chris@0
|
35 // A dummy query-string is added to filenames, to gain control over
|
Chris@0
|
36 // browser-caching. The string changes on every update or full cache
|
Chris@0
|
37 // flush, forcing browsers to load a new copy of the files, as the
|
Chris@0
|
38 // URL changed.
|
Chris@0
|
39 $query_string = $this->state->get('system.css_js_query_string') ?: '0';
|
Chris@0
|
40
|
Chris@0
|
41 // Defaults for LINK and STYLE elements.
|
Chris@0
|
42 $link_element_defaults = [
|
Chris@0
|
43 '#type' => 'html_tag',
|
Chris@0
|
44 '#tag' => 'link',
|
Chris@0
|
45 '#attributes' => [
|
Chris@0
|
46 'rel' => 'stylesheet',
|
Chris@0
|
47 ],
|
Chris@0
|
48 ];
|
Chris@0
|
49
|
Chris@18
|
50 foreach ($css_assets as $css_asset) {
|
Chris@18
|
51 $element = $link_element_defaults;
|
Chris@18
|
52 $element['#attributes']['media'] = $css_asset['media'];
|
Chris@18
|
53 $element['#browsers'] = $css_asset['browsers'];
|
Chris@0
|
54
|
Chris@0
|
55 switch ($css_asset['type']) {
|
Chris@18
|
56 // For file items, output a LINK tag for file CSS assets.
|
Chris@0
|
57 case 'file':
|
Chris@0
|
58 // The dummy query string needs to be added to the URL to control
|
Chris@0
|
59 // browser-caching.
|
Chris@0
|
60 $query_string_separator = (strpos($css_asset['data'], '?') !== FALSE) ? '&' : '?';
|
Chris@18
|
61 $element['#attributes']['href'] = file_url_transform_relative(file_create_url($css_asset['data'])) . $query_string_separator . $query_string;
|
Chris@0
|
62 break;
|
Chris@0
|
63
|
Chris@0
|
64 case 'external':
|
Chris@0
|
65 $element['#attributes']['href'] = $css_asset['data'];
|
Chris@0
|
66 break;
|
Chris@0
|
67
|
Chris@0
|
68 default:
|
Chris@0
|
69 throw new \Exception('Invalid CSS asset type.');
|
Chris@0
|
70 }
|
Chris@18
|
71
|
Chris@18
|
72 $elements[] = $element;
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 return $elements;
|
Chris@0
|
76 }
|
Chris@0
|
77
|
Chris@0
|
78 }
|