var SetTreeVisibilityVisitor = function(visible) { this.visible = visible; }; SetTreeVisibilityVisitor.prototype.run = function(root) { this.visit(root); }; SetTreeVisibilityVisitor.prototype.visitArray = function(nodes) { if (!nodes) { return nodes; } var cnt = nodes.length, i; for (i = 0; i < cnt; i++) { this.visit(nodes[i]); } return nodes; }; SetTreeVisibilityVisitor.prototype.visit = function(node) { if (!node) { return node; } if (node.constructor === Array) { return this.visitArray(node); } if (!node.blocksVisibility || node.blocksVisibility()) { return node; } if (this.visible) { node.ensureVisibility(); } else { node.ensureInvisibility(); } node.accept(this); return node; }; module.exports = SetTreeVisibilityVisitor;