diff --git a/modules/ui_patterns_library/src/Controller/PatternsLibraryController.php b/modules/ui_patterns_library/src/Controller/PatternsLibraryController.php index 132d266303e3ced3728c3f96fbb2638af29adf48..3c7d3d5d85dfbacc2e8e2ef6bab19d77ebb9b431 100644 --- a/modules/ui_patterns_library/src/Controller/PatternsLibraryController.php +++ b/modules/ui_patterns_library/src/Controller/PatternsLibraryController.php @@ -54,12 +54,34 @@ class PatternsLibraryController extends ControllerBase { * Return render array. */ public function single($name) { + /** @var \Drupal\ui_patterns\Definition\PatternDefinition $definition */ + $definition = []; - $definition['rendered']['#type'] = 'pattern_preview'; - $definition['rendered']['#id'] = $name; $definition['meta']['#theme'] = 'patterns_meta_information'; $definition['meta']['#pattern'] = $this->patternsManager->getDefinition($name)->toArray(); + if ($this->patternsManager->getDefinition($name)->hasVariants()) { + $variants = $this->patternsManager->getDefinition($name)->getVariants(); + $definition['meta']['#variant'] = $variants; + + foreach ($variants as $id => $variant) { + $preview = []; + $preview['rendered']['#type'] = 'pattern_preview'; + $preview['rendered']['#id'] = $name; + $preview['rendered']['#variant'] = $id; + $preview['meta']['#variant'] = $variant->toArray(); + + $definition['previews'][$id] = $preview; + } + } + else { + $preview = []; + $preview['rendered']['#type'] = 'pattern_preview'; + $preview['rendered']['#id'] = $name; + + $definition['previews'][] = $preview; + } + return [ '#theme' => 'patterns_single_page', '#pattern' => $definition, @@ -76,12 +98,32 @@ class PatternsLibraryController extends ControllerBase { /** @var \Drupal\ui_patterns\Definition\PatternDefinition $definition */ $definitions = []; - foreach ($this->patternsManager->getDefinitions() as $id => $definition) { - $definitions[$id] = $definition->toArray(); - $definitions[$id]['rendered']['#type'] = 'pattern_preview'; - $definitions[$id]['rendered']['#id'] = $definition->id(); - $definitions[$id]['meta']['#theme'] = 'patterns_meta_information'; - $definitions[$id]['meta']['#pattern'] = $definition->toArray(); + foreach ($this->patternsManager->getDefinitions() as $id_pattern => $definition) { + $definitions[$id_pattern] = $definition->toArray(); + $definitions[$id_pattern]['meta']['#theme'] = 'patterns_meta_information'; + $definitions[$id_pattern]['meta']['#pattern'] = $this->patternsManager->getDefinition($id_pattern)->toArray(); + + if ($this->patternsManager->getDefinition($id_pattern)->hasVariants()) { + $variants = $this->patternsManager->getDefinition($id_pattern)->getVariants(); + $definitions[$id_pattern]['meta']['#variant'] = $variants; + + foreach ($variants as $id_variant => $variant) { + $preview = []; + $preview['rendered']['#type'] = 'pattern_preview'; + $preview['rendered']['#id'] = $id_pattern; + $preview['rendered']['#variant'] = $id_variant; + $preview['meta']['#variant'] = $variant->toArray(); + + $definitions[$id_pattern]["previews"][$id_variant] = $preview; + } + } + else { + $preview = []; + $preview['rendered']['#type'] = 'pattern_preview'; + $preview['rendered']['#id'] = $id_pattern; + + $definitions[$id_pattern]["previews"][] = $preview; + } } return [ diff --git a/modules/ui_patterns_test/templates/button/pattern-button.html.twig b/modules/ui_patterns_test/templates/button/pattern-button.html.twig index 84df300bd92af18debba0bff8084a7cd73060bcb..e505158689c39eb314277dc34f2e7ca29c0909c8 100644 --- a/modules/ui_patterns_test/templates/button/pattern-button.html.twig +++ b/modules/ui_patterns_test/templates/button/pattern-button.html.twig @@ -4,4 +4,4 @@ * Button pattern. */ #} -<a href="{{ url }}" target="_blank" class="btn btn-primary button">{{ title }}</a> +<a href="{{ url }}" target="_blank" class="btn btn-{{ variant }} button">{{ title }}</a> diff --git a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-overview-page.html.twig b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-overview-page.html.twig index 1832f95d11585eaf6606dac30ec28ef241532565..d1f2bab188cc335f5f20878f087cde527b877e86 100644 --- a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-overview-page.html.twig +++ b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-overview-page.html.twig @@ -33,7 +33,11 @@ {# Rendered pattern preview. #} <div class="pattern-preview"> - {{ pattern.rendered }} + {% for variant in pattern.previews %} + <h3>{{ variant.meta['#variant'].label }}</h3><hr> + <span>{{ variant.meta['#variant'].description }}</span> + {{ variant.rendered }} + {% endfor %} </div> </div> {% endfor %} diff --git a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-single-page.html.twig b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-single-page.html.twig index 3f11283fdfb837dc8bf1e03d7f4ec765e6ee83d8..958f6d949cd22ba5b3cb6cc19c6233004d0c0739 100644 --- a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-single-page.html.twig +++ b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/patterns-single-page.html.twig @@ -10,7 +10,11 @@ {{ pattern.meta }} {# Rendered pattern preview. #} <div class="pattern-preview"> - {{ pattern.rendered }} + {% for variant in pattern.previews %} + <h3>{{ variant.meta['#variant'].label }}</h3><hr> + <span>{{ variant.meta['#variant'].description }}</span> + {{ variant.rendered }} + {% endfor %} </div> {% endif %} diff --git a/src/Definition/PatternDefinition.php b/src/Definition/PatternDefinition.php index 71f72202c930a0a7ed924d76ef9713bfde58f08d..69b14287e5ef4f9f915b15cc7ed36e4ad43cf80f 100644 --- a/src/Definition/PatternDefinition.php +++ b/src/Definition/PatternDefinition.php @@ -91,6 +91,7 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin foreach ($this->getVariants() as $variant) { $definition['variants'][$variant->getName()] = $variant->toArray(); } + return $definition; } diff --git a/src/Element/Pattern.php b/src/Element/Pattern.php index 1f8047597d6e43150ce39b9baeffcfc34335ff87..2d4b340ea7cc7c3e7ba24e7cc92ea699941b85e8 100644 --- a/src/Element/Pattern.php +++ b/src/Element/Pattern.php @@ -95,6 +95,11 @@ class Pattern extends RenderElement { else { $element['#markup'] = ''; } + + if (!isset($element['#variant'])) { + $element['#variant'] = ""; + } + return $element; } diff --git a/src/Plugin/PatternBase.php b/src/Plugin/PatternBase.php index 2cc71fd2dcde08f9978080c933c671b45c8975eb..bd773d96376b2573698e1fbba51bd8ca3f3b9e1e 100644 --- a/src/Plugin/PatternBase.php +++ b/src/Plugin/PatternBase.php @@ -157,6 +157,7 @@ abstract class PatternBase extends PluginBase implements PatternInterface, Conta } $return['variables']['attributes'] = []; $return['variables']['context'] = []; + $return['variables']['variant'] = ''; $return['variables']['use'] = ''; return $return; } diff --git a/src/Template/TwigExtension.php b/src/Template/TwigExtension.php index 6f1dd93fbbb1ca36d7a30fb86d34e4c255dc1920..a7d393d9b2e71113e29900b8c08ad0902f26e255 100644 --- a/src/Template/TwigExtension.php +++ b/src/Template/TwigExtension.php @@ -33,17 +33,20 @@ class TwigExtension extends \Twig_Extension { * Pattern ID. * @param array $fields * Pattern fields. + * @param string $variant + * Variant name. * * @return array * Pattern render array. * * @see \Drupal\ui_patterns\Element\Pattern */ - public function renderPattern($id, array $fields = []) { + public function renderPattern($id, array $fields = [], $variant = "") { return [ '#type' => 'pattern', '#id' => $id, '#fields' => $fields, + '#variant' => $variant, ]; } @@ -52,16 +55,19 @@ class TwigExtension extends \Twig_Extension { * * @param string $id * Pattern ID. + * @param string $variant + * Variant name. * * @return array * Pattern render array. * * @see \Drupal\ui_patterns\Element\Pattern */ - public function renderPatternPreview($id) { + public function renderPatternPreview($id, $variant = "") { return [ '#type' => 'pattern_preview', '#id' => $id, + '#variant' => $variant, ]; }