'Form', 'Inline' => 'Formctrl' ); /** * * @param HTMLPurifier_Config $config */ public function setup($config) { $form = $this->addElement ( 'form', 'Form', 'Required: Heading | List | Block | fieldset', 'Common', array ( 'accept' => 'ContentTypes', 'accept-charset' => 'Charsets', 'action*' => 'URI', 'method' => 'Enum#get,post', // really ContentType, but these two are the only ones used today 'enctype' => 'Enum#application/x-www-form-urlencoded,multipart/form-data' ) ); $form->excludes = array ( 'form' => true ); $input = $this->addElement ( 'input', 'Formctrl', 'Empty', 'Common', array ( 'accept' => 'ContentTypes', 'accesskey' => 'Character', 'alt' => 'Text', 'checked' => 'Bool#checked', 'disabled' => 'Bool#disabled', 'maxlength' => 'Number', 'name' => 'CDATA', 'readonly' => 'Bool#readonly', 'size' => 'Number', 'src' => 'URI#embedded', 'tabindex' => 'Number', 'type' => 'Enum#text,password,checkbox,button,radio,submit,reset,file,hidden,image', 'value' => 'CDATA' ) ); $input->attr_transform_post [] = new HTMLPurifier_AttrTransform_Input (); $this->addElement ( 'select', 'Formctrl', 'Required: optgroup | option', 'Common', array ( 'disabled' => 'Bool#disabled', 'multiple' => 'Bool#multiple', 'name' => 'CDATA', 'size' => 'Number', 'tabindex' => 'Number' ) ); $this->addElement ( 'option', false, 'Optional: #PCDATA', 'Common', array ( 'disabled' => 'Bool#disabled', 'label' => 'Text', 'selected' => 'Bool#selected', 'value' => 'CDATA' ) ); // It's illegal for there to be more than one selected, but not // be multiple. Also, no selected means undefined behavior. This might // be difficult to implement; perhaps an injector, or a context variable. $textarea = $this->addElement ( 'textarea', 'Formctrl', 'Optional: #PCDATA', 'Common', array ( 'accesskey' => 'Character', 'cols*' => 'Number', 'disabled' => 'Bool#disabled', 'name' => 'CDATA', 'readonly' => 'Bool#readonly', 'rows*' => 'Number', 'tabindex' => 'Number' ) ); $textarea->attr_transform_pre [] = new HTMLPurifier_AttrTransform_Textarea (); $button = $this->addElement ( 'button', 'Formctrl', 'Optional: #PCDATA | Heading | List | Block | Inline', 'Common', array ( 'accesskey' => 'Character', 'disabled' => 'Bool#disabled', 'name' => 'CDATA', 'tabindex' => 'Number', 'type' => 'Enum#button,submit,reset', 'value' => 'CDATA' ) ); // For exclusions, ideally we'd specify content sets, not literal elements $button->excludes = $this->makeLookup ( 'form', 'fieldset', // Form 'input', 'select', 'textarea', 'label', 'button', // Formctrl 'a', // as per HTML 4.01 spec, this is omitted by modularization 'isindex', 'iframe' ) // legacy items ; // Extra exclusion: img usemap="" is not permitted within this element. // We'll omit this for now, since we don't have any good way of // indicating it yet. // This is HIGHLY user-unfriendly; we need a custom child-def for this $this->addElement ( 'fieldset', 'Form', 'Custom: (#WS?,legend,(Flow|#PCDATA)*)', 'Common' ); $label = $this->addElement ( 'label', 'Formctrl', 'Optional: #PCDATA | Inline', 'Common', array ( 'accesskey' => 'Character' ) // 'for' => 'IDREF', // IDREF not implemented, cannot allow ); $label->excludes = array ( 'label' => true ); $this->addElement ( 'legend', false, 'Optional: #PCDATA | Inline', 'Common', array ( 'accesskey' => 'Character' ) ); $this->addElement ( 'optgroup', false, 'Required: option', 'Common', array ( 'disabled' => 'Bool#disabled', 'label*' => 'Text' ) ); // Don't forget an injector for . This one's a little complex // because it maps to multiple elements. } } // vim: et sw=4 sts=4