85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Injector that removes spans with no attributes
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class HTMLPurifier_Injector_RemoveSpansWithoutAttributes extends HTMLPurifier_Injector
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @type string
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public $name = 'RemoveSpansWithoutAttributes';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @type array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public $needed = array('span');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @type HTMLPurifier_AttrValidator
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private $attrValidator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Used by AttrValidator.
							 | 
						||
| 
								 | 
							
								     * @type HTMLPurifier_Config
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private $config;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @type HTMLPurifier_Context
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private $context;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function prepare($config, $context)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->attrValidator = new HTMLPurifier_AttrValidator();
							 | 
						||
| 
								 | 
							
								        $this->config = $config;
							 | 
						||
| 
								 | 
							
								        $this->context = $context;
							 | 
						||
| 
								 | 
							
								        return parent::prepare($config, $context);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @param HTMLPurifier_Token $token
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function handleElement(&$token)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($token->name !== 'span' || !$token instanceof HTMLPurifier_Token_Start) {
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // We need to validate the attributes now since this doesn't normally
							 | 
						||
| 
								 | 
							
								        // happen until after MakeWellFormed. If all the attributes are removed
							 | 
						||
| 
								 | 
							
								        // the span needs to be removed too.
							 | 
						||
| 
								 | 
							
								        $this->attrValidator->validateToken($token, $this->config, $this->context);
							 | 
						||
| 
								 | 
							
								        $token->armor['ValidateAttributes'] = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!empty($token->attr)) {
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $nesting = 0;
							 | 
						||
| 
								 | 
							
								        while ($this->forwardUntilEndToken($i, $current, $nesting)) {
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($current instanceof HTMLPurifier_Token_End && $current->name === 'span') {
							 | 
						||
| 
								 | 
							
								            // Mark closing span tag for deletion
							 | 
						||
| 
								 | 
							
								            $current->markForDeletion = true;
							 | 
						||
| 
								 | 
							
								            // Delete open span tag
							 | 
						||
| 
								 | 
							
								            $token = false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @param HTMLPurifier_Token $token
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function handleEnd(&$token)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($token->markForDeletion) {
							 | 
						||
| 
								 | 
							
								            $token = false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// vim: et sw=4 sts=4
							 |