@npmstuff/argdown-core
Version:
A pluggable parser for the Argdown argumentation syntax
59 lines • 2.04 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClosedGroupPlugin = void 0;
const ArgdownPluginError_1 = require("../ArgdownPluginError");
const model_1 = require("../model/model");
class ClosedGroupPlugin {
constructor() {
this.name = "ClosedGroupPlugin";
this.run = (_request, response) => {
if (!response.map) {
throw (0, ArgdownPluginError_1.createMissingResponseFieldError)(this, "map");
}
for (let node of response.map.nodes) {
closeGroupsRecursively(node, response);
}
};
}
}
exports.ClosedGroupPlugin = ClosedGroupPlugin;
const closeGroupsRecursively = (currentNode, response) => {
if ((0, model_1.isGroupMapNode)(currentNode)) {
if (currentNode.isClosed) {
closeGroup(currentNode, response);
}
else if (currentNode.children) {
for (let child of currentNode.children) {
closeGroupsRecursively(child, response);
}
}
}
};
const closeGroup = (node, response) => {
const descendantsMap = node.children.reduce(reduceToDescendantsMap, {});
node.children = [];
response.map.edges = response.map.edges.reduce((acc, curr) => {
const fromIsDescendant = !!descendantsMap[curr.from.id];
const toIsDescendant = !!descendantsMap[curr.to.id];
if (fromIsDescendant && !toIsDescendant) {
curr.from = node;
acc.push(curr);
}
else if (toIsDescendant && !fromIsDescendant) {
curr.to = node;
acc.push(curr);
}
else if (!fromIsDescendant && !toIsDescendant) {
acc.push(curr);
}
return acc;
}, []);
};
const reduceToDescendantsMap = (acc, curr) => {
acc[curr.id] = curr;
if ((0, model_1.isGroupMapNode)(curr) && curr.children) {
curr.children.reduce(reduceToDescendantsMap, acc);
}
return acc;
};
//# sourceMappingURL=ClosedGroupPlugin.js.map
;