Skip to content

Commit

Permalink
improve asset config handling / add template fallback (#199)
Browse files Browse the repository at this point in the history
  • Loading branch information
solverat committed Aug 3, 2023
1 parent 3eeabfd commit c7a8a1d
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 9 deletions.
7 changes: 6 additions & 1 deletion docs/90_Headless.md
Expand Up @@ -73,6 +73,8 @@ toolbox:
slide_calculator: ToolboxBundle\Calculator\Bootstrap4\SlideColumnCalculator # or your custom headless calculator. slide columns aren't supported right now, so it doesn't matter which service you're using
```

***

## Headless Documents
It's possible to create simple headless documents:

Expand All @@ -97,7 +99,10 @@ toolbox:
type: areablock
```

Add `ToolboxBundle\Controller\HeadlessController::headlessDocumentAction` as action to your document.
- Add `ToolboxBundle\Controller\HeadlessController::headlessDocumentAction` as action to your document.
- Add a text property to the document called `headless_document` and set `index` as value. You can create multiple documents that way.

***

## Extend existing headless editables
Just register an event listener to `ToolboxBundle::HEADLESS_EDITABLE_ACTION` which will provide you an `HeadlessEditableActionEvent` object
Expand Down
5 changes: 4 additions & 1 deletion src/ToolboxBundle/Builder/InlineConfigBuilder.php
Expand Up @@ -29,7 +29,10 @@ public function buildInlineConfiguration(Info $info, string $brickId, array $are

foreach ($items as $item) {
$configurationView[] = $this->templating->render(
'@Toolbox/admin/inline_config/editable.html.twig',
$this->templating->resolveTemplate([
sprintf('@Toolbox/admin/inline_config/editable_%s.html.twig', $item['type']),
'@Toolbox/admin/inline_config/editable.html.twig'
]),
[
'item' => $item,
'editable' => $this->buildEditable($info, $item, $editMode)
Expand Down
8 changes: 7 additions & 1 deletion src/ToolboxBundle/Controller/HeadlessController.php
Expand Up @@ -11,6 +11,12 @@ class HeadlessController extends FrontendController
{
public function headlessDocumentAction(Request $request, HeadlessDocumentResolver $headlessDocumentResolver): Response
{
return $headlessDocumentResolver->resolveDocument($request, $this->document, 'index');
$headlessDocumentName = $this->document->getProperty('headless_document');

if ($headlessDocumentName === null) {
$headlessDocumentName = 'index';
}

return $headlessDocumentResolver->resolveDocument($request, $this->document, $headlessDocumentName);
}
}
Expand Up @@ -29,6 +29,15 @@ public function resolveDocument(Request $request, Document $document, string $he
$editMode = $this->editmodeResolver->isEditmode($request);
$headlessDocumentConfig = $this->configManager->getHeadlessDocumentConfig($headlessDocumentName);

if (empty($headlessDocumentConfig)) {

$message = sprintf('Headless document definition "%s" not found', $headlessDocumentName);

return $editMode
? new Response($message, 500)
: new JsonResponse(['message' => $message], 500);
}

if ($editMode === true) {
return $this->buildEditModeOutput($document, $headlessDocumentName, $headlessDocumentConfig['areas']);
}
Expand Down
4 changes: 3 additions & 1 deletion src/ToolboxBundle/Resources/public/css/admin.css
Expand Up @@ -726,10 +726,12 @@ body > .single-teaser img {
}

.toolbox-headless .inline-config-area .inline-config-node .inline-config-label {
font: 400 13px/16px 'Open Sans', 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
padding: 3px;
margin: 5px 0;
display: block;
color: #645081;
text-transform: uppercase;
}

.toolbox-headless .inline-config-area .inline-config-node .inline-config-label .inline-config-icon {
Expand All @@ -739,7 +741,7 @@ body > .single-teaser img {
position: relative;
text-indent: -9999px;
vertical-align: middle;
font-size: 7px;
font-size: 9px;
transform: scale(1);
margin: 0 10px 0 0;
}
Expand Down
@@ -1,4 +1,5 @@
<div class="inline-config-node">
{% set additinal_node_classes = config_node_classes|default('') %}
<div class="inline-config-node {{ additinal_node_classes }}">
{% if item.label is not empty %}
<span class="inline-config-label"><i class="inline-config-icon"></i>{{ item.label }}</span>
{% endif %}
Expand Down
16 changes: 12 additions & 4 deletions src/ToolboxBundle/Service/AssetService.php
Expand Up @@ -18,6 +18,10 @@ public function generateImageThumbnailFromEditable(Editable\Image $image, ?strin
{
$thumbnail = $image->getThumbnail($thumbnailName);

if ($thumbnail === '') {
$thumbnail = null;
}

return $this->buildAssetData($image->getImage(), $thumbnail, $thumbnailOptions);
}

Expand All @@ -28,8 +32,12 @@ public function generateImageThumbnail(Asset\Image $asset, ?string $thumbnailNam
return $this->buildAssetData($asset, $thumbnail, $thumbnailOptions);
}

private function buildAssetData(Asset $asset, Image\Thumbnail $thumbnail, array $options): array
private function buildAssetData(?Asset\Image $asset, ?Image\Thumbnail $thumbnail, array $options): array
{
if(!$asset instanceof Asset\Image) {
return [];
}

$title = $asset->getMetadata('title');
$description = $asset->getMetadata('description');
$copyright = $asset->getMetadata('copyright');
Expand All @@ -38,9 +46,9 @@ private function buildAssetData(Asset $asset, Image\Thumbnail $thumbnail, array
'title' => $title,
'description' => $description,
'copyright' => $copyright,
'markup' => $thumbnail->getHtml($options),
'mediaList' => $this->parseThumbnailPictureList($thumbnail, $options),
'path' => $thumbnail->getFrontendPath(),
'markup' => $thumbnail?->getHtml($options),
'mediaList' => $thumbnail === null ? null : $this->parseThumbnailPictureList($thumbnail, $options),
'path' => $thumbnail?->getFrontendPath(),
'lowQualityPlaceholder' => $this->parseLowQualityPlaceholder($asset),
];
}
Expand Down

0 comments on commit c7a8a1d

Please sign in to comment.