friendica/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php

57 lines
1.6 KiB
PHP
Raw Normal View History

2010-09-09 05:14:17 +02:00
<?php
/**
* Decorator which enables !important to be used in CSS values.
*/
class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
{
2016-02-09 11:06:17 +01:00
/**
* @type HTMLPurifier_AttrDef
*/
public $def;
/**
* @type bool
*/
public $allow;
2010-09-09 05:14:17 +02:00
/**
2016-02-09 11:06:17 +01:00
* @param HTMLPurifier_AttrDef $def Definition to wrap
* @param bool $allow Whether or not to allow !important
2010-09-09 05:14:17 +02:00
*/
2016-02-09 11:06:17 +01:00
public function __construct($def, $allow = false)
{
2010-09-09 05:14:17 +02:00
$this->def = $def;
$this->allow = $allow;
}
2016-02-09 11:06:17 +01:00
2010-09-09 05:14:17 +02:00
/**
* Intercepts and removes !important if necessary
2016-02-09 11:06:17 +01:00
* @param string $string
* @param HTMLPurifier_Config $config
* @param HTMLPurifier_Context $context
* @return bool|string
2010-09-09 05:14:17 +02:00
*/
2016-02-09 11:06:17 +01:00
public function validate($string, $config, $context)
{
2010-09-09 05:14:17 +02:00
// test for ! and important tokens
$string = trim($string);
$is_important = false;
// :TODO: optimization: test directly for !important and ! important
if (strlen($string) >= 9 && substr($string, -9) === 'important') {
$temp = rtrim(substr($string, 0, -9));
// use a temp, because we might want to restore important
if (strlen($temp) >= 1 && substr($temp, -1) === '!') {
$string = rtrim(substr($temp, 0, -1));
$is_important = true;
}
}
$string = $this->def->validate($string, $config, $context);
2016-02-09 11:06:17 +01:00
if ($this->allow && $is_important) {
$string .= ' !important';
}
2010-09-09 05:14:17 +02:00
return $string;
}
}
// vim: et sw=4 sts=4