]> git.immae.eu Git - github/wallabag/wallabag.git/blame - inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Background.php
remove autoload section in composer.json
[github/wallabag/wallabag.git] / inc / 3rdparty / htmlpurifier / HTMLPurifier / AttrDef / CSS / Background.php
CommitLineData
d4949327
NL
1<?php\r
2\r
3/**\r
4 * Validates shorthand CSS property background.\r
5 * @warning Does not support url tokens that have internal spaces.\r
6 */\r
7class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef\r
8{\r
9\r
10 /**\r
11 * Local copy of component validators.\r
12 * @type HTMLPurifier_AttrDef[]\r
13 * @note See HTMLPurifier_AttrDef_Font::$info for a similar impl.\r
14 */\r
15 protected $info;\r
16\r
17 /**\r
18 * @param HTMLPurifier_Config $config\r
19 */\r
20 public function __construct($config)\r
21 {\r
22 $def = $config->getCSSDefinition();\r
23 $this->info['background-color'] = $def->info['background-color'];\r
24 $this->info['background-image'] = $def->info['background-image'];\r
25 $this->info['background-repeat'] = $def->info['background-repeat'];\r
26 $this->info['background-attachment'] = $def->info['background-attachment'];\r
27 $this->info['background-position'] = $def->info['background-position'];\r
28 }\r
29\r
30 /**\r
31 * @param string $string\r
32 * @param HTMLPurifier_Config $config\r
33 * @param HTMLPurifier_Context $context\r
34 * @return bool|string\r
35 */\r
36 public function validate($string, $config, $context)\r
37 {\r
38 // regular pre-processing\r
39 $string = $this->parseCDATA($string);\r
40 if ($string === '') {\r
41 return false;\r
42 }\r
43\r
44 // munge rgb() decl if necessary\r
45 $string = $this->mungeRgb($string);\r
46\r
47 // assumes URI doesn't have spaces in it\r
48 $bits = explode(' ', $string); // bits to process\r
49\r
50 $caught = array();\r
51 $caught['color'] = false;\r
52 $caught['image'] = false;\r
53 $caught['repeat'] = false;\r
54 $caught['attachment'] = false;\r
55 $caught['position'] = false;\r
56\r
57 $i = 0; // number of catches\r
58\r
59 foreach ($bits as $bit) {\r
60 if ($bit === '') {\r
61 continue;\r
62 }\r
63 foreach ($caught as $key => $status) {\r
64 if ($key != 'position') {\r
65 if ($status !== false) {\r
66 continue;\r
67 }\r
68 $r = $this->info['background-' . $key]->validate($bit, $config, $context);\r
69 } else {\r
70 $r = $bit;\r
71 }\r
72 if ($r === false) {\r
73 continue;\r
74 }\r
75 if ($key == 'position') {\r
76 if ($caught[$key] === false) {\r
77 $caught[$key] = '';\r
78 }\r
79 $caught[$key] .= $r . ' ';\r
80 } else {\r
81 $caught[$key] = $r;\r
82 }\r
83 $i++;\r
84 break;\r
85 }\r
86 }\r
87\r
88 if (!$i) {\r
89 return false;\r
90 }\r
91 if ($caught['position'] !== false) {\r
92 $caught['position'] = $this->info['background-position']->\r
93 validate($caught['position'], $config, $context);\r
94 }\r
95\r
96 $ret = array();\r
97 foreach ($caught as $value) {\r
98 if ($value === false) {\r
99 continue;\r
100 }\r
101 $ret[] = $value;\r
102 }\r
103\r
104 if (empty($ret)) {\r
105 return false;\r
106 }\r
107 return implode(' ', $ret);\r
108 }\r
109}\r
110\r
111// vim: et sw=4 sts=4\r