From 2af570a711e3f5f08d67bc180a8ce24da462d543 Mon Sep 17 00:00:00 2001
From: Antonio De Marco <antonio@nuvole.org>
Date: Sat, 23 Sep 2017 12:29:31 +0200
Subject: [PATCH] Issue #120: Add dependencies support for pattern libraries.

---
 docs/content/patterns-definition.rst                      | 2 ++
 .../templates/patterns/media/media.ui_patterns.yml        | 2 ++
 src/Plugin/PatternBase.php                                | 8 ++++----
 tests/features/overview.feature                           | 1 +
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/docs/content/patterns-definition.rst b/docs/content/patterns-definition.rst
index f3916c42b..64b692ee5 100644
--- a/docs/content/patterns-definition.rst
+++ b/docs/content/patterns-definition.rst
@@ -43,6 +43,8 @@ and list them using the following format:
        - pattern_library_two:
           js:
             js/library_two.js: {}
+          dependencies:
+            - core/jquery
 
 Let's break this down:
 
diff --git a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
index 95014db56..00af1a5bc 100644
--- a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
+++ b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
@@ -36,3 +36,5 @@ media:
         js:
           js/media1.js: {}
           js/media2.js: {}
+        dependencies:
+          - core/drupal.tabledrag
diff --git a/src/Plugin/PatternBase.php b/src/Plugin/PatternBase.php
index 1dc9ba088..c0ad45130 100644
--- a/src/Plugin/PatternBase.php
+++ b/src/Plugin/PatternBase.php
@@ -96,14 +96,14 @@ abstract class PatternBase extends PluginBase implements PatternInterface, Conta
   /**
    * Process libraries.
    *
-   * @param array $libraries
-   *    Libraries array.
+   * @param array|string $libraries
+   *    List of dependencies or "dependencies:" root property.
    * @param string $base_path
    *    Pattern base path.
    * @param string $parent
    *    Item parent set in previous recursive iteration, if any.
    */
-  protected function processLibraries(array &$libraries, $base_path, $parent = '') {
+  protected function processLibraries(&$libraries, $base_path, $parent = '') {
     $parents = ['js', 'base', 'layout', 'component', 'state', 'theme'];
     $_libraries = $libraries;
     foreach ($_libraries as $name => $values) {
@@ -113,7 +113,7 @@ abstract class PatternBase extends PluginBase implements PatternInterface, Conta
         $libraries[$base_path . DIRECTORY_SEPARATOR . $name] = $values;
         unset($libraries[$name]);
       }
-      elseif (!$is_asset) {
+      elseif (!$is_asset && ($parent != 'dependencies')) {
         $this->processLibraries($libraries[$name], $base_path, $name);
       }
     }
diff --git a/tests/features/overview.feature b/tests/features/overview.feature
index ca592b085..2c67b1378 100644
--- a/tests/features/overview.feature
+++ b/tests/features/overview.feature
@@ -69,6 +69,7 @@ Feature: Overview
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/css/media2.css"
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/js/media1.js"
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/js/media2.js"
+    And the response should contain "/misc/tabledrag.js"
 
   Scenario: Patterns overview page will show validation errors after clearing the cache.
     Given I am logged in as a user with the "access patterns page" permission
-- 
GitLab