Check for deferred color prop when defining variable variable & some fixlets for naming issue

This commit is contained in:
Yonas Habteab 2022-06-29 09:42:53 +02:00 committed by Johannes Meyer
parent a2932bd5ce
commit 5a04480245
4 changed files with 20 additions and 6 deletions

View File

@ -34,7 +34,7 @@ class Call extends Less_Tree_Call
} }
if ($name) { if ($name) {
foreach (array_reverse($env->frames) as $frame) { foreach ($env->frames as $frame) {
if (($v = $frame->variable($name))) { if (($v = $frame->variable($name))) {
// Variables from the frame stack are always of type LESS Tree Rule // Variables from the frame stack are always of type LESS Tree Rule
$vr = $v->value; $vr = $v->value;

View File

@ -38,7 +38,11 @@ class ColorProp extends Less_Tree_Color
$self->color = $color; $self->color = $color;
foreach ($color as $k => $v) { foreach ($color as $k => $v) {
$self->$k = $v; if ($k === 'name') {
$self->setName($v); // Removes the @ char from the name
} else {
$self->$k = $v;
}
} }
return $self; return $self;
@ -79,6 +83,10 @@ class ColorProp extends Less_Tree_Color
*/ */
public function setName($name) public function setName($name)
{ {
if ($name[0] === '@') {
$name = substr($name, 1);
}
$this->name = $name; $this->name = $name;
return $this; return $this;

View File

@ -45,7 +45,12 @@ class ColorPropOrVariable extends Less_Tree
// Evaluate variable variable as in Less_Tree_Variable:28. // Evaluate variable variable as in Less_Tree_Variable:28.
$vv = new Less_Tree_Variable(substr($v->name, 1), $v->index + 1, $v->currentFileInfo); $vv = new Less_Tree_Variable(substr($v->name, 1), $v->index + 1, $v->currentFileInfo);
// Overwrite the name so that the variable variable is not evaluated again. // Overwrite the name so that the variable variable is not evaluated again.
$v->name = '@' . $vv->compile($env)->value; $result = $vv->compile($env);
if ($result instanceof DeferredColorProp) {
$v->name = $result->name;
} else {
$v->name = '@' . $result->value;
}
} }
$compiled = $v->compile($env); $compiled = $v->compile($env);
@ -58,7 +63,7 @@ class ColorPropOrVariable extends Less_Tree
if ($compiled instanceof Less_Tree_Color) { if ($compiled instanceof Less_Tree_Color) {
return ColorProp::fromColor($compiled) return ColorProp::fromColor($compiled)
->setIndex($v->index) ->setIndex($v->index)
->setName(substr($v->name, 1)); ->setName($v->name);
} }
return $compiled; return $compiled;

View File

@ -5,6 +5,7 @@ namespace Icinga\Less;
use Less_Exception_Compiler; use Less_Exception_Compiler;
use Less_Tree_Call; use Less_Tree_Call;
use Less_Tree_Color; use Less_Tree_Color;
use Less_Tree_Keyword;
use Less_Tree_Value; use Less_Tree_Value;
use Less_Tree_Variable; use Less_Tree_Variable;
@ -89,7 +90,7 @@ class DeferredColorProp extends Less_Tree_Variable
$this->evaluating = true; $this->evaluating = true;
foreach (array_reverse($env->frames) as $frame) { foreach ($env->frames as $frame) {
if (($v = $frame->variable($this->getRef()->name))) { if (($v = $frame->variable($this->getRef()->name))) {
$rv = $v->value; $rv = $v->value;
if ($rv instanceof Less_Tree_Value) { if ($rv instanceof Less_Tree_Value) {
@ -122,7 +123,7 @@ class DeferredColorProp extends Less_Tree_Variable
$css = (new Less_Tree_Call( $css = (new Less_Tree_Call(
'var', 'var',
[ [
new \Less_Tree_Keyword('--' . $this->getName()), new Less_Tree_Keyword('--' . $this->getName()),
$this->getRef() // Each of the references will be generated recursively $this->getRef() // Each of the references will be generated recursively
], ],
$this->index $this->index