assetRepo = $assetRepo; parent::__construct( $pageConfig, $assetMergeService, $urlBuilder, $escaper, $string, $logger ); } /** * @param string $contentType * @param string $attributes * @return string */ protected function addDefaultAttributes($contentType, $attributes) { $rel = ''; switch ($contentType) { case 'less': $rel = 'stylesheet/less'; break; case 'css': $rel = 'stylesheet'; break; } if ($rel) { return ' rel="' . $rel . '" type="text/css" ' . ($attributes ?: ' media="all"'); } return parent::addDefaultAttributes($contentType, $attributes); } /** * Returns rendered HTML for all Assets (CSS before) * * @param array $resultGroups * * @return string */ public function renderAssets($resultGroups = []) { return parent::renderAssets($this->renderLessJsScripts($resultGroups)); } /** * Injecting less.js compiler * * @param array $resultGroups * * @return mixed */ private function renderLessJsScripts($resultGroups) { // less js have to be injected before any *.js in developer mode $lessJsConfigAsset = $this->assetRepo->createAsset('less/config.less.js'); $resultGroups['js'] .= sprintf('' . "\n", $lessJsConfigAsset->getUrl()); $lessJsAsset = $this->assetRepo->createAsset('less/less.min.js'); $resultGroups['js'] .= sprintf('' . "\n", $lessJsAsset->getUrl()); return $resultGroups; } /** * Get asset content type * * @param \Magento\Framework\View\Asset\AssetInterface|\Magento\Framework\View\Asset\File $asset * @return string */ protected function getAssetContentType(\Magento\Framework\View\Asset\AssetInterface $asset) { if (!in_array($asset->getContentType(), self::$processingTypes)) { return parent::getAssetContentType($asset); } return $asset->getSourceContentType(); } }