63 lines
1.3 KiB
PHP
63 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Elementor\Modules\AtomicWidgets\TemplateRenderer;
|
|
|
|
use Elementor\Utils;
|
|
use ElementorDeps\Twig\Environment;
|
|
use ElementorDeps\Twig\Runtime\EscaperRuntime;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
class Template_Renderer {
|
|
private static ?self $instance = null;
|
|
|
|
private Single_File_Loader $loader;
|
|
|
|
private Environment $env;
|
|
|
|
private function __construct() {
|
|
$this->loader = new Single_File_Loader();
|
|
|
|
$this->env = new Environment(
|
|
$this->loader,
|
|
[
|
|
'debug' => Utils::is_elementor_debug(),
|
|
'autoescape' => 'name',
|
|
]
|
|
);
|
|
|
|
$escaper = $this->env->getRuntime( EscaperRuntime::class );
|
|
|
|
$escaper->setEscaper( 'full_url', 'esc_url' );
|
|
$escaper->setEscaper( 'html_tag', [ Utils::class, 'validate_html_tag' ] );
|
|
}
|
|
|
|
public static function instance(): self {
|
|
if ( null === self::$instance ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
public static function reset() {
|
|
self::$instance = null;
|
|
}
|
|
|
|
public function is_registered( string $name ): bool {
|
|
return $this->loader->is_registered( $name );
|
|
}
|
|
|
|
public function register( string $name, string $path ): self {
|
|
$this->loader->register( $name, $path );
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function render( string $name, array $context = [] ): string {
|
|
return $this->env->render( $name, $context );
|
|
}
|
|
}
|