Skip to content
Snippets Groups Projects
Commit 00f82d7e authored by Samuel Mortenson's avatar Samuel Mortenson Committed by Sam Mortenson
Browse files

Issue #3353106 by samuel.mortenson: The SFC Dev library should be fullscreen

parent 3571d5ec
No related branches found
Tags 8.x-1.11
No related merge requests found
......@@ -556,6 +556,9 @@ To help with debugging and testing components, you can enable the sfc_dev
sub-module. Currently the main feature it provides is a component library,
which is accessible at `/sfc/library` if you have the `use sfc dev` permission.
If you want to filter down to a specific component group, you can visit
`/sfc/library/{group}`, where `{group}` is a case-sensitive search string.
Since this user interface allows you to enter Twig, the `use sfc dev`
permission should only be given to trusted users.
......
......@@ -5,6 +5,27 @@ sfc_dev.library:
_title: 'Single File Component Library'
requirements:
_permission: 'use sfc dev'
sfc_dev.library_group:
path: '/sfc/library/{group}'
defaults:
_controller: '\Drupal\sfc_dev\Controller\ComponentDevController:library'
_title: 'Single File Component Library'
requirements:
_permission: 'use sfc dev'
sfc_dev.library_base:
path: '/sfc/library-main'
defaults:
_controller: '\Drupal\sfc_dev\Controller\ComponentDevController:libraryBase'
_title: 'Single File Component Library'
requirements:
_permission: 'use sfc dev'
sfc_dev.library_base_group:
path: '/sfc/library-main/{group}'
defaults:
_controller: '\Drupal\sfc_dev\Controller\ComponentDevController:libraryBase'
_title: 'Single File Component Library'
requirements:
_permission: 'use sfc dev'
sfc_dev.library_preview:
path: '/sfc/library/preview/{plugin_id}'
defaults:
......
......@@ -12,6 +12,7 @@ use Drupal\sfc_dev\Ajax\RefreshComponentAssetsCommand;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Render\BareHtmlPageRendererInterface;
/**
* Contains routes for the sfc_dev module.
......@@ -32,6 +33,13 @@ class ComponentDevController extends ControllerBase {
*/
protected $assetResolver;
/**
* The bare HTML page renderer.
*
* @var \Drupal\Core\Render\BareHtmlPageRendererInterface
*/
protected $bareHtmlPageRenderer;
/**
* ComponentDevController constructor.
*
......@@ -39,10 +47,16 @@ class ComponentDevController extends ControllerBase {
* The component plugin manager.
* @param \Drupal\Core\Asset\AssetResolverInterface $asset_resolver
* The asset resolver.
* @param \Drupal\Core\Render\BareHtmlPageRendererInterface|null $bare_html_page_renderer
* The bare HTML page renderer.
*/
public function __construct(PluginManagerInterface $manager, AssetResolverInterface $asset_resolver) {
public function __construct(PluginManagerInterface $manager, AssetResolverInterface $asset_resolver, BareHtmlPageRendererInterface $bare_html_page_renderer = NULL) {
$this->manager = $manager;
$this->assetResolver = $asset_resolver;
if (!$bare_html_page_renderer) {
$bare_html_page_renderer = \Drupal::service('bare_html_page_renderer');
}
$this->bareHtmlPageRenderer = $bare_html_page_renderer;
}
/**
......@@ -51,24 +65,28 @@ class ComponentDevController extends ControllerBase {
public static function create(ContainerInterface $container) {
return new static(
$container->get('plugin.manager.single_file_component'),
$container->get('asset.resolver')
$container->get('asset.resolver'),
$container->get('bare_html_page_renderer')
);
}
/**
* Displays the component library.
* Displays the component library in a normal page.
*
* @param string $group
* A group to filter by, if provided.
*
* @return array
* A render array.
*/
public function library() {
public function libraryBase($group = NULL) {
$grouped_definitions = [];
foreach ($this->manager->getDefinitions() as $plugin_id => $definition) {
$id = isset($definition['alt_id']) ? $definition['alt_id'] : $plugin_id;
if (isset($definition['group'])) {
if (isset($definition['group']) && (!$group || strpos($definition['group'], $group) !== FALSE)) {
$grouped_definitions[$definition['group']][$id] = $definition;
}
else {
elseif (!$group) {
$grouped_definitions['Other'][$id] = $definition;
}
}
......@@ -85,6 +103,19 @@ class ComponentDevController extends ControllerBase {
];
}
/**
* Displays the component library in full screen.
*
* @param string $group
* A group to filter by, if provided.
*
* @return \Drupal\Core\Render\HtmlResponse
* A rendered HTML response.
*/
public function library($group = NULL) {
return $this->bareHtmlPageRenderer->renderBarePage($this->libraryBase($group), 'Single File Component Library', 'sfc_dev_library', []);
}
/**
* AJAX callback for refreshing the library preview.
*
......
......@@ -96,7 +96,7 @@ class ComponentDevControllerTest extends KernelTestBase {
'id' => 'four',
],
],
], $controller->library()['#context']['grouped_definitions']);
], $controller->libraryBase()['#context']['grouped_definitions']);
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment