- Corrected inputs handling from view to compiled states
- Added UiSelect widget - Fixed UiForm widget - Fixed UiInput widget - Added mocks of UiMessage and UiPopup. Not even a WIP at this stage.
This commit is contained in:
parent
4bf08def27
commit
f28ace745d
|
@ -230,7 +230,7 @@ class UiElement implements \ArrayAccess, \Iterator, \JsonSerializable {
|
|||
|
||||
public function text(?string $set = null) {
|
||||
if ($set !== null) {
|
||||
$this->content = htmlspecialchars( $args[0], ENT_NOQUOTES );
|
||||
$this->content = htmlspecialchars( $set, ENT_NOQUOTES );
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace Picea\Ui\Component;
|
||||
|
||||
use Picea\Ui\Common\UiElement;
|
||||
use Picea\Extension\Extension;
|
||||
use Picea\Extension\ExtensionTrait;
|
||||
|
||||
class UiMessage extends UiElement implements Extension {
|
||||
use ExtensionTrait;
|
||||
|
||||
public string $token = "ui.message";
|
||||
|
||||
public string $tag = "input";
|
||||
|
||||
public array $attributes = [
|
||||
'class' => 'ui-message',
|
||||
];
|
||||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace Picea\Ui\Component;
|
||||
|
||||
use Picea\Ui\Common\UiElement;
|
||||
use Picea\Extension\Extension;
|
||||
use Picea\Extension\ExtensionTrait;
|
||||
|
||||
class UiPopup extends UiElement implements Extension {
|
||||
use ExtensionTrait;
|
||||
|
||||
public string $token = "ui.popup";
|
||||
|
||||
public string $tag = "input";
|
||||
|
||||
public array $attributes = [
|
||||
'class' => 'ui-popup',
|
||||
];
|
||||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -11,7 +11,7 @@ class UiForm extends UiElement implements Extension {
|
|||
|
||||
public string $defaultMethod = "get";
|
||||
|
||||
public array $token = [ "ui.form", "ui.endform", "ui.form.get", "ui.form.post" ];
|
||||
public array $token = [ "ui.form", "ui.endform", "ui.form.get", "ui.form.post", "ui.form.patch", "ui.form.delete", "ui.form.put" ];
|
||||
|
||||
public string $tag = "form";
|
||||
|
||||
|
@ -21,33 +21,39 @@ class UiForm extends UiElement implements Extension {
|
|||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||
{
|
||||
if ( $token === 'ui.endform' ) {
|
||||
return "</form>";
|
||||
}
|
||||
|
||||
list($action, $options) = array_pad(explode(',', $arguments), 2, null);
|
||||
|
||||
$action = $this->trim($action);
|
||||
|
||||
switch($token) {
|
||||
case 'ui.endform':
|
||||
return "</form>";
|
||||
|
||||
case "ui.form.get":
|
||||
$this->attributes['method'] = "get";
|
||||
$method = "get";
|
||||
break;
|
||||
|
||||
case "ui.form.patch":
|
||||
$method = "patch";
|
||||
break;
|
||||
|
||||
case "ui.form.delete":
|
||||
$method = "delete";
|
||||
break;
|
||||
|
||||
case "ui.form.put":
|
||||
$method = "put";
|
||||
break;
|
||||
|
||||
case "ui.form.post":
|
||||
$this->attributes['method'] = "post";
|
||||
$this->attributes['enctype'] = "multipart/form-data";
|
||||
break;
|
||||
|
||||
default:
|
||||
case $this->token:
|
||||
$this->attributes['method'] = $this->defaultMethod;
|
||||
$method = "post";
|
||||
break;
|
||||
}
|
||||
|
||||
$method ??= $this->defaultMethod;
|
||||
return "<?php echo ( new \\" . static::class . "() )->buildHtml('$method', $arguments) ?>";
|
||||
}
|
||||
|
||||
public function buildHtml(string $method, string $action, array $attributes = []) : string
|
||||
{
|
||||
$this->option('tag-type', 'single');
|
||||
$this->attributes['action'] = $this->trim($action);
|
||||
$this->attributes($this->parseOptions($options));
|
||||
return $this->render();
|
||||
$this->attributes([ 'action' => $action ] + $attributes);
|
||||
return $this->render() . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,14 +19,15 @@ class UiInput extends UiElement implements Extension {
|
|||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) : string
|
||||
{
|
||||
list($name, $value, $options) = array_pad(explode(',', $arguments), 3, null);
|
||||
|
||||
$this->attributes['name'] = $this->trim($name);
|
||||
$this->setValue($this->trim($value));
|
||||
$this->attributes($this->parseOptions($options));
|
||||
return $this->render();
|
||||
return "<?php echo ( new \\" . static::class . "() )->buildHtml($arguments) ?>";
|
||||
}
|
||||
|
||||
public function buildHtml(string $name, string $value, array $attributes = []) : string
|
||||
{
|
||||
$this->setValue($value);
|
||||
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes);
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
protected function setValue($value) : void
|
||||
{
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace Picea\Ui\Form;
|
||||
|
||||
use Picea\Ui\Common\UiElement;
|
||||
use Picea\Extension\Extension;
|
||||
use Picea\Extension\ExtensionTrait;
|
||||
|
||||
class UiSelect extends UiElement implements Extension {
|
||||
use ExtensionTrait;
|
||||
|
||||
public string $token = "ui.select";
|
||||
|
||||
public string $tag = "select";
|
||||
|
||||
public array $attributes = [
|
||||
'class' => 'ui-select',
|
||||
];
|
||||
|
||||
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, array $list, $value, array $attributes = [], bool $strictComparison = true) : string
|
||||
{
|
||||
$this->attributes([ 'name' => $name ] + $attributes + $this->attributes);
|
||||
$this->setList($list, $value, $strictComparison);
|
||||
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
protected function setValue($value) : void
|
||||
{
|
||||
$this->attributes['value'] = $value;
|
||||
}
|
||||
|
||||
protected function setList(array $list, $selected, bool $strict = true) : void
|
||||
{
|
||||
foreach($list as $key => $item) {
|
||||
if ($item instanceof UiElement) {
|
||||
$this->append($item);
|
||||
}
|
||||
elseif ( is_array($item) ) {
|
||||
$obj = new UiElement("optgroup");
|
||||
$obj->text($key);
|
||||
|
||||
foreach($item as $subKey => $subItem) {
|
||||
$obj->append($this->createOption($subItem, $subKey, $strict ? $subKey === $selected : $subKey == $selected));
|
||||
}
|
||||
}
|
||||
else {
|
||||
$obj = $this->createOption($item, $key, $strict ? $key === $selected : $key == $selected);
|
||||
}
|
||||
|
||||
$this->append($obj);
|
||||
}
|
||||
}
|
||||
|
||||
protected function createOption(string $name, string $value, bool $selected, array $attributes = []) : UiElement
|
||||
{
|
||||
$option = new UiElement("option");
|
||||
$option->text($name);
|
||||
$option->attributes($attributes + [ 'value' => $value ]);
|
||||
|
||||
return $option;
|
||||
}
|
||||
}
|
|
@ -27,6 +27,9 @@ class Ui {
|
|||
$compiler->registerExtension(new Form\UiTime());
|
||||
$compiler->registerExtension(new Form\UiUrl());
|
||||
$compiler->registerExtension(new Form\UiWeek());
|
||||
$compiler->registerExtension(new Form\UiSelect());
|
||||
|
||||
$compiler->registerExtension(new Component\UiPopup());
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue