]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php
[add] HTML Purifier added to clean code
[github/wallabag/wallabag.git] / inc / 3rdparty / htmlpurifier / HTMLPurifier / AttrDef / CSS / Filter.php
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Filter.php
new file mode 100644 (file)
index 0000000..019722a
--- /dev/null
@@ -0,0 +1,77 @@
+<?php\r
+\r
+/**\r
+ * Microsoft's proprietary filter: CSS property\r
+ * @note Currently supports the alpha filter. In the future, this will\r
+ *       probably need an extensible framework\r
+ */\r
+class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef\r
+{\r
+    /**\r
+     * @type HTMLPurifier_AttrDef_Integer\r
+     */\r
+    protected $intValidator;\r
+\r
+    public function __construct()\r
+    {\r
+        $this->intValidator = new HTMLPurifier_AttrDef_Integer();\r
+    }\r
+\r
+    /**\r
+     * @param string $value\r
+     * @param HTMLPurifier_Config $config\r
+     * @param HTMLPurifier_Context $context\r
+     * @return bool|string\r
+     */\r
+    public function validate($value, $config, $context)\r
+    {\r
+        $value = $this->parseCDATA($value);\r
+        if ($value === 'none') {\r
+            return $value;\r
+        }\r
+        // if we looped this we could support multiple filters\r
+        $function_length = strcspn($value, '(');\r
+        $function = trim(substr($value, 0, $function_length));\r
+        if ($function !== 'alpha' &&\r
+            $function !== 'Alpha' &&\r
+            $function !== 'progid:DXImageTransform.Microsoft.Alpha'\r
+        ) {\r
+            return false;\r
+        }\r
+        $cursor = $function_length + 1;\r
+        $parameters_length = strcspn($value, ')', $cursor);\r
+        $parameters = substr($value, $cursor, $parameters_length);\r
+        $params = explode(',', $parameters);\r
+        $ret_params = array();\r
+        $lookup = array();\r
+        foreach ($params as $param) {\r
+            list($key, $value) = explode('=', $param);\r
+            $key = trim($key);\r
+            $value = trim($value);\r
+            if (isset($lookup[$key])) {\r
+                continue;\r
+            }\r
+            if ($key !== 'opacity') {\r
+                continue;\r
+            }\r
+            $value = $this->intValidator->validate($value, $config, $context);\r
+            if ($value === false) {\r
+                continue;\r
+            }\r
+            $int = (int)$value;\r
+            if ($int > 100) {\r
+                $value = '100';\r
+            }\r
+            if ($int < 0) {\r
+                $value = '0';\r
+            }\r
+            $ret_params[] = "$key=$value";\r
+            $lookup[$key] = true;\r
+        }\r
+        $ret_parameters = implode(',', $ret_params);\r
+        $ret_function = "$function($ret_parameters)";\r
+        return $ret_function;\r
+    }\r
+}\r
+\r
+// vim: et sw=4 sts=4\r