UNPKG

ngx-preboot

Version:

Record server view events and play back to Angular client view

36 lines 4.69 kB
/** * Attempt to generate key from node position in the DOM */ export function getNodeKeyForPreboot(nodeContext) { const ancestors = []; const root = nodeContext.root; const node = nodeContext.node; let temp = node; // walk up the tree from the target node up to the root while (temp && temp !== root.serverNode && temp !== root.clientNode) { ancestors.push(temp); temp = temp.parentNode; } // note: if temp doesn't exist here it means root node wasn't found if (temp) { ancestors.push(temp); } // now go backwards starting from the root, appending the appName to unique // identify the node later.. const name = node.nodeName || 'unknown'; let key = name; const len = ancestors.length; for (let i = len - 1; i >= 0; i--) { temp = ancestors[i]; if (temp.childNodes && i > 0) { for (let j = 0; j < temp.childNodes.length; j++) { if (temp.childNodes[j] === ancestors[i - 1]) { key += '_s' + (j + 1); break; } } } } return key; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LW5vZGUta2V5LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21tb24vZ2V0LW5vZGUta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQXdCO0lBQzNELE1BQU0sU0FBUyxHQUFjLEVBQUUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxJQUFJLEdBQW1CLElBQUksQ0FBQztJQUVoQyx1REFBdUQ7SUFDdkQsT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQXFCLENBQUM7S0FDbkM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBSSxJQUFJLEVBQUU7UUFDUixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RCO0lBRUQsMkVBQTJFO0lBQzNFLDRCQUE0QjtJQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDZixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgTm9kZUNvbnRleHQgfSBmcm9tICcuL3ByZWJvb3QuaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQXR0ZW1wdCB0byBnZW5lcmF0ZSBrZXkgZnJvbSBub2RlIHBvc2l0aW9uIGluIHRoZSBET01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVLZXlGb3JQcmVib290KG5vZGVDb250ZXh0OiBOb2RlQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IGFuY2VzdG9yczogRWxlbWVudFtdID0gW107XG4gIGNvbnN0IHJvb3QgPSBub2RlQ29udGV4dC5yb290O1xuICBjb25zdCBub2RlID0gbm9kZUNvbnRleHQubm9kZTtcbiAgbGV0IHRlbXA6IEVsZW1lbnQgfCBudWxsID0gbm9kZTtcblxuICAvLyB3YWxrIHVwIHRoZSB0cmVlIGZyb20gdGhlIHRhcmdldCBub2RlIHVwIHRvIHRoZSByb290XG4gIHdoaWxlICh0ZW1wICYmIHRlbXAgIT09IHJvb3Quc2VydmVyTm9kZSAmJiB0ZW1wICE9PSByb290LmNsaWVudE5vZGUpIHtcbiAgICBhbmNlc3RvcnMucHVzaCh0ZW1wKTtcbiAgICB0ZW1wID0gdGVtcC5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gIH1cblxuICAvLyBub3RlOiBpZiB0ZW1wIGRvZXNuJ3QgZXhpc3QgaGVyZSBpdCBtZWFucyByb290IG5vZGUgd2Fzbid0IGZvdW5kXG4gIGlmICh0ZW1wKSB7XG4gICAgYW5jZXN0b3JzLnB1c2godGVtcCk7XG4gIH1cblxuICAvLyBub3cgZ28gYmFja3dhcmRzIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QsIGFwcGVuZGluZyB0aGUgYXBwTmFtZSB0byB1bmlxdWVcbiAgLy8gaWRlbnRpZnkgdGhlIG5vZGUgbGF0ZXIuLlxuICBjb25zdCBuYW1lID0gbm9kZS5ub2RlTmFtZSB8fCAndW5rbm93bic7XG4gIGxldCBrZXkgPSBuYW1lO1xuICBjb25zdCBsZW4gPSBhbmNlc3RvcnMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIHRlbXAgPSBhbmNlc3RvcnNbaV07XG5cbiAgICBpZiAodGVtcC5jaGlsZE5vZGVzICYmIGkgPiAwKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRlbXAuY2hpbGROb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAodGVtcC5jaGlsZE5vZGVzW2pdID09PSBhbmNlc3RvcnNbaSAtIDFdKSB7XG4gICAgICAgICAga2V5ICs9ICdfcycgKyAoaiArIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGtleTtcbn1cbiJdfQ==