MCPcopy
hub / github.com/rrweb-io/rrweb / buildFromNode

Function buildFromNode

packages/rrdom/src/index.ts:217–289  ·  view source on GitHub ↗
(
  node: Node,
  rrdom: IRRDocument,
  domMirror: NodeMirror,
  parentRRNode?: IRRNode | null,
)

Source from the content-addressed store, hash-verified

215 * @returns the built RRNode
216 */
217export function buildFromNode(
218 node: Node,
219 rrdom: IRRDocument,
220 domMirror: NodeMirror,
221 parentRRNode?: IRRNode | null,
222): IRRNode | null {
223 let rrNode: IRRNode;
224
225 switch (node.nodeType) {
226 case NodeType.DOCUMENT_NODE:
227 if (parentRRNode && parentRRNode.nodeName === 'IFRAME')
228 rrNode = (parentRRNode as RRIFrameElement).contentDocument;
229 else {
230 rrNode = rrdom;
231 (rrNode as IRRDocument).compatMode = (node as Document).compatMode as
232 | 'BackCompat'
233 | 'CSS1Compat';
234 }
235 break;
236 case NodeType.DOCUMENT_TYPE_NODE: {
237 const documentType = node as DocumentType;
238 rrNode = rrdom.createDocumentType(
239 documentType.name,
240 documentType.publicId,
241 documentType.systemId,
242 );
243 break;
244 }
245 case NodeType.ELEMENT_NODE: {
246 const elementNode = node as HTMLElement;
247 const tagName = getValidTagName(elementNode);
248 rrNode = rrdom.createElement(tagName);
249 const rrElement = rrNode as IRRElement;
250 for (const { name, value } of Array.from(elementNode.attributes)) {
251 rrElement.attributes[name] = value;
252 }
253 elementNode.scrollLeft && (rrElement.scrollLeft = elementNode.scrollLeft);
254 elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);
255 /**
256 * We don't have to record special values of input elements at the beginning.
257 * Because if these values are changed later, the mutation will be applied through the batched input events on its RRElement after the diff algorithm is executed.
258 */
259 break;
260 }
261 case NodeType.TEXT_NODE:
262 rrNode = rrdom.createTextNode((node as Text).textContent || '');
263 break;
264 case NodeType.CDATA_SECTION_NODE:
265 rrNode = rrdom.createCDATASection((node as CDATASection).data);
266 break;
267 case NodeType.COMMENT_NODE:
268 rrNode = rrdom.createComment((node as Comment).textContent || '');
269 break;
270 // if node is a shadow root
271 case NodeType.DOCUMENT_FRAGMENT_NODE:
272 rrNode = (parentRRNode as IRRElement).attachShadow({ mode: 'open' });
273 break;
274 default:

Callers 3

applyMutationMethod · 0.90
walkFunction · 0.85

Calls 10

getDefaultSNFunction · 0.85
getValidTagNameFunction · 0.70
createDocumentTypeMethod · 0.65
createElementMethod · 0.65
createTextNodeMethod · 0.65
createCDATASectionMethod · 0.65
createCommentMethod · 0.65
attachShadowMethod · 0.65
getMetaMethod · 0.65
addMethod · 0.65

Tested by

no test coverage detected