Seditio Source
Root |
./othercms/ips_4.3.4/system/3rd_party/HTMLPurifier/HTMLPurifier/HTMLModule/Forms.php
<?php

/**
 * XHTML 1.1 Forms module, defines all form-related elements found in HTML 4.
 */
class HTMLPurifier_HTMLModule_Forms extends HTMLPurifier_HTMLModule
{
   
/**
     * @type string
     */
   
public $name = 'Forms';

   
/**
     * @type bool
     */
   
public $safe = false;

   
/**
     * @type array
     */
   
public $content_sets = array(
       
'Block' => '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 <isindex>. This one's a little complex
        // because it maps to multiple elements.
   
}
}

// vim: et sw=4 sts=4