Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/TemplateNormalizations/EnforceHTMLOmittedEndTags.php
<?php

/**
* @package   s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Configurator\TemplateNormalizations;

use
DOMElement;
use
s9e\TextFormatter\Configurator\Helpers\ElementInspector;

/**
* Enforce omitted/optional HTML 5 end tags and fix the DOM
*
* Will replace
*     <p>.<p>.</p></p>
* with
*     <p>.</p><p>.</p>
*/
class EnforceHTMLOmittedEndTags extends AbstractNormalization
{
   
/**
    * {@inheritdoc}
    */
   
protected $queries = ['//*[namespace-uri() = ""]/*[namespace-uri() = ""]'];

   
/**
    * {@inheritdoc}
    */
   
protected function normalizeElement(DOMElement $element)
    {
       
$parentNode = $element->parentNode;
        if (
ElementInspector::isVoid($parentNode) || ElementInspector::closesParent($element, $parentNode))
        {
           
$this->reparentElement($element);
        }
    }

   
/**
    * Move given element and its following siblings after its parent element
    *
    * @param  DOMElement $element First element to move
    * @return void
    */
   
protected function reparentElement(DOMElement $element)
    {
       
$parentNode = $element->parentNode;
        do
        {
           
$lastChild = $parentNode->lastChild;
           
$parentNode->parentNode->insertBefore($lastChild, $parentNode->nextSibling);
        }
        while (!
$lastChild->isSameNode($element));
    }
}