Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
optometrists
/
cache
/
cache
/
cache
/
cache
/
cache
/
cache
/
cache
/
.wp-cli
/
wp-content
/
plugins
/
svg-support
/
vendor
/
enshrined
/
svg-sanitize
/
src
/
data
:
XPath.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace enshrined\svgSanitize\data; class XPath extends \DOMXPath { const DEFAULT_NAMESPACE_PREFIX = 'svg'; /** * @var string */ protected $defaultNamespaceURI; public function __construct(\DOMDocument $doc) { parent::__construct($doc); $this->handleDefaultNamespace(); } /** * @param string $nodeName * @return string */ public function createNodeName($nodeName) { if (empty($this->defaultNamespaceURI)) { return $nodeName; } return self::DEFAULT_NAMESPACE_PREFIX . ':' . $nodeName; } protected function handleDefaultNamespace() { $rootElements = $this->getRootElements(); if (count($rootElements) !== 1) { throw new \LogicException( sprintf('Got %d svg elements, expected exactly one', count($rootElements)), 1570870568 ); } $this->defaultNamespaceURI = (string)$rootElements[0]->namespaceURI; if ($this->defaultNamespaceURI !== '') { $this->registerNamespace(self::DEFAULT_NAMESPACE_PREFIX, $this->defaultNamespaceURI); } } /** * @return \DOMElement[] */ protected function getRootElements() { $rootElements = []; $elements = $this->document->getElementsByTagName('svg'); /** @var \DOMElement $element */ foreach ($elements as $element) { if ($element->parentNode !== $this->document) { continue; } $rootElements[] = $element; } return $rootElements; } }