From 67c4908d92c555882b2b146ea4838adc357ba5f4 Mon Sep 17 00:00:00 2001
From: Antonio De Marco <antonio@nuvole.org>
Date: Wed, 12 Apr 2017 16:25:55 +0200
Subject: [PATCH] Update documentation and provide update hook #80

---
 README.md                                     |  29 +++++++++++-------
 docs/content/layout-plugin.rst                |   7 ++---
 docs/content/patterns-definition.rst          |  13 ++++++--
 docs/images/patterns-overview.png             | Bin 0 -> 22338 bytes
 docs/index.rst                                |  21 ++++++-------
 modules/ui_patterns_layouts/README.md         |   7 ++++-
 .../ui_patterns_layouts.info.yml              |   2 +-
 .../ui_patterns_layouts.install               |  18 +++++++++++
 .../ui_patterns_layouts.module                |   1 +
 src/Plugin/Deriver/AbstractDeriver.php        |   2 +-
 tests/composer.json                           |   1 -
 ui_patterns.info.yml                          |   2 ++
 12 files changed, 71 insertions(+), 32 deletions(-)
 create mode 100644 docs/images/patterns-overview.png
 create mode 100644 modules/ui_patterns_layouts/ui_patterns_layouts.install

diff --git a/README.md b/README.md
index c2591b2bd..eb0256b3d 100644
--- a/README.md
+++ b/README.md
@@ -9,24 +9,31 @@ Define and expose self-contained UI patterns as Drupal plugins and use them seam
 [panels](https://www.drupal.org/project/panels), [field groups](https://www.drupal.org/project/field_group), views,
 [Display Suite](https://www.drupal.org/project/ds) view modes and field templates. 
 
-The module generates a pattern library page to be used as documentation for content editors or as a showcase for 
-business and clients.
-
 The UI Patterns module also integrates with with tools like [PatternLab](http://patternlab.io/) or modules like 
 [Component Libraries](https://www.drupal.org/project/components) thanks to 
 [definition overrides](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/patterns-definition.html#override-patterns-behavior).
 
-![Showcase page example](https://raw.githubusercontent.com/nuvoleweb/ui_patterns/8.x-1.x/docs/images/pattern-library.png)
+![Overview](https://raw.githubusercontent.com/nuvoleweb/ui_patterns/8.x-1.x/docs/images/patterns-overview.png)
 
 ## Project overview
 
-The UI Patterns project provides 5 modules:
-
-- **UI Patterns**: the main module, its purpose is to expose patterns to the Drupal rendering system and provide a pattern library overview page, available at `/patterns`. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/patterns-definition.html)
-- **UI Patterns Field Group**: allows to use patterns to format field groups provided by the [Field group](https://www.drupal.org/project/field_group) module. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/field-group.html)
-- **UI Patterns Layouts**: allows to use patterns as layouts provided by the [Layout plugin](https://www.drupal.org/project/layout_plugin) module. This allows patterns to be used on [Display Suite](https://www.drupal.org/project/ds) view modes or on [panels](https://www.drupal.org/project/panels) out of the box. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/layout-plugin.html)
-- **UI Patterns Display Suite**: allows to use patterns to format [Display Suite](https://www.drupal.org/project/ds) field templates. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/field-templates.html)
-- **UI Patterns Views**: allows to use patterns as Views row templates. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/views.html)
+The UI Patterns project provides 6 modules:
+
+- **UI Patterns**: the main module, it exposes the UI Patterns system APIs and it does not do much more than that.
+- **UI Patterns Library**: allows to define patterns via YAML and generates a pattern library page available at `/patterns`
+  to be used as documentation for content editors or as a showcase for business. Use this module if you don't plan to
+  use more advanced component library systems such as PatternLab or Fractal.  
+  [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/patterns-definition.html)
+- **UI Patterns Field Group**: allows to use patterns to format field groups provided by the
+  [Field group](https://www.drupal.org/project/field_group) module.
+  [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/field-group.html)
+- **UI Patterns Layouts**: allows to use patterns as layouts. This allows patterns to be used on
+  [Display Suite](https://www.drupal.org/project/ds) view modes or on [panels](https://www.drupal.org/project/panels) 
+  out of the box. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/layout-plugin.html)
+- **UI Patterns Display Suite**: allows to use patterns to format [Display Suite](https://www.drupal.org/project/ds)
+  field templates. [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/field-templates.html)
+- **UI Patterns Views**: allows to use patterns as Views row templates.
+  [Learn more](http://ui-patterns.readthedocs.io/en/8.x-1.x/content/views.html)
 
 ## Try it out!
 
diff --git a/docs/content/layout-plugin.rst b/docs/content/layout-plugin.rst
index f2cd0e871..188bfad3f 100644
--- a/docs/content/layout-plugin.rst
+++ b/docs/content/layout-plugin.rst
@@ -1,8 +1,7 @@
-Use patterns with Layout Plugin
-===============================
+Use patterns as layouts
+=======================
 
-Patterns can be used as `Layout Plugin <https://www.drupal.org/project/layout_plugin>`_'s layouts thanks to the
-``ui_patterns_layouts`` module.
+Patterns can be used as layouts thanks to the ``ui_patterns_layouts`` module.
 
 Once exposed as layouts patterns can be used to arrange fields on entities like nodes,
 `paragraphs <https://www.drupal.org/project/paragraphs>`_, etc. or to place blocks on a page using
diff --git a/docs/content/patterns-definition.rst b/docs/content/patterns-definition.rst
index 8e77f78d5..f3916c42b 100644
--- a/docs/content/patterns-definition.rst
+++ b/docs/content/patterns-definition.rst
@@ -1,8 +1,17 @@
 Define your patterns
 ====================
 
-Patterns can be exposed by both modules and themes: all defined patterns are collected and managed by a centralized
-plugin manager, this means that pattern IDs must be unique in order to avoid conflicts.
+Patterns can be exposed by both modules and themes by enabling the ``ui_patterns_library`` module.
+
+Defined patterns will be available at ``/patterns``, only accessible by roles having the ``access patterns page``
+permission. Below an example of a pattern library page styled using the `Bootstrap Patterns <https://github.com/nuvoleweb/bootstrap_patterns>`_
+theme:
+
+.. image:: ../images/pattern-library.png
+   :align: center
+
+Pattern definitions
+-------------------
 
 To define your patterns simply create a YAML file named ``MY_MODULE.ui_patterns.yml`` or ``MY_THEME.ui_patterns.yml``
 and list them using the following format:
diff --git a/docs/images/patterns-overview.png b/docs/images/patterns-overview.png
new file mode 100644
index 0000000000000000000000000000000000000000..bbe945f9adfe0f4231aa945835f32cd5084f43d5
GIT binary patch
literal 22338
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

literal 0
HcmV?d00001

diff --git a/docs/index.rst b/docs/index.rst
index 1a13eee8b..90ff16691 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -5,31 +5,30 @@ The UI Patterns module allows developers to define self-contained UI patterns as
 in their `panels <https://www.drupal.org/project/panels>`_, `field groups <https://www.drupal.org/project/field_group>`_
 or `Display Suite <https://www.drupal.org/project/ds>`_  view modes.
 
-The module also generates a pattern library page to be used as documentation for content editors or as a showcase
-for business like the one shown below:
-
-.. image:: images/pattern-library.png
+.. image:: images/patterns-overview.png
    :align: center
 
 Project overview
 ----------------
 
-The UI Patterns project provides 5 modules:
+The UI Patterns project provides 6 modules:
 
-* **UI Patterns**: the main module, its purpose is to expose patterns to the Drupal rendering system and provide a
-  pattern library overview page, available at ``/patterns``.
+* **UI Patterns**: the main module, it exposes the UI Patterns system APIs and it does not do much more than that.
+* **UI Patterns Library**: allows to define patterns via YAML and generates a pattern library page available at ``/patterns``
+  to be used as documentation for content editors or as a showcase for business. Use this module if you don't plan to
+  use more advanced component library systems such as PatternLab or Fractal.
+  `Learn more <http://ui-patterns.readthedocs.io/en/8.x-1.x/content/patterns-definition.html>`_
 * **UI Patterns Field Group**: allows to use patterns to format field groups
   provided by the `Field group <https://www.drupal.org/project/field_group>`_ module.
-* **UI Patterns Layouts**: allows to use patterns as layouts provided by the
-  `Layout plugin <https://www.drupal.org/project/layout_plugin>`_ module. This allows patterns to be used on
+* **UI Patterns Layouts**: allows to use patterns as layouts. This allows patterns to be used on
   `Display Suite <https://www.drupal.org/project/ds>`_  view modes or on `panels <https://www.drupal.org/project/panels>`_
   out of the box.
 * **UI Patterns Display Suite**: allows to use patterns to format `Display Suite <https://www.drupal.org/project/ds>`_
   field templates.
 * **UI Patterns Views**: allows to use patterns as Views row templates.
 
-By the way plugin definitions are handled the UI Patterns module also integrated with with tools like `PatternLab <http://patternlab.io/>`_
-or modules like `Component Libraries <https://www.drupal.org/project/components>`_.
+By the way plugin definitions are handled the UI Patterns module also integrates with with tools like
+`PatternLab <http://patternlab.io/>`_ or modules like `Component Libraries <https://www.drupal.org/project/components>`_.
 
 Try it out
 ^^^^^^^^^^
diff --git a/modules/ui_patterns_layouts/README.md b/modules/ui_patterns_layouts/README.md
index f700c9499..f133c8dc5 100644
--- a/modules/ui_patterns_layouts/README.md
+++ b/modules/ui_patterns_layouts/README.md
@@ -1,7 +1,12 @@
 # UI Patterns Layouts
 
-Integrates UI Patterns with the [Layout Plugin](https://www.drupal.org/project/layout_plugin) module.
+Integrates UI Patterns with the **Layout Discovery** core module.
 
 - To use pattern layouts on view modes install the [Display Suite](https://www.drupal.org/project/ds) module.
 - To use pattern layouts with [Page Manager](https://www.drupal.org/project/page_manager) 
   install the [Panels](https://www.drupal.org/project/panels) module.
+
+## Note
+
+Integration with the [Layout Plugin](https://www.drupal.org/project/layout_plugin) module is supported only until
+version 1.0-beta6 included.
diff --git a/modules/ui_patterns_layouts/ui_patterns_layouts.info.yml b/modules/ui_patterns_layouts/ui_patterns_layouts.info.yml
index 400df9910..2f50d90c1 100644
--- a/modules/ui_patterns_layouts/ui_patterns_layouts.info.yml
+++ b/modules/ui_patterns_layouts/ui_patterns_layouts.info.yml
@@ -1,6 +1,6 @@
 name: UI Patterns Layouts
 type: module
-description: Use patterns as layout plugins.
+description: Use patterns as layouts via the Layout Discovery module.
 core: 8.x
 package: User interface
 dependencies:
diff --git a/modules/ui_patterns_layouts/ui_patterns_layouts.install b/modules/ui_patterns_layouts/ui_patterns_layouts.install
new file mode 100644
index 000000000..8e66bd86e
--- /dev/null
+++ b/modules/ui_patterns_layouts/ui_patterns_layouts.install
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @file
+ * Contains install file.
+ */
+
+/**
+ * Uninstall layout_plugin and install layout_discovery.
+ */
+function ui_patterns_layouts_update_8001() {
+  /** @var \Drupal\Core\Extension\ModuleInstaller $installer */
+  $installer = \Drupal::service('module_installer');
+  $installer->uninstall(['layout_plugin']);
+  $installer->install(['layout_discovery']);
+}
+
+
diff --git a/modules/ui_patterns_layouts/ui_patterns_layouts.module b/modules/ui_patterns_layouts/ui_patterns_layouts.module
index 27b4bdbd1..c1f7d3c7a 100644
--- a/modules/ui_patterns_layouts/ui_patterns_layouts.module
+++ b/modules/ui_patterns_layouts/ui_patterns_layouts.module
@@ -13,6 +13,7 @@ use Drupal\Core\Layout\LayoutDefinition;
  */
 function ui_patterns_layouts_layout_alter(&$definitions) {
   // @todo: Use layout deriver instead.
+  // @link https://github.com/nuvoleweb/ui_patterns/issues/94
   $pattern_definitions = \Drupal::service('plugin.manager.ui_patterns')->getDefinitions();
   foreach ($pattern_definitions as $pattern_definition) {
     $definition = [
diff --git a/src/Plugin/Deriver/AbstractDeriver.php b/src/Plugin/Deriver/AbstractDeriver.php
index c8af32002..ff0dece07 100644
--- a/src/Plugin/Deriver/AbstractDeriver.php
+++ b/src/Plugin/Deriver/AbstractDeriver.php
@@ -12,7 +12,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *
  * @package Drupal\ui_patterns\Deriver
  */
-abstract class AbstractDeriver extends DeriverBase implements DeriverInterface, ContainerDeriverInterface {
+abstract class AbstractDeriver extends DeriverBase implements ContainerDeriverInterface {
 
   /**
    * Typed data manager service.
diff --git a/tests/composer.json b/tests/composer.json
index 488ececda..e83f88b1a 100644
--- a/tests/composer.json
+++ b/tests/composer.json
@@ -9,7 +9,6 @@
     "drupal/core": "~8",
     "drupal/console": "0.11.3",
     "drush/drush": "~8.0",
-    "drupal/layout_plugin": "~1",
     "drupal/ds": "~3",
     "drupal/field_group": "~1",
     "drupal/coffee": "~1",
diff --git a/ui_patterns.info.yml b/ui_patterns.info.yml
index 813c0b7c7..49e106b11 100644
--- a/ui_patterns.info.yml
+++ b/ui_patterns.info.yml
@@ -3,3 +3,5 @@ type: module
 description: UI patterns
 core: 8.x
 package: User interface
+dependencies:
+  - system (>=8.3.0)
-- 
GitLab