Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions src/Compiler.php
Original file line number Diff line number Diff line change
Expand Up @@ -387,11 +387,14 @@ private function handleAttributeBinding(DOMElement $node)
*/
$templateStringContent = $matches['content'];

$templateStringContent = preg_replace(
'/\$\{([^}]+)\}/',
'{{ $1 }}',
$templateStringContent
);
preg_match_all('/\$\{([^}]+)\}/', $templateStringContent, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$templateStringContent = str_replace(
$match[0],
'{{ ' . $this->builder->refactorCondition($match[1]) . ' }}',
$templateStringContent
);
}

$dynamicValues[] = $templateStringContent;
} else {
Expand All @@ -404,7 +407,7 @@ private function handleAttributeBinding(DOMElement $node)
}

$node->setAttribute(
$name,
$name === 'src' ? Replacements::getSanitizedConstant('SRC_ATTRIBUTE_NAME') : $name,
$this->implodeAttributeValue($name, $dynamicValues, $staticValues)
);
}
Expand Down
1 change: 1 addition & 0 deletions src/Models/Replacements.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ abstract class Replacements extends BasicEnum
public const SMALLER = '<';
public const AMPERSAND = '&';
public const PIPE = '|';
public const SRC_ATTRIBUTE_NAME = 'src';

/**
* Removes all instances of replacements from target
Expand Down
5 changes: 5 additions & 0 deletions tests/fixtures/vue-bind/binding-with-template-string-3.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<div class="block {{class|default('')}}">
<div style="width: {{ 100 / items|length }}%;">
Hello World
</div>
</div>
18 changes: 18 additions & 0 deletions tests/fixtures/vue-bind/binding-with-template-string-3.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<template>
<div class="block">
<div :style="`width: ${100 / items.length}%;`">
Hello World
</div>
</div>
</template>

<script>
export default {
props: {
items: {
type: Array,
required: true,
},
},
};
</script>
3 changes: 3 additions & 0 deletions tests/fixtures/vue-bind/bindings-src.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div class="{{class|default('')}}">
<img src="{{isBool ? varA : varB}}">
</div>
5 changes: 5 additions & 0 deletions tests/fixtures/vue-bind/bindings-src.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<template>
<div>
<img :src="isBool ? varA : varB">
</div>
</template>