Render "after_javascript" block after other scripts

[MAILPOET-5118]
This commit is contained in:
Jan Jakes
2023-09-28 15:13:50 +02:00
committed by Aschepikov
parent 3106b19684
commit 2a676353aa
3 changed files with 44 additions and 6 deletions

View File

@@ -100,7 +100,18 @@ class Renderer {
public function render($template, $context = []) {
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) {
throw new \Exception(sprintf(
// translators: %1$s is the name of the render, %2$s the folder path, %3$s the error message.

View File

@@ -9,6 +9,9 @@ use MailPoet\Config\Renderer;
use MailPoet\Config\RendererFactory;
use MailPoetVendor\Twig\Environment as TwigEnvironment;
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 {
/** @var Renderer */
@@ -81,6 +84,31 @@ class RendererTest extends \MailPoetTest {
}
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(
$this->renderer,
[
@@ -91,16 +119,16 @@ class RendererTest extends \MailPoetTest {
[
'renderer' => Stub::makeEmpty(TwigEnvironment::class,
[
'render' => Expected::atLeastOnce(function() {
return 'test render';
}),
'load' => Expected::atLeastOnce(
new TemplateWrapper($env, $template)
),
],
$this
),
]
);
expect($renderer->render('non-existing-template.html', ['somekey' => 'someval']))->equals('test render');
expect($renderer->render(['somekey' => 'someval']))->equals('test render');
}
public function _after() {

View File

@@ -236,5 +236,4 @@
Parsley.setLocale('mailpoet');
</script>
<% block after_javascript %><% endblock %>
<div id="mailpoet-modal"></div>