Chris@0: state = $state; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function render(array $css_assets) { Chris@0: $elements = []; Chris@0: Chris@0: // A dummy query-string is added to filenames, to gain control over Chris@0: // browser-caching. The string changes on every update or full cache Chris@0: // flush, forcing browsers to load a new copy of the files, as the Chris@0: // URL changed. Chris@0: $query_string = $this->state->get('system.css_js_query_string') ?: '0'; Chris@0: Chris@0: // Defaults for LINK and STYLE elements. Chris@0: $link_element_defaults = [ Chris@0: '#type' => 'html_tag', Chris@0: '#tag' => 'link', Chris@0: '#attributes' => [ Chris@0: 'rel' => 'stylesheet', Chris@0: ], Chris@0: ]; Chris@0: Chris@18: foreach ($css_assets as $css_asset) { Chris@18: $element = $link_element_defaults; Chris@18: $element['#attributes']['media'] = $css_asset['media']; Chris@18: $element['#browsers'] = $css_asset['browsers']; Chris@0: Chris@0: switch ($css_asset['type']) { Chris@18: // For file items, output a LINK tag for file CSS assets. Chris@0: case 'file': Chris@0: // The dummy query string needs to be added to the URL to control Chris@0: // browser-caching. Chris@0: $query_string_separator = (strpos($css_asset['data'], '?') !== FALSE) ? '&' : '?'; Chris@18: $element['#attributes']['href'] = file_url_transform_relative(file_create_url($css_asset['data'])) . $query_string_separator . $query_string; Chris@0: break; Chris@0: Chris@0: case 'external': Chris@0: $element['#attributes']['href'] = $css_asset['data']; Chris@0: break; Chris@0: Chris@0: default: Chris@0: throw new \Exception('Invalid CSS asset type.'); Chris@0: } Chris@18: Chris@18: $elements[] = $element; Chris@0: } Chris@0: Chris@0: return $elements; Chris@0: } Chris@0: Chris@0: }