From 2e2a17e877927ddae91237d98282be016aab4b1b Mon Sep 17 00:00:00 2001 From: wheatleym Date: Wed, 8 Nov 2023 15:15:03 +0000 Subject: [PATCH 1/6] Added Custom CSS Definitions --- config/purify.php | 20 ++++++++++++++ src/Definitions/CSSDefinition.php | 17 ++++++++++++ src/PurifyManager.php | 9 +++++++ tests/PurifyTest.php | 45 +++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 src/Definitions/CSSDefinition.php diff --git a/config/purify.php b/config/purify.php index 5977b03..c682b7b 100644 --- a/config/purify.php +++ b/config/purify.php @@ -70,6 +70,26 @@ 'definitions' => Html5Definition::class, + /* + |-------------------------------------------------------------------------- + | HTMLPurifier CSS definitions + |-------------------------------------------------------------------------- + | + | Here you may specify a class that augments the CSS definitions used by + | HTMLPurifier. When specifying a custom class, make sure it implements + | the interface: + | + | \Stevebauman\Purify\Definitions\CSSDefinition + | + | Note that these definitions are applied to every Purifier instance. + | + | CSS should be extending $definition->info['css-attribute'] = values + | See HTMLPurifier_CSSDefinition for further explanation + | + */ + + 'css-definitions' => null, + /* |-------------------------------------------------------------------------- | Serializer diff --git a/src/Definitions/CSSDefinition.php b/src/Definitions/CSSDefinition.php new file mode 100644 index 0000000..f76b56e --- /dev/null +++ b/src/Definitions/CSSDefinition.php @@ -0,0 +1,17 @@ +getCSSDefinition()) { + $definitionsClass = $this->config->get('purify.css-definitions'); + + if ($definitionsClass && is_a($definitionsClass, CSSDefinition::class, true)) { + $definitionsClass::apply($definition); + } + } + return $htmlConfig; } } diff --git a/tests/PurifyTest.php b/tests/PurifyTest.php index e709ff1..4cb05b6 100644 --- a/tests/PurifyTest.php +++ b/tests/PurifyTest.php @@ -2,9 +2,11 @@ namespace Stevebauman\Purify\Tests; +use HTMLPurifier_CSSDefinition; use HTMLPurifier_HTMLDefinition; use Illuminate\Support\Facades\File; use Stevebauman\Purify\Cache\CacheDefinitionCache; +use Stevebauman\Purify\Definitions\CSSDefinition; use Stevebauman\Purify\Definitions\Definition; use Stevebauman\Purify\Facades\Purify; use Stevebauman\Purify\PurifyServiceProvider; @@ -131,6 +133,37 @@ public function test_custom_definitions_are_applied() Purify::config(['HTML.Allowed' => 'span[class]'])->clean('Test') ); } + + public function test_custom_css_definitions_are_applied() + { + $this->app['config']->set('purify.css-definitions', FooCSSDefinition::class); + + $this->assertEquals( + '

Test

', + Purify::clean('

Test

') + ); + + $this->assertEquals( + '

Test

', + Purify::clean('

Test

') + ); + + $this->assertEquals( + '

Test

', + Purify::clean('

Test

') + ); + + $this->assertEquals( + '

Test

', + Purify::clean('

Test

') + ); + + $this->assertEquals( + '

Test

', + Purify::clean('

Test

') + ); + + } } class FooDefinition implements Definition @@ -140,3 +173,15 @@ public static function apply(HTMLPurifier_HTMLDefinition $definition) $definition->addAttribute('span', 'class', 'Enum#foo'); } } + +class FooCSSDefinition implements CSSDefinition +{ + public static function apply(HTMLPurifier_CSSDefinition $definition) + { + $definition->info['text-align'] = new \HTMLPurifier_AttrDef_Enum( + array('center', 'start', 'end'), + false, + ); + } +} + From 0fe498eef70ab5d501c68196125ec395c5a2a36c Mon Sep 17 00:00:00 2001 From: wheatleym Date: Wed, 8 Nov 2023 15:26:54 +0000 Subject: [PATCH 2/6] Added readme for css definitions --- README.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/README.md b/README.md index 96318ba..af012f2 100644 --- a/README.md +++ b/README.md @@ -344,6 +344,52 @@ class TrixPurifierDefinitions implements Definition } ``` + +#### Custom CSS definitions + +It's possible to override the CSS definitions, this allows you to customize what +inline styles you allow and their properties and values. This can help fill in +missing values for properties such as text-align, which by default is missing start +and end values. You can do this by creating a CSS definition. + +To create your own CSS definition, create a new class and have it implement `CSSDefinition`: + +```php +namespace App; + +use HTMLPurifier_CSSDefinition; +use Stevebauman\Purify\Definitions\CSSDefinition; + +class CustomCSSDefinition implements CSSDefinition +{ + /** + * Apply rules to the CSS Purifier definition. + * + * @param HTMLPurifier_CSSDefinition $definition + * + * @return void + */ + public static function apply(HTMLPurifier_CSSDefinition $definition) + { + // Customize the CSS purifier definition. + $definition->info['text-align'] = new \HTMLPurifier_AttrDef_Enum( + array('right', 'left', 'center', 'start', 'end'), + false, + ); + } +} +``` + +Then, reference this class in the `config/purify.php` file in the `css-definitions` key: + +```php +// config/purify.php + +'css-definitions' => \App\CustomCSSDefinition::class, +``` + +See the class HTMLPurifier_CSSDefinition in the HTMLPurifier library for other examples of what can be changed. + ### Upgrading from v4 to v5 To upgrade from v4, install the latest version by running the below command in the root of your project: From 74365e6e208c205b7648af028335eb27866cf055 Mon Sep 17 00:00:00 2001 From: wheatleym Date: Fri, 17 Nov 2023 10:53:37 +0000 Subject: [PATCH 3/6] Updated to meeting coding standards --- README.md | 2 +- src/Definitions/CSSDefinition.php | 2 +- tests/PurifyTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index af012f2..938e855 100644 --- a/README.md +++ b/README.md @@ -373,7 +373,7 @@ class CustomCSSDefinition implements CSSDefinition { // Customize the CSS purifier definition. $definition->info['text-align'] = new \HTMLPurifier_AttrDef_Enum( - array('right', 'left', 'center', 'start', 'end'), + ['right', 'left', 'center', 'start', 'end'], false, ); } diff --git a/src/Definitions/CSSDefinition.php b/src/Definitions/CSSDefinition.php index f76b56e..c0bc1b4 100644 --- a/src/Definitions/CSSDefinition.php +++ b/src/Definitions/CSSDefinition.php @@ -9,7 +9,7 @@ interface CSSDefinition /** * Apply rules to the CSS Purifier definition. * - * @param HTMLPurifier_CSSDefinition $definition + * @param HTMLPurifier_CSSDefinition $definition * * @return void */ diff --git a/tests/PurifyTest.php b/tests/PurifyTest.php index 4cb05b6..cf60c4c 100644 --- a/tests/PurifyTest.php +++ b/tests/PurifyTest.php @@ -179,7 +179,7 @@ class FooCSSDefinition implements CSSDefinition public static function apply(HTMLPurifier_CSSDefinition $definition) { $definition->info['text-align'] = new \HTMLPurifier_AttrDef_Enum( - array('center', 'start', 'end'), + ['center', 'start', 'end'], false, ); } From 100d643eeee2b1df7825b23b7ae54974f6642459 Mon Sep 17 00:00:00 2001 From: wheatleym Date: Fri, 17 Nov 2023 10:54:26 +0000 Subject: [PATCH 4/6] Updated to meeting coding standards --- tests/PurifyTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/PurifyTest.php b/tests/PurifyTest.php index cf60c4c..ac3e427 100644 --- a/tests/PurifyTest.php +++ b/tests/PurifyTest.php @@ -162,7 +162,6 @@ public function test_custom_css_definitions_are_applied() '

Test

', Purify::clean('

Test

') ); - } } @@ -184,4 +183,3 @@ public static function apply(HTMLPurifier_CSSDefinition $definition) ); } } - From 85f1506193920d125942f99115ec49b8c9b5e55d Mon Sep 17 00:00:00 2001 From: wheatleym Date: Mon, 27 Nov 2023 11:33:17 +0000 Subject: [PATCH 5/6] Updated CSSDefinition to pascal case CssDefinition --- README.md | 8 ++++---- config/purify.php | 2 +- src/Definitions/{CSSDefinition.php => CssDefinition.php} | 2 +- src/PurifyManager.php | 4 ++-- tests/PurifyTest.php | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) rename src/Definitions/{CSSDefinition.php => CssDefinition.php} (92%) diff --git a/README.md b/README.md index 938e855..83f9655 100644 --- a/README.md +++ b/README.md @@ -352,15 +352,15 @@ inline styles you allow and their properties and values. This can help fill in missing values for properties such as text-align, which by default is missing start and end values. You can do this by creating a CSS definition. -To create your own CSS definition, create a new class and have it implement `CSSDefinition`: +To create your own CSS definition, create a new class and have it implement `CssDefinition`: ```php namespace App; use HTMLPurifier_CSSDefinition; -use Stevebauman\Purify\Definitions\CSSDefinition; +use Stevebauman\Purify\Definitions\CssDefinition; -class CustomCSSDefinition implements CSSDefinition +class CustomCSSDefinition implements CssDefinition { /** * Apply rules to the CSS Purifier definition. @@ -385,7 +385,7 @@ Then, reference this class in the `config/purify.php` file in the `css-definitio ```php // config/purify.php -'css-definitions' => \App\CustomCSSDefinition::class, +'css-definitions' => \App\CustomCssDefinition::class, ``` See the class HTMLPurifier_CSSDefinition in the HTMLPurifier library for other examples of what can be changed. diff --git a/config/purify.php b/config/purify.php index c682b7b..15ee72a 100644 --- a/config/purify.php +++ b/config/purify.php @@ -79,7 +79,7 @@ | HTMLPurifier. When specifying a custom class, make sure it implements | the interface: | - | \Stevebauman\Purify\Definitions\CSSDefinition + | \Stevebauman\Purify\Definitions\CssDefinition | | Note that these definitions are applied to every Purifier instance. | diff --git a/src/Definitions/CSSDefinition.php b/src/Definitions/CssDefinition.php similarity index 92% rename from src/Definitions/CSSDefinition.php rename to src/Definitions/CssDefinition.php index c0bc1b4..6863d60 100644 --- a/src/Definitions/CSSDefinition.php +++ b/src/Definitions/CssDefinition.php @@ -4,7 +4,7 @@ use HTMLPurifier_CSSDefinition; -interface CSSDefinition +interface CssDefinition { /** * Apply rules to the CSS Purifier definition. diff --git a/src/PurifyManager.php b/src/PurifyManager.php index fbe4230..4ec8c1f 100644 --- a/src/PurifyManager.php +++ b/src/PurifyManager.php @@ -6,7 +6,7 @@ use Illuminate\Contracts\Container\Container; use Illuminate\Support\Manager; use InvalidArgumentException; -use Stevebauman\Purify\Definitions\CSSDefinition; +use Stevebauman\Purify\Definitions\CssDefinition; use Stevebauman\Purify\Definitions\Definition; class PurifyManager extends Manager @@ -205,7 +205,7 @@ protected function createHtmlConfig($config) if ($definition = $htmlConfig->getCSSDefinition()) { $definitionsClass = $this->config->get('purify.css-definitions'); - if ($definitionsClass && is_a($definitionsClass, CSSDefinition::class, true)) { + if ($definitionsClass && is_a($definitionsClass, CssDefinition::class, true)) { $definitionsClass::apply($definition); } } diff --git a/tests/PurifyTest.php b/tests/PurifyTest.php index ac3e427..7572b68 100644 --- a/tests/PurifyTest.php +++ b/tests/PurifyTest.php @@ -6,7 +6,7 @@ use HTMLPurifier_HTMLDefinition; use Illuminate\Support\Facades\File; use Stevebauman\Purify\Cache\CacheDefinitionCache; -use Stevebauman\Purify\Definitions\CSSDefinition; +use Stevebauman\Purify\Definitions\CssDefinition; use Stevebauman\Purify\Definitions\Definition; use Stevebauman\Purify\Facades\Purify; use Stevebauman\Purify\PurifyServiceProvider; @@ -136,7 +136,7 @@ public function test_custom_definitions_are_applied() public function test_custom_css_definitions_are_applied() { - $this->app['config']->set('purify.css-definitions', FooCSSDefinition::class); + $this->app['config']->set('purify.css-definitions', FooCssDefinition::class); $this->assertEquals( '

Test

', @@ -173,7 +173,7 @@ public static function apply(HTMLPurifier_HTMLDefinition $definition) } } -class FooCSSDefinition implements CSSDefinition +class FooCssDefinition implements CssDefinition { public static function apply(HTMLPurifier_CSSDefinition $definition) { From 0106e9d258459d9a1d9cc20852d60c28051a40f5 Mon Sep 17 00:00:00 2001 From: Steve Bauman Date: Tue, 28 Nov 2023 14:08:09 -0500 Subject: [PATCH 6/6] Adjust example class name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83f9655..fb50778 100644 --- a/README.md +++ b/README.md @@ -360,7 +360,7 @@ namespace App; use HTMLPurifier_CSSDefinition; use Stevebauman\Purify\Definitions\CssDefinition; -class CustomCSSDefinition implements CssDefinition +class CustomCssDefinition implements CssDefinition { /** * Apply rules to the CSS Purifier definition.