mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX HTMLEditorField is not able to show html or xml code examples (#11243)
This commit is contained in:
parent
470293a6d2
commit
f0aaba5504
@ -191,7 +191,19 @@ class HTMLEditorField extends TextareaField
|
||||
*/
|
||||
public function ValueEntities()
|
||||
{
|
||||
return htmlentities($this->Value() ?? '', ENT_COMPAT, 'UTF-8', false);
|
||||
$entities = get_html_translation_table(HTML_ENTITIES);
|
||||
|
||||
foreach ($entities as $key => $value) {
|
||||
$entities[$key] = "/" . $value . "/";
|
||||
}
|
||||
|
||||
$value = preg_replace_callback($entities, function ($matches) {
|
||||
// Don't apply double encoding to ampersand
|
||||
$doubleEncoding = $matches[0] != '&';
|
||||
return htmlentities($matches[0], ENT_COMPAT, 'UTF-8', $doubleEncoding);
|
||||
}, $this->Value() ?? '');
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -171,6 +171,10 @@ class EmbedShortcodeProvider implements ShortcodeHandler
|
||||
$arguments['style'] = 'width: ' . intval($arguments['width']) . 'px;';
|
||||
}
|
||||
|
||||
if (!empty($arguments['caption'])) {
|
||||
$arguments['caption'] = htmlentities($arguments['caption'], ENT_QUOTES, 'UTF-8', false);
|
||||
}
|
||||
|
||||
// override iframe dimension attributes provided by webservice with ones specified in shortcode arguments
|
||||
foreach (['width', 'height'] as $attr) {
|
||||
if (!($value = $arguments[$attr] ?? false)) {
|
||||
|
@ -3,6 +3,6 @@
|
||||
>
|
||||
{$Content}
|
||||
<% if $Arguments.caption %>
|
||||
<p class="caption">{$Arguments.caption}</p>
|
||||
<p class="caption">{$Arguments.caption.RAW}</p>
|
||||
<% end_if %>
|
||||
</div>
|
||||
|
@ -74,7 +74,7 @@ class HTMLEditorFieldTest extends FunctionalTest
|
||||
$inputText = "These are some unicodes: ä, ö, & ü";
|
||||
$field = new HTMLEditorField("Test", "Test");
|
||||
$field->setValue($inputText);
|
||||
$this->assertStringContainsString('These are some unicodes: ä, ö, & ü', $field->Field());
|
||||
$this->assertStringContainsString('These are some unicodes: ä, ö, & ü', $field->Field());
|
||||
// Test shortcodes
|
||||
$inputText = "Shortcode: [file_link id=4]";
|
||||
$field = new HTMLEditorField("Test", "Test");
|
||||
@ -210,23 +210,34 @@ EOS
|
||||
);
|
||||
}
|
||||
|
||||
public function testValueEntities()
|
||||
public function provideTestValueEntities()
|
||||
{
|
||||
return [
|
||||
"ampersand" => [
|
||||
"The company & partners",
|
||||
"The company & partners"
|
||||
],
|
||||
"double ampersand" => [
|
||||
"The company &amp; partners",
|
||||
"The company &amp; partners"
|
||||
],
|
||||
"left arrow and right arrow" => [
|
||||
"<p><strong>The company &amp; partners</strong></p>",
|
||||
"<p>&lt;strong&gt;The company &amp; partners&lt;/strong&gt;</p>"
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideTestValueEntities
|
||||
*/
|
||||
public function testValueEntities(string $input, string $result)
|
||||
{
|
||||
$inputText = "The company & partners";
|
||||
$field = new HTMLEditorField("Content");
|
||||
$field->setValue($inputText);
|
||||
$field->setValue($input);
|
||||
|
||||
$this->assertEquals(
|
||||
"The company & partners",
|
||||
$field->obj('ValueEntities')->forTemplate()
|
||||
);
|
||||
|
||||
$inputText = "The company && partners";
|
||||
$field = new HTMLEditorField("Content");
|
||||
$field->setValue($inputText);
|
||||
|
||||
$this->assertEquals(
|
||||
"The company && partners",
|
||||
$result,
|
||||
$field->obj('ValueEntities')->forTemplate()
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user