- Fixed a bug caused by JsonSerialization and old code accessing attributes.
- Fixed Checkbox and Radio checked using a 4th option parameter
This commit is contained in:
parent
23e8eb71f6
commit
48536ab11d
|
@ -178,7 +178,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
|||
}
|
||||
else if ( !is_numeric($key) ) {
|
||||
# will output something like <tag $key=$value></tag>
|
||||
$attributesList[] = "$key=\"$value\"";
|
||||
$attributesList[] = strpos($value, '"') !== false ? "$key='$value'" : "$key=\"$value\"";
|
||||
}
|
||||
else {
|
||||
# will output something like <tag $value></tag>
|
||||
|
@ -198,14 +198,14 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
|||
}
|
||||
}
|
||||
|
||||
if ( in_array('no-tag', $this->options) ) {
|
||||
if ( in_array('no-tag', $this->options, true) ) {
|
||||
return $this->content . $content;
|
||||
}
|
||||
else {
|
||||
$compiledAttributes = (count($attributesList) && ! in_array('no-attr', $this->options) ? " " . implode(" ", $attributesList) : "");
|
||||
$compiledAttributes = (count($attributesList) && ! in_array('no-attr', $this->options, true) ? " " . implode(" ", $attributesList) : "");
|
||||
|
||||
# Force the node to contain a certain opening tag (php is a good example)
|
||||
if ( in_array('force-tag-open', $this->options) ) {
|
||||
if ( in_array('force-tag-open', $this->options, true) ) {
|
||||
$opentag = $this->options['force-tag-open'] . $compiledAttributes;
|
||||
}
|
||||
else {
|
||||
|
@ -217,7 +217,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
|||
$closetag = "";
|
||||
}
|
||||
}
|
||||
elseif ( in_array('force-tag-close', $this->options) ) {
|
||||
elseif ( in_array('force-tag-close', $this->options, true) ) {
|
||||
$closetag = $this->options['force-tag-close'];
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Picea\Ui\Form;
|
||||
|
||||
class UiCheckbox extends UiInput {
|
||||
class UiCheckbox extends UiRadio {
|
||||
|
||||
public string $token = "ui.checkbox";
|
||||
|
||||
|
|
|
@ -21,15 +21,29 @@ class UiInput extends UiElement implements Extension {
|
|||
'tag-type' => "single",
|
||||
];
|
||||
|
||||
protected ? string $value;
|
||||
|
||||
protected string $name;
|
||||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||
{
|
||||
return "<?php echo ( new \\" . static::class . "() )->buildHtml($arguments) ?>";
|
||||
}
|
||||
|
||||
public function buildHtml(string $name, ? string $value = null, array $attributes = []) : string
|
||||
public function buildHtml(string $name, ? string $value = null, array $attributes = [], array $options = []) : string
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
if (null !== $this->value = $value) {
|
||||
$this->setValue($value);
|
||||
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes);
|
||||
}
|
||||
|
||||
if ($options) {
|
||||
$this->options += $options;
|
||||
}
|
||||
|
||||
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes + $this->objectAttribute());
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
|
@ -38,4 +52,8 @@ class UiInput extends UiElement implements Extension {
|
|||
$this->attributes['value'] = $value;
|
||||
}
|
||||
|
||||
protected function objectAttribute() : array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,4 +10,15 @@ class UiRadio extends UiInput {
|
|||
'class' => "ui-radio",
|
||||
'type' => "radio",
|
||||
];
|
||||
|
||||
protected function objectAttribute() : array
|
||||
{
|
||||
if ( $this->options['value'] ?? false && ( $this->options['value'] === $this->value ) ) {
|
||||
return [
|
||||
'checked' => "checked"
|
||||
];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue