Files
iD/modules/svg/osm.js
2018-01-22 15:06:58 -05:00

86 lines
2.4 KiB
JavaScript

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 layer-' + d; });
selection.selectAll('.layer-areas').selectAll('.layer-areas-group')
.data(['areas', 'targets'])
.enter()
.append('g')
.attr('class', function(d) { return 'layer-areas-group layer-areas-' + d; });
selection.selectAll('.layer-lines').selectAll('.layer-lines-group')
.data(['lines', 'targets'])
.enter()
.append('g')
.attr('class', function(d) { return 'layer-lines-group layer-lines-' + d; });
selection.selectAll('.layer-points').selectAll('.layer-points-group')
.data(['points', 'midpoints', 'vertices', 'turns', 'targets'])
.enter()
.append('g')
.attr('class', function(d) { return 'layer-points-group layer-points-' + d; });
selection.selectAll('.layer-labels').selectAll('.layer-labels-group')
.data(['halo', 'label', 'debug'])
.enter()
.append('g')
.attr('class', function(d) { return 'layer-labels-group layer-labels-' + 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(_) {
if (!arguments.length) return enabled;
enabled = _;
if (enabled) {
showLayer();
} else {
hideLayer();
}
dispatch.call('change');
return this;
};
return drawOsm;
}