Merge branch 'master' of https://git.mcnd.ca/mcndave/picea-ui
This commit is contained in:
commit
6020fa300d
|
@ -178,7 +178,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
||||||
}
|
}
|
||||||
else if ( !is_numeric($key) ) {
|
else if ( !is_numeric($key) ) {
|
||||||
# will output something like <tag $key=$value></tag>
|
# will output something like <tag $key=$value></tag>
|
||||||
$attributesList[] = "$key=\"$value\"";
|
$attributesList[] = strpos($value, '"') !== false ? "$key='$value'" : "$key=\"$value\"";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# will output something like <tag $value></tag>
|
# will output something like <tag $value></tag>
|
||||||
|
@ -186,7 +186,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$content = "";
|
$content = "";
|
||||||
|
|
||||||
foreach ( $this->childs as $item ) {
|
foreach ( $this->childs as $item ) {
|
||||||
|
@ -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;
|
return $this->content . $content;
|
||||||
}
|
}
|
||||||
else {
|
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)
|
# 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;
|
$opentag = $this->options['force-tag-open'] . $compiledAttributes;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -217,7 +217,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
||||||
$closetag = "";
|
$closetag = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif ( in_array('force-tag-close', $this->options) ) {
|
elseif ( in_array('force-tag-close', $this->options, true) ) {
|
||||||
$closetag = $this->options['force-tag-close'];
|
$closetag = $this->options['force-tag-close'];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -346,7 +346,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
||||||
public function jsonSerialize() {
|
public function jsonSerialize() {
|
||||||
return [
|
return [
|
||||||
'tag' => $this->tag,
|
'tag' => $this->tag,
|
||||||
'attr' => $this->attr,
|
'attr' => $this->attributes,
|
||||||
'childs' => $this->childs,
|
'childs' => $this->childs,
|
||||||
'options' => $this->options,
|
'options' => $this->options,
|
||||||
];
|
];
|
||||||
|
@ -404,7 +404,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
||||||
return ! in_array(key($this->childs), [ NULL, FALSE ], true);
|
return ! in_array(key($this->childs), [ NULL, FALSE ], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function is_node($obj) : bool
|
public static function isNode($obj) : bool
|
||||||
{
|
{
|
||||||
return $obj instanceof UiElement;
|
return $obj instanceof UiElement;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
namespace Picea\Ui\Form;
|
namespace Picea\Ui\Form;
|
||||||
|
|
||||||
class UiCheckbox extends UiInput {
|
class UiCheckbox extends UiRadio {
|
||||||
|
|
||||||
public string $token = "ui.checkbox";
|
public string $token = "ui.checkbox";
|
||||||
|
|
||||||
public array $attributes = [
|
public array $attributes = [
|
||||||
'class' => "ui-checkbox",
|
'class' => "ui-checkbox",
|
||||||
'type' => "checkbox",
|
'type' => "checkbox",
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,12 @@ class UiForm extends UiElement implements Extension {
|
||||||
|
|
||||||
$this->option('tag-type', 'single');
|
$this->option('tag-type', 'single');
|
||||||
|
|
||||||
|
|
||||||
|
if ($attributes['class'] ?? false) {
|
||||||
|
$attributes['class'] .= " {$this->attributes['class']}";
|
||||||
|
unset($this->attributes['class']);
|
||||||
|
}
|
||||||
|
|
||||||
$this->attributes([ 'method' => $method, 'action' => $action ] + $attributes);
|
$this->attributes([ 'method' => $method, 'action' => $action ] + $attributes);
|
||||||
|
|
||||||
if ( $method !== "get" ) {
|
if ( $method !== "get" ) {
|
||||||
|
|
|
@ -21,15 +21,34 @@ class UiInput extends UiElement implements Extension {
|
||||||
'tag-type' => "single",
|
'tag-type' => "single",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected /* ? mixed */ $value;
|
||||||
|
|
||||||
|
protected string $name;
|
||||||
|
|
||||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||||
{
|
{
|
||||||
return "<?php echo ( new \\" . static::class . "() )->buildHtml($arguments) ?>";
|
return "<?php echo ( new \\" . static::class . "() )->buildHtml($arguments) ?>";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildHtml(string $name, ? string $value = null, array $attributes = []) : string
|
public function buildHtml(string $name, /*? mixed */ $value = null, array $attributes = [], array $options = []) : string
|
||||||
{
|
{
|
||||||
$this->setValue($value);
|
$this->name = $name;
|
||||||
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes);
|
|
||||||
|
if (null !== $this->value = $value) {
|
||||||
|
$this->setValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($options) {
|
||||||
|
$this->options += $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($attributes['class'] ?? false) {
|
||||||
|
$attributes['class'] .= " {$this->attributes['class']}";
|
||||||
|
unset($this->attributes['class']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes + $this->objectAttribute());
|
||||||
|
|
||||||
return $this->render();
|
return $this->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,5 +56,9 @@ class UiInput extends UiElement implements Extension {
|
||||||
{
|
{
|
||||||
$this->attributes['value'] = $value;
|
$this->attributes['value'] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function objectAttribute() : array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,6 @@ class UiNumeric extends UiInput {
|
||||||
|
|
||||||
public array $attributes = [
|
public array $attributes = [
|
||||||
'class' => "ui-numeric",
|
'class' => "ui-numeric",
|
||||||
'type' => "numeric",
|
'type' => "number",
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,21 @@ namespace Picea\Ui\Form;
|
||||||
|
|
||||||
class UiRadio extends UiInput {
|
class UiRadio extends UiInput {
|
||||||
|
|
||||||
public string $token = "ui.radio";
|
public string $token = "ui.radio";
|
||||||
|
|
||||||
public array $attributes = [
|
public array $attributes = [
|
||||||
'class' => "ui-radio",
|
'class' => "ui-radio",
|
||||||
'type' => "radio",
|
'type' => "radio",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected function objectAttribute() : array
|
||||||
|
{
|
||||||
|
if ( ( $this->options['value'] ?? false ) && ( $this->options['value'] === $this->value ) ) {
|
||||||
|
return [
|
||||||
|
'checked' => "checked"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,26 +38,23 @@ class UiSelect extends UiElement implements Extension {
|
||||||
protected function setList(array $list, $selected, bool $strict = true) : void
|
protected function setList(array $list, $selected, bool $strict = true) : void
|
||||||
{
|
{
|
||||||
foreach($list as $key => $item) {
|
foreach($list as $key => $item) {
|
||||||
$isSelected = $this->isSelected($key, $selected, $strict);
|
|
||||||
|
|
||||||
if ($item instanceof UiElement) {
|
if ($item instanceof UiElement) {
|
||||||
|
|
||||||
$this->append($item);
|
$this->append($item);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
elseif ( is_array($item) ) {
|
elseif ( is_array($item) ) {
|
||||||
$obj = new UiElement("optgroup");
|
$obj = new UiElement("optgroup");
|
||||||
$obj->text($key);
|
$obj->attributes(['label' => $key]);
|
||||||
|
|
||||||
foreach($item as $subKey => $subItem) {
|
foreach($item as $subKey => $subItem) {
|
||||||
$obj->append($this->createOption((string) $subItem, $subKey, $isSelected));
|
$obj->append($this->createOption((string) $subItem, $subKey, $this->isSelected($subKey, $selected, $strict)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$obj = $this->createOption((string) $item, $key, $isSelected);
|
$obj = $this->createOption((string) $item, $key, $this->isSelected($key, $selected, $strict));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->append($obj);
|
$this->append($obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,14 +74,6 @@ class UiSelect extends UiElement implements Extension {
|
||||||
|
|
||||||
protected function isSelected($check, $value, bool $strict = true) : bool
|
protected function isSelected($check, $value, bool $strict = true) : bool
|
||||||
{
|
{
|
||||||
|
|
||||||
if (false !== ( $f = filter_var($value, FILTER_VALIDATE_INT) ) ) {
|
|
||||||
$value = $f;
|
|
||||||
}
|
|
||||||
elseif (false !== ( $f = filter_var($value, FILTER_VALIDATE_FLOAT) ) ) {
|
|
||||||
$value = $f;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $strict ? $check === $value : $check == $value;
|
return $strict ? $check === $value : $check == $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,15 +28,17 @@ class FormHandler {
|
||||||
$this->context = method_exists($form, 'getContext') ? $form->getContext($request) : new FormContext($request);
|
$this->context = method_exists($form, 'getContext') ? $form->getContext($request) : new FormContext($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->request->context = $this->context;
|
||||||
|
|
||||||
$this->formSent();
|
$this->formSent();
|
||||||
$this->initialize();
|
$this->initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function formSent() : void
|
public function formSent() : void
|
||||||
{
|
{
|
||||||
if ( false !== $this->context->formSent = $this->sent ) {
|
if ( false !== $this->context->formSent = $this->sent ) {
|
||||||
if ( $this->context->formName ?? false ) {
|
if ( $this->context->formName ?? false ) {
|
||||||
$this->context->formSent = (bool) ( $this->request->getParsedBody()['picea-ui-form'][$this->context->formName] ?? false );
|
$this->sent = $this->context->formSent = (bool) ( $this->request->getParsedBody()['picea-ui-form'][$this->context->formName] ?? false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue