Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,95 @@ +<?php + +namespace Drupal\Core\Asset; + +/** + * Resolves the dependencies of asset (CSS/JavaScript) libraries. + */ +class LibraryDependencyResolver implements LibraryDependencyResolverInterface { + + /** + * The library discovery service. + * + * @var \Drupal\Core\Asset\LibraryDiscoveryInterface + */ + protected $libraryDiscovery; + + /** + * Constructs a new LibraryDependencyResolver instance. + * + * @param \Drupal\Core\Asset\LibraryDiscoveryInterface $library_discovery + * The library discovery service. + */ + public function __construct(LibraryDiscoveryInterface $library_discovery) { + $this->libraryDiscovery = $library_discovery; + } + + /** + * {@inheritdoc} + */ + public function getLibrariesWithDependencies(array $libraries) { + return $this->doGetDependencies($libraries); + } + + /** + * Gets the given libraries with its dependencies. + * + * Helper method for ::getLibrariesWithDependencies(). + * + * @param string[] $libraries_with_unresolved_dependencies + * A list of libraries, with unresolved dependencies, in the order they + * should be loaded. + * @param string[] $final_libraries + * The final list of libraries (the return value) that is being built + * recursively. + * + * @return string[] + * A list of libraries, in the order they should be loaded, including their + * dependencies. + */ + protected function doGetDependencies(array $libraries_with_unresolved_dependencies, array $final_libraries = []) { + foreach ($libraries_with_unresolved_dependencies as $library) { + if (!in_array($library, $final_libraries)) { + list($extension, $name) = explode('/', $library, 2); + $definition = $this->libraryDiscovery->getLibraryByName($extension, $name); + if (!empty($definition['dependencies'])) { + $final_libraries = $this->doGetDependencies($definition['dependencies'], $final_libraries); + } + $final_libraries[] = $library; + } + } + return $final_libraries; + } + + /** + * {@inheritdoc} + */ + public function getMinimalRepresentativeSubset(array $libraries) { + $minimal = []; + + // Determine each library's dependencies. + $with_deps = []; + foreach ($libraries as $library) { + $with_deps[$library] = $this->getLibrariesWithDependencies([$library]); + } + + foreach ($libraries as $library) { + $exists = FALSE; + foreach ($with_deps as $other_library => $dependencies) { + if ($library == $other_library) { + continue; + } + if (in_array($library, $dependencies)) { + $exists = TRUE; + break; + } + } + if (!$exists) { + $minimal[] = $library; + } + } + + return $minimal; + } + +}