diff --git a/NEWS b/NEWS index 4cd666c5..374fc627 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,12 @@ ERRATA to __construct($min, $max). __construct(true) is equivalent to __construct('0'). (replace __construct with HTMLPurifier_AttrDef_CSS_Length) . Added HTMLPurifier_AttrDef_Switch class +. Rename HTMLPurifier_HTMLModule_Tidy->construct() to setup() and bubble method + up inheritance hierarchy to HTMLPurifier_HTMLModule. All HTMLModules + get this called with the configuration object. All modules now + use this rather than __construct(), although legacy code using constructors + will still work--the new format, however, lets modules access the + configuration object for HTML namespace dependant tweaks. 2.1.4, released 2008-05-18 ! DefinitionCacheFactory now can register new implementations diff --git a/library/HTMLPurifier/HTMLModule.php b/library/HTMLPurifier/HTMLModule.php index 077daff8..624ebcae 100644 --- a/library/HTMLPurifier/HTMLModule.php +++ b/library/HTMLPurifier/HTMLModule.php @@ -219,5 +219,14 @@ class HTMLPurifier_HTMLModule } return $ret; } + + /** + * Lazy load construction of the module after determining whether + * or not it's needed, and also when a finalized configuration object + * is available. + * @param $config Instance of HTMLPurifier_Config + */ + function setup($config) {} + } diff --git a/library/HTMLPurifier/HTMLModule/Bdo.php b/library/HTMLPurifier/HTMLModule/Bdo.php index 2d9dffb6..d481f6e2 100644 --- a/library/HTMLPurifier/HTMLModule/Bdo.php +++ b/library/HTMLPurifier/HTMLModule/Bdo.php @@ -15,7 +15,7 @@ class HTMLPurifier_HTMLModule_Bdo extends HTMLPurifier_HTMLModule 'I18N' => array('dir' => false) ); - function HTMLPurifier_HTMLModule_Bdo() { + function setup($config) { $bdo =& $this->addElement( 'bdo', true, 'Inline', 'Inline', array('Core', 'Lang'), array( diff --git a/library/HTMLPurifier/HTMLModule/Edit.php b/library/HTMLPurifier/HTMLModule/Edit.php index 37a53c33..fefa1ecb 100644 --- a/library/HTMLPurifier/HTMLModule/Edit.php +++ b/library/HTMLPurifier/HTMLModule/Edit.php @@ -12,7 +12,7 @@ class HTMLPurifier_HTMLModule_Edit extends HTMLPurifier_HTMLModule var $name = 'Edit'; - function HTMLPurifier_HTMLModule_Edit() { + function setup($config) { $contents = 'Chameleon: #PCDATA | Inline ! #PCDATA | Flow'; $attr = array( 'cite' => 'URI', diff --git a/library/HTMLPurifier/HTMLModule/Hypertext.php b/library/HTMLPurifier/HTMLModule/Hypertext.php index 74aa6929..b827d74c 100644 --- a/library/HTMLPurifier/HTMLModule/Hypertext.php +++ b/library/HTMLPurifier/HTMLModule/Hypertext.php @@ -11,7 +11,7 @@ class HTMLPurifier_HTMLModule_Hypertext extends HTMLPurifier_HTMLModule var $name = 'Hypertext'; - function HTMLPurifier_HTMLModule_Hypertext() { + function setup($config) { $a =& $this->addElement( 'a', true, 'Inline', 'Inline', 'Common', array( diff --git a/library/HTMLPurifier/HTMLModule/Image.php b/library/HTMLPurifier/HTMLModule/Image.php index eb71d776..16b2f921 100644 --- a/library/HTMLPurifier/HTMLModule/Image.php +++ b/library/HTMLPurifier/HTMLModule/Image.php @@ -15,7 +15,7 @@ class HTMLPurifier_HTMLModule_Image extends HTMLPurifier_HTMLModule var $name = 'Image'; - function HTMLPurifier_HTMLModule_Image() { + function setup($config) { $img =& $this->addElement( 'img', true, 'Inline', 'Empty', 'Common', array( diff --git a/library/HTMLPurifier/HTMLModule/Legacy.php b/library/HTMLPurifier/HTMLModule/Legacy.php index f702b581..02529c9c 100644 --- a/library/HTMLPurifier/HTMLModule/Legacy.php +++ b/library/HTMLPurifier/HTMLModule/Legacy.php @@ -25,7 +25,7 @@ class HTMLPurifier_HTMLModule_Legacy extends HTMLPurifier_HTMLModule var $name = 'Legacy'; - function HTMLPurifier_HTMLModule_Legacy() { + function setup($config) { $this->addElement('basefont', true, 'Inline', 'Empty', false, array( 'color' => 'Color', diff --git a/library/HTMLPurifier/HTMLModule/List.php b/library/HTMLPurifier/HTMLModule/List.php index dea99f36..a8c92a3c 100644 --- a/library/HTMLPurifier/HTMLModule/List.php +++ b/library/HTMLPurifier/HTMLModule/List.php @@ -21,7 +21,7 @@ class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule var $content_sets = array('Flow' => 'List'); - function HTMLPurifier_HTMLModule_List() { + function setup($config) { $this->addElement('ol', true, 'List', 'Required: li', 'Common'); $this->addElement('ul', true, 'List', 'Required: li', 'Common'); $this->addElement('dl', true, 'List', 'Required: dt | dd', 'Common'); diff --git a/library/HTMLPurifier/HTMLModule/Object.php b/library/HTMLPurifier/HTMLModule/Object.php index 33734772..ab731563 100644 --- a/library/HTMLPurifier/HTMLModule/Object.php +++ b/library/HTMLPurifier/HTMLModule/Object.php @@ -12,7 +12,7 @@ class HTMLPurifier_HTMLModule_Object extends HTMLPurifier_HTMLModule var $name = 'Object'; - function HTMLPurifier_HTMLModule_Object() { + function setup($config) { $this->addElement('object', false, 'Inline', 'Optional: #PCDATA | Flow | param', 'Common', array( diff --git a/library/HTMLPurifier/HTMLModule/Presentation.php b/library/HTMLPurifier/HTMLModule/Presentation.php index 9e483dc1..b93f1db6 100644 --- a/library/HTMLPurifier/HTMLModule/Presentation.php +++ b/library/HTMLPurifier/HTMLModule/Presentation.php @@ -17,7 +17,7 @@ class HTMLPurifier_HTMLModule_Presentation extends HTMLPurifier_HTMLModule var $name = 'Presentation'; - function HTMLPurifier_HTMLModule_Presentation() { + function setup($config) { $this->addElement('b', true, 'Inline', 'Inline', 'Common'); $this->addElement('big', true, 'Inline', 'Inline', 'Common'); $this->addElement('hr', true, 'Block', 'Empty', 'Common'); diff --git a/library/HTMLPurifier/HTMLModule/Ruby.php b/library/HTMLPurifier/HTMLModule/Ruby.php index f5432446..bb81275a 100644 --- a/library/HTMLPurifier/HTMLModule/Ruby.php +++ b/library/HTMLPurifier/HTMLModule/Ruby.php @@ -11,7 +11,7 @@ class HTMLPurifier_HTMLModule_Ruby extends HTMLPurifier_HTMLModule var $name = 'Ruby'; - function HTMLPurifier_HTMLModule_Ruby() { + function setup($config) { $this->addElement('ruby', true, 'Inline', 'Custom: ((rb, (rt | (rp, rt, rp))) | (rbc, rtc, rtc?))', 'Common'); diff --git a/library/HTMLPurifier/HTMLModule/Scripting.php b/library/HTMLPurifier/HTMLModule/Scripting.php index d9f9db1a..31fb47a4 100644 --- a/library/HTMLPurifier/HTMLModule/Scripting.php +++ b/library/HTMLPurifier/HTMLModule/Scripting.php @@ -32,7 +32,7 @@ class HTMLPurifier_HTMLModule_Scripting extends HTMLPurifier_HTMLModule var $elements = array('script', 'noscript'); var $content_sets = array('Block' => 'script | noscript', 'Inline' => 'script | noscript'); - function HTMLPurifier_HTMLModule_Scripting() { + function setup($config) { // TODO: create custom child-definition for noscript that // auto-wraps stray #PCDATA in a similar manner to // blockquote's custom definition (we would use it but diff --git a/library/HTMLPurifier/HTMLModule/StyleAttribute.php b/library/HTMLPurifier/HTMLModule/StyleAttribute.php index d121d740..6255035f 100644 --- a/library/HTMLPurifier/HTMLModule/StyleAttribute.php +++ b/library/HTMLPurifier/HTMLModule/StyleAttribute.php @@ -18,7 +18,7 @@ class HTMLPurifier_HTMLModule_StyleAttribute extends HTMLPurifier_HTMLModule 'Core' => array(0 => array('Style')) ); - function HTMLPurifier_HTMLModule_StyleAttribute() { + function setup($config) { $this->attr_collections['Style']['style'] = new HTMLPurifier_AttrDef_CSS(); } diff --git a/library/HTMLPurifier/HTMLModule/Tables.php b/library/HTMLPurifier/HTMLModule/Tables.php index 2b2d41ce..3a50f589 100644 --- a/library/HTMLPurifier/HTMLModule/Tables.php +++ b/library/HTMLPurifier/HTMLModule/Tables.php @@ -11,7 +11,7 @@ class HTMLPurifier_HTMLModule_Tables extends HTMLPurifier_HTMLModule var $name = 'Tables'; - function HTMLPurifier_HTMLModule_Tables() { + function setup($config) { $this->addElement('caption', true, false, 'Inline', 'Common'); diff --git a/library/HTMLPurifier/HTMLModule/Target.php b/library/HTMLPurifier/HTMLModule/Target.php index 57da9c3a..856b19c7 100644 --- a/library/HTMLPurifier/HTMLModule/Target.php +++ b/library/HTMLPurifier/HTMLModule/Target.php @@ -10,7 +10,7 @@ class HTMLPurifier_HTMLModule_Target extends HTMLPurifier_HTMLModule var $name = 'Target'; - function HTMLPurifier_HTMLModule_Target() { + function setup($config) { $elements = array('a'); foreach ($elements as $name) { $e =& $this->addBlankElement($name); diff --git a/library/HTMLPurifier/HTMLModule/Text.php b/library/HTMLPurifier/HTMLModule/Text.php index 2ebb9d68..9f83c6ef 100644 --- a/library/HTMLPurifier/HTMLModule/Text.php +++ b/library/HTMLPurifier/HTMLModule/Text.php @@ -22,7 +22,7 @@ class HTMLPurifier_HTMLModule_Text extends HTMLPurifier_HTMLModule 'Flow' => 'Heading | Block | Inline' ); - function HTMLPurifier_HTMLModule_Text() { + function setup($config) { // Inline Phrasal ------------------------------------------------- $this->addElement('abbr', true, 'Inline', 'Inline', 'Common'); diff --git a/library/HTMLPurifier/HTMLModule/Tidy.php b/library/HTMLPurifier/HTMLModule/Tidy.php index 411fd47b..ca3edaa6 100644 --- a/library/HTMLPurifier/HTMLModule/Tidy.php +++ b/library/HTMLPurifier/HTMLModule/Tidy.php @@ -70,7 +70,7 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule * @todo Wildcard matching and error reporting when an added or * subtracted fix has no effect. */ - function construct($config) { + function setup($config) { // create fixes, initialize fixesForLevel $fixes = $this->makeFixes(); diff --git a/library/HTMLPurifier/HTMLModuleManager.php b/library/HTMLPurifier/HTMLModuleManager.php index 3fc86160..99b3bb5c 100644 --- a/library/HTMLPurifier/HTMLModuleManager.php +++ b/library/HTMLPurifier/HTMLModuleManager.php @@ -342,13 +342,12 @@ class HTMLPurifier_HTMLModuleManager foreach ($modules as $module) { $this->processModule($module); + $this->modules[$module]->setup($config); } foreach ($this->doctype->tidyModules as $module) { $this->processModule($module); - if (method_exists($this->modules[$module], 'construct')) { - $this->modules[$module]->construct($config); - } + $this->modules[$module]->setup($config); } // setup lookup table based on all valid modules diff --git a/tests/HTMLPurifier/HTMLModule/TidyTest.php b/tests/HTMLPurifier/HTMLModule/TidyTest.php index f2522d9d..4255213b 100644 --- a/tests/HTMLPurifier/HTMLModule/TidyTest.php +++ b/tests/HTMLPurifier/HTMLModule/TidyTest.php @@ -40,7 +40,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness } - function test_construct() { + function test_setup() { $i = 0; // counter, helps us isolate expectations @@ -65,7 +65,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness 'HTML.TidyLevel' => 'none' )); $module->expectAt($i++, 'populate', array(array())); - $module->construct($config); + $module->setup($config); // basic levels @@ -76,7 +76,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness 'light-fix-1' => $lf1, 'light-fix-2' => $lf2 ))); - $module->construct($config); + $module->setup($config); $config = HTMLPurifier_Config::create(array( 'HTML.TidyLevel' => 'heavy' @@ -89,7 +89,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness 'heavy-fix-1' => $hf1, 'heavy-fix-2' => $hf2 ))); - $module->construct($config); + $module->setup($config); // fine grained tuning @@ -101,7 +101,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness 'light-fix-1' => $lf1, 'medium-fix-1' => $mf1 ))); - $module->construct($config); + $module->setup($config); $config = HTMLPurifier_Config::create(array( 'HTML.TidyLevel' => 'medium', @@ -111,7 +111,7 @@ class HTMLPurifier_HTMLModule_TidyTest extends HTMLPurifier_Harness 'light-fix-2' => $lf2, 'medium-fix-2' => $mf2 ))); - $module->construct($config); + $module->setup($config); // done