Render "after_javascript" block after other scripts
[MAILPOET-5118]
This commit is contained in:
@@ -100,7 +100,18 @@ class Renderer {
|
|||||||
|
|
||||||
public function render($template, $context = []) {
|
public function render($template, $context = []) {
|
||||||
try {
|
try {
|
||||||
return $this->renderer->render($template, $context);
|
$loaded = $this->renderer->load($template);
|
||||||
|
|
||||||
|
// schedule "after_javascript" block to be printed only after other scripts
|
||||||
|
if ($loaded->hasBlock('after_javascript')) {
|
||||||
|
$afterJs = $loaded->renderBlock('after_javascript', $context);
|
||||||
|
WPFunctions::get()->addAction('admin_print_footer_scripts', function () use ($afterJs): void {
|
||||||
|
// This is content is generated by Twig.
|
||||||
|
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, WordPressDotOrg.sniffs.OutputEscaping.UnescapedOutputParameter
|
||||||
|
echo $afterJs;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return $loaded->render($context);
|
||||||
} catch (\RuntimeException $e) {
|
} catch (\RuntimeException $e) {
|
||||||
throw new \Exception(sprintf(
|
throw new \Exception(sprintf(
|
||||||
// translators: %1$s is the name of the render, %2$s the folder path, %3$s the error message.
|
// translators: %1$s is the name of the render, %2$s the folder path, %3$s the error message.
|
||||||
|
@@ -9,6 +9,9 @@ use MailPoet\Config\Renderer;
|
|||||||
use MailPoet\Config\RendererFactory;
|
use MailPoet\Config\RendererFactory;
|
||||||
use MailPoetVendor\Twig\Environment as TwigEnvironment;
|
use MailPoetVendor\Twig\Environment as TwigEnvironment;
|
||||||
use MailPoetVendor\Twig\Loader\FilesystemLoader as TwigFileSystem;
|
use MailPoetVendor\Twig\Loader\FilesystemLoader as TwigFileSystem;
|
||||||
|
use MailPoetVendor\Twig\Source;
|
||||||
|
use MailPoetVendor\Twig\Template as TwigTemplate;
|
||||||
|
use MailPoetVendor\Twig\TemplateWrapper;
|
||||||
|
|
||||||
class RendererTest extends \MailPoetTest {
|
class RendererTest extends \MailPoetTest {
|
||||||
/** @var Renderer */
|
/** @var Renderer */
|
||||||
@@ -81,6 +84,31 @@ class RendererTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItDelegatesRenderingToTwig() {
|
public function testItDelegatesRenderingToTwig() {
|
||||||
|
$env = Stub::makeEmpty(TwigEnvironment::class);
|
||||||
|
$template = new class($env) extends TwigTemplate {
|
||||||
|
public function getTemplateName() {
|
||||||
|
return 'non-existing-template.html';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render(array $context) {
|
||||||
|
return 'test render';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDebugInfo() {
|
||||||
|
// must be implemented (abstract in parent)
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSourceContext() {
|
||||||
|
// must be implemented (abstract in parent)
|
||||||
|
return new Source('', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doDisplay(array $context, array $blocks = []) {
|
||||||
|
// must be implemented (abstract in parent)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$renderer = Stub::construct(
|
$renderer = Stub::construct(
|
||||||
$this->renderer,
|
$this->renderer,
|
||||||
[
|
[
|
||||||
@@ -91,16 +119,16 @@ class RendererTest extends \MailPoetTest {
|
|||||||
[
|
[
|
||||||
'renderer' => Stub::makeEmpty(TwigEnvironment::class,
|
'renderer' => Stub::makeEmpty(TwigEnvironment::class,
|
||||||
[
|
[
|
||||||
'render' => Expected::atLeastOnce(function() {
|
'load' => Expected::atLeastOnce(
|
||||||
return 'test render';
|
new TemplateWrapper($env, $template)
|
||||||
}),
|
),
|
||||||
],
|
],
|
||||||
$this
|
$this
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect($renderer->render('non-existing-template.html', ['somekey' => 'someval']))->equals('test render');
|
expect($renderer->render(['somekey' => 'someval']))->equals('test render');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
|
@@ -236,5 +236,4 @@
|
|||||||
|
|
||||||
Parsley.setLocale('mailpoet');
|
Parsley.setLocale('mailpoet');
|
||||||
</script>
|
</script>
|
||||||
<% block after_javascript %><% endblock %>
|
|
||||||
<div id="mailpoet-modal"></div>
|
<div id="mailpoet-modal"></div>
|
||||||
|
Reference in New Issue
Block a user