@cycle/dom
Version:
The standard DOM Driver for Cycle.js, based on Snabbdom
65 lines • 2.12 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var SymbolTree = /** @class */ (function () {
function SymbolTree(mapper) {
this.mapper = mapper;
this.tree = [undefined, {}];
}
SymbolTree.prototype.set = function (path, element, max) {
var curr = this.tree;
var _max = max !== undefined ? max : path.length;
for (var i = 0; i < _max; i++) {
var n = this.mapper(path[i]);
var child = curr[1][n];
if (!child) {
child = [undefined, {}];
curr[1][n] = child;
}
curr = child;
}
curr[0] = element;
};
SymbolTree.prototype.getDefault = function (path, mkDefaultElement, max) {
return this.get(path, mkDefaultElement, max);
};
/**
* Returns the payload of the path
* If a default element creator is given, it will insert it at the path
*/
SymbolTree.prototype.get = function (path, mkDefaultElement, max) {
var curr = this.tree;
var _max = max !== undefined ? max : path.length;
for (var i = 0; i < _max; i++) {
var n = this.mapper(path[i]);
var child = curr[1][n];
if (!child) {
if (mkDefaultElement) {
child = [undefined, {}];
curr[1][n] = child;
}
else {
return undefined;
}
}
curr = child;
}
if (mkDefaultElement && !curr[0]) {
curr[0] = mkDefaultElement();
}
return curr[0];
};
SymbolTree.prototype.delete = function (path) {
var curr = this.tree;
for (var i = 0; i < path.length - 1; i++) {
var child = curr[1][this.mapper(path[i])];
if (!child) {
return;
}
curr = child;
}
delete curr[1][this.mapper(path[path.length - 1])];
};
return SymbolTree;
}());
exports.default = SymbolTree;
//# sourceMappingURL=SymbolTree.js.map
;