Skip to content

Commit 22ed346

Browse files
committed
Fix build errors and add LoggerInterface to Compiler
1 parent 68d5cf3 commit 22ed346

File tree

10 files changed

+191
-42
lines changed

10 files changed

+191
-42
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
/var
3+
24
# Managed by Composer
35
/bin/*
46
!bin/console
@@ -7,3 +9,4 @@
79
# PHPUnit
810
/phpunit.xml
911
.phpcs-cache
12+

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Compile vue files to twig templates with PHP
1717
|v-for|:white_check_mark:|
1818
|v-on|:white_check_mark:|
1919
|v-bind||
20+
|v-bind:style||
21+
|v-bind:class||
2022
|v-model||
2123
|v-pre||
2224
|v-cloak||

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
},
3333
"require-dev": {
3434
"ext-simplexml": "*",
35-
"phpunit/phpunit": "^7"
35+
"phpunit/phpunit": "^7",
36+
"monolog/monolog": "^1.24"
3637
},
3738
"scripts": {
3839
"cs:fix": "phpcbf --standard=phpcs.xml",

composer.lock

Lines changed: 126 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compiler.php

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use DOMNode;
1010
use DOMText;
1111
use Exception;
12-
use LibXMLError;
12+
use Psr\Log\LoggerInterface;
1313

1414
class Compiler
1515
{
@@ -22,10 +22,13 @@ class Compiler
2222
/** @var DOMText */
2323
protected $lastCloseIf;
2424

25-
public function __construct(DOMDocument $document)
25+
/** @var LoggerInterface */
26+
protected $logger;
27+
28+
public function __construct(DOMDocument $document, LoggerInterface $logger)
2629
{
30+
$this->logger = $logger;
2731
$this->document = $document;
28-
2932
$this->lastCloseIf = null;
3033
}
3134

@@ -48,22 +51,18 @@ public function convert(): string
4851

4952
public function convertNode(DOMNode $node): DOMNode
5053
{
51-
if ($this->isTextNode($node)) {
54+
if ($node->nodeType === XML_TEXT_NODE) {
5255
return $node;
5356
}
5457

5558
if ($node->nodeType === XML_ELEMENT_NODE) {
56-
echo "\nElement node found";
59+
//echo "\nElement node found";
5760
/** @var DOMElement $node */
5861
$this->replaceShowWithIf($node);
5962
$this->handleIf($node);
63+
} elseif ($node->nodeType === XML_HTML_DOCUMENT_NODE) {
64+
$this->logger->warning("Document node found.");
6065
}
61-
elseif($node->nodeType === XML_HTML_DOCUMENT_NODE) {
62-
echo "\nDocument node found.";
63-
}
64-
// else {
65-
// var_dump($node->nodeType);
66-
// }
6766

6867
$this->stripEventHandlers($node);
6968
$this->handleFor($node);
@@ -80,12 +79,10 @@ public function convertNode(DOMNode $node): DOMNode
8079

8180
public function replaceShowWithIf(DOMElement $node): void
8281
{
83-
8482
if ($node->hasAttribute('v-show')) {
8583
$node->setAttribute('v-if', $node->getAttribute('v-show'));
8684
$node->removeAttribute('v-show');
8785
}
88-
8986
}
9087

9188
private function handleAttributeBinding(DOMElement $node)
@@ -94,16 +91,33 @@ private function handleAttributeBinding(DOMElement $node)
9491
foreach (iterator_to_array($node->attributes) as $attribute) {
9592

9693
if (strpos($attribute->name, 'v-bind:') !== 0 && strpos($attribute->name, ':') !== 0) {
97-
var_dump("- skip: ". $attribute->name);
94+
$this->logger->debug("- skip: " . $attribute->name);
9895
continue;
9996
}
10097

10198
$name = substr($attribute->name, 1);
10299
$value = $attribute->value;
103-
var_dump('- handle: '.$name.' = '.$value);
100+
$this->logger->debug('- handle: ' . $name . ' = ' . $value);
101+
102+
103+
switch ($name) {
104+
case 'key':
105+
// Not necessary in twig
106+
break;
107+
case 'style':
108+
break;
109+
case 'class':
110+
break;
111+
default:
112+
if ($value === 'true') {
113+
$node->setAttribute($name, $name);
114+
}
115+
$node->setAttribute($name, $value);
116+
}
104117

105118
if (is_bool($value)) {
106119
if ($value) {
120+
$this->logger->debug('=> setAttribute');
107121
$node->setAttribute($name, $name);
108122
}
109123
} elseif (is_array($value)) {
@@ -125,9 +139,9 @@ private function handleAttributeBinding(DOMElement $node)
125139
}
126140
$node->setAttribute($name, implode(' ', $classes));
127141
}
128-
} else {
129-
$node->setAttribute($name, $value);
130142
}
143+
144+
$this->logger->debug('=> remove ' . $attribute->name);
131145
$node->removeAttribute($attribute->name);
132146
}
133147
}
@@ -154,23 +168,19 @@ private function handleIf(DOMElement $node): void
154168
$this->lastCloseIf = $closeIf;
155169

