diff --git a/NEWS b/NEWS index bf7b744b..c3f602a6 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,9 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier . Demo script removed: it has been added to the website's repository . Basic.php script modified to work out of the box . Refactor AttrTransform classes to reduce duplication +. AttrTransform_TextAlign axed in favor of a more general + AttrTransform_EnumToCSS, refer to HTMLModule/TransformToStrict.php to + see how the new equivalent is implemented 1.6.0, released 2007-04-01 ! Support for most common deprecated attributes via transformations: diff --git a/library/HTMLPurifier/AttrTransform/EnumToCSS.php b/library/HTMLPurifier/AttrTransform/EnumToCSS.php new file mode 100644 index 00000000..ed4dfc32 --- /dev/null +++ b/library/HTMLPurifier/AttrTransform/EnumToCSS.php @@ -0,0 +1,60 @@ +attr = $attr; + $this->enumToCSS = $enum_to_css; + $this->caseSensitive = (bool) $case_sensitive; + } + + function transform($attr, $config, &$context) { + + if (!isset($attr[$this->attr])) return $attr; + + $value = trim($attr[$this->attr]); + unset($attr[$this->attr]); + + if (!$this->caseSensitive) $value = strtolower($value); + + if (!isset($this->enumToCSS[$value])) { + return $attr; + } + + $this->prependCSS($attr, $this->enumToCSS[$value]); + + return $attr; + + } + +} + +?> \ No newline at end of file diff --git a/library/HTMLPurifier/AttrTransform/TextAlign.php b/library/HTMLPurifier/AttrTransform/TextAlign.php deleted file mode 100644 index de8dcb48..00000000 --- a/library/HTMLPurifier/AttrTransform/TextAlign.php +++ /dev/null @@ -1,35 +0,0 @@ -confiscateAttr($attr, 'align'); - $align = strtolower(trim($align)); - - $values = array('left' => 1, - 'right' => 1, - 'center' => 1, - 'justify' => 1); - - if (!isset($values[$align])) { - return $attr; - } - - $this->prependCSS($attr, "text-align:$align;"); - - return $attr; - - } - -} - -?> \ No newline at end of file diff --git a/library/HTMLPurifier/HTMLModule/TransformToStrict.php b/library/HTMLPurifier/HTMLModule/TransformToStrict.php index df3e38c7..47df2511 100644 --- a/library/HTMLPurifier/HTMLModule/TransformToStrict.php +++ b/library/HTMLPurifier/HTMLModule/TransformToStrict.php @@ -7,13 +7,13 @@ require_once 'HTMLPurifier/TagTransform/Center.php'; require_once 'HTMLPurifier/TagTransform/Font.php'; require_once 'HTMLPurifier/AttrTransform/Lang.php'; -require_once 'HTMLPurifier/AttrTransform/TextAlign.php'; require_once 'HTMLPurifier/AttrTransform/BgColor.php'; require_once 'HTMLPurifier/AttrTransform/BoolToCSS.php'; require_once 'HTMLPurifier/AttrTransform/Border.php'; require_once 'HTMLPurifier/AttrTransform/Name.php'; require_once 'HTMLPurifier/AttrTransform/Length.php'; require_once 'HTMLPurifier/AttrTransform/ImgSpace.php'; +require_once 'HTMLPurifier/AttrTransform/EnumToCSS.php'; /** * Proprietary module that transforms deprecated elements into Strict @@ -61,6 +61,11 @@ class HTMLPurifier_HTMLModule_TransformToStrict extends HTMLPurifier_HTMLModule } // deprecated attribute transforms + + // align battery + $align_lookup = array(); + $align_values = array('left', 'right', 'center', 'justify'); + foreach ($align_values as $v) $align_lookup[$v] = "text-align:$v;"; $this->info['h1']->attr_transform_pre['align'] = $this->info['h2']->attr_transform_pre['align'] = $this->info['h3']->attr_transform_pre['align'] = @@ -68,7 +73,7 @@ class HTMLPurifier_HTMLModule_TransformToStrict extends HTMLPurifier_HTMLModule $this->info['h5']->attr_transform_pre['align'] = $this->info['h6']->attr_transform_pre['align'] = $this->info['p'] ->attr_transform_pre['align'] = - new HTMLPurifier_AttrTransform_TextAlign(); + new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup); // xml:lang <=> lang mirroring, implement in TransformToStrict, // this is overridden in TransformToXHTML11 diff --git a/tests/HTMLPurifier/AttrTransform/TextAlignTest.php b/tests/HTMLPurifier/AttrTransform/EnumToCSSTest.php similarity index 56% rename from tests/HTMLPurifier/AttrTransform/TextAlignTest.php rename to tests/HTMLPurifier/AttrTransform/EnumToCSSTest.php index 55d6cb05..565cee45 100644 --- a/tests/HTMLPurifier/AttrTransform/TextAlignTest.php +++ b/tests/HTMLPurifier/AttrTransform/EnumToCSSTest.php @@ -1,17 +1,17 @@ obj = new HTMLPurifier_AttrTransform_TextAlign(); - } - - function test() { + function testRegular() { + + $this->obj = new HTMLPurifier_AttrTransform_EnumToCSS('align', array( + 'left' => 'text-align:left;', + 'right' => 'text-align:right;' + )); // leave empty arrays alone $this->assertResult( array() ); @@ -31,16 +31,6 @@ class HTMLPurifier_AttrTransform_TextAlignTest extends HTMLPurifier_AttrTransfor array('style' => 'text-align:right;') ); - $this->assertResult( - array('align' => 'center'), - array('style' => 'text-align:center;') - ); - - $this->assertResult( - array('align' => 'justify'), - array('style' => 'text-align:justify;') - ); - // drop garbage value $this->assertResult( array('align' => 'invalid'), @@ -53,10 +43,32 @@ class HTMLPurifier_AttrTransform_TextAlignTest extends HTMLPurifier_AttrTransfor array('style' => 'text-align:left;font-weight:bold;') ); + } + + function testCaseInsensitive() { + + $this->obj = new HTMLPurifier_AttrTransform_EnumToCSS('align', array( + 'right' => 'text-align:right;' + )); + // test case insensitivity $this->assertResult( - array('align' => 'CENTER'), - array('style' => 'text-align:center;') + array('align' => 'RIGHT'), + array('style' => 'text-align:right;') + ); + + } + + function testCaseSensitive() { + + $this->obj = new HTMLPurifier_AttrTransform_EnumToCSS('align', array( + 'right' => 'text-align:right;' + ), true); + + // test case insensitivity + $this->assertResult( + array('align' => 'RIGHT'), + array() ); } diff --git a/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php b/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php index 4871ea8f..57465d8e 100644 --- a/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php +++ b/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php @@ -95,6 +95,22 @@ class HTMLPurifier_Strategy_ValidateAttributesTest extends '
Justified Paragraph
', + 'Justified Paragraph
' + ); + $this->assertResult( + '