Project

General

Profile

Actions

Bug #85777

closed

<f:spaceless> eats too many blank spaces

Added by Xavier Perseguers over 6 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Should have
Assignee:
-
Category:
Fluid
Target version:
-
Start date:
2018-08-08
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
8
PHP Version:
7.2
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

My controller assign some HTML content to my view:

$foo = <<<HTML
<span class="adr">
                        <span class="type" style="display:none">work</span><span class="street-address">CP 184</span><br />
<span class="postal-code">1580</span> <span class="locality">Avenches</span> <span class="country-name" style="display:none">Switzerland</span>
                    </span>
HTML;

$this->view->assign('foo', $foo);

When the view shows the content straight, foo gets htmlentities'd but it works, however when content is raw-formatted:

{foo -> f:format.raw()}

then blank spaces between tags are eaten and result in this being outputted:

<span class="adr"><span class="type" style="display:none">work</span><span class="street-address">CP 184</span><br />
<span class="postal-code">1580</span><span class="locality">Avenches</span><span class="country-name" style="display:none">Switzerland</span></span>

(I added a break line after <br /> so that we see it more easily in this description.

Problem is that now in that particular example we have the postal code and the locality being shown visually together: 1580Avenches instead of 1580 Avenches.

This seems to be new since TYPO3 v8, same code works fine in TYPO3 v7.


Related issues 1 (0 open1 closed)

Is duplicate of TYPO3 Core - Bug #86862: Using <f:spaceless> in layout for rendering any fluid_styled_content element causes valid RTE content to be be destroyed.ClosedBenjamin Kott2018-11-06

Actions
Actions #1

Updated by Xavier Perseguers over 6 years ago

Seems not to be related to <f:format.raw>, when I write this in my template:

<p>
    <span>foo</span>
    <span>bar</span>
</p>

it gets rendered as

<p><span>foo</span><span>bar</span></p>
Actions #2

Updated by Xavier Perseguers over 6 years ago

  • Status changed from New to Accepted

My template does not define any layout, so the default one from EXT:fluid_styled_content is being used and this one (EXT:fluid_styled_content/Resources/Private/Layouts/Default.html) is using <f:spaceless> around the whole block.

So it looks like <f:spaceless> just does too much space removal.

Actions #3

Updated by Xavier Perseguers over 6 years ago

This is discussed here: https://github.com/TYPO3/Fluid/issues/298

And the sole solution at the moment is to override the default layout provided by EXT:fluid_styled_content in your own template extension :/

Actions #4

Updated by Xavier Perseguers over 6 years ago

Since I consider this a "bug" in f:spaceless which should imho not remove so many blank spaces, I personally fix it like that instead for my project:

file <project-root>/patches/typo3fluid-fluid-298-keep-one-space.patch

--- src/ViewHelpers/SpacelessViewHelper.php    2018-08-08 13:02:23.000000000 +0200
+++ src/ViewHelpers/SpacelessViewHelper.php    2018-08-08 13:02:31.000000000 +0200
@@ -52,6 +52,6 @@
      */
     public static function renderStatic(array $arguments, \Closure $childClosure, RenderingContextInterface $renderingContext)
     {
-        return trim(preg_replace('/\\>\\s+\\</', '><', $childClosure()));
+        return trim(preg_replace('/\\>\\s+\\</', '> <', $childClosure()));
     }
 }

file <project-root>/composer.json

  "require": {
    "cweagans/composer-patches": "^1.6",
    // snip
  },
  "extra": {
     // snip
    "patches": {
      "typo3fluid/fluid": {
        "Keep one space between tags in f:spaceless": "patches/typo3fluid-fluid-298-keep-one-space.patch" 
      }
    }
  },

Actions #5

Updated by Xavier Perseguers over 6 years ago

  • Subject changed from <f:format.raw> eats blank spaces between tags to <f:spaceless> eats too many blank spaces
Actions #7

Updated by Markus Klein about 6 years ago

  • Related to Bug #86862: Using <f:spaceless> in layout for rendering any fluid_styled_content element causes valid RTE content to be be destroyed. added
Actions #8

Updated by Markus Klein about 6 years ago

  • Related to deleted (Bug #86862: Using <f:spaceless> in layout for rendering any fluid_styled_content element causes valid RTE content to be be destroyed.)
Actions #9

Updated by Markus Klein about 6 years ago

  • Is duplicate of Bug #86862: Using <f:spaceless> in layout for rendering any fluid_styled_content element causes valid RTE content to be be destroyed. added
Actions #10

Updated by Markus Klein about 6 years ago

  • Status changed from Accepted to Closed

Even though this issue was there first I close it as duplicate of the newer issue where a patch is pending.

Actions

Also available in: Atom PDF