public LibraryDiscoveryParser::buildByExtension($extension)
Parses and builds up all the libraries information of an extension.
Parameters
string $extension: The name of the extension that registered a library.
Return value
array All library definitions of the passed extension.
Throws
\Drupal\Core\Asset\Exception\IncompleteLibraryDefinitionException Thrown when a library has no js/css/setting.
\UnexpectedValueException Thrown when a js file defines a positive weight.
File
- core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php, line 71
Class
- LibraryDiscoveryParser
- Parses library files to get extension data.
Namespace
Drupal\Core\Asset
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | public function buildByExtension( $extension ) { $libraries = array (); if ( $extension === 'core' ) { $path = 'core' ; $extension_type = 'core' ; } else { if ( $this ->moduleHandler->moduleExists( $extension )) { $extension_type = 'module' ; } else { $extension_type = 'theme' ; } $path = $this ->drupalGetPath( $extension_type , $extension ); } $libraries = $this ->parseLibraryInfo( $extension , $path ); $libraries = $this ->applyLibrariesOverride( $libraries , $extension ); foreach ( $libraries as $id => & $library ) { if (!isset( $library [ 'js' ]) && !isset( $library [ 'css' ]) && !isset( $library [ 'drupalSettings' ])) { throw new IncompleteLibraryDefinitionException(sprintf( "Incomplete library definition for definition '%s' in extension '%s'" , $id , $extension )); } $library += array ( 'dependencies' => array (), 'js' => array (), 'css' => array ()); if (isset( $library [ 'header' ]) && ! is_bool ( $library [ 'header' ])) { throw new \LogicException(sprintf( "The 'header' key in the library definition '%s' in extension '%s' is invalid: it must be a boolean." , $id , $extension )); } if (isset( $library [ 'version' ])) { // @todo Retrieve version of a non-core extension. if ( $library [ 'version' ] === 'VERSION' ) { $library [ 'version' ] = \Drupal::VERSION; } // Remove 'v' prefix from external library versions. elseif ( $library [ 'version' ][0] === 'v' ) { $library [ 'version' ] = substr ( $library [ 'version' ], 1); } } // If this is a 3rd party library, the license info is required. if (isset( $library [ 'remote' ]) && !isset( $library [ 'license' ])) { throw new LibraryDefinitionMissingLicenseException(sprintf( "Missing license information in library definition for definition '%s' extension '%s': it has a remote, but no license." , $id , $extension )); } // Assign Drupal's license to libraries that don't have license info. if (!isset( $library [ 'license' ])) { $library [ 'license' ] = array ( 'name' => 'GNU-GPL-2.0-or-later' , 'gpl-compatible' => TRUE, ); } foreach ( array ( 'js' , 'css' ) as $type ) { // Prepare (flatten) the SMACSS-categorized definitions. // @todo After Asset(ic) changes, retain the definitions as-is and // properly resolve dependencies for all (css) libraries per category, // and only once prior to rendering out an HTML page. if ( $type == 'css' && ! empty ( $library [ $type ])) { foreach ( $library [ $type ] as $category => $files ) { foreach ( $files as $source => $options ) { if (!isset( $options [ 'weight' ])) { $options [ 'weight' ] = 0; } // Apply the corresponding weight defined by CSS_* constants. $options [ 'weight' ] += constant( 'CSS_' . strtoupper ( $category )); $library [ $type ][ $source ] = $options ; } unset( $library [ $type ][ $category ]); } } foreach ( $library [ $type ] as $source => $options ) { unset( $library [ $type ][ $source ]); // Allow to omit the options hashmap in YAML declarations. if (! is_array ( $options )) { $options = array (); } if ( $type == 'js' && isset( $options [ 'weight' ]) && $options [ 'weight' ] > 0) { throw new \UnexpectedValueException( "The $extension/$id library defines a positive weight for '$source'. Only negative weights are allowed (but should be avoided). Instead of a positive weight, specify accurate dependencies for this library." ); } // Unconditionally apply default groups for the defined asset files. // The library system is a dependency management system. Each library // properly specifies its dependencies instead of relying on a custom // processing order. if ( $type == 'js' ) { $options [ 'group' ] = JS_LIBRARY; } elseif ( $type == 'css' ) { $options [ 'group' ] = $extension_type == 'theme' ? CSS_AGGREGATE_THEME : CSS_AGGREGATE_DEFAULT; } // By default, all library assets are files. if (!isset( $options [ 'type' ])) { $options [ 'type' ] = 'file' ; } if ( $options [ 'type' ] == 'external' ) { $options [ 'data' ] = $source ; } // Determine the file asset URI. else { if ( $source [0] === '/' ) { // An absolute path maps to DRUPAL_ROOT / base_path(). if ( $source [1] !== '/' ) { $options [ 'data' ] = substr ( $source , 1); } // A protocol-free URI (e.g., //cdn.com/example.js) is external. else { $options [ 'type' ] = 'external' ; $options [ 'data' ] = $source ; } } // A stream wrapper URI (e.g., public://generated_js/example.js). elseif ( $this ->fileValidUri( $source )) { $options [ 'data' ] = $source ; } // A regular URI (e.g., http://example.com/example.js) without // 'external' explicitly specified, which may happen if, e.g. // libraries-override is used. elseif ( $this ->isValidUri( $source )) { $options [ 'type' ] = 'external' ; $options [ 'data' ] = $source ; } // By default, file paths are relative to the registering extension. else { $options [ 'data' ] = $path . '/' . $source ; } } if (!isset( $library [ 'version' ])) { // @todo Get the information from the extension. $options [ 'version' ] = -1; } else { $options [ 'version' ] = $library [ 'version' ]; } // Set the 'minified' flag on JS file assets, default to FALSE. if ( $type == 'js' && $options [ 'type' ] == 'file' ) { $options [ 'minified' ] = isset( $options [ 'minified' ]) ? $options [ 'minified' ] : FALSE; } $library [ $type ][] = $options ; } } } return $libraries ; } |
Please login to continue.