mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-22 16:31:53 +00:00
[1.6.0] Add support for bgcolor attribute transform.
git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@919 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
9b5e2978ad
commit
a16d6c4342
5
NEWS
5
NEWS
@ -9,6 +9,11 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
|||||||
. Internal change
|
. Internal change
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
1.6.0, unknown release date
|
||||||
|
! Support for all deprecated attributes via attribute transformations
|
||||||
|
+ bgcolor in td, th, tr and table
|
||||||
|
+ (incomplete)
|
||||||
|
|
||||||
1.5.1, unknown release date
|
1.5.1, unknown release date
|
||||||
- Fix segfault in unit test. The problem is not very reproduceable and
|
- Fix segfault in unit test. The problem is not very reproduceable and
|
||||||
I don't know what causes it, but a six line patch fixed it.
|
I don't know what causes it, but a six line patch fixed it.
|
||||||
|
@ -269,9 +269,9 @@ Mozilla on inside and needs -moz-outline, no IE support.</td></tr>
|
|||||||
<tr><td>HR</td><td>Near-equivalent style 'text-align' (Works for IE and Opera, but not Firefox). Also try <code>margin-right:auto; margin-left:0;</code> for left or <code>margin-right:0; margin-left:auto;</code> for right (optionally replacing 0 with the original margin for that side)</td></tr>
|
<tr><td>HR</td><td>Near-equivalent style 'text-align' (Works for IE and Opera, but not Firefox). Also try <code>margin-right:auto; margin-left:0;</code> for left or <code>margin-right:0; margin-left:auto;</code> for right (optionally replacing 0 with the original margin for that side)</td></tr>
|
||||||
<tr class="impl-yes"><td>H1, H2, H3, H4, H5, H6, P</td><td>Equivalent style 'text-align'</td></tr>
|
<tr class="impl-yes"><td>H1, H2, H3, H4, H5, H6, P</td><td>Equivalent style 'text-align'</td></tr>
|
||||||
<tr class="required impl-yes"><td>alt</td><td>IMG</td><td>Required, insert image filename if src is present or default invalid image text</td></tr>
|
<tr class="required impl-yes"><td>alt</td><td>IMG</td><td>Required, insert image filename if src is present or default invalid image text</td></tr>
|
||||||
<tr><td rowspan="3">bgcolor</td><td>TABLE</td><td>Equivalent style 'background-color'</td></tr>
|
<tr class="impl-yes"><td rowspan="3">bgcolor</td><td>TABLE</td><td>Superset style 'background-color'</td></tr>
|
||||||
<tr><td>TR</td><td>Equivalent style 'background-color'</td></tr>
|
<tr class="impl-yes"><td>TR</td><td>Superset style 'background-color'</td></tr>
|
||||||
<tr><td>TD, TH</td><td>Equivalent style 'background-color'</td></tr>
|
<tr class="impl-yes"><td>TD, TH</td><td>Superset style 'background-color'</td></tr>
|
||||||
<tr><td>border</td><td>IMG</td><td>Near equivalent style 'border-width', as it only applies when link present</td></tr>
|
<tr><td>border</td><td>IMG</td><td>Near equivalent style 'border-width', as it only applies when link present</td></tr>
|
||||||
<tr><td>clear</td><td>BR</td><td>Near-equiv style 'clear', transform 'all' into 'both'</td></tr>
|
<tr><td>clear</td><td>BR</td><td>Near-equiv style 'clear', transform 'all' into 'both'</td></tr>
|
||||||
<tr class="impl-no"><td>compact</td><td>DL, OL, UL</td><td>Boolean, needs custom CSS class; rarely used anyway</td></tr>
|
<tr class="impl-no"><td>compact</td><td>DL, OL, UL</td><td>Boolean, needs custom CSS class; rarely used anyway</td></tr>
|
||||||
|
28
library/HTMLPurifier/AttrTransform/BgColor.php
Normal file
28
library/HTMLPurifier/AttrTransform/BgColor.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'HTMLPurifier/AttrTransform.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-transform that changes deprecated bgcolor attribute to CSS.
|
||||||
|
*/
|
||||||
|
class HTMLPurifier_AttrTransform_BgColor
|
||||||
|
extends HTMLPurifier_AttrTransform {
|
||||||
|
|
||||||
|
function transform($attr, $config, &$context) {
|
||||||
|
|
||||||
|
if (!isset($attr['bgcolor'])) return $attr;
|
||||||
|
|
||||||
|
$bgcolor = $attr['bgcolor'];
|
||||||
|
unset($attr['bgcolor']);
|
||||||
|
// some validation should happen here
|
||||||
|
|
||||||
|
$attr['style'] = isset($attr['style']) ? $attr['style'] : '';
|
||||||
|
$attr['style'] = "background-color:$bgcolor;" . $attr['style'];
|
||||||
|
|
||||||
|
return $attr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -6,7 +6,7 @@ require_once 'HTMLPurifier/AttrTransform.php';
|
|||||||
* Pre-transform that changes deprecated align attribute to text-align.
|
* Pre-transform that changes deprecated align attribute to text-align.
|
||||||
*/
|
*/
|
||||||
class HTMLPurifier_AttrTransform_TextAlign
|
class HTMLPurifier_AttrTransform_TextAlign
|
||||||
extends HTMLPurifier_AttrTransform {
|
extends HTMLPurifier_AttrTransform {
|
||||||
|
|
||||||
function transform($attr, $config, &$context) {
|
function transform($attr, $config, &$context) {
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ require_once 'HTMLPurifier/TagTransform/Font.php';
|
|||||||
|
|
||||||
require_once 'HTMLPurifier/AttrTransform/Lang.php';
|
require_once 'HTMLPurifier/AttrTransform/Lang.php';
|
||||||
require_once 'HTMLPurifier/AttrTransform/TextAlign.php';
|
require_once 'HTMLPurifier/AttrTransform/TextAlign.php';
|
||||||
|
require_once 'HTMLPurifier/AttrTransform/BgColor.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Proprietary module that transforms deprecated elements into Strict
|
* Proprietary module that transforms deprecated elements into Strict
|
||||||
@ -20,7 +21,8 @@ class HTMLPurifier_HTMLModule_TransformToStrict extends HTMLPurifier_HTMLModule
|
|||||||
var $name = 'TransformToStrict';
|
var $name = 'TransformToStrict';
|
||||||
|
|
||||||
// we're actually modifying these elements, not defining them
|
// we're actually modifying these elements, not defining them
|
||||||
var $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote');
|
var $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p',
|
||||||
|
'blockquote', 'table', 'td', 'th', 'tr');
|
||||||
|
|
||||||
var $info_tag_transform = array(
|
var $info_tag_transform = array(
|
||||||
// placeholders, see constructor for definitions
|
// placeholders, see constructor for definitions
|
||||||
@ -73,6 +75,11 @@ class HTMLPurifier_HTMLModule_TransformToStrict extends HTMLPurifier_HTMLModule
|
|||||||
$this->info['blockquote']->content_model_type = 'strictblockquote';
|
$this->info['blockquote']->content_model_type = 'strictblockquote';
|
||||||
$this->info['blockquote']->child = false; // recalculate please!
|
$this->info['blockquote']->child = false; // recalculate please!
|
||||||
|
|
||||||
|
$this->info['table']->attr_transform_pre['bgcolor'] =
|
||||||
|
$this->info['tr']->attr_transform_pre['bgcolor'] =
|
||||||
|
$this->info['td']->attr_transform_pre['bgcolor'] =
|
||||||
|
$this->info['th']->attr_transform_pre['bgcolor'] = new HTMLPurifier_AttrTransform_BgColor();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var $defines_child_def = true;
|
var $defines_child_def = true;
|
||||||
|
43
tests/HTMLPurifier/AttrTransform/BgColorTest.php
Normal file
43
tests/HTMLPurifier/AttrTransform/BgColorTest.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'HTMLPurifier/AttrTransform/BgColor.php';
|
||||||
|
require_once 'HTMLPurifier/AttrTransformHarness.php';
|
||||||
|
|
||||||
|
class HTMLPurifier_AttrTransform_BgColorTest extends HTMLPurifier_AttrTransformHarness
|
||||||
|
{
|
||||||
|
|
||||||
|
function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
$this->obj = new HTMLPurifier_AttrTransform_BgColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
|
||||||
|
$this->assertResult( array() );
|
||||||
|
|
||||||
|
// we currently rely on the CSS validator to fix any problems.
|
||||||
|
// This means that this transform, strictly speaking, supports
|
||||||
|
// a superset of the functionality.
|
||||||
|
|
||||||
|
$this->assertResult(
|
||||||
|
array('bgcolor' => '#000000'),
|
||||||
|
array('style' => 'background-color:#000000;')
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertResult(
|
||||||
|
array('bgcolor' => '#000000', 'style' => 'font-weight:bold'),
|
||||||
|
array('style' => 'background-color:#000000;font-weight:bold')
|
||||||
|
);
|
||||||
|
|
||||||
|
// this may change when we natively support the datatype and
|
||||||
|
// validate its contents before forwarding it on
|
||||||
|
$this->assertResult(
|
||||||
|
array('bgcolor' => '#F00'),
|
||||||
|
array('style' => 'background-color:#F00;')
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -34,6 +34,7 @@ $test_files[] = 'AttrDef/URI/IPv6Test.php';
|
|||||||
$test_files[] = 'AttrDef/URITest.php';
|
$test_files[] = 'AttrDef/URITest.php';
|
||||||
$test_files[] = 'AttrDefTest.php';
|
$test_files[] = 'AttrDefTest.php';
|
||||||
$test_files[] = 'AttrTransform/BdoDirTest.php';
|
$test_files[] = 'AttrTransform/BdoDirTest.php';
|
||||||
|
$test_files[] = 'AttrTransform/BgColorTest.php';
|
||||||
$test_files[] = 'AttrTransform/ImgRequiredTest.php';
|
$test_files[] = 'AttrTransform/ImgRequiredTest.php';
|
||||||
$test_files[] = 'AttrTransform/LangTest.php';
|
$test_files[] = 'AttrTransform/LangTest.php';
|
||||||
$test_files[] = 'AttrTransform/TextAlignTest.php';
|
$test_files[] = 'AttrTransform/TextAlignTest.php';
|
||||||
|
Loading…
Reference in New Issue
Block a user