@@ -152,15 +152,15 @@ discard block |
||
| 152 | 152 | 'options' => $tagOptions |
| 153 | 153 | ]; |
| 154 | 154 | // Include any imports |
| 155 | - $importFiles = []; |
|
| 156 | - self::extractImportFiles(self::$manifest, $manifestKey, $importFiles); |
|
| 157 | - foreach ($importFiles as $importFile) { |
|
| 158 | - $tags[] = [ |
|
| 159 | - 'crossorigin' => $tagOptions['crossorigin'] ?? true, |
|
| 160 | - 'type' => 'import', |
|
| 161 | - 'url' => $importFile, |
|
| 162 | - ]; |
|
| 163 | - } |
|
| 155 | + $importFiles = []; |
|
| 156 | + self::extractImportFiles(self::$manifest, $manifestKey, $importFiles); |
|
| 157 | + foreach ($importFiles as $importFile) { |
|
| 158 | + $tags[] = [ |
|
| 159 | + 'crossorigin' => $tagOptions['crossorigin'] ?? true, |
|
| 160 | + 'type' => 'import', |
|
| 161 | + 'url' => $importFile, |
|
| 162 | + ]; |
|
| 163 | + } |
|
| 164 | 164 | // Include any CSS tags |
| 165 | 165 | $cssFiles = []; |
| 166 | 166 | self::extractCssFiles(self::$manifest, $manifestKey, $cssFiles); |
@@ -178,32 +178,32 @@ discard block |
||
| 178 | 178 | return $tags; |
| 179 | 179 | } |
| 180 | 180 | |
| 181 | - /** |
|
| 182 | - * Extract any import files from entries recursively |
|
| 183 | - * |
|
| 184 | - * @param array $manifest |
|
| 185 | - * @param string $manifestKey |
|
| 186 | - * @param array $importFiles |
|
| 187 | - * |
|
| 188 | - * @return array |
|
| 189 | - */ |
|
| 190 | - protected static function extractImportFiles(array $manifest, string $manifestKey, array &$importFiles): array |
|
| 191 | - { |
|
| 192 | - $entry = $manifest[$manifestKey] ?? null; |
|
| 193 | - if (!$entry) { |
|
| 194 | - return []; |
|
| 195 | - } |
|
| 196 | - |
|
| 197 | - $imports = $entry['imports'] ?? []; |
|
| 198 | - foreach($imports as $import) { |
|
| 199 | - $importFiles[] = $manifest[$import]['file']; |
|
| 200 | - self::extractImportFiles($manifest, $import, $importFiles); |
|
| 201 | - } |
|
| 202 | - |
|
| 203 | - return $importFiles; |
|
| 204 | - } |
|
| 205 | - |
|
| 206 | - /** |
|
| 181 | + /** |
|
| 182 | + * Extract any import files from entries recursively |
|
| 183 | + * |
|
| 184 | + * @param array $manifest |
|
| 185 | + * @param string $manifestKey |
|
| 186 | + * @param array $importFiles |
|
| 187 | + * |
|
| 188 | + * @return array |
|
| 189 | + */ |
|
| 190 | + protected static function extractImportFiles(array $manifest, string $manifestKey, array &$importFiles): array |
|
| 191 | + { |
|
| 192 | + $entry = $manifest[$manifestKey] ?? null; |
|
| 193 | + if (!$entry) { |
|
| 194 | + return []; |
|
| 195 | + } |
|
| 196 | + |
|
| 197 | + $imports = $entry['imports'] ?? []; |
|
| 198 | + foreach($imports as $import) { |
|
| 199 | + $importFiles[] = $manifest[$import]['file']; |
|
| 200 | + self::extractImportFiles($manifest, $import, $importFiles); |
|
| 201 | + } |
|
| 202 | + |
|
| 203 | + return $importFiles; |
|
| 204 | + } |
|
| 205 | + |
|
| 206 | + /** |
|
| 207 | 207 | * Extract any CSS files from entries recursively |
| 208 | 208 | * |
| 209 | 209 | * @param array $manifest |
@@ -233,30 +233,30 @@ discard block |
||
| 233 | 233 | } |
| 234 | 234 | |
| 235 | 235 | // modulepreload any imports from modern tags |
| 236 | - $modulepreloadPolyfillRequired = false; |
|
| 237 | - foreach($tags as $tag) { |
|
| 238 | - if (!empty($tag)) { |
|
| 239 | - $url = FileHelper::createUrl($this->serverPublic, $tag['url']); |
|
| 240 | - switch ($tag['type']) { |
|
| 241 | - case 'import': |
|
| 242 | - $lines[] = HtmlHelper::tag('link', '', [ |
|
| 243 | - 'crossorigin' => $tag['crossorigin'], |
|
| 244 | - 'href' => $url, |
|
| 245 | - 'rel' => 'modulepreload', |
|
| 246 | - ]); |
|
| 247 | - $modulepreloadPolyfillRequired = true; |
|
| 248 | - break; |
|
| 249 | - default: |
|
| 250 | - break; |
|
| 251 | - } |
|
| 252 | - } |
|
| 253 | - } |
|
| 254 | - if($modulepreloadPolyfillRequired && ! $this->modulepreloadPolyfillIncluded) { |
|
| 255 | - $this->modulepreloadPolyfillIncluded = true; |
|
| 256 | - $lines[] = HtmlHelper::script( |
|
| 257 | - FileHelper::fetchScript('modulepreload-polyfill.min.js', $this->cacheKeySuffix), |
|
| 258 | - ['type' => 'module'] |
|
| 259 | - ); |
|
| 236 | + $modulepreloadPolyfillRequired = false; |
|
| 237 | + foreach($tags as $tag) { |
|
| 238 | + if (!empty($tag)) { |
|
| 239 | + $url = FileHelper::createUrl($this->serverPublic, $tag['url']); |
|
| 240 | + switch ($tag['type']) { |
|
| 241 | + case 'import': |
|
| 242 | + $lines[] = HtmlHelper::tag('link', '', [ |
|
| 243 | + 'crossorigin' => $tag['crossorigin'], |
|
| 244 | + 'href' => $url, |
|
| 245 | + 'rel' => 'modulepreload', |
|
| 246 | + ]); |
|
| 247 | + $modulepreloadPolyfillRequired = true; |
|
| 248 | + break; |
|
| 249 | + default: |
|
| 250 | + break; |
|
| 251 | + } |
|
| 252 | + } |
|
| 253 | + } |
|
| 254 | + if($modulepreloadPolyfillRequired && ! $this->modulepreloadPolyfillIncluded) { |
|
| 255 | + $this->modulepreloadPolyfillIncluded = true; |
|
| 256 | + $lines[] = HtmlHelper::script( |
|
| 257 | + FileHelper::fetchScript('modulepreload-polyfill.min.js', $this->cacheKeySuffix), |
|
| 258 | + ['type' => 'module'] |
|
| 259 | + ); |
|
| 260 | 260 | } |
| 261 | 261 | |
| 262 | 262 | return implode("\r\n", $lines); |
@@ -383,37 +383,37 @@ discard block |
||
| 383 | 383 | } |
| 384 | 384 | } |
| 385 | 385 | |
| 386 | - // modulepreload any imports from modern tags |
|
| 387 | - $modulepreloadPolyfillRequired = false; |
|
| 388 | - foreach($tags as $tag) { |
|
| 389 | - if (!empty($tag)) { |
|
| 390 | - $url = FileHelper::createUrl($this->serverPublic, $tag['url']); |
|
| 391 | - switch ($tag['type']) { |
|
| 392 | - case 'import': |
|
| 393 | - $view->registerLinkTag( |
|
| 394 | - [ |
|
| 395 | - 'crossorigin' => $tag['crossorigin'], |
|
| 396 | - 'href' => $url, |
|
| 397 | - 'rel' => 'modulepreload', |
|
| 398 | - ], |
|
| 399 | - md5($url) |
|
| 400 | - ); |
|
| 401 | - $modulepreloadPolyfillRequired = true; |
|
| 402 | - break; |
|
| 403 | - default: |
|
| 404 | - break; |
|
| 405 | - } |
|
| 406 | - } |
|
| 407 | - } |
|
| 408 | - if($modulepreloadPolyfillRequired && ! $this->modulepreloadPolyfillIncluded) { |
|
| 409 | - $this->modulepreloadPolyfillIncluded = true; |
|
| 410 | - $view->registerScript( |
|
| 411 | - FileHelper::fetchScript('modulepreload-polyfill.min.js', $this->cacheKeySuffix), |
|
| 412 | - $view::POS_HEAD, |
|
| 413 | - ['type' => 'module'], |
|
| 414 | - 'MODULEPRELOAD_POLYFILL' |
|
| 415 | - ); |
|
| 416 | - } |
|
| 386 | + // modulepreload any imports from modern tags |
|
| 387 | + $modulepreloadPolyfillRequired = false; |
|
| 388 | + foreach($tags as $tag) { |
|
| 389 | + if (!empty($tag)) { |
|
| 390 | + $url = FileHelper::createUrl($this->serverPublic, $tag['url']); |
|
| 391 | + switch ($tag['type']) { |
|
| 392 | + case 'import': |
|
| 393 | + $view->registerLinkTag( |
|
| 394 | + [ |
|
| 395 | + 'crossorigin' => $tag['crossorigin'], |
|
| 396 | + 'href' => $url, |
|
| 397 | + 'rel' => 'modulepreload', |
|
| 398 | + ], |
|
| 399 | + md5($url) |
|
| 400 | + ); |
|
| 401 | + $modulepreloadPolyfillRequired = true; |
|
| 402 | + break; |
|
| 403 | + default: |
|
| 404 | + break; |
|
| 405 | + } |
|
| 406 | + } |
|
| 407 | + } |
|
| 408 | + if($modulepreloadPolyfillRequired && ! $this->modulepreloadPolyfillIncluded) { |
|
| 409 | + $this->modulepreloadPolyfillIncluded = true; |
|
| 410 | + $view->registerScript( |
|
| 411 | + FileHelper::fetchScript('modulepreload-polyfill.min.js', $this->cacheKeySuffix), |
|
| 412 | + $view::POS_HEAD, |
|
| 413 | + ['type' => 'module'], |
|
| 414 | + 'MODULEPRELOAD_POLYFILL' |
|
| 415 | + ); |
|
| 416 | + } |
|
| 417 | 417 | } |
| 418 | 418 | |
| 419 | 419 | /** |