: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
* Helper functionality to deal with AMP dev-mode.
* @link https://github.com/ampproject/amphtml/issues/20974
* @package ampproject/amp-toolbox
* Attribute name for AMP dev mode.
const DEV_MODE_ATTRIBUTE = 'data-ampdevmode';
* Check whether the provided document is in dev mode.
* @param Document $document Document for which to check whether dev mode is active.
* @return bool Whether the document is in dev mode.
public static function isActiveForDocument(Document $document)
return $document->documentElement->hasAttribute(self::DEV_MODE_ATTRIBUTE);
* Check whether a node is exempt from validation during dev mode.
* @param DOMNode $node Node to check.
* @return bool Whether the node should be exempt during dev mode.
public static function hasExemptionForNode(DOMNode $node)
if (! $node instanceof Element) {
$document = self::getDocument($node);
if ($node === $document->documentElement) {
return $document->hasInitialAmpDevMode();
return $node->hasAttribute(self::DEV_MODE_ATTRIBUTE);
* Check whether a certain node should be exempt from validation.
* @param DOMNode $node Node to check.
* @return bool Whether the node should be exempt from validation.
public static function isExemptFromValidation(DOMNode $node)
$document = self::getDocument($node);
return self::isActiveForDocument($document) && self::hasExemptionForNode($node);
* Get the document from the specified node.
private static function getDocument(DOMNode $node)
$document = $node->ownerDocument;
if (! $document instanceof Document) {
$document = Document::fromNode($node);