Skip to content

Commit 806afa6

Browse files
authored
Merge pull request #7 from Paneon/feature/6
#6 Handle template strings
2 parents 9399dff + f45a71b commit 806afa6

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

src/Compiler.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,23 @@ private function handleAttributeBinding(DOMElement $node)
173173
$node->setAttribute($name, implode(' ', $classes));
174174
}
175175
}
176+
/*
177+
* <div :class="`abc ${someDynamicClass}`">
178+
*/
179+
elseif(preg_match('/^`(?P<content>.+)`$/', $value, $matches)) {
180+
$templateStringContent = $matches['content'];
181+
182+
$templateStringContent = preg_replace(
183+
'/\$\{(.+)\}/',
184+
'{{ $1 }}',
185+
$templateStringContent
186+
);
187+
188+
$node->setAttribute($name, $templateStringContent);
189+
}
190+
else {
191+
$this->logger->warning('- No Handling for: '.$value);
192+
}
176193

177194
$this->logger->debug('=> remove original '.$attribute->name);
178195
$node->removeAttribute($attribute->name);
@@ -303,17 +320,22 @@ private function getRootNode(DOMElement $element): \DOMNode
303320
$tagNodes = 0;
304321
$firstTagNode = null;
305322

323+
/** @var DOMNode $node */
306324
foreach ($nodes as $node) {
307325
if ($node->nodeType === XML_TEXT_NODE) {
308326
continue;
309-
} else {
327+
}
328+
elseif(in_array($node->nodeName, ['script', 'style'])) {
329+
continue;
330+
}
331+
else {
310332
$tagNodes++;
311333
$firstTagNode = $node;
312334
}
313335
}
314336

315337
if ($tagNodes > 1) {
316-
throw new Exception('Template should have only one root node');
338+
//throw new Exception('Template should have only one root node');
317339
}
318340

319341
return $firstTagNode;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="block">
2+
<div class="block block--{{ modifier }}" style="fill: {{ color }}">
3+
Hello World
4+
</div>
5+
</div>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<template>
2+
<div class="block">
3+
<div :class="`block block--${modifier}`" :style="`fill: ${color}`">
4+
Hello World
5+
</div>
6+
</div>
7+
</template>
8+
9+
<script>
10+
export default {
11+
props: {
12+
modifier: {
13+
type: String,
14+
required: true,
15+
},
16+
},
17+
};
18+
</script>

0 commit comments

Comments
 (0)