Codemonkey
Codemonkey

Reputation: 4807

Is this the right way to implement my own filter in twig? (I want *minimal* whitespace between tags, not *no* whitespace between tags)

I know that apply spaceless "isn't about optimisation", in Symfony's words. But dammit, I dislike extraneous whitespace from being in my served files.

So I'm keen to use it.

But... I don't like how it reduces

<span>1</span>

<span>2</span>

to

<span>1</span><span>2</span>

As that results in the browser displaying 12, rather than 1 2.

In my mind whitespace between tags should be reduced to a single space, not to nothing.

<span>1</span> 

<span>2</span>

->

<span>1</span> <span>2</span>

So I thought I'd make a custom filter, minimizeWhitespace, and wrap my templates with <% apply minimizeWhitespace %>

This is what I came up with:

function minimizeWhitespace($s)
{
    return new \Twig\Markup(preg_replace('/\s+/', ' ', $s->__toString()), 'UTF-8');
}

$TWIG_env->addFilter(
    new \Twig\TwigFilter('minimizeWhitespace', 'minimizeWhitespace')
);

This feels messy though - I'm taking their \Twig\Markup object, converting it to a string, running my regexp on it, and then creating a new \Twig\Markup object to return.

Is there a better way?

Upvotes: 0

Views: 39

Answers (0)

Related Questions