ffc989fe807b6ba6af4fcb031b18bcb21f9c8f0a
[yaffs-website] / vendor / ezyang / htmlpurifier / library / HTMLPurifier / AttrDef / CSS / ImportantDecorator.php
1 <?php
2
3 /**
4  * Decorator which enables !important to be used in CSS values.
5  */
6 class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
7 {
8     /**
9      * @type HTMLPurifier_AttrDef
10      */
11     public $def;
12     /**
13      * @type bool
14      */
15     public $allow;
16
17     /**
18      * @param HTMLPurifier_AttrDef $def Definition to wrap
19      * @param bool $allow Whether or not to allow !important
20      */
21     public function __construct($def, $allow = false)
22     {
23         $this->def = $def;
24         $this->allow = $allow;
25     }
26
27     /**
28      * Intercepts and removes !important if necessary
29      * @param string $string
30      * @param HTMLPurifier_Config $config
31      * @param HTMLPurifier_Context $context
32      * @return bool|string
33      */
34     public function validate($string, $config, $context)
35     {
36         // test for ! and important tokens
37         $string = trim($string);
38         $is_important = false;
39         // :TODO: optimization: test directly for !important and ! important
40         if (strlen($string) >= 9 && substr($string, -9) === 'important') {
41             $temp = rtrim(substr($string, 0, -9));
42             // use a temp, because we might want to restore important
43             if (strlen($temp) >= 1 && substr($temp, -1) === '!') {
44                 $string = rtrim(substr($temp, 0, -1));
45                 $is_important = true;
46             }
47         }
48         $string = $this->def->validate($string, $config, $context);
49         if ($this->allow && $is_important) {
50             $string .= ' !important';
51         }
52         return $string;
53     }
54 }
55
56 // vim: et sw=4 sts=4