Loading core/modules/sdc/src/ComponentPluginManager.php +17 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ use Drupal\Component\Assertion\Inspector; use Drupal\Component\Discovery\YamlDirectoryDiscovery; use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Extension\ModuleHandlerInterface; Loading Loading @@ -385,16 +386,26 @@ private function translateLibraryPaths(array $overrides, string $component_direc $js = $overrides['js'] ?? []; foreach ($css as $dir => $css_info) { foreach ($css_info as $filename => $options) { if (!UrlHelper::isExternal($filename)) { $absolute_filename = sprintf('%s%s%s', $component_directory, DIRECTORY_SEPARATOR, $filename); $altered_filename = $this->makePathRelativeToLibraryRoot($absolute_filename); $altered_overrides['css'][$dir][$altered_filename] = $options; } else { $altered_overrides['css'][$dir][$filename] = $options; } } } foreach ($js as $filename => $options) { if (!UrlHelper::isExternal($filename)) { $absolute_filename = sprintf('%s%s%s', $component_directory, DIRECTORY_SEPARATOR, $filename); $altered_filename = $this->makePathRelativeToLibraryRoot($absolute_filename); $altered_overrides['js'][$altered_filename] = $options; } else { $altered_overrides['js'][$filename] = $options; } } return $altered_overrides; } Loading core/modules/sdc/tests/src/Functional/ComponentRenderTest.php +4 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,10 @@ public function testLibraryOverrides(): void { $this->assertStringContainsString('dialog.position.js', $output); // Ensure that libraryOverrides processes attributes properly. $this->assertMatchesRegularExpression('@<script.*src="[^"]*lib-overrides\.js\?v=1[^"]*".*defer.*bar="foo"></script>@', $output); // Ensure that libraryOverrides processes external CSS properly. $this->assertMatchesRegularExpression('@<link.*href="https://drupal\.org/fake-dependency/styles\.css" />@', $output); // Ensure that libraryOverrides processes external JS properly. $this->assertMatchesRegularExpression('@<script.*src="https://drupal\.org/fake-dependency/index\.min\.js"></script>@', $output); } } core/modules/sdc/tests/themes/sdc_theme_test/components/lib-overrides/lib-overrides.component.yml +3 −1 Original line number Diff line number Diff line Loading @@ -8,5 +8,7 @@ libraryOverrides: css: component: another-stylesheet.css: {} https://drupal.org/fake-dependency/styles.css: {} js: lib-overrides.js: { attributes: { defer: true, bar: foo } } https://drupal.org/fake-dependency/index.min.js: {} Loading
core/modules/sdc/src/ComponentPluginManager.php +17 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ use Drupal\Component\Assertion\Inspector; use Drupal\Component\Discovery\YamlDirectoryDiscovery; use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Extension\ModuleHandlerInterface; Loading Loading @@ -385,16 +386,26 @@ private function translateLibraryPaths(array $overrides, string $component_direc $js = $overrides['js'] ?? []; foreach ($css as $dir => $css_info) { foreach ($css_info as $filename => $options) { if (!UrlHelper::isExternal($filename)) { $absolute_filename = sprintf('%s%s%s', $component_directory, DIRECTORY_SEPARATOR, $filename); $altered_filename = $this->makePathRelativeToLibraryRoot($absolute_filename); $altered_overrides['css'][$dir][$altered_filename] = $options; } else { $altered_overrides['css'][$dir][$filename] = $options; } } } foreach ($js as $filename => $options) { if (!UrlHelper::isExternal($filename)) { $absolute_filename = sprintf('%s%s%s', $component_directory, DIRECTORY_SEPARATOR, $filename); $altered_filename = $this->makePathRelativeToLibraryRoot($absolute_filename); $altered_overrides['js'][$altered_filename] = $options; } else { $altered_overrides['js'][$filename] = $options; } } return $altered_overrides; } Loading
core/modules/sdc/tests/src/Functional/ComponentRenderTest.php +4 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,10 @@ public function testLibraryOverrides(): void { $this->assertStringContainsString('dialog.position.js', $output); // Ensure that libraryOverrides processes attributes properly. $this->assertMatchesRegularExpression('@<script.*src="[^"]*lib-overrides\.js\?v=1[^"]*".*defer.*bar="foo"></script>@', $output); // Ensure that libraryOverrides processes external CSS properly. $this->assertMatchesRegularExpression('@<link.*href="https://drupal\.org/fake-dependency/styles\.css" />@', $output); // Ensure that libraryOverrides processes external JS properly. $this->assertMatchesRegularExpression('@<script.*src="https://drupal\.org/fake-dependency/index\.min\.js"></script>@', $output); } }
core/modules/sdc/tests/themes/sdc_theme_test/components/lib-overrides/lib-overrides.component.yml +3 −1 Original line number Diff line number Diff line Loading @@ -8,5 +8,7 @@ libraryOverrides: css: component: another-stylesheet.css: {} https://drupal.org/fake-dependency/styles.css: {} js: lib-overrides.js: { attributes: { defer: true, bar: foo } } https://drupal.org/fake-dependency/index.min.js: {}