| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | 
							- <?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)
 
-     {
 
-         if ($config->get('HTML.Forms')) {
 
-             $this->safe = true;
 
-         }
 
-         $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
 
 
  |