Skip to content

Commit 01aea7d

Browse files
committed
UIMacros: initialization moved to UIRuntime::initialize()
1 parent d34c560 commit 01aea7d

File tree

6 files changed

+39
-42
lines changed

6 files changed

+39
-42
lines changed

src/Bridges/ApplicationLatte/UIMacros.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,7 @@ public static function install(Latte\Compiler $compiler)
4545
*/
4646
public function finalize()
4747
{
48-
$prolog = '
49-
// snippets support
50-
if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($_g->includingBlock)) {
51-
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
52-
}';
53-
return [$prolog, ''];
48+
return ['if (Nette\Bridges\ApplicationLatte\UIRuntime::initialize($this)) return;', ''];
5449
}
5550

5651

src/Bridges/ApplicationLatte/UIRuntime.php

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use Nette;
1111
use Nette\Application\UI;
12+
use Latte;
1213

1314

1415
/**
@@ -19,25 +20,42 @@ class UIRuntime
1920
{
2021
use Nette\StaticClass;
2122

22-
public static function renderSnippets(UI\Control $control, \stdClass $local = NULL, array $params = [])
23+
24+
/**
25+
* @return bool
26+
*/
27+
public static function initialize(Latte\Template $template)
28+
{
29+
// snippet support
30+
$params = $template->params;
31+
if (empty($template->local->parentName) && !empty($params['_control']->snippetMode)) {
32+
$tmp = $template;
33+
while (in_array($tmp->getReferenceType(), ['extends', 'include', NULL], TRUE) && ($tmp = $tmp->getReferrer()));
34+
if (!$tmp) {
35+
self::renderSnippets($params['_control'], $template->blockQueue, $params);
36+
return TRUE;
37+
}
38+
};
39+
}
40+
41+
42+
public static function renderSnippets(UI\Control $control, array $blockQueue = NULL, array $params = [])
2343
{
2444
$control->snippetMode = FALSE;
2545
$payload = $control->getPresenter()->getPayload();
26-
if (isset($local->blocks)) {
27-
foreach ($local->blocks as $name => $function) {
28-
if ($name[0] !== '_' || !$control->isControlInvalid((string) substr($name, 1))) {
29-
continue;
30-
}
31-
ob_start(function () {});
32-
$function = reset($function);
33-
$snippets = $function($params + ['_snippetMode' => TRUE]);
34-
$payload->snippets[$id = $control->getSnippetId((string) substr($name, 1))] = ob_get_clean();
35-
if ($snippets !== NULL) { // pass FALSE from snippetArea
36-
if ($snippets) {
37-
$payload->snippets += $snippets;
38-
}
39-
unset($payload->snippets[$id]);
46+
foreach ($blockQueue as $name => $function) {
47+
if ($name[0] !== '_' || !$control->isControlInvalid((string) substr($name, 1))) {
48+
continue;
49+
}
50+
ob_start(function () {});
51+
$function = reset($function);
52+
$snippets = $function($params + ['_snippetMode' => TRUE]);
53+
$payload->snippets[$id = $control->getSnippetId((string) substr($name, 1))] = ob_get_clean();
54+
if ($snippets !== NULL) { // pass FALSE from snippetArea
55+
if ($snippets) {
56+
$payload->snippets += $snippets;
4057
}
58+
unset($payload->snippets[$id]);
4159
}
4260
}
4361
$control->snippetMode = TRUE;

tests/Bridges.Latte/expected/UIMacros.dynamicsnippets.alt.phtml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ class Template%a% extends Latte\Template
1313
{
1414
%A%
1515
// prolog Nette\Bridges\ApplicationLatte\UIMacros
16-
17-
// snippets support
18-
if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($_g->includingBlock)) {
19-
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
20-
}
16+
if (Nette\Bridges\ApplicationLatte\UIRuntime::initialize($this)) return;
2117

2218
// main template
2319
if ($this->tryRenderParent(get_defined_vars())) return ?>

tests/Bridges.Latte/expected/UIMacros.dynamicsnippets.phtml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ class Template%a% extends Latte\Template
1212
{
1313
%A%
1414
// prolog Nette\Bridges\ApplicationLatte\UIMacros
15-
16-
// snippets support
17-
if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($_g->includingBlock)) {
18-
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
19-
}
15+
if (Nette\Bridges\ApplicationLatte\UIRuntime::initialize($this)) return;
2016

2117
// main template
2218
if ($this->tryRenderParent(get_defined_vars())) return ?>

tests/Bridges.Latte/expected/UIMacros.snippet.alt.phtml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@ class Template%a% extends Latte\Template
1414
{
1515
%A%
1616
// prolog Nette\Bridges\ApplicationLatte\UIMacros
17-
18-
// snippets support
19-
if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($_g->includingBlock)) {
20-
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
21-
}
17+
if (Nette\Bridges\ApplicationLatte\UIRuntime::initialize($this)) return;
2218

2319
// main template
2420
?> <div class="test"<?php echo ' id="' . $_control->getSnippetId('outer') . '"' ?>>

tests/Bridges.Latte/expected/UIMacros.snippet.phtml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,7 @@ class Template%a% extends Latte\Template
1616
{
1717
%A%
1818
// prolog Nette\Bridges\ApplicationLatte\UIMacros
19-
20-
// snippets support
21-
if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($_g->includingBlock)) {
22-
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
23-
}
19+
if (Nette\Bridges\ApplicationLatte\UIRuntime::initialize($this)) return;
2420

2521
// main template
2622
?>
@@ -44,7 +40,7 @@ if (empty($this->local->parentName) && !empty($_control->snippetMode) && empty($
4440
}
4541

4642

47-
function block_%h%($_args)
43+
function block_b14a7($_args)
4844
{
4945
extract($_args);
5046
$_control->redrawControl('', FALSE);

0 commit comments

Comments
 (0)