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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body