/** * {@inheritdoc} */ public function process(\Magento\Framework\View\Asset\PreProcessor\Chain $chain) { $asset = $chain->getAsset(); $contentType = $chain->getContentType(); $replaceCallback = function ($matchContent) use($asset, $contentType) { return $this->replace($matchContent, $asset, $contentType); }; $content = $this->removeComments($chain->getContent()); $processedContent = preg_replace_callback(self::REPLACE_PATTERN, $replaceCallback, $content); $this->relatedFileGenerator->generate($this); if ($processedContent !== $content) { $chain->setContent($processedContent); } }
/** * @inheritdoc */ protected function generateRelatedFile($relatedFileId, LocalInterface $asset) { $relatedAsset = parent::generateRelatedFile($relatedFileId, $asset); if ($this->hasRelatedPublishing || WorkflowType::CLIENT_SIDE_COMPILATION === $this->scopeConfig->getValue(WorkflowType::CONFIG_NAME_PATH)) { $this->assetPublisher->publish($relatedAsset); } return $relatedAsset; }
public function testGenerateFileTree() { $lessDirectory = 'path/to/less'; $expectedContent = 'updated content'; $expectedRelativePath = 'some/file.less'; $expectedPath = $lessDirectory . '/some/file.less'; $asset = $this->getMock('Magento\\Framework\\View\\Asset\\File', [], [], '', false); $chain = $this->getMock('Magento\\Framework\\View\\Asset\\PreProcessor\\Chain', [], [], '', false); $this->config->expects($this->any())->method('getLessDirectory')->willReturn($lessDirectory); $this->tmpDirectory->expects($this->once())->method('isExist')->willReturn(true); $this->magentoImport->expects($this->once())->method('process')->with($chain); $this->import->expects($this->once())->method('process')->with($chain); $this->relatedGenerator->expects($this->once())->method('generate')->with($this->import); $asset->expects($this->once())->method('getPath')->will($this->returnValue('some/file.css')); $chain->expects($this->once())->method('getContent')->willReturn($expectedContent); $chain->expects($this->once())->method('getAsset')->willReturn($asset); $chain->expects($this->once())->method('getContentType')->willReturn('less'); $this->temporaryFile->expects($this->once())->method('createFile')->with($expectedRelativePath, $expectedContent)->willReturn($expectedPath); $this->assertSame($expectedPath, $this->object->generateFileTree($chain)); }
/** * Create a tree of self-sustainable files and return the topmost source file, * ready for passing to 3rd party library * * @param Chain $chain * @return string Absolute path of generated topmost source file */ public function generateFileTree(Chain $chain) { /** * wait if generation process has already started */ while ($this->isProcessLocked()) { sleep(1); } $lockFilePath = $this->config->getMaterializationRelativePath() . '/' . self::LOCK_FILE; $this->tmpDirectory->writeFile($lockFilePath, time()); $this->magentoImportProcessor->process($chain); $this->importProcessor->process($chain); $this->relatedGenerator->generate($this->importProcessor); $contentType = $chain->getContentType(); $relativePath = preg_replace('#\\.css$#', '.' . $contentType, $chain->getAsset()->getPath()); $tmpFilePath = $this->temporaryFile->createFile($relativePath, $chain->getContent()); $this->tmpDirectory->delete($lockFilePath); return $tmpFilePath; }
/** * {inheritdoc} */ protected function generateRelatedFile($relatedFileId, LocalInterface $asset) { $relatedAsset = parent::generateRelatedFile($relatedFileId, $asset); $this->publisher->publish($relatedAsset); return $relatedAsset; }