|
18 | 18 | use Twig\Node\Expression\ConditionalExpression;
|
19 | 19 | use Twig\Node\Expression\ConstantExpression;
|
20 | 20 | use Twig\Node\Expression\FilterExpression;
|
| 21 | +use Twig\Node\Expression\Ternary\ConditionalTernary; |
21 | 22 | use Twig\Node\Node;
|
| 23 | +use Twig\Node\Nodes; |
22 | 24 | use Twig\NodeVisitor\AbstractNodeVisitor;
|
| 25 | +use Twig\TwigFilter; |
23 | 26 |
|
24 | 27 | /**
|
25 | 28 | * Applies the value of the "desc" filter if the "trans" filter has no
|
@@ -93,22 +96,46 @@ public function doEnterNode(Node $node, Environment $env): Node
|
93 | 96 | $testNode->getNode('arguments')->setNode(0, new ArrayExpression([], $lineno));
|
94 | 97 |
|
95 | 98 | // wrap the default node in a |replace filter
|
96 |
| - $defaultNode = new FilterExpression( |
97 |
| - clone $node->getNode('arguments')->getNode(0), |
98 |
| - new ConstantExpression('replace', $lineno), |
99 |
| - new Node([ |
100 |
| - clone $wrappingNode->getNode('arguments')->getNode(0), |
101 |
| - ]), |
102 |
| - $lineno |
| 99 | + if (Environment::VERSION_ID >= 31500) { |
| 100 | + $defaultNode = new FilterExpression( |
| 101 | + clone $node->getNode('arguments')->getNode(0), |
| 102 | + new TwigFilter('replace'), |
| 103 | + new Nodes([ |
| 104 | + clone $wrappingNode->getNode('arguments')->getNode(0), |
| 105 | + ]), |
| 106 | + $lineno |
| 107 | + ); |
| 108 | + } else { |
| 109 | + $defaultNode = new FilterExpression( |
| 110 | + clone $node->getNode('arguments')->getNode(0), |
| 111 | + new ConstantExpression('replace', $lineno), |
| 112 | + new Node([ |
| 113 | + clone $wrappingNode->getNode('arguments')->getNode(0), |
| 114 | + ]), |
| 115 | + $lineno |
| 116 | + ); |
| 117 | + } |
| 118 | + } |
| 119 | + |
| 120 | + $expr = new EqualBinary($testNode, $transNode->getNode('node'), $wrappingNode->getTemplateLine()); |
| 121 | + if (Environment::VERSION_ID >= 31700) { |
| 122 | + $expr->setAttribute('operator', 'binary_=='); |
| 123 | + |
| 124 | + $condition = new ConditionalTernary( |
| 125 | + $expr, |
| 126 | + $defaultNode, |
| 127 | + clone $wrappingNode, |
| 128 | + $wrappingNode->getTemplateLine() |
| 129 | + ); |
| 130 | + } else { |
| 131 | + $condition = new ConditionalExpression( |
| 132 | + $expr, |
| 133 | + $defaultNode, |
| 134 | + clone $wrappingNode, |
| 135 | + $wrappingNode->getTemplateLine() |
103 | 136 | );
|
104 | 137 | }
|
105 | 138 |
|
106 |
| - $condition = new ConditionalExpression( |
107 |
| - new EqualBinary($testNode, $transNode->getNode('node'), $wrappingNode->getTemplateLine()), |
108 |
| - $defaultNode, |
109 |
| - clone $wrappingNode, |
110 |
| - $wrappingNode->getTemplateLine() |
111 |
| - ); |
112 | 139 | $node->setNode('node', $condition);
|
113 | 140 |
|
114 | 141 | return $node;
|
|
0 commit comments