%PDF- %PDF-
| Direktori : /www/varak.net/losik.varak.net/vendor/nette/application/src/Bridges/ApplicationLatte/ |
| Current File : //www/varak.net/losik.varak.net/vendor/nette/application/src/Bridges/ApplicationLatte/UIRuntime.php |
<?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
declare(strict_types=1);
namespace Nette\Bridges\ApplicationLatte;
use Latte;
use Nette;
use Nette\Application\UI\Presenter;
use Nette\PhpGenerator as Php;
/**
* Latte v2 helpers for UI macros.
* @internal
*/
final class UIRuntime
{
use Nette\StaticClass;
public static function initialize(Latte\Runtime\Template $template, &$parentName, array $blocks): void
{
$providers = $template->global;
$blocks = array_filter(array_keys($blocks), function (string $s): bool { return $s[0] !== '_'; });
if (
$parentName === null
&& $blocks
&& !$template->getReferringTemplate()
&& ($providers->uiControl ?? null) instanceof Nette\Application\UI\Presenter
) {
$parentName = $providers->uiControl->findLayoutTemplateFile();
}
}
public static function printClass(Latte\Runtime\Template $template, ?string $parent = null): void
{
$blueprint = new Latte\Runtime\Blueprint;
$name = 'Template';
$params = $template->getParameters();
$control = $params['control'] ?? $params['presenter'] ?? null;
if ($control) {
$name = preg_replace('#(Control|Presenter)$#', '', get_class($control)) . 'Template';
unset($params[$control instanceof Presenter ? 'control' : 'presenter']);
}
if ($parent) {
if (!class_exists($parent)) {
$blueprint->printHeader("{templatePrint}: Class '$parent' doesn't exist.");
return;
}
$params = array_diff_key($params, get_class_vars($parent));
}
$funcs = array_diff_key((array) $template->global->fn, (new Latte\Runtime\Defaults)->getFunctions());
unset($funcs['isLinkCurrent'], $funcs['isModuleCurrent']);
$namespace = new Php\PhpNamespace(Php\Helpers::extractNamespace($name));
$class = $namespace->addClass(Php\Helpers::extractShortName($name));
$class->setExtends($parent ?: Template::class);
if (!$parent) {
$class->addTrait(Nette\SmartObject::class);
}
$blueprint->addProperties($class, $params, true);
$blueprint->addFunctions($class, $funcs);
$end = $blueprint->printCanvas();
$blueprint->printHeader('Native types');
$blueprint->printCode((string) $namespace);
$blueprint->addProperties($class, $params, false);
$blueprint->printHeader('phpDoc types');
$blueprint->printCode((string) $namespace);
echo $end;
}
}