| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | /** |
|---|
| 4 | * Definition that uses different definitions depending on context. |
|---|
| 5 | * |
|---|
| 6 | * The del and ins tags are notable because they allow different types of |
|---|
| 7 | * elements depending on whether or not they're in a block or inline context. |
|---|
| 8 | * Chameleon allows this behavior to happen by using two different |
|---|
| 9 | * definitions depending on context. While this somewhat generalized, |
|---|
| 10 | * it is specifically intended for those two tags. |
|---|
| 11 | */ |
|---|
| 12 | class HTMLPurifier_ChildDef_Chameleon extends HTMLPurifier_ChildDef |
|---|
| 13 | { |
|---|
| 14 | |
|---|
| 15 | /** |
|---|
| 16 | * Instance of the definition object to use when inline. Usually stricter. |
|---|
| 17 | */ |
|---|
| 18 | public $inline; |
|---|
| 19 | |
|---|
| 20 | /** |
|---|
| 21 | * Instance of the definition object to use when block. |
|---|
| 22 | */ |
|---|
| 23 | public $block; |
|---|
| 24 | |
|---|
| 25 | public $type = 'chameleon'; |
|---|
| 26 | |
|---|
| 27 | /** |
|---|
| 28 | * @param $inline List of elements to allow when inline. |
|---|
| 29 | * @param $block List of elements to allow when block. |
|---|
| 30 | */ |
|---|
| 31 | public function __construct($inline, $block) { |
|---|
| 32 | $this->inline = new HTMLPurifier_ChildDef_Optional($inline); |
|---|
| 33 | $this->block = new HTMLPurifier_ChildDef_Optional($block); |
|---|
| 34 | $this->elements = $this->block->elements; |
|---|
| 35 | } |
|---|
| 36 | |
|---|
| 37 | public function validateChildren($tokens_of_children, $config, $context) { |
|---|
| 38 | if ($context->get('IsInline') === false) { |
|---|
| 39 | return $this->block->validateChildren( |
|---|
| 40 | $tokens_of_children, $config, $context); |
|---|
| 41 | } else { |
|---|
| 42 | return $this->inline->validateChildren( |
|---|
| 43 | $tokens_of_children, $config, $context); |
|---|
| 44 | } |
|---|
| 45 | } |
|---|
| 46 | } |
|---|
| 47 | |
|---|