UNPKG

mutation-summary

Version:
112 lines 4.76 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.TreeChanges = void 0; var NodeMap_1 = require("./NodeMap"); var NodeChange_1 = require("./NodeChange"); var Movement_1 = require("./Movement"); var TreeChanges = /** @class */ (function (_super) { __extends(TreeChanges, _super); function TreeChanges(rootNode, mutations) { var _this = _super.call(this) || this; _this.rootNode = rootNode; _this.reachableCache = undefined; _this.wasReachableCache = undefined; _this.anyParentsChanged = false; _this.anyAttributesChanged = false; _this.anyCharacterDataChanged = false; for (var m = 0; m < mutations.length; m++) { var mutation = mutations[m]; switch (mutation.type) { case 'childList': _this.anyParentsChanged = true; for (var i = 0; i < mutation.removedNodes.length; i++) { var node = mutation.removedNodes[i]; _this.getChange(node).removedFromParent(mutation.target); } for (var i = 0; i < mutation.addedNodes.length; i++) { var node = mutation.addedNodes[i]; _this.getChange(node).insertedIntoParent(); } break; case 'attributes': { _this.anyAttributesChanged = true; var change = _this.getChange(mutation.target); change.attributeMutated(mutation.attributeName, mutation.oldValue); break; } case 'characterData': { _this.anyCharacterDataChanged = true; var change = _this.getChange(mutation.target); change.characterDataMutated(mutation.oldValue); break; } } } return _this; } TreeChanges.prototype.getChange = function (node) { var change = this.get(node); if (!change) { change = new NodeChange_1.NodeChange(node); this.set(node, change); } return change; }; TreeChanges.prototype.getOldParent = function (node) { var change = this.get(node); return change ? change.getOldParent() : node.parentNode; }; TreeChanges.prototype.getIsReachable = function (node) { if (node === this.rootNode) return true; if (!node) return false; this.reachableCache = this.reachableCache || new NodeMap_1.NodeMap(); var isReachable = this.reachableCache.get(node); if (isReachable === undefined) { isReachable = this.getIsReachable(node.parentNode); this.reachableCache.set(node, isReachable); } return isReachable; }; // A node wasReachable if its oldParent wasReachable. TreeChanges.prototype.getWasReachable = function (node) { if (node === this.rootNode) return true; if (!node) return false; this.wasReachableCache = this.wasReachableCache || new NodeMap_1.NodeMap(); var wasReachable = this.wasReachableCache.get(node); if (wasReachable === undefined) { wasReachable = this.getWasReachable(this.getOldParent(node)); this.wasReachableCache.set(node, wasReachable); } return wasReachable; }; TreeChanges.prototype.reachabilityChange = function (node) { if (this.getIsReachable(node)) { return this.getWasReachable(node) ? Movement_1.Movement.STAYED_IN : Movement_1.Movement.ENTERED; } return this.getWasReachable(node) ? Movement_1.Movement.EXITED : Movement_1.Movement.STAYED_OUT; }; return TreeChanges; }(NodeMap_1.NodeMap)); exports.TreeChanges = TreeChanges; //# sourceMappingURL=TreeChanges.js.map