isInstalled() || $this->hasRemoteUrl()); } /** * Gets the prefix to prepend to file paths. * * For local libraries this is the library path, for remote libraries this is * the remote URL. * * @return string * The path prefix. */ protected function getPathPrefix() { /** @var \Drupal\libraries\ExternalLibrary\Local\LocalLibraryInterface|\Drupal\libraries\ExternalLibrary\Remote\RemoteLibraryInterface $this */ if ($this->isInstalled()) { // LocalLibraryInterface::getLocalPath() returns the path relative to the // app root. In order for the core core asset system to register the path // as relative to the app root, a leading slash is required. /** @see \Drupal\Core\Asset\LibraryDiscoveryParser::buildByExtension() */ return '/' . $this->getLocalPath(); } elseif ($this->hasRemoteUrl()) { return $this->getRemoteUrl(); } else { // @todo Throw an exception. } } /** * Gets the CSS assets attached to this library. * * @param array $assets * * @return array * An array of CSS assets of the library following the core library CSS * structure. The keys of the array must be among the SMACSS categories * 'base', 'layout, 'component', 'state', and 'theme'. The value of each * category is in turn an array where the keys are the file paths of the CSS * files and values are CSS options. * * @see https://smacss.com/ * * @see \Drupal\libraries\ExternalLibrary\Asset\SingleAssetLibraryTrait::getCssAssets() */ protected function processCssAssets(array $assets) { // @todo Consider somehow caching the processed information. $processed_assets = []; foreach ($assets as $category => $category_assets) { // @todo Somehow consolidate this with getJsAssets(). foreach ($category_assets as $filename => $options) { $processed_assets[$category][$this->getPathPrefix() . '/' . $filename] = $options; } } return $processed_assets; } /** * Gets the JavaScript assets attached to this library. * * @param array $assets * * @return array * An array of JavaScript assets of the library. The keys of the array are * the file paths of the JavaScript files and the values are JavaScript * options. * * @see \Drupal\libraries\ExternalLibrary\Asset\SingleAssetLibraryTrait::getJsAssets() */ protected function processJsAssets(array $assets) { // @todo Consider somehow caching the processed information. $processed_assets = []; // @todo Somehow consolidate this with getCssAssets(). foreach ($assets as $filename => $options) { $processed_assets[$this->getPathPrefix() . '/' . $filename] = $options; } return $processed_assets; } }