Renderer.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Developer\Model\View\Page\Config\ClientSideLessCompilation;
  7. use Magento\Framework\View\Page\Config;
  8. /**
  9. * Page config Renderer model
  10. */
  11. class Renderer extends Config\Renderer
  12. {
  13. /**
  14. * @var array
  15. */
  16. private static $processingTypes = ['css', 'less'];
  17. /**
  18. * @var \Magento\Framework\View\Asset\Repository
  19. */
  20. private $assetRepo;
  21. /**
  22. * @param Config $pageConfig
  23. * @param \Magento\Framework\View\Asset\MergeService $assetMergeService
  24. * @param \Magento\Framework\UrlInterface $urlBuilder
  25. * @param \Magento\Framework\Escaper $escaper
  26. * @param \Magento\Framework\Stdlib\StringUtils $string
  27. * @param \Psr\Log\LoggerInterface $logger
  28. * @param \Magento\Framework\View\Asset\Repository $assetRepo
  29. */
  30. public function __construct(
  31. Config $pageConfig,
  32. \Magento\Framework\View\Asset\MergeService $assetMergeService,
  33. \Magento\Framework\UrlInterface $urlBuilder,
  34. \Magento\Framework\Escaper $escaper,
  35. \Magento\Framework\Stdlib\StringUtils $string,
  36. \Psr\Log\LoggerInterface $logger,
  37. \Magento\Framework\View\Asset\Repository $assetRepo
  38. ) {
  39. $this->assetRepo = $assetRepo;
  40. parent::__construct(
  41. $pageConfig,
  42. $assetMergeService,
  43. $urlBuilder,
  44. $escaper,
  45. $string,
  46. $logger
  47. );
  48. }
  49. /**
  50. * @param string $contentType
  51. * @param string $attributes
  52. * @return string
  53. */
  54. protected function addDefaultAttributes($contentType, $attributes)
  55. {
  56. $rel = '';
  57. switch ($contentType) {
  58. case 'less':
  59. $rel = 'stylesheet/less';
  60. break;
  61. case 'css':
  62. $rel = 'stylesheet';
  63. break;
  64. }
  65. if ($rel) {
  66. return ' rel="' . $rel . '" type="text/css" ' . ($attributes ?: ' media="all"');
  67. }
  68. return parent::addDefaultAttributes($contentType, $attributes);
  69. }
  70. /**
  71. * Returns rendered HTML for all Assets (CSS before)
  72. *
  73. * @param array $resultGroups
  74. *
  75. * @return string
  76. */
  77. public function renderAssets($resultGroups = [])
  78. {
  79. return parent::renderAssets($this->renderLessJsScripts($resultGroups));
  80. }
  81. /**
  82. * Injecting less.js compiler
  83. *
  84. * @param array $resultGroups
  85. *
  86. * @return mixed
  87. */
  88. private function renderLessJsScripts($resultGroups)
  89. {
  90. // less js have to be injected before any *.js in developer mode
  91. $lessJsConfigAsset = $this->assetRepo->createAsset('less/config.less.js');
  92. $resultGroups['js'] .= sprintf('<script src="%s"></script>' . "\n", $lessJsConfigAsset->getUrl());
  93. $lessJsAsset = $this->assetRepo->createAsset('less/less.min.js');
  94. $resultGroups['js'] .= sprintf('<script src="%s"></script>' . "\n", $lessJsAsset->getUrl());
  95. return $resultGroups;
  96. }
  97. /**
  98. * Get asset content type
  99. *
  100. * @param \Magento\Framework\View\Asset\AssetInterface|\Magento\Framework\View\Asset\File $asset
  101. * @return string
  102. */
  103. protected function getAssetContentType(\Magento\Framework\View\Asset\AssetInterface $asset)
  104. {
  105. if (!in_array($asset->getContentType(), self::$processingTypes)) {
  106. return parent::getAssetContentType($asset);
  107. }
  108. return $asset->getSourceContentType();
  109. }
  110. }