diff options
author | Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com> | 2014-02-21 15:43:14 +0100 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com> | 2014-02-21 15:43:14 +0100 |
commit | d4949327efa15b492cab1bef3fe074290a328a17 (patch) | |
tree | e89e0322bb1f1b06d663fd10fdded21bac867e5d /inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php | |
parent | c9bd17a1007bb78e5de0775efca01df0fb515031 (diff) | |
download | wallabag-d4949327efa15b492cab1bef3fe074290a328a17.tar.gz wallabag-d4949327efa15b492cab1bef3fe074290a328a17.tar.zst wallabag-d4949327efa15b492cab1bef3fe074290a328a17.zip |
[add] HTML Purifier added to clean code
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php new file mode 100644 index 00000000..e553c65e --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Color.php | |||
@@ -0,0 +1,105 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Validates Color as defined by CSS. | ||
5 | */ | ||
6 | class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef | ||
7 | { | ||
8 | |||
9 | /** | ||
10 | * @param string $color | ||
11 | * @param HTMLPurifier_Config $config | ||
12 | * @param HTMLPurifier_Context $context | ||
13 | * @return bool|string | ||
14 | */ | ||
15 | public function validate($color, $config, $context) | ||
16 | { | ||
17 | static $colors = null; | ||
18 | if ($colors === null) { | ||
19 | $colors = $config->get('Core.ColorKeywords'); | ||
20 | } | ||
21 | |||
22 | $color = trim($color); | ||
23 | if ($color === '') { | ||
24 | return false; | ||
25 | } | ||
26 | |||
27 | $lower = strtolower($color); | ||
28 | if (isset($colors[$lower])) { | ||
29 | return $colors[$lower]; | ||
30 | } | ||
31 | |||
32 | if (strpos($color, 'rgb(') !== false) { | ||
33 | // rgb literal handling | ||
34 | $length = strlen($color); | ||
35 | if (strpos($color, ')') !== $length - 1) { | ||
36 | return false; | ||
37 | } | ||
38 | $triad = substr($color, 4, $length - 4 - 1); | ||
39 | $parts = explode(',', $triad); | ||
40 | if (count($parts) !== 3) { | ||
41 | return false; | ||
42 | } | ||
43 | $type = false; // to ensure that they're all the same type | ||
44 | $new_parts = array(); | ||
45 | foreach ($parts as $part) { | ||
46 | $part = trim($part); | ||
47 | if ($part === '') { | ||
48 | return false; | ||
49 | } | ||
50 | $length = strlen($part); | ||
51 | if ($part[$length - 1] === '%') { | ||
52 | // handle percents | ||
53 | if (!$type) { | ||
54 | $type = 'percentage'; | ||
55 | } elseif ($type !== 'percentage') { | ||
56 | return false; | ||
57 | } | ||
58 | $num = (float)substr($part, 0, $length - 1); | ||
59 | if ($num < 0) { | ||
60 | $num = 0; | ||
61 | } | ||
62 | if ($num > 100) { | ||
63 | $num = 100; | ||
64 | } | ||
65 | $new_parts[] = "$num%"; | ||
66 | } else { | ||
67 | // handle integers | ||
68 | if (!$type) { | ||
69 | $type = 'integer'; | ||
70 | } elseif ($type !== 'integer') { | ||
71 | return false; | ||
72 | } | ||
73 | $num = (int)$part; | ||
74 | if ($num < 0) { | ||
75 | $num = 0; | ||
76 | } | ||
77 | if ($num > 255) { | ||
78 | $num = 255; | ||
79 | } | ||
80 | $new_parts[] = (string)$num; | ||
81 | } | ||
82 | } | ||
83 | $new_triad = implode(',', $new_parts); | ||
84 | $color = "rgb($new_triad)"; | ||
85 | } else { | ||
86 | // hexadecimal handling | ||
87 | if ($color[0] === '#') { | ||
88 | $hex = substr($color, 1); | ||
89 | } else { | ||
90 | $hex = $color; | ||
91 | $color = '#' . $color; | ||
92 | } | ||
93 | $length = strlen($hex); | ||
94 | if ($length !== 3 && $length !== 6) { | ||
95 | return false; | ||
96 | } | ||
97 | if (!ctype_xdigit($hex)) { | ||
98 | return false; | ||
99 | } | ||
100 | } | ||
101 | return $color; | ||
102 | } | ||
103 | } | ||
104 | |||
105 | // vim: et sw=4 sts=4 | ||