Mercurial > hg > isophonics-drupal-site
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Core\Asset; | |
4 | |
5 /** | |
6 * Resolves the dependencies of asset (CSS/JavaScript) libraries. | |
7 */ | |
8 class LibraryDependencyResolver implements LibraryDependencyResolverInterface { | |
9 | |
10 /** | |
11 * The library discovery service. | |
12 * | |
13 * @var \Drupal\Core\Asset\LibraryDiscoveryInterface | |
14 */ | |
15 protected $libraryDiscovery; | |
16 | |
17 /** | |
18 * Constructs a new LibraryDependencyResolver instance. | |
19 * | |
20 * @param \Drupal\Core\Asset\LibraryDiscoveryInterface $library_discovery | |
21 * The library discovery service. | |
22 */ | |
23 public function __construct(LibraryDiscoveryInterface $library_discovery) { | |
24 $this->libraryDiscovery = $library_discovery; | |
25 } | |
26 | |
27 /** | |
28 * {@inheritdoc} | |
29 */ | |
30 public function getLibrariesWithDependencies(array $libraries) { | |
31 return $this->doGetDependencies($libraries); | |
32 } | |
33 | |
34 /** | |
35 * Gets the given libraries with its dependencies. | |
36 * | |
37 * Helper method for ::getLibrariesWithDependencies(). | |
38 * | |
39 * @param string[] $libraries_with_unresolved_dependencies | |
40 * A list of libraries, with unresolved dependencies, in the order they | |
41 * should be loaded. | |
42 * @param string[] $final_libraries | |
43 * The final list of libraries (the return value) that is being built | |
44 * recursively. | |
45 * | |
46 * @return string[] | |
47 * A list of libraries, in the order they should be loaded, including their | |
48 * dependencies. | |
49 */ | |
50 protected function doGetDependencies(array $libraries_with_unresolved_dependencies, array $final_libraries = []) { | |
51 foreach ($libraries_with_unresolved_dependencies as $library) { | |
52 if (!in_array($library, $final_libraries)) { | |
53 list($extension, $name) = explode('/', $library, 2); | |
54 $definition = $this->libraryDiscovery->getLibraryByName($extension, $name); | |
55 if (!empty($definition['dependencies'])) { | |
56 $final_libraries = $this->doGetDependencies($definition['dependencies'], $final_libraries); | |
57 } | |
58 $final_libraries[] = $library; | |
59 } | |
60 } | |
61 return $final_libraries; | |
62 } | |
63 | |
64 /** | |
65 * {@inheritdoc} | |
66 */ | |
67 public function getMinimalRepresentativeSubset(array $libraries) { | |
68 $minimal = []; | |
69 | |
70 // Determine each library's dependencies. | |
71 $with_deps = []; | |
72 foreach ($libraries as $library) { | |
73 $with_deps[$library] = $this->getLibrariesWithDependencies([$library]); | |
74 } | |
75 | |
76 foreach ($libraries as $library) { | |
77 $exists = FALSE; | |
78 foreach ($with_deps as $other_library => $dependencies) { | |
79 if ($library == $other_library) { | |
80 continue; | |
81 } | |
82 if (in_array($library, $dependencies)) { | |
83 $exists = TRUE; | |
84 break; | |
85 } | |
86 } | |
87 if (!$exists) { | |
88 $minimal[] = $library; | |
89 } | |
90 } | |
91 | |
92 return $minimal; | |
93 } | |
94 | |
95 } |