版博士V2.0程序
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

HTMLTemplateElement.js 2.6 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const HTMLElement_1 = __importDefault(require("../html-element/HTMLElement"));
  7. const XMLParser_1 = __importDefault(require("../../xml-parser/XMLParser"));
  8. const XMLSerializer_1 = __importDefault(require("../../xml-serializer/XMLSerializer"));
  9. /**
  10. * HTML Template Element.
  11. *
  12. * Reference:
  13. * https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement.
  14. */
  15. class HTMLTemplateElement extends HTMLElement_1.default {
  16. constructor() {
  17. super(...arguments);
  18. this.content = this.ownerDocument.createDocumentFragment();
  19. }
  20. /**
  21. * @override
  22. */
  23. get innerHTML() {
  24. return this.getInnerHTML();
  25. }
  26. /**
  27. * @override
  28. */
  29. set innerHTML(html) {
  30. for (const child of this.content.childNodes.slice()) {
  31. this.content.removeChild(child);
  32. }
  33. for (const node of XMLParser_1.default.parse(this.ownerDocument, html).childNodes.slice()) {
  34. this.content.appendChild(node);
  35. }
  36. }
  37. /**
  38. * @override
  39. */
  40. get previousSibling() {
  41. return null;
  42. }
  43. /**
  44. * @override
  45. */
  46. get nextSibling() {
  47. return null;
  48. }
  49. /**
  50. * @override
  51. */
  52. get firstChild() {
  53. return this.content.firstChild;
  54. }
  55. /**
  56. * @override
  57. */
  58. get lastChild() {
  59. return this.content.lastChild;
  60. }
  61. /**
  62. * @override
  63. */
  64. getInnerHTML(options) {
  65. const xmlSerializer = new XMLSerializer_1.default();
  66. let xml = '';
  67. for (const node of this.content.childNodes) {
  68. xml += xmlSerializer.serializeToString(node, options);
  69. }
  70. return xml;
  71. }
  72. /**
  73. * @override
  74. */
  75. appendChild(node) {
  76. return this.content.appendChild(node);
  77. }
  78. /**
  79. * @override
  80. */
  81. removeChild(node) {
  82. return this.content.removeChild(node);
  83. }
  84. /**
  85. * @override
  86. */
  87. insertBefore(newNode, referenceNode) {
  88. return this.content.insertBefore(newNode, referenceNode);
  89. }
  90. /**
  91. * @override
  92. */
  93. replaceChild(newChild, oldChild) {
  94. return this.content.replaceChild(newChild, oldChild);
  95. }
  96. /**
  97. * @override
  98. */
  99. cloneNode(deep = false) {
  100. const clone = super.cloneNode(deep);
  101. clone.content = this.content.cloneNode(deep);
  102. return clone;
  103. }
  104. }
  105. exports.default = HTMLTemplateElement;
  106. //# sourceMappingURL=HTMLTemplateElement.js.map