diff options
author | Evan Prodromou <evan@status.net> | 2010-02-20 11:35:01 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-02-20 11:35:01 -0500 |
commit | 81ea0f81173030c73cfc8dd46946d126d3d41622 (patch) | |
tree | 5df2ddd2d59086b81ba471ccea16629571c791bf /extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php | |
parent | ed45df045f661e9c3b85e0657986c99c320914f0 (diff) |
Add HTMLPurifier to extlib
HTMLPurifier defangs arbitrary submitted HTML. We're using it in the
OStatus plugin, but it may be valuable for other parts of the codebase
(I think OEmbed might benefit, for example).
Diffstat (limited to 'extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php')
-rw-r--r-- | extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php b/extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php new file mode 100644 index 000000000..2a5b4514a --- /dev/null +++ b/extlib/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php @@ -0,0 +1,58 @@ +<?php + +/** + * Generic pre-transform that converts an attribute with a fixed number of + * values (enumerated) to CSS. + */ +class HTMLPurifier_AttrTransform_EnumToCSS extends HTMLPurifier_AttrTransform { + + /** + * Name of attribute to transform from + */ + protected $attr; + + /** + * Lookup array of attribute values to CSS + */ + protected $enumToCSS = array(); + + /** + * Case sensitivity of the matching + * @warning Currently can only be guaranteed to work with ASCII + * values. + */ + protected $caseSensitive = false; + + /** + * @param $attr String attribute name to transform from + * @param $enumToCSS Lookup array of attribute values to CSS + * @param $case_sensitive Boolean case sensitivity indicator, default false + */ + public function __construct($attr, $enum_to_css, $case_sensitive = false) { + $this->attr = $attr; + $this->enumToCSS = $enum_to_css; + $this->caseSensitive = (bool) $case_sensitive; + } + + public 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; + + } + +} + +// vim: et sw=4 sts=4 |