Added the Search API Synonym module to deal specifically with licence and license...
[yaffs-website] / vendor / ezyang / htmlpurifier / library / HTMLPurifier / HTMLModule / Forms.php
1 <?php
2
3 /**
4  * XHTML 1.1 Forms module, defines all form-related elements found in HTML 4.
5  */
6 class HTMLPurifier_HTMLModule_Forms extends HTMLPurifier_HTMLModule
7 {
8     /**
9      * @type string
10      */
11     public $name = 'Forms';
12
13     /**
14      * @type bool
15      */
16     public $safe = false;
17
18     /**
19      * @type array
20      */
21     public $content_sets = array(
22         'Block' => 'Form',
23         'Inline' => 'Formctrl',
24     );
25
26     /**
27      * @param HTMLPurifier_Config $config
28      */
29     public function setup($config)
30     {
31         $form = $this->addElement(
32             'form',
33             'Form',
34             'Required: Heading | List | Block | fieldset',
35             'Common',
36             array(
37                 'accept' => 'ContentTypes',
38                 'accept-charset' => 'Charsets',
39                 'action*' => 'URI',
40                 'method' => 'Enum#get,post',
41                 // really ContentType, but these two are the only ones used today
42                 'enctype' => 'Enum#application/x-www-form-urlencoded,multipart/form-data',
43             )
44         );
45         $form->excludes = array('form' => true);
46
47         $input = $this->addElement(
48             'input',
49             'Formctrl',
50             'Empty',
51             'Common',
52             array(
53                 'accept' => 'ContentTypes',
54                 'accesskey' => 'Character',
55                 'alt' => 'Text',
56                 'checked' => 'Bool#checked',
57                 'disabled' => 'Bool#disabled',
58                 'maxlength' => 'Number',
59                 'name' => 'CDATA',
60                 'readonly' => 'Bool#readonly',
61                 'size' => 'Number',
62                 'src' => 'URI#embedded',
63                 'tabindex' => 'Number',
64                 'type' => 'Enum#text,password,checkbox,button,radio,submit,reset,file,hidden,image',
65                 'value' => 'CDATA',
66             )
67         );
68         $input->attr_transform_post[] = new HTMLPurifier_AttrTransform_Input();
69
70         $this->addElement(
71             'select',
72             'Formctrl',
73             'Required: optgroup | option',
74             'Common',
75             array(
76                 'disabled' => 'Bool#disabled',
77                 'multiple' => 'Bool#multiple',
78                 'name' => 'CDATA',
79                 'size' => 'Number',
80                 'tabindex' => 'Number',
81             )
82         );
83
84         $this->addElement(
85             'option',
86             false,
87             'Optional: #PCDATA',
88             'Common',
89             array(
90                 'disabled' => 'Bool#disabled',
91                 'label' => 'Text',
92                 'selected' => 'Bool#selected',
93                 'value' => 'CDATA',
94             )
95         );
96         // It's illegal for there to be more than one selected, but not
97         // be multiple. Also, no selected means undefined behavior. This might
98         // be difficult to implement; perhaps an injector, or a context variable.
99
100         $textarea = $this->addElement(
101             'textarea',
102             'Formctrl',
103             'Optional: #PCDATA',
104             'Common',
105             array(
106                 'accesskey' => 'Character',
107                 'cols*' => 'Number',
108                 'disabled' => 'Bool#disabled',
109                 'name' => 'CDATA',
110                 'readonly' => 'Bool#readonly',
111                 'rows*' => 'Number',
112                 'tabindex' => 'Number',
113             )
114         );
115         $textarea->attr_transform_pre[] = new HTMLPurifier_AttrTransform_Textarea();
116
117         $button = $this->addElement(
118             'button',
119             'Formctrl',
120             'Optional: #PCDATA | Heading | List | Block | Inline',
121             'Common',
122             array(
123                 'accesskey' => 'Character',
124                 'disabled' => 'Bool#disabled',
125                 'name' => 'CDATA',
126                 'tabindex' => 'Number',
127                 'type' => 'Enum#button,submit,reset',
128                 'value' => 'CDATA',
129             )
130         );
131
132         // For exclusions, ideally we'd specify content sets, not literal elements
133         $button->excludes = $this->makeLookup(
134             'form',
135             'fieldset', // Form
136             'input',
137             'select',
138             'textarea',
139             'label',
140             'button', // Formctrl
141             'a', // as per HTML 4.01 spec, this is omitted by modularization
142             'isindex',
143             'iframe' // legacy items
144         );
145
146         // Extra exclusion: img usemap="" is not permitted within this element.
147         // We'll omit this for now, since we don't have any good way of
148         // indicating it yet.
149
150         // This is HIGHLY user-unfriendly; we need a custom child-def for this
151         $this->addElement('fieldset', 'Form', 'Custom: (#WS?,legend,(Flow|#PCDATA)*)', 'Common');
152
153         $label = $this->addElement(
154             'label',
155             'Formctrl',
156             'Optional: #PCDATA | Inline',
157             'Common',
158             array(
159                 'accesskey' => 'Character',
160                 // 'for' => 'IDREF', // IDREF not implemented, cannot allow
161             )
162         );
163         $label->excludes = array('label' => true);
164
165         $this->addElement(
166             'legend',
167             false,
168             'Optional: #PCDATA | Inline',
169             'Common',
170             array(
171                 'accesskey' => 'Character',
172             )
173         );
174
175         $this->addElement(
176             'optgroup',
177             false,
178             'Required: option',
179             'Common',
180             array(
181                 'disabled' => 'Bool#disabled',
182                 'label*' => 'Text',
183             )
184         );
185         // Don't forget an injector for <isindex>. This one's a little complex
186         // because it maps to multiple elements.
187     }
188 }
189
190 // vim: et sw=4 sts=4