modules/svg/osm.js (52 lines of code) (raw):
export function svgOsm(projection, context, dispatch) {
var enabled = true;
function drawOsm(selection) {
selection.selectAll('.layer-osm')
.data(['covered', 'areas', 'lines', 'points', 'labels'])
.enter()
.append('g')
.attr('class', function(d) { return 'layer-osm ' + d; });
selection.selectAll('.layer-osm.points').selectAll('.points-group')
.data(['points', 'midpoints', 'vertices', 'turns'])
.enter()
.append('g')
.attr('class', function(d) { return 'points-group ' + d; });
}
function showLayer() {
var layer = context.surface().selectAll('.data-layer.osm');
layer.interrupt();
layer
.classed('disabled', false)
.style('opacity', 0)
.transition()
.duration(250)
.style('opacity', 1)
.on('end interrupt', function () {
dispatch.call('change');
});
}
function hideLayer() {
var layer = context.surface().selectAll('.data-layer.osm');
layer.interrupt();
layer
.transition()
.duration(250)
.style('opacity', 0)
.on('end interrupt', function () {
layer.classed('disabled', true);
dispatch.call('change');
});
}
drawOsm.enabled = function(val) {
if (!arguments.length) return enabled;
enabled = val;
if (enabled) {
showLayer();
} else {
hideLayer();
}
dispatch.call('change');
return this;
};
return drawOsm;
}