Skip to content

Commit d1f2638

Browse files
authored
Merge pull request #52 from tronsha/bugfix/encoded-attributes
Fix binding for all encoded attributes
2 parents c18c05b + 1815929 commit d1f2638

File tree

4 files changed

+51
-5
lines changed

4 files changed

+51
-5
lines changed

src/Compiler.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,27 @@ private function handleAttributeBinding(DOMElement $node): void
415415
Replacements::getSanitizedConstant('DOUBLE_CURLY_CLOSE');
416416
}
417417

418-
$node->setAttribute(
419-
$name === 'src' ? Replacements::getSanitizedConstant('SRC_ATTRIBUTE_NAME') : $name,
420-
$this->implodeAttributeValue($name, $dynamicValues, $staticValues)
421-
);
418+
/** @see https://gitlab.gnome.org/GNOME/libxml2/-/blob/LIBXML2.6.32/HTMLtree.c#L657 */
419+
switch ($name) {
420+
case 'href':
421+
$name = Replacements::getSanitizedConstant('ATTRIBUTE_NAME_HREF');
422+
break;
423+
case 'action':
424+
$name = Replacements::getSanitizedConstant('ATTRIBUTE_NAME_ACTION');
425+
break;
426+
case 'src':
427+
$name = Replacements::getSanitizedConstant('ATTRIBUTE_NAME_SRC');
428+
break;
429+
case 'name':
430+
if ($node->tagName === 'a') {
431+
$name = Replacements::getSanitizedConstant('ATTRIBUTE_NAME_A_NAME');
432+
}
433+
break;
434+
default:
435+
break;
436+
}
437+
438+
$node->setAttribute($name, $this->implodeAttributeValue($name, $dynamicValues, $staticValues));
422439
}
423440
}
424441

src/Models/Replacements.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ abstract class Replacements extends BasicEnum
1212
public const SMALLER = '<';
1313
public const AMPERSAND = '&';
1414
public const PIPE = '|';
15-
public const SRC_ATTRIBUTE_NAME = 'src';
15+
public const ATTRIBUTE_NAME_HREF = 'href';
16+
public const ATTRIBUTE_NAME_ACTION = 'action';
17+
public const ATTRIBUTE_NAME_SRC = 'src';
18+
public const ATTRIBUTE_NAME_A_NAME = 'name';
1619

1720
/**
1821
* Removes all instances of replacements from target
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="{{class|default('')}}">
2+
<a href="{{isBool ? varA.url : varB.url}}">
3+
<img src="{{isBool ? varA.src : varB.src}}" alt="{{isBool ? varA.alt : varB.alt}}">
4+
</a>
5+
<form method="get" action="{{isBool ? varA.url : varB.url}}">
6+
<label>
7+
<input type="text" name="{{isBool ? varA.name : varB.name}}">
8+
</label>
9+
<input type="submit">
10+
</form>
11+
<a name="{{isBool ? varA.anchor : varB.anchor}}"></a>
12+
</div>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<template>
2+
<div>
3+
<a :href="isBool ? varA.url : varB.url">
4+
<img :src="isBool ? varA.src : varB.src" :alt="isBool ? varA.alt : varB.alt">
5+
</a>
6+
<form :action="isBool ? varA.url : varB.url" method="get">
7+
<label>
8+
<input type="text" :name="isBool ? varA.name : varB.name">
9+
</label>
10+
<input type="submit">
11+
</form>
12+
<a :name="isBool ? varA.anchor : varB.anchor"/>
13+
</div>
14+
</template>

0 commit comments

Comments
 (0)