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). - + ## 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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�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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