Skip to content

Commit 0729ede

Browse files
committed
Latte: {layout auto} always call Presenter::findLayoutTemplateFile()
1 parent 32db4c2 commit 0729ede

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/Bridges/ApplicationLatte/UIExtension.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
namespace Nette\Bridges\ApplicationLatte;
1111

1212
use Latte;
13+
use Latte\Compiler\Nodes\Php\Expression\AuxiliaryNode;
1314
use Latte\Compiler\Nodes\TemplateNode;
15+
use Latte\Compiler\Tag;
16+
use Latte\Essential\Nodes\ExtendsNode;
1417
use Nette;
1518
use Nette\Application\UI;
1619

@@ -64,6 +67,8 @@ public function getTags(): array
6467
'templatePrint' => [Nodes\TemplatePrintNode::class, 'create'],
6568
'snippet' => [Nodes\SnippetNode::class, 'create'],
6669
'snippetArea' => [Nodes\SnippetAreaNode::class, 'create'],
70+
'layout' => [$this, 'createExtendsNode'],
71+
'extends' => [$this, 'createExtendsNode'],
6772
];
6873
}
6974

@@ -106,4 +111,15 @@ private function findNonce(Nette\Http\IResponse $httpResponse): ?string
106111
?: $httpResponse->getHeader('Content-Security-Policy-Report-Only');
107112
return preg_match('#\s\'nonce-([\w+/]+=*)\'#', (string) $header, $m) ? $m[1] : null;
108113
}
114+
115+
116+
public static function createExtendsNode(Tag $tag): ExtendsNode
117+
{
118+
$auto = $tag->parser->stream->is('auto');
119+
$node = ExtendsNode::create($tag);
120+
if ($auto) {
121+
$node->extends = new AuxiliaryNode(fn() => '$this->global->uiPresenter->findLayoutTemplateFile()');
122+
}
123+
return $node;
124+
}
109125
}

tests/Bridges.Latte3/Template.getParentName().phpt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,11 @@ Assert::exception(
7373
LogicException::class, // missing template
7474
);
7575
Assert::same('layout.latte', $template->getParentName());
76+
77+
78+
$latte->setLoader(new Latte\Loaders\StringLoader([
79+
'main.latte' => '{extends foo.latte}',
80+
'foo.latte' => '{extends auto}',
81+
'layout.latte' => 'layout',
82+
]));
83+
Assert::same('layout', $template = $latte->renderToString('main.latte'));

0 commit comments

Comments
 (0)