Further modules included.
[yaffs-website] / web / modules / contrib / libraries / src / ExternalLibrary / Asset / LocalRemoteAssetTrait.php
diff --git a/web/modules/contrib/libraries/src/ExternalLibrary/Asset/LocalRemoteAssetTrait.php b/web/modules/contrib/libraries/src/ExternalLibrary/Asset/LocalRemoteAssetTrait.php
new file mode 100644 (file)
index 0000000..e673cab
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+namespace Drupal\libraries\ExternalLibrary\Asset;
+
+/**
+ * A trait for asset libraries that serve local and remote files.
+ *
+ * If the library files are available locally, they are served locally.
+ * Otherwise, the remote files are served, assuming a remote URL is specified.
+ *
+ * This trait should only be used in classes implementing LocalLibraryInterface
+ * and RemoteLibraryInterface.
+ *
+ * @see \Drupal\libraries\ExternalLibrary\Local\LocalLibraryInterface
+ * @see \Drupal\libraries\ExternalLibrary\Remote\RemoteLibraryInterface
+ */
+trait LocalRemoteAssetTrait {
+
+  /**
+   * Checks whether this library can be attached.
+   *
+   * @return bool
+   *   TRUE if the library can be attached; FALSE otherwise.
+   *
+   * @see \Drupal\libraries\ExternalLibrary\Asset\SingleAssetLibraryTrait::canBeAttached()
+   */
+  protected function canBeAttached() {
+    /** @var \Drupal\libraries\ExternalLibrary\Local\LocalLibraryInterface|\Drupal\libraries\ExternalLibrary\Remote\RemoteLibraryInterface $this */
+    return ($this->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;
+  }
+
+}