UNPKG

angular-l10n

Version:

Angular library to translate texts, dates and numbers

49 lines 5.97 kB
/** * Breadth First Search (BFS) algorithm for traversing & searching tree data structure of DOM * explores the neighbor nodes first, before moving to the next level neighbors. * Time complexity: between O(1) and O(|V|^2). */ export function getTargetNode(rootNode) { return walk(rootNode); } const MAX_DEPTH = 10; function walk(rootNode) { const queue = []; let iNode; let depth = 0; let nodeToDepthIncrease = 1; queue.push(rootNode); while (queue.length > 0 && depth <= MAX_DEPTH) { iNode = queue.splice(0, 1)[0]; if (isTargetNode(iNode)) return iNode; if (depth < MAX_DEPTH && iNode.childNodes) { for (const child of Array.from(iNode.childNodes)) { if (isValidNode(child)) { queue.push(child); } } } if (--nodeToDepthIncrease === 0) { depth++; nodeToDepthIncrease = queue.length; } } return rootNode; } function isTargetNode(node) { return typeof node !== 'undefined' && node.nodeType === 3 && node.nodeValue != null && node.nodeValue.trim() !== ''; } /** * A valid node is not marked for translation. */ function isValidNode(node) { if (typeof node !== 'undefined' && node.nodeType === 1 && node.attributes) { for (const attr of Array.from(node.attributes)) { if (attr && /^l10n|translate/.test(attr.name)) return false; } } return true; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1sMTBuL3NyYy9saWIvbW9kZWxzL2Jmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFxQjtJQUMvQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBRXJCLFNBQVMsSUFBSSxDQUFDLFFBQXFCO0lBQy9CLE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7SUFFaEMsSUFBSSxLQUFrQixDQUFDO0lBQ3ZCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBRTVCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckIsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1FBQzNDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0QyxJQUFJLEtBQUssR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLFdBQVcsQ0FBQyxLQUFvQixDQUFDLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBb0IsQ0FBQyxDQUFDO2lCQUNwQzthQUNKO1NBQ0o7UUFDRCxJQUFJLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxFQUFFO1lBQzdCLEtBQUssRUFBRSxDQUFDO1lBQ1IsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUN0QztLQUNKO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQWlCO0lBQ25DLE9BQU8sT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWlCO0lBQ2xDLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1QyxJQUFJLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUMvRDtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCcmVhZHRoIEZpcnN0IFNlYXJjaCAoQkZTKSBhbGdvcml0aG0gZm9yIHRyYXZlcnNpbmcgJiBzZWFyY2hpbmcgdHJlZSBkYXRhIHN0cnVjdHVyZSBvZiBET01cclxuICogZXhwbG9yZXMgdGhlIG5laWdoYm9yIG5vZGVzIGZpcnN0LCBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGxldmVsIG5laWdoYm9ycy5cclxuICogVGltZSBjb21wbGV4aXR5OiBiZXR3ZWVuIE8oMSkgYW5kIE8ofFZ8XjIpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldE5vZGUocm9vdE5vZGU6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHdhbGsocm9vdE5vZGUpO1xyXG59XHJcblxyXG5jb25zdCBNQVhfREVQVEggPSAxMDtcclxuXHJcbmZ1bmN0aW9uIHdhbGsocm9vdE5vZGU6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xyXG4gICAgY29uc3QgcXVldWU6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgICBsZXQgaU5vZGU6IEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGRlcHRoID0gMDtcclxuICAgIGxldCBub2RlVG9EZXB0aEluY3JlYXNlID0gMTtcclxuXHJcbiAgICBxdWV1ZS5wdXNoKHJvb3ROb2RlKTtcclxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwICYmIGRlcHRoIDw9IE1BWF9ERVBUSCkge1xyXG4gICAgICAgIGlOb2RlID0gcXVldWUuc3BsaWNlKDAsIDEpWzBdO1xyXG4gICAgICAgIGlmIChpc1RhcmdldE5vZGUoaU5vZGUpKSByZXR1cm4gaU5vZGU7XHJcbiAgICAgICAgaWYgKGRlcHRoIDwgTUFYX0RFUFRIICYmIGlOb2RlLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKGlOb2RlLmNoaWxkTm9kZXMpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZE5vZGUoY2hpbGQgYXMgSFRNTEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChjaGlsZCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC0tbm9kZVRvRGVwdGhJbmNyZWFzZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXB0aCsrO1xyXG4gICAgICAgICAgICBub2RlVG9EZXB0aEluY3JlYXNlID0gcXVldWUubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByb290Tm9kZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNUYXJnZXROb2RlKG5vZGU6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUgIT09ICd1bmRlZmluZWQnICYmIG5vZGUubm9kZVR5cGUgPT09IDMgJiYgbm9kZS5ub2RlVmFsdWUgIT0gbnVsbCAmJiBub2RlLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnO1xyXG59XHJcblxyXG4vKipcclxuICogQSB2YWxpZCBub2RlIGlzIG5vdCBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZE5vZGUobm9kZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgICAgIGlmIChhdHRyICYmIC9ebDEwbnx0cmFuc2xhdGUvLnRlc3QoYXR0ci5uYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbiJdfQ==