annotate core/lib/Drupal/Core/Asset/CssCollectionRenderer.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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 }