%PDF- %PDF-
| Direktori : /www/varak.net/losik.varak.net/vendor/nette/forms/src/Forms/Controls/ |
| Current File : /www/varak.net/losik.varak.net/vendor/nette/forms/src/Forms/Controls/CheckboxList.php |
<?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
declare(strict_types=1);
namespace Nette\Forms\Controls;
use Nette;
use Nette\Utils\Html;
/**
* Set of checkboxes.
*
* @property-read Html $separatorPrototype
* @property-read Html $containerPrototype
* @property-read Html $itemLabelPrototype
*/
class CheckboxList extends MultiChoiceControl
{
/** @var Html separator element template */
protected $separator;
/** @var Html container element template */
protected $container;
/** @var Html item label template */
protected $itemLabel;
/**
* @param string|object $label
*/
public function __construct($label = null, ?array $items = null)
{
parent::__construct($label, $items);
$this->control->type = 'checkbox';
$this->container = Html::el();
$this->separator = Html::el('br');
$this->itemLabel = Html::el('label');
$this->setOption('type', 'checkbox');
}
public function loadHttpData(): void
{
$data = $this->getForm()->getHttpData(Nette\Forms\Form::DataText, substr($this->getHtmlName(), 0, -2));
$data = $data === null
? $this->getHttpData(Nette\Forms\Form::DataText)
: explode(',', $data);
$this->value = array_keys(array_flip($data));
if (is_array($this->disabled)) {
$this->value = array_diff($this->value, array_keys($this->disabled));
}
}
public function getControl(): Html
{
$input = parent::getControl();
$items = $this->getItems();
reset($items);
return $this->container->setHtml(
Nette\Forms\Helpers::createInputList(
$this->translate($items),
array_merge($input->attrs, [
'id' => null,
'checked?' => $this->value,
'disabled:' => $this->disabled,
'required' => null,
'data-nette-rules:' => [key($items) => $input->attrs['data-nette-rules']],
]),
$this->itemLabel->attrs,
$this->separator
)
);
}
public function getLabel($caption = null): Html
{
return parent::getLabel($caption)->for(null);
}
public function getControlPart($key = null): Html
{
$key = key([(string) $key => null]);
return parent::getControl()->addAttributes([
'id' => $this->getHtmlId() . '-' . $key,
'checked' => in_array($key, (array) $this->value, true),
'disabled' => is_array($this->disabled) ? isset($this->disabled[$key]) : $this->disabled,
'required' => null,
'value' => $key,
]);
}
public function getLabelPart($key = null): Html
{
$itemLabel = clone $this->itemLabel;
return func_num_args()
? $itemLabel->setText($this->translate($this->items[$key]))->for($this->getHtmlId() . '-' . $key)
: $this->getLabel();
}
/**
* Returns separator HTML element template.
*/
public function getSeparatorPrototype(): Html
{
return $this->separator;
}
/**
* Returns container HTML element template.
*/
public function getContainerPrototype(): Html
{
return $this->container;
}
/**
* Returns item label HTML element template.
*/
public function getItemLabelPrototype(): Html
{
return $this->itemLabel;
}
}