in modules/ui/map_in_map.js [143:252]
function redraw() {
clearTimeout(_timeoutID);
if (_isHidden) return;
updateProjection();
var zMini = geoScaleToZoom(projection.scale());
// setup tile container
tiles = wrap
.selectAll('.map-in-map-tiles')
.data([0]);
tiles = tiles.enter()
.append('div')
.attr('class', 'map-in-map-tiles')
.merge(tiles);
// redraw background
backgroundLayer
.source(context.background().baseLayerSource())
.projection(projection)
.dimensions(_dMini);
var background = tiles
.selectAll('.map-in-map-background')
.data([0]);
background.enter()
.append('div')
.attr('class', 'map-in-map-background')
.merge(background)
.call(backgroundLayer);
// redraw overlay
var overlaySources = context.background().overlayLayerSources();
var activeOverlayLayers = [];
for (var i = 0; i < overlaySources.length; i++) {
if (overlaySources[i].validZoom(zMini)) {
if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
activeOverlayLayers.push(overlayLayers[i]
.source(overlaySources[i])
.projection(projection)
.dimensions(_dMini));
}
}
var overlay = tiles
.selectAll('.map-in-map-overlay')
.data([0]);
overlay = overlay.enter()
.append('div')
.attr('class', 'map-in-map-overlay')
.merge(overlay);
var overlays = overlay
.selectAll('div')
.data(activeOverlayLayers, function(d) { return d.source().name(); });
overlays.exit()
.remove();
overlays = overlays.enter()
.append('div')
.merge(overlays)
.each(function(layer) { d3_select(this).call(layer); });
var dataLayers = tiles
.selectAll('.map-in-map-data')
.data([0]);
dataLayers.exit()
.remove();
dataLayers = dataLayers.enter()
.append('svg')
.attr('class', 'map-in-map-data')
.merge(dataLayers)
.call(dataLayer)
.call(debugLayer);
// redraw viewport bounding box
if (_gesture !== 'pan') {
var getPath = d3_geoPath(projection);
var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
viewport = wrap.selectAll('.map-in-map-viewport')
.data([0]);
viewport = viewport.enter()
.append('svg')
.attr('class', 'map-in-map-viewport')
.merge(viewport);
var path = viewport.selectAll('.map-in-map-bbox')
.data([bbox]);
path.enter()
.append('path')
.attr('class', 'map-in-map-bbox')
.merge(path)
.attr('d', getPath)
.classed('thick', function(d) { return getPath.area(d) < 30; });
}
}