Source: xblocks/dom/contentNode.js

  1. import Constants from './../constants';
  2. /**
  3. * Obtaining the nodes with content defined by the user.
  4. *
  5. * @example
  6. * <x-element>test</x-element>
  7. *
  8. * import contentNode from 'xblocks-core/dom/contentNode';
  9. * console.log(contentNode(document.querySelector('x-element')));
  10. * // test
  11. *
  12. * @example
  13. * <x-element>
  14. * <script type="text/x-template">test</script>
  15. * other content
  16. * </x-element>
  17. *
  18. * import contentNode from 'xblocks-core/dom/contentNode';
  19. * console.log(contentNode(document.querySelector('x-element')));
  20. * // test
  21. *
  22. * @module xblocks-core/dom/contentNode
  23. * @param {HTMLElement} node
  24. * @returns {HTMLElement}
  25. */
  26. export default function (node) {
  27. const uid = node[ Constants.UID ];
  28. let element;
  29. if (uid && node.nodeType === 1 && node.hasChildNodes()) {
  30. element = node.querySelector(`[data-xb-content="${uid}"]`);
  31. if (!element) {
  32. element = node.querySelector('script[type="text/x-template"]:not([ref]),template:not([ref])');
  33. }
  34. }
  35. return element || node;
  36. }