diff --git a/library/HTMLPurifier/HTMLModule.php b/library/HTMLPurifier/HTMLModule.php index c6de7670..5589432e 100644 --- a/library/HTMLPurifier/HTMLModule.php +++ b/library/HTMLPurifier/HTMLModule.php @@ -137,9 +137,11 @@ class HTMLPurifier_HTMLModule * element? * @param $attr What unique attributes does the element define? * @note See ElementDef for in-depth descriptions of these parameters. + * @return Reference to created element definition object, so you + * can set advanced parameters * @protected */ - function addElement($element, $safe, $type, $contents, $attr_includes, $attr = array()) { + function &addElement($element, $safe, $type, $contents, $attr_includes, $attr = array()) { $this->elements[] = $element; // parse content_model list($content_model_type, $content_model) = $this->parseContents($contents); @@ -153,6 +155,7 @@ class HTMLPurifier_HTMLModule ); // literal object $contents means direct child manipulation if (!is_string($contents)) $this->info[$element]->child = $contents; + return $this->info[$element]; } /** diff --git a/library/HTMLPurifier/HTMLModule/Bdo.php b/library/HTMLPurifier/HTMLModule/Bdo.php index e8f4349e..3b9081c0 100644 --- a/library/HTMLPurifier/HTMLModule/Bdo.php +++ b/library/HTMLPurifier/HTMLModule/Bdo.php @@ -17,7 +17,7 @@ class HTMLPurifier_HTMLModule_Bdo extends HTMLPurifier_HTMLModule function HTMLPurifier_HTMLModule_Bdo() { $dir = new HTMLPurifier_AttrDef_Enum(array('ltr','rtl'), false); - $this->addElement( + $bdo =& $this->addElement( 'bdo', true, 'Inline', 'Inline', array('Core', 'Lang'), array( 'dir' => $dir, // required @@ -28,7 +28,8 @@ class HTMLPurifier_HTMLModule_Bdo extends HTMLPurifier_HTMLModule // be managed with a global attribute transform) ) ); - $this->info['bdo']->attr_transform_post['required-dir'] = new HTMLPurifier_AttrTransform_BdoDir(); + $bdo->attr_transform_post['required-dir'] = new HTMLPurifier_AttrTransform_BdoDir(); + $this->attr_collections['I18N']['dir'] = $dir; } diff --git a/library/HTMLPurifier/HTMLModule/Hypertext.php b/library/HTMLPurifier/HTMLModule/Hypertext.php index fd89d7df..a9a9d352 100644 --- a/library/HTMLPurifier/HTMLModule/Hypertext.php +++ b/library/HTMLPurifier/HTMLModule/Hypertext.php @@ -12,7 +12,7 @@ class HTMLPurifier_HTMLModule_Hypertext extends HTMLPurifier_HTMLModule var $name = 'Hypertext'; function HTMLPurifier_HTMLModule_Hypertext() { - $this->addElement( + $a =& $this->addElement( 'a', true, 'Inline', 'Inline', 'Common', array( // 'accesskey' => 'Character', @@ -25,7 +25,7 @@ class HTMLPurifier_HTMLModule_Hypertext extends HTMLPurifier_HTMLModule // 'type' => 'ContentType', ) ); - $this->info['a']->excludes = array('a' => true); + $a->excludes = array('a' => true); } } diff --git a/library/HTMLPurifier/HTMLModule/Image.php b/library/HTMLPurifier/HTMLModule/Image.php index cebe4f41..6608e9dc 100644 --- a/library/HTMLPurifier/HTMLModule/Image.php +++ b/library/HTMLPurifier/HTMLModule/Image.php @@ -18,7 +18,7 @@ class HTMLPurifier_HTMLModule_Image extends HTMLPurifier_HTMLModule var $content_sets = array('Inline' => 'img'); function HTMLPurifier_HTMLModule_Image() { - $this->addElement( + $img =& $this->addElement( 'img', true, 'Inline', 'Empty', 'Common', array( 'alt' => 'Text', @@ -28,7 +28,7 @@ class HTMLPurifier_HTMLModule_Image extends HTMLPurifier_HTMLModule 'width' => 'Length' ) ); - $this->info['img']->attr_transform_post[] = + $img->attr_transform_post[] = new HTMLPurifier_AttrTransform_ImgRequired(); } diff --git a/library/HTMLPurifier/HTMLModule/List.php b/library/HTMLPurifier/HTMLModule/List.php index 84d1cd38..894ac5aa 100644 --- a/library/HTMLPurifier/HTMLModule/List.php +++ b/library/HTMLPurifier/HTMLModule/List.php @@ -26,8 +26,8 @@ class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule $this->addElement('ul', true, 'List', 'Required: li', 'Common'); $this->addElement('dl', true, 'List', 'Required: dt | dd', 'Common'); - $this->addElement('li', true, false, 'Flow', 'Common'); - $this->info['li']->auto_close = array('li' => true); + $li =& $this->addElement('li', true, false, 'Flow', 'Common'); + $li->auto_close = array('li' => true); $this->addElement('dd', true, false, 'Flow', 'Common'); $this->addElement('dt', true, false, 'Inline', 'Common'); diff --git a/tests/HTMLPurifier/HTMLModuleTest.php b/tests/HTMLPurifier/HTMLModuleTest.php index 3803a715..ba13a49e 100644 --- a/tests/HTMLPurifier/HTMLModuleTest.php +++ b/tests/HTMLPurifier/HTMLModuleTest.php @@ -21,7 +21,7 @@ class HTMLPurifier_HTMLModuleTest extends UnitTestCase function test_addElement() { $module = new HTMLPurifier_HTMLModule(); - $module->addElement( + $def =& $module->addElement( 'a', true, 'Inline', 'Optional: #PCDATA', array('Common'), array( 'href' => 'URI' @@ -29,19 +29,21 @@ class HTMLPurifier_HTMLModuleTest extends UnitTestCase ); $module2 = new HTMLPurifier_HTMLModule(); - $def = new HTMLPurifier_ElementDef(); - $def->safe = true; - $def->content_model = '#PCDATA'; - $def->content_model_type = 'optional'; - $def->attr = array( + $def2 = new HTMLPurifier_ElementDef(); + $def2->safe = true; + $def2->content_model = '#PCDATA'; + $def2->content_model_type = 'optional'; + $def2->attr = array( 'href' => 'URI', 0 => array('Common') ); - $module2->info['a'] = $def; + $module2->info['a'] = $def2; $module2->elements = array('a'); $module2->content_sets['Inline'] = 'a'; $this->assertIdentical($module, $module2); + $this->assertIdentical($def, $def2); + $this->assertReference($def, $module->info['a']); }