156170
$node->removeAttribute('v-if');
157-
}
158-
elseif ($node->hasAttribute('v-else-if')) {
171+
} elseif ($node->hasAttribute('v-else-if')) {
159172
$condition = $node->getAttribute('v-else-if');
160173

161174
// Replace old endif with else
162-
$this->lastCloseIf->textContent = '{% elseif '.$condition.' %}';
175+
$this->lastCloseIf->textContent = '{% elseif ' . $condition . ' %}';
163176

164177
// Close with new endif
165178
$closeIf = $this->document->createTextNode('{% endif %}');
166179
$node->parentNode->insertBefore($closeIf, $node->nextSibling);
167180
$this->lastCloseIf = $closeIf;
168181

169182
$node->removeAttribute('v-else-if');
170-
}
171-
elseif ($node->hasAttribute('v-else')) {
172-
echo "\nFound a v-else";
173-
183+
} elseif ($node->hasAttribute('v-else')) {
174184
// Replace old endif with else
175185
$this->lastCloseIf->textContent = '{% else %}';
176186

tests/AbstractTestCase.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,29 @@
44

55
use DirectoryIterator;
66
use DOMDocument;
7+
use Macavity\VueToTwig\Compiler;
8+
use Monolog\Handler\StreamHandler;
9+
use Monolog\Logger;
710

811
abstract class AbstractTestCase extends \PHPUnit\Framework\TestCase
912
{
13+
protected function createCompiler(string $template): Compiler
14+
{
15+
$document = $this->createDocumentWithHtml($template);
16+
$compiler = new Compiler($document, $this->createLogger());
17+
18+
return $compiler;
19+
}
20+
21+
protected function createLogger(): Logger
22+
{
23+
$logger = new Logger('test');
24+
$logger->pushHandler(new StreamHandler(__DIR__ . '/../var/dev/test.log'));
25+
26+
return $logger;
27+
}
28+
29+
1030
protected function assertEqualHtml($expectedResult, $result): void
1131
{
1232
$expectedResult = $this->normalizeHtml($expectedResult);

tests/CompilerTest.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@
22

33
namespace Macavity\VueToTwig\Tests;
44

5-
use Macavity\VueToTwig\Compiler;
6-
75
class CompilerTest extends AbstractTestCase
86
{
97
/** @test */
108
public function leavesMustacheVariablesIntact()
119
{
1210
$html = '<template><div>{{ someVariable }}</div></template>';
1311
$expected = '<div>{{ someVariable }}</div>';
14-
$document = $this->createDocumentWithHtml($html);
15-
$compiler = new Compiler($document);
12+
$compiler = $this->createCompiler($html);
1613

1714
$actual = $compiler->convert();
1815

tests/VueForTest.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Macavity\VueToTwig\Tests;
44

5-
use Macavity\VueToTwig\Compiler;
6-
75
class VueForTest extends AbstractTestCase
86
{
97
/**
@@ -12,8 +10,7 @@ class VueForTest extends AbstractTestCase
1210
*/
1311
public function testFor($html, $expected)
1412
{
15-
$document = $this->createDocumentWithHtml($html);
16-
$compiler = new Compiler($document);
13+
$compiler = $this->createCompiler($html);
1714

1815
$actual = $compiler->convert();
1916

0 commit comments

Comments
 (0)