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. }