Render.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Ui\TemplateEngine\Xhtml\Compiler\Element;
  7. use Magento\Framework\DataObject;
  8. use Magento\Framework\View\Element\UiComponentInterface;
  9. use Magento\Framework\View\TemplateEngine\Xhtml\Compiler\Element\ElementInterface;
  10. use Magento\Framework\View\TemplateEngine\Xhtml\CompilerInterface;
  11. use Magento\Framework\View\TemplateEngine\Xhtml\ResultInterface;
  12. /**
  13. * Class Render
  14. */
  15. class Render implements ElementInterface
  16. {
  17. /**
  18. * Compiles the Element node
  19. *
  20. * @param CompilerInterface $compiler
  21. * @param \DOMElement $node
  22. * @param DataObject $processedObject
  23. * @param DataObject $context
  24. * @return void
  25. *
  26. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  27. */
  28. public function compile(
  29. CompilerInterface $compiler,
  30. \DOMElement $node,
  31. DataObject $processedObject,
  32. DataObject $context
  33. ) {
  34. /** @var UiComponentInterface $processedObject */
  35. $result = $processedObject->renderChildComponent($node->getAttribute('name'));
  36. if ($result instanceof ResultInterface) {
  37. $node->parentNode->replaceChild($result->getDocumentElement(), $node);
  38. } elseif (!empty($result) && is_scalar($result)) {
  39. $newFragment = $node->ownerDocument->createDocumentFragment();
  40. $newFragment->appendXML($result);
  41. $node->parentNode->replaceChild($newFragment, $node);
  42. } else {
  43. $node->parentNode->removeChild($node);
  44. }
  45. }
  46. }