core/includes/theme.inc | 5 +++-- core/lib/Drupal/Core/Asset/AssetResolver.php | 14 +++++++------- core/lib/Drupal/Core/Asset/AssetResolverInterface.php | 9 ++++++++- core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 3b9f800..2664a34 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -1414,8 +1414,9 @@ function template_preprocess_html(&$variables) { $asset_resolver = \Drupal::service('asset.resolver'); $variables['styles'] = \Drupal::service('asset.css.collection_renderer')->render($asset_resolver->getCssAssets($assets, $optimize_css)); list($js_assets_header, $js_assets_footer) = $asset_resolver->getJsAssets($assets, $optimize_js); - $variables['scripts'] = \Drupal::service('asset.js.collection_renderer')->render($js_assets_header); - $variables['scripts_bottom'] = \Drupal::service('asset.js.collection_renderer')->render($js_assets_footer); + $js_collection_renderer = \Drupal::service('asset.js.collection_renderer'); + $variables['scripts'] = $js_collection_renderer->render($js_assets_header); + $variables['scripts_bottom'] = $js_collection_renderer->render($js_assets_footer); // Handle all non-asset attachments. drupal_process_attached($all_attached); diff --git a/core/lib/Drupal/Core/Asset/AssetResolver.php b/core/lib/Drupal/Core/Asset/AssetResolver.php index 8d60d55..a35f823 100644 --- a/core/lib/Drupal/Core/Asset/AssetResolver.php +++ b/core/lib/Drupal/Core/Asset/AssetResolver.php @@ -63,22 +63,22 @@ public function __construct(LibraryDiscoveryInterface $library_discovery, Librar } /** - * Given lists of needed & loaded libraries, resolves which libraries to load. + * Returns the libraries that need to be loaded. * * For example, with core/a depending on core/c and core/b on core/d: * @code - * $asset_resolver->setLibraries(['core/a', 'core/b', 'core/c']); - * $asset_resolver->setAlreadyLoadedLibraries(['core/c']); - * $asset_resolver->getLibrariesToLoad() === ['core/a', 'core/b', 'core/d'] + * $assets = new AttachedAssets(); + * $assets->setLibraries(['core/a', 'core/b', 'core/c']); + * $assets->setAlreadyLoadedLibraries(['core/c']); + * $resolver->getLibrariesToLoad($assets) === ['core/a', 'core/b', 'core/d'] * @endcode * * @param \Drupal\Core\Asset\AttachedAssetsInterface $assets * The assets attached to the current response. * * @return string[] - * A list of libraries, in the order they should be loaded, including their - * dependencies. (Any libraries that have already been loaded, and their - * dependencies, are excluded.) + * A list of libraries and their dependencies, in the order they should be + * loaded, excluding any libraries that have already been loaded. */ protected function getLibrariesToLoad(AttachedAssetsInterface $assets) { return array_diff( diff --git a/core/lib/Drupal/Core/Asset/AssetResolverInterface.php b/core/lib/Drupal/Core/Asset/AssetResolverInterface.php index 834c3c4..6857c87 100644 --- a/core/lib/Drupal/Core/Asset/AssetResolverInterface.php +++ b/core/lib/Drupal/Core/Asset/AssetResolverInterface.php @@ -24,7 +24,14 @@ /** * Returns the CSS assets for the current response's libraries. * - * It loads the CSS in order, with 'module' first, then 'theme' afterwards. + * It returns the CSS assets in order, according to the SMACSS categories + * specified in the assets' weights: + * 1. CSS_BASE + * 2. CSS_LAYOUT + * 3. CSS_COMPONENT + * 4. CSS_STATE + * 5. CSS_THEME + * @see https://www.drupal.org/node/1887918#separate-concerns * This ensures proper cascading of styles so themes can easily override * module styles through CSS selectors. * diff --git a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php index cbeeda7..dd53245 100644 --- a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php +++ b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php @@ -156,7 +156,7 @@ protected function getThingsToCheck() { // Editor.module's JS settings present. isset($settings['editor']), // Editor.module's JS present. Note: ckeditor/drupal.ckeditor depends on - // editor/drupal.editor, hence presence of the former immplies presence of + // editor/drupal.editor, hence presence of the former implies presence of // the latter. isset($settings['ajaxPageState']) && in_array('ckeditor/drupal.ckeditor', explode(',', $settings['ajaxPageState']['libraries'])), // Body field.