1: <?php
2:
3: 4: 5: 6:
7:
8: namespace Nette\Forms\Controls;
9:
10: use Nette;
11: use Nette\Forms\Form;
12:
13:
14: 15: 16:
17: class TextInput extends TextBase
18: {
19:
20: 21: 22: 23:
24: public function __construct($label = NULL, $maxLength = NULL)
25: {
26: parent::__construct($label);
27: $this->control->maxlength = $maxLength;
28: $this->setOption('type', 'text');
29: }
30:
31:
32: 33: 34: 35:
36: public function loadHttpData()
37: {
38: $this->setValue($this->getHttpData(Form::DATA_LINE));
39: }
40:
41:
42: 43: 44: 45: 46:
47: public function setType($type)
48: {
49: $this->control->type = $type;
50: return $this;
51: }
52:
53:
54: 55: 56: 57:
58: public function getControl()
59: {
60: return parent::getControl()->addAttributes([
61: 'value' => $this->control->type === 'password' ? $this->control->value : $this->getRenderedValue(),
62: 'type' => $this->control->type ?: 'text',
63: ]);
64: }
65:
66:
67: public function addRule($validator, $message = NULL, $arg = NULL)
68: {
69: if ($this->control->type === NULL && in_array($validator, [Form::EMAIL, Form::URL, Form::INTEGER], TRUE)) {
70: static $types = [Form::EMAIL => 'email', Form::URL => 'url', Form::INTEGER => 'number'];
71: $this->control->type = $types[$validator];
72:
73: } elseif (in_array($validator, [Form::MIN, Form::MAX, Form::RANGE], TRUE)
74: && in_array($this->control->type, ['number', 'range', 'datetime-local', 'datetime', 'date', 'month', 'week', 'time'], TRUE)
75: ) {
76: if ($validator === Form::MIN) {
77: $range = [$arg, NULL];
78: } elseif ($validator === Form::MAX) {
79: $range = [NULL, $arg];
80: } else {
81: $range = $arg;
82: }
83: if (isset($range[0]) && is_scalar($range[0])) {
84: $this->control->min = isset($this->control->min) ? max($this->control->min, $range[0]) : $range[0];
85: }
86: if (isset($range[1]) && is_scalar($range[1])) {
87: $this->control->max = isset($this->control->max) ? min($this->control->max, $range[1]) : $range[1];
88: }
89:
90: } elseif ($validator === Form::PATTERN && is_scalar($arg)
91: && in_array($this->control->type, [NULL, 'text', 'search', 'tel', 'url', 'email', 'password'], TRUE)
92: ) {
93: $this->control->pattern = $arg;
94: }
95:
96: return parent::addRule($validator, $message, $arg);
97: }
98:
99: }
100: