function bindOn(node, dispatch) {
node.on('click.default', function () {
dispatch.apply('selectClick', this, arguments);
}).on('mouseenter.default', function () {
dispatch.apply('selectEnter', this, arguments);
}).on('mouseleave.default', function () {
dispatch.apply('selectLeave', this, arguments);
})
return node;
}
function run(process) {
process.forEach(p => {
if (p.allow) {
if (p.allow.call(this)) p.call.call(this);
} else {
p.call.call(this);
}
})
}
/**
* renders the chart. At the end of settings for a chart, it should be called. If keep is true, it does not reset existing scales.
* @memberOf Core#
* @function
* @param {boolean} [keep=false] If is true, not reset existing scales.
* @param {String[]} [skip=[]] If skip includes an process, the process will be ignored.
* @return {Core}
*/
function render(keep = false, skip = []) {
const process = {
pre: [],
post: []
};
this.process().forEach(p => {
if (skip.indexOf(p.type) < 0) {
if (p.isPre) process.pre.push(p);
else process.post.push(p);
}
})
this.reset(keep);
this.keep(keep);
if (this.needCanvas()) this.renderFrame();
run.call(this, process.pre);
if (this.needCanvas()) this.renderCanvas();
run.call(this, process.post);
if (!this.__execs__.canvas) return;
const dispatch = this.__execs__.selectDispatch;
const node = this.nodes();
const legend = this.__execs__.legend;
if (node && node.size() > 0) {
if (this.parent()) {
return;
}
node.call(bindOn, dispatch)
.on('mouseenter.default.legend', (d) => {
if (legend && legend.mute && this.muteToLegend) this.muteToLegend(d);
}).on('mouseleave.default.legend', (d) => {
if (legend && legend.demute && this.demuteToLegend) this.demuteToLegend(d);
})
}
if (this.isFacet && this.isFacet()) { //when is facet, get dispatch from regions.
node.call(bindOn, dispatch);
}
if (this.stream && this.stream() && keep) {
this.stream(null);
}
return this;
}
export default render;