Skip to content

Commit 1d17480

Browse files
committed
UIMacros: added macro {templatePrint}
1 parent 88a4a9e commit 1d17480

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Nette Framework (https://nette.org)
5+
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace Nette\Bridges\ApplicationLatte;
11+
12+
use Latte;
13+
use Latte\Runtime\TemplatePrinter as LattePrinter;
14+
use Nette;
15+
use Nette\Application\UI\Presenter;
16+
use Nette\PhpGenerator as Php;
17+
18+
19+
/**
20+
* Generates blueprint of template class.
21+
*/
22+
final class TemplatePrinter
23+
{
24+
use Nette\SmartObject;
25+
26+
public function print(Latte\Runtime\Template $template, string $name = null): Php\PhpNamespace
27+
{
28+
$params = $template->getParameters();
29+
if ($template->getParameter('control') instanceof Presenter) {
30+
unset($params['control']);
31+
$subject = $template->getParameter('presenter');
32+
$name = $name ?: preg_replace('#Presenter$#', '', get_class($subject)) . ucfirst($subject->getView()) . 'Template';
33+
} else {
34+
unset($params['presenter']);
35+
$subject = $template->getParameter('control');
36+
$name = $name ?: preg_replace('#Control$#', '', get_class($subject)) . 'Template';
37+
}
38+
unset($params['user'], $params['baseUrl'], $params['basePath'], $params['flashes']);
39+
40+
$funcs = $template->global->_fn->getAll();
41+
unset($funcs['isLinkCurrent'], $funcs['isModuleCurrent'], $funcs['translate']);
42+
43+
$namespace = new Php\PhpNamespace(Php\Helpers::extractNamespace($name));
44+
$class = $namespace->addClass(Php\Helpers::extractShortName($name));
45+
46+
$printer = new LattePrinter;
47+
$printer->addProperties($class, $params, true);
48+
$printer->addProperties($class, $params, false);
49+
$printer->addFunctions($class, $funcs);
50+
return $namespace;
51+
}
52+
}

src/Bridges/ApplicationLatte/UIMacros.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public static function install(Latte\Compiler $compiler): void
4444
$me->addMacro('extends', [$me, 'macroExtends']);
4545
$me->addMacro('layout', [$me, 'macroExtends']);
4646
$me->addMacro('nonce', null, null, 'echo $this->global->uiNonce ? " nonce=\"{$this->global->uiNonce}\"" : "";');
47+
$me->addMacro('templatePrint', [$me, 'macroTemplatePrint'], null, null, self::ALLOWED_IN_HEAD);
4748
}
4849

4950

@@ -147,4 +148,14 @@ public function macroExtends(MacroNode $node, PhpWriter $writer)
147148
}
148149
$this->extends = $writer->write('$this->parentName = $this->global->uiPresenter->findLayoutTemplateFile();');
149150
}
151+
152+
153+
/**
154+
* {templatePrint [ClassName]}
155+
*/
156+
public function macroTemplatePrint(MacroNode $node, PhpWriter $writer)
157+
{
158+
$class = $node->tokenizer->fetchWord() ?: null;
159+
return $writer->write('@ob_end_clean(); header("Content-Type: text/plain"); echo (new Nette\Bridges\ApplicationLatte\TemplatePrinter)->print($this, %var); exit;', $class);
160+
}
150161
}

0 commit comments

Comments
 (0)