Skip to content

Commit 22b11c7

Browse files
authored
Merge pull request #53 from tronsha/bugfix/nested-if
Fix nested if
2 parents d1f2638 + b3ffdc8 commit 22b11c7

File tree

3 files changed

+42
-10
lines changed

3 files changed

+42
-10
lines changed

src/Compiler.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@
1919

2020
class Compiler
2121
{
22-
2322
/** @var Component[] */
2423
protected $components;
2524

2625
/** @var DOMDocument */
2726
protected $document;
2827

29-
/** @var DOMText|null */
28+
/** @var DOMText[]|null */
3029
protected $lastCloseIf;
3130

3231
/** @var LoggerInterface */
@@ -66,7 +65,7 @@ public function __construct(DOMDocument $document, LoggerInterface $logger)
6665
$this->builder = new TwigBuilder();
6766
$this->document = $document;
6867
$this->logger = $logger;
69-
$this->lastCloseIf = null;
68+
$this->lastCloseIf = [];
7069
$this->components = [];
7170
$this->banner = [];
7271
$this->properties = [];
@@ -155,7 +154,7 @@ public function convertNode(DOMNode $node, int $level = 0): DOMNode
155154
$this->logger->warning("Document node found.");
156155
} elseif ($node instanceof DOMElement) {
157156
$this->replaceShowWithIf($node);
158-
$this->handleIf($node);
157+
$this->handleIf($node, $level);
159158
$this->handleFor($node);
160159
$this->handleHtml($node);
161160
$this->handleText($node);
@@ -464,7 +463,7 @@ private function cleanupAttributes(DOMElement $node): void
464463
}
465464
}
466465

467-
private function handleIf(DOMElement $node): void
466+
private function handleIf(DOMElement $node, int $level): void
468467
{
469468
if (!$node->hasAttribute('v-if') &&
470469
!$node->hasAttribute('v-else-if') &&
@@ -488,7 +487,7 @@ private function handleIf(DOMElement $node): void
488487
$closeIf = $this->document->createTextNode($this->builder->createEndIf());
489488
$node->parentNode->insertBefore($closeIf, $node->nextSibling);
490489

491-
$this->lastCloseIf = $closeIf;
490+
$this->lastCloseIf[$level] = $closeIf;
492491

493492
$node->removeAttribute('v-if');
494493
$node->removeAttribute('data-twig-if');
@@ -501,23 +500,23 @@ private function handleIf(DOMElement $node): void
501500
}
502501

503502
// Replace old endif with else
504-
$this->lastCloseIf->textContent = $this->builder->createElseIf($condition);
503+
$this->lastCloseIf[$level]->textContent = $this->builder->createElseIf($condition);
505504

506505
// Close with new endif
507506
$closeIf = $this->document->createTextNode($this->builder->createEndIf());
508507
$node->parentNode->insertBefore($closeIf, $node->nextSibling);
509-
$this->lastCloseIf = $closeIf;
508+
$this->lastCloseIf[$level] = $closeIf;
510509

511510
$node->removeAttribute('v-else-if');
512511
$node->removeAttribute('data-twig-if');
513512
} elseif ($node->hasAttribute('v-else')) {
514513
// Replace old endif with else
515-
$this->lastCloseIf->textContent = $this->builder->createElse();
514+
$this->lastCloseIf[$level]->textContent = $this->builder->createElse();
516515

517516
// Close with new endif
518517
$closeIf = $this->document->createTextNode($this->builder->createEndIf());
519518
$node->parentNode->insertBefore($closeIf, $node->nextSibling);
520-
$this->lastCloseIf = $closeIf;
519+
$this->lastCloseIf[$level] = $closeIf;
521520

522521
$node->removeAttribute('v-else');
523522
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<div class="{{class|default('')}}">
2+
{% if someCondition %}
3+
<div>
4+
<h1>Headline</h1>
5+
</div>
6+
{% elseif someOtherCondition %}
7+
<div>
8+
{% if yetAnotherCondition %}
9+
<h2>Headline 2.1</h2>
10+
{% else %}
11+
<h2>Headline 2.2</h2>
12+
{% endif %}
13+
</div>
14+
{% else %}
15+
<div>
16+
<h3>Headline 3</h3>
17+
</div>
18+
{% endif %}
19+
</div>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<template>
2+
<div>
3+
<div v-if="someCondition">
4+
<h1>Headline</h1>
5+
</div>
6+
<div v-else-if="someOtherCondition">
7+
<h2 v-if="yetAnotherCondition">Headline 2.1</h2>
8+
<h2 v-else>Headline 2.2</h2>
9+
</div>
10+
<div v-else>
11+
<h3>Headline 3</h3>
12+
</div>
13+
</div>
14+
</template>

0 commit comments

Comments
 (0)