Avoid retaining a graph reference

The supersurface event bindings retained a reference to the initial
graph, preventing it being GC'd after a save operation.
This commit is contained in:
John Firebaugh
2013-04-20 15:17:53 -07:00
parent 39f6ffff78
commit 20150cb9d4
2 changed files with 16 additions and 13 deletions

View File

@@ -54,6 +54,8 @@ iD.Map = function(context) {
map.surface = surface;
map.layersurface = layergroup;
labels.supersurface(supersurface);
supersurface
.call(tail);
}

View File

@@ -271,26 +271,15 @@ iD.svg.Labels = function(projection, context) {
var rtree = new RTree(),
rectangles = {},
lang = 'name:' + iD.detect().locale.toLowerCase().split('-')[0],
supersurface, mousePosition, cacheDimensions;
mousePosition, cacheDimensions;
return function drawLabels(surface, graph, entities, filter, dimensions, fullRedraw) {
function labels(surface, graph, entities, filter, dimensions, fullRedraw) {
if (!mousePosition || dimensions.join(',') !== cacheDimensions) {
mousePosition = iD.util.fastMouse(surface.node().parentNode);
cacheDimensions = dimensions.join(',');
}
if (!supersurface) {
supersurface = d3.select(surface.node().parentNode)
.on('mousemove.hidelabels', hideOnMouseover)
.on('mousedown.hidelabels', function() {
supersurface.on('mousemove.hidelabels', null);
})
.on('mouseup.hidelabels', function() {
supersurface.on('mousemove.hidelabels', hideOnMouseover);
});
}
var hidePoints = !surface.select('.node.point').node();
var labelable = [], i, k, entity;
@@ -457,6 +446,18 @@ iD.svg.Labels = function(projection, context) {
areas = drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area),
areaHalos = drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area),
areaIcons = drawAreaIcons(label, labelled.area, filter, 'arealabel-icon', positions.area);
}
labels.supersurface = function(supersurface) {
supersurface
.on('mousemove.hidelabels', hideOnMouseover)
.on('mousedown.hidelabels', function () {
supersurface.on('mousemove.hidelabels', null);
})
.on('mouseup.hidelabels', function () {
supersurface.on('mousemove.hidelabels', hideOnMouseover);
});
};
return labels;
};