UNPKG

4.69 kBJavaScriptView Raw
1/**
2 * Attempt to generate key from node position in the DOM
3 */
4export function getNodeKeyForPreboot(nodeContext) {
5 const ancestors = [];
6 const root = nodeContext.root;
7 const node = nodeContext.node;
8 let temp = node;
9 // walk up the tree from the target node up to the root
10 while (temp && temp !== root.serverNode && temp !== root.clientNode) {
11 ancestors.push(temp);
12 temp = temp.parentNode;
13 }
14 // note: if temp doesn't exist here it means root node wasn't found
15 if (temp) {
16 ancestors.push(temp);
17 }
18 // now go backwards starting from the root, appending the appName to unique
19 // identify the node later..
20 const name = node.nodeName || 'unknown';
21 let key = name;
22 const len = ancestors.length;
23 for (let i = len - 1; i >= 0; i--) {
24 temp = ancestors[i];
25 if (temp.childNodes && i > 0) {
26 for (let j = 0; j < temp.childNodes.length; j++) {
27 if (temp.childNodes[j] === ancestors[i - 1]) {
28 key += '_s' + (j + 1);
29 break;
30 }
31 }
32 }
33 }
34 return key;
35}
36//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LW5vZGUta2V5LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21tb24vZ2V0LW5vZGUta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQXdCO0lBQzNELE1BQU0sU0FBUyxHQUFjLEVBQUUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxJQUFJLEdBQW1CLElBQUksQ0FBQztJQUVoQyx1REFBdUQ7SUFDdkQsT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQXFCLENBQUM7S0FDbkM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBSSxJQUFJLEVBQUU7UUFDUixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RCO0lBRUQsMkVBQTJFO0lBQzNFLDRCQUE0QjtJQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDZixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgTm9kZUNvbnRleHQgfSBmcm9tICcuL3ByZWJvb3QuaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQXR0ZW1wdCB0byBnZW5lcmF0ZSBrZXkgZnJvbSBub2RlIHBvc2l0aW9uIGluIHRoZSBET01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVLZXlGb3JQcmVib290KG5vZGVDb250ZXh0OiBOb2RlQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IGFuY2VzdG9yczogRWxlbWVudFtdID0gW107XG4gIGNvbnN0IHJvb3QgPSBub2RlQ29udGV4dC5yb290O1xuICBjb25zdCBub2RlID0gbm9kZUNvbnRleHQubm9kZTtcbiAgbGV0IHRlbXA6IEVsZW1lbnQgfCBudWxsID0gbm9kZTtcblxuICAvLyB3YWxrIHVwIHRoZSB0cmVlIGZyb20gdGhlIHRhcmdldCBub2RlIHVwIHRvIHRoZSByb290XG4gIHdoaWxlICh0ZW1wICYmIHRlbXAgIT09IHJvb3Quc2VydmVyTm9kZSAmJiB0ZW1wICE9PSByb290LmNsaWVudE5vZGUpIHtcbiAgICBhbmNlc3RvcnMucHVzaCh0ZW1wKTtcbiAgICB0ZW1wID0gdGVtcC5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gIH1cblxuICAvLyBub3RlOiBpZiB0ZW1wIGRvZXNuJ3QgZXhpc3QgaGVyZSBpdCBtZWFucyByb290IG5vZGUgd2Fzbid0IGZvdW5kXG4gIGlmICh0ZW1wKSB7XG4gICAgYW5jZXN0b3JzLnB1c2godGVtcCk7XG4gIH1cblxuICAvLyBub3cgZ28gYmFja3dhcmRzIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QsIGFwcGVuZGluZyB0aGUgYXBwTmFtZSB0byB1bmlxdWVcbiAgLy8gaWRlbnRpZnkgdGhlIG5vZGUgbGF0ZXIuLlxuICBjb25zdCBuYW1lID0gbm9kZS5ub2RlTmFtZSB8fCAndW5rbm93bic7XG4gIGxldCBrZXkgPSBuYW1lO1xuICBjb25zdCBsZW4gPSBhbmNlc3RvcnMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIHRlbXAgPSBhbmNlc3RvcnNbaV07XG5cbiAgICBpZiAodGVtcC5jaGlsZE5vZGVzICYmIGkgPiAwKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRlbXAuY2hpbGROb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAodGVtcC5jaGlsZE5vZGVzW2pdID09PSBhbmNlc3RvcnNbaSAtIDFdKSB7XG4gICAgICAgICAga2V5ICs9ICdfcycgKyAoaiArIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGtleTtcbn1cbiJdfQ==
\No newline at end of file