|
10 | 10 | namespace Nette\Bridges\ApplicationLatte; |
11 | 11 |
|
12 | 12 | use Latte; |
| 13 | +use Latte\Compiler\Nodes\Php\Expression\AuxiliaryNode; |
13 | 14 | use Latte\Compiler\Nodes\TemplateNode; |
| 15 | +use Latte\Compiler\Tag; |
| 16 | +use Latte\Essential\Nodes\ExtendsNode; |
14 | 17 | use Nette; |
15 | 18 | use Nette\Application\UI; |
16 | 19 |
|
@@ -64,6 +67,8 @@ public function getTags(): array |
64 | 67 | 'templatePrint' => [Nodes\TemplatePrintNode::class, 'create'], |
65 | 68 | 'snippet' => [Nodes\SnippetNode::class, 'create'], |
66 | 69 | 'snippetArea' => [Nodes\SnippetAreaNode::class, 'create'], |
| 70 | + 'layout' => [$this, 'createExtendsNode'], |
| 71 | + 'extends' => [$this, 'createExtendsNode'], |
67 | 72 | ]; |
68 | 73 | } |
69 | 74 |
|
@@ -106,4 +111,15 @@ private function findNonce(Nette\Http\IResponse $httpResponse): ?string |
106 | 111 | ?: $httpResponse->getHeader('Content-Security-Policy-Report-Only'); |
107 | 112 | return preg_match('#\s\'nonce-([\w+/]+=*)\'#', (string) $header, $m) ? $m[1] : null; |
108 | 113 | } |
| 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 | + } |
109 | 125 | } |
0 commit comments