From d0fdcc103e8dae6fc3425a093414605e0a33ffbf Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Sat, 27 Sep 2008 21:19:35 -0400 Subject: [PATCH] Add support for proprietary "background" attribute in table elements. Signed-off-by: Edward Z. Yang --- NEWS | 2 + library/HTMLPurifier.includes.php | 1 + library/HTMLPurifier.safe-includes.php | 1 + .../HTMLPurifier/AttrTransform/Background.php | 22 +++++++++++ .../HTMLModule/Tidy/Proprietary.php | 10 ++++- .../AttrTransform/BackgroundTest.php | 39 +++++++++++++++++++ .../HTMLPurifier/HTMLT/tidy-background.htmlt | 4 ++ 7 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 library/HTMLPurifier/AttrTransform/Background.php create mode 100644 tests/HTMLPurifier/AttrTransform/BackgroundTest.php create mode 100644 tests/HTMLPurifier/HTMLT/tidy-background.htmlt diff --git a/NEWS b/NEWS index c4d63a26..7ee2944c 100644 --- a/NEWS +++ b/NEWS @@ -34,6 +34,8 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier improved. ! Experimental implementation of forms for %HTML.Trusted ! Track column numbers when maintain line numbers is on +! Proprietary 'background' attribute on table-related elements converted into + corresponding CSS. Thanks Fusemail for sponsoring this feature! - Fix two bugs in %URI.MakeAbsolute; one involving empty paths in base URLs, the other involving an undefined $is_folder error. - Throw error when %Core.Encoding is set to a spurious value. Previously, diff --git a/library/HTMLPurifier.includes.php b/library/HTMLPurifier.includes.php index 2700b8df..15336469 100644 --- a/library/HTMLPurifier.includes.php +++ b/library/HTMLPurifier.includes.php @@ -109,6 +109,7 @@ require 'HTMLPurifier/AttrDef/URI/Host.php'; require 'HTMLPurifier/AttrDef/URI/IPv4.php'; require 'HTMLPurifier/AttrDef/URI/IPv6.php'; require 'HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php'; +require 'HTMLPurifier/AttrTransform/Background.php'; require 'HTMLPurifier/AttrTransform/BdoDir.php'; require 'HTMLPurifier/AttrTransform/BgColor.php'; require 'HTMLPurifier/AttrTransform/BoolToCSS.php'; diff --git a/library/HTMLPurifier.safe-includes.php b/library/HTMLPurifier.safe-includes.php index f91cdbd8..22e4fd0a 100644 --- a/library/HTMLPurifier.safe-includes.php +++ b/library/HTMLPurifier.safe-includes.php @@ -103,6 +103,7 @@ require_once $__dir . '/HTMLPurifier/AttrDef/URI/Host.php'; require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv4.php'; require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv6.php'; require_once $__dir . '/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php'; +require_once $__dir . '/HTMLPurifier/AttrTransform/Background.php'; require_once $__dir . '/HTMLPurifier/AttrTransform/BdoDir.php'; require_once $__dir . '/HTMLPurifier/AttrTransform/BgColor.php'; require_once $__dir . '/HTMLPurifier/AttrTransform/BoolToCSS.php'; diff --git a/library/HTMLPurifier/AttrTransform/Background.php b/library/HTMLPurifier/AttrTransform/Background.php new file mode 100644 index 00000000..f7f0feda --- /dev/null +++ b/library/HTMLPurifier/AttrTransform/Background.php @@ -0,0 +1,22 @@ +confiscateAttr($attr, 'background'); + // some validation should happen here + + $this->prependCSS($attr, "background-image:url($background);"); + + return $attr; + + } + +} + diff --git a/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php b/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php index babbb190..41c1f78e 100644 --- a/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php +++ b/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php @@ -7,7 +7,15 @@ class HTMLPurifier_HTMLModule_Tidy_Proprietary extends HTMLPurifier_HTMLModule_T public $defaultLevel = 'light'; public function makeFixes() { - return array(); + $r = array(); + $r['table@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['td@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['th@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['tr@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['thead@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['tfoot@background'] = new HTMLPurifier_AttrTransform_Background(); + $r['tbody@background'] = new HTMLPurifier_AttrTransform_Background(); + return $r; } } diff --git a/tests/HTMLPurifier/AttrTransform/BackgroundTest.php b/tests/HTMLPurifier/AttrTransform/BackgroundTest.php new file mode 100644 index 00000000..d64d87cd --- /dev/null +++ b/tests/HTMLPurifier/AttrTransform/BackgroundTest.php @@ -0,0 +1,39 @@ +obj = new HTMLPurifier_AttrTransform_Background(); + } + + function testEmptyInput() { + $this->assertResult( array() ); + } + + function testBasicTransform() { + $this->assertResult( + array('background' => 'logo.png'), + array('style' => 'background-image:url(logo.png);') + ); + } + + function testPrependNewCSS() { + $this->assertResult( + array('background' => 'logo.png', 'style' => 'font-weight:bold'), + array('style' => 'background-image:url(logo.png);font-weight:bold') + ); + } + + function testLenientTreatmentOfInvalidInput() { + // notice that we rely on the CSS validator later to fix this invalid + // stuff + $this->assertResult( + array('background' => 'logo.png);foo:('), + array('style' => 'background-image:url(logo.png);foo:();') + ); + } + +} + diff --git a/tests/HTMLPurifier/HTMLT/tidy-background.htmlt b/tests/HTMLPurifier/HTMLT/tidy-background.htmlt new file mode 100644 index 00000000..26dc21a9 --- /dev/null +++ b/tests/HTMLPurifier/HTMLT/tidy-background.htmlt @@ -0,0 +1,4 @@ +--HTML-- +
asdf
+--EXPECT-- +
asdf