vendor/boldr/cms-bundle/src/Renderer/Assets.php line 43

Open in your IDE?
  1. <?php
  2. namespace Boldr\Cms\CmsBundle\Renderer;
  3. use JsonSerializable;
  4. class Assets implements JsonSerializable
  5. {
  6.     /** @var string[] */
  7.     private $headContents = [];
  8.     /** @var bool[] */
  9.     private $headContentsRendered = [];
  10.     /** @var string[] */
  11.     private $bodyContents = [];
  12.     /** @var bool[] */
  13.     private $bodyContentsRendered = [];
  14.     /** @var string[] */
  15.     private $webpackEncoreEntries = [];
  16.     /** @var bool[] */
  17.     private $webpackEncoreScriptEntriesRendered = [];
  18.     /** @var bool[] */
  19.     private $webpackEncoreStyleEntriesRendered = [];
  20.     /** @var string[] */
  21.     private $cssFiles = [];
  22.     /** @var bool[] */
  23.     private $cssFilesRendered = [];
  24.     /** @var string[] */
  25.     private $jsFiles = [];
  26.     /** @var bool[] */
  27.     private $jsFilesRendered = [];
  28.     public function jsonSerialize()
  29.     {
  30.         return [
  31.             'headContents' => $this->headContents,
  32.             'bodyContents' => $this->bodyContents,
  33.             'webpackEncoreEntries' => $this->webpackEncoreEntries,
  34.             'cssFiles' => $this->cssFiles,
  35.             'jsFiles' => $this->jsFiles,
  36.         ];
  37.     }
  38.     public function addWebpackEncoreEntry(string $entryName): self
  39.     {
  40.         if (!in_array($entryName$this->webpackEncoreEntries))
  41.         {
  42.             $this->webpackEncoreEntries[] = $entryName;
  43.         }
  44.         return $this;
  45.     }
  46.     public function addCssFile(string $path): self
  47.     {
  48.         if (!in_array($path$this->cssFiles))
  49.         {
  50.             $this->cssFiles[] = $path;
  51.         }
  52.         return $this;
  53.     }
  54.     public function addJsFile(string $path): self
  55.     {
  56.         if (!in_array($path$this->jsFiles))
  57.         {
  58.             $this->jsFiles[] = $path;
  59.         }
  60.         return $this;
  61.     }
  62.     public function addHtmlContentToHead(string $htmlContent): self
  63.     {
  64.         if (!in_array($htmlContent$this->headContents))
  65.         {
  66.             $this->headContents[] = $htmlContent;
  67.         }
  68.         return $this;
  69.     }
  70.     public function addHtmlContentToBody(string $htmlContent): self
  71.     {
  72.         if (!in_array($htmlContent$this->bodyContents))
  73.         {
  74.             $this->bodyContents[] = $htmlContent;
  75.         }
  76.         return $this;
  77.     }
  78.     public function getUnrenderedWebpackEncoreStyleEntries(): iterable
  79.     {
  80.         foreach ($this->webpackEncoreEntries as $i => $v)
  81.         {
  82.             if (empty($this->webpackEncoreStyleEntriesRendered[$i]))
  83.             {
  84.                 yield $v;
  85.             }
  86.         }
  87.     }
  88.     public function getUnrenderedWebpackEncoreScriptEntries(): iterable
  89.     {
  90.         foreach ($this->webpackEncoreEntries as $i => $v)
  91.         {
  92.             if (empty($this->webpackEncoreScriptEntriesRendered[$i]))
  93.             {
  94.                 yield $v;
  95.             }
  96.         }
  97.     }
  98.     public function getUnrenderedCssFiles(): iterable
  99.     {
  100.         foreach ($this->cssFiles as $i => $v)
  101.         {
  102.             if (empty($this->cssFilesRendered[$i]))
  103.             {
  104.                 yield $v;
  105.             }
  106.         }
  107.     }
  108.     public function getUnrenderedJsFiles(): iterable
  109.     {
  110.         foreach ($this->jsFiles as $i => $v)
  111.         {
  112.             if (empty($this->jsFilesRendered[$i]))
  113.             {
  114.                 yield $v;
  115.             }
  116.         }
  117.     }
  118.     public function getUnrenderedHeadContents(): iterable
  119.     {
  120.         foreach ($this->headContents as $i => $v)
  121.         {
  122.             if (empty($this->headContentsRendered[$i]))
  123.             {
  124.                 yield $v;
  125.             }
  126.         }
  127.     }
  128.     public function getUnrenderedBodyContents(): iterable
  129.     {
  130.         foreach ($this->bodyContents as $i => $v)
  131.         {
  132.             if (empty($this->bodyContentsRendered[$i]))
  133.             {
  134.                 yield $v;
  135.             }
  136.         }
  137.     }
  138.     public function renderWebpackEncoreScriptEntries(): void
  139.     {
  140.         foreach($this->webpackEncoreEntries as $i => $_)
  141.         {
  142.             $this->webpackEncoreScriptEntriesRendered[$i] = true;
  143.         }
  144.     }
  145.     public function renderWebpackEncoreStyleEntries(): void
  146.     {
  147.         foreach($this->webpackEncoreEntries as $i => $_)
  148.         {
  149.             $this->webpackEncoreStyleEntriesRendered[$i] = true;
  150.         }
  151.     }
  152.     public function renderCssFiles(): void
  153.     {
  154.         foreach($this->cssFiles as $i => $_)
  155.         {
  156.             $this->cssFilesRendered[$i] = true;
  157.         }
  158.     }
  159.     public function renderJsFiles(): void
  160.     {
  161.         foreach($this->jsFiles as $i => $_)
  162.         {
  163.             $this->jsFilesRendered[$i] = true;
  164.         }
  165.     }
  166.     public function renderHeadContents(): void
  167.     {
  168.         foreach($this->headContents as $i => $_)
  169.         {
  170.             $this->headContentsRendered[$i] = true;
  171.         }
  172.     }
  173.     public function renderBodyContents(): void
  174.     {
  175.         foreach($this->bodyContents as $i => $_)
  176.         {
  177.             $this->bodyContentsRendered[$i] = true;
  178.         }
  179.     }
  180.     public function addAll(Assets ...$assets): self
  181.     {
  182.         foreach ($assets as $a)
  183.         {
  184.             foreach ($a->getUnrenderedJsFiles() as $jsFile)
  185.             {
  186.                 $this->addJsFile($jsFile);
  187.             }
  188.             foreach ($a->getUnrenderedCssFiles() as $cssFile)
  189.             {
  190.                 $this->addCssFile($cssFile);
  191.             }
  192.             foreach ($a->getUnrenderedWebpackEncoreStyleEntries() as $entry)
  193.             {
  194.                 $this->addWebpackEncoreEntry($entry);
  195.             }
  196.             foreach ($a->getUnrenderedWebpackEncoreScriptEntries() as $entry)
  197.             {
  198.                 $this->addWebpackEncoreEntry($entry);
  199.             }
  200.             foreach ($a->getUnrenderedHeadContents() as $htmlContent)
  201.             {
  202.                 $this->addHtmlContentToHead($htmlContent);
  203.             }
  204.             foreach ($a->getUnrenderedBodyContents() as $htmlContent)
  205.             {
  206.                 $this->addHtmlContentToBody($htmlContent);
  207.             }
  208.         }
  209.         return $this;
  210.     }
  211. }