summaryrefslogtreecommitdiff
path: root/extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-02-21 11:12:56 -0800
committerBrion Vibber <brion@pobox.com>2010-02-21 11:12:56 -0800
commit85528ccb1f5840a8c73f6c939f12d98bb3680cde (patch)
treebe0f09c02a2bf003c23d6be98919783347b9786d /extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
parent86f2f530ef60fdb601720885d493cf5b2a446e6b (diff)
parent3e7a2a4014dd93637f5a666e238dde13e397523c (diff)
Merge branch 'testing' of gitorious.org:statusnet/mainline into 0.9.x
Diffstat (limited to 'extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php')
-rw-r--r--extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php54
1 files changed, 54 insertions, 0 deletions
diff --git a/extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php b/extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
new file mode 100644
index 000000000..147894b86
--- /dev/null
+++ b/extlib/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Microsoft's proprietary filter: CSS property
+ * @note Currently supports the alpha filter. In the future, this will
+ * probably need an extensible framework
+ */
+class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
+{
+
+ protected $intValidator;
+
+ public function __construct() {
+ $this->intValidator = new HTMLPurifier_AttrDef_Integer();
+ }
+
+ public function validate($value, $config, $context) {
+ $value = $this->parseCDATA($value);
+ if ($value === 'none') return $value;
+ // if we looped this we could support multiple filters
+ $function_length = strcspn($value, '(');
+ $function = trim(substr($value, 0, $function_length));
+ if ($function !== 'alpha' &&
+ $function !== 'Alpha' &&
+ $function !== 'progid:DXImageTransform.Microsoft.Alpha'
+ ) return false;
+ $cursor = $function_length + 1;
+ $parameters_length = strcspn($value, ')', $cursor);
+ $parameters = substr($value, $cursor, $parameters_length);
+ $params = explode(',', $parameters);
+ $ret_params = array();
+ $lookup = array();
+ foreach ($params as $param) {
+ list($key, $value) = explode('=', $param);
+ $key = trim($key);
+ $value = trim($value);
+ if (isset($lookup[$key])) continue;
+ if ($key !== 'opacity') continue;
+ $value = $this->intValidator->validate($value, $config, $context);
+ if ($value === false) continue;
+ $int = (int) $value;
+ if ($int > 100) $value = '100';
+ if ($int < 0) $value = '0';
+ $ret_params[] = "$key=$value";
+ $lookup[$key] = true;
+ }
+ $ret_parameters = implode(',', $ret_params);
+ $ret_function = "$function($ret_parameters)";
+ return $ret_function;
+ }
+
+}
+
+// vim: et sw=4 sts=4