-
-
Notifications
You must be signed in to change notification settings - Fork 110
Expand file tree
/
Copy pathOptGroup.php
More file actions
159 lines (130 loc) · 3.71 KB
/
Copy pathOptGroup.php
File metadata and controls
159 lines (130 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
/*
* Textpattern Content Management System
* https://textpattern.com/
*
* Copyright (C) 2026 The Textpattern Development Team
*
* This file is part of Textpattern.
*
* Textpattern is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, version 2.
*
* Textpattern is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Textpattern. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* An <optgroup /> tag and collection of options.
*
* Only used for creating select list components.
*
* @since 4.9.0
* @package UI
*/
namespace Textpattern\UI;
class OptGroup extends Tag implements UICollectionInterface
{
/**
* TagCollection of options in the group.
*
* @var array
*/
protected $options = null;
/**
* Construct a single optgroup element.
*
* @param string $label The optgroup label
* @param \Textpattern\UI\TagCollection $options The options to add to the group
*/
public function __construct($label, $options = null)
{
$this->setKey($label);
parent::__construct('optgroup');
$this->setAtt('label', $label);
if ($options instanceof \Textpattern\UI\TagCollection) {
$this->options = $options;
} else {
$this->options = new \Textpattern\UI\TagCollection();
}
}
/**
* Add an option to the select group.
*
* The value and label will be internally escaped and assume dir="auto". Chainable.
*
* @param string $value The option key (HTML value attribute)
* @param string $label The option text
* @param boolean $checked True if the option is to be selected
*/
public function addOption($value, $label, $checked = false)
{
$option = new \Textpattern\UI\Option(
txpspecialchars($value),
txpspecialchars($label),
$checked
);
$option->setAtt('dir', 'auto');
$this->options->add($option, $value);
return $this;
}
/**
* Add an item to the collection. Chainable.
*
* @param object $item The interface component
* @param string $key Optional reference to the object in the collection
* @return this
*/
public function add($item, $key = null)
{
$this->options->add($item, $key);
return $this;
}
/**
* Remove an element from the collection. Chainable.
*
* @param string $key The reference to the object in the collection
* @return this
*/
public function remove($key)
{
$this->options->remove($key);
return $this;
}
/**
* Fetch an element from the collection.
*
* @param string $key The reference to the object in the collection
* @return object
*/
public function get($key)
{
return $this->options->get($key);
}
/**
* Fetch the list of keys in use.
*/
public function keys()
{
return array_keys($this->options);
}
/**
* Add the options as content and draw them.
*
* @return string HTML
*/
public function render($flavour = null)
{
$out = array();
foreach ($this->options as $option) {
$out[] = $option->render();
}
$this->setContent(n.join(n, $out).n);
return parent::render($flavour);
}
}