Skip to content
Snippets Groups Projects
Verified Commit f3d8334b authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Issue #3454196 by james.williams, longwave: Filter placeholders without...

Issue #3454196 by james.williams, longwave: Filter placeholders without arguments are not replaced when HTML corrector filter applied afterwards

(cherry picked from commit dc89b84c)
parent 7599ccbd
No related branches found
No related tags found
2 merge requests!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!9944Issue #3483353: Consider making the createCopy config action optionally fail...
Pipeline #230698 passed
......@@ -136,7 +136,11 @@ public function createPlaceholder($callback, array $args) {
// @see \Drupal\Core\Render\PlaceholderGenerator::createPlaceholder()
$arguments = UrlHelper::buildQuery($args);
$token = Crypt::hashBase64(serialize([$callback, $args]));
$placeholder_markup = '<drupal-filter-placeholder callback="' . Html::escape($callback) . '" arguments="' . Html::escape($arguments) . '" token="' . Html::escape($token) . '"></drupal-filter-placeholder>';
$placeholder_markup = '<drupal-filter-placeholder callback="' . Html::escape($callback) . '"';
if ($arguments !== '') {
$placeholder_markup .= ' arguments="' . Html::escape($arguments) . '"';
}
$placeholder_markup .= ' token="' . Html::escape($token) . '"></drupal-filter-placeholder>';
// Add the placeholder attachment.
$this->addAttachments([
......
......@@ -16,7 +16,7 @@
#[Filter(
id: "filter_test_placeholders",
title: new TranslatableMarkup("Testing filter"),
description: new TranslatableMarkup("Appends a placeholder to the content; associates #lazy_builder callback."),
description: new TranslatableMarkup("Appends placeholders to the content; associates #lazy_builder callbacks."),
type: FilterInterface::TYPE_TRANSFORM_REVERSIBLE
)]
class FilterTestPlaceholders extends FilterBase implements TrustedCallbackInterface {
......@@ -26,8 +26,9 @@ class FilterTestPlaceholders extends FilterBase implements TrustedCallbackInterf
*/
public function process($text, $langcode) {
$result = new FilterProcessResult($text);
$placeholder = $result->createPlaceholder('\Drupal\filter_test\Plugin\Filter\FilterTestPlaceholders::renderDynamicThing', ['llama']);
$result->setProcessedText($text . '<p>' . $placeholder . '</p>');
$placeholder_with_argument = $result->createPlaceholder('\Drupal\filter_test\Plugin\Filter\FilterTestPlaceholders::renderDynamicThing', ['llama']);
$placeholder_without_arguments = $result->createPlaceholder('\Drupal\filter_test\Plugin\Filter\FilterTestPlaceholders::renderStaticThing', []);
$result->setProcessedText($text . '<p>' . $placeholder_with_argument . '</p>' . '<p>' . $placeholder_without_arguments . '</p>');
return $result;
}
......@@ -46,11 +47,26 @@ public static function renderDynamicThing($thing) {
];
}
/**
* #lazy_builder callback; builds a render array.
*
* @return array
* A renderable array.
*/
public static function renderStaticThing(): array {
return [
'#markup' => 'This is a static llama.',
];
}
/**
* {@inheritdoc}
*/
public static function trustedCallbacks() {
return ['renderDynamicThing'];
return [
'renderDynamicThing',
'renderStaticThing',
];
}
}
......@@ -318,7 +318,7 @@ public function testProcessedTextElement(): void {
'user.permissions',
];
$this->assertEqualsCanonicalizing($expected_cache_contexts, $build['#cache']['contexts'], 'Expected cache contexts present.');
$expected_markup = '<p>Hello, world!</p><p>This is a dynamic llama.</p>';
$expected_markup = '<p>Hello, world!</p><p>This is a dynamic llama.</p><p>This is a static llama.</p>';
$this->assertSame($expected_markup, (string) $build['#markup'], 'Expected #lazy_builder callback has been applied.');
}
......
......@@ -58,7 +58,7 @@ protected function getExpectedNormalizedEntity() {
[
'value' => 'Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.',
'format' => 'my_text_format',
'processed' => '<p>Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.</p>' . "\n" . '<p>This is a dynamic llama.</p>',
'processed' => '<p>Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.</p>' . "\n" . '<p>This is a dynamic llama.</p><p>This is a static llama.</p>',
],
];
return $expected;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment