in modules/behavior/hover.js [130:194]
function updateHover(d3_event, targets) {
_selection.selectAll('.hover')
.classed('hover', false);
_selection.selectAll('.hover-suppressed')
.classed('hover-suppressed', false);
var mode = context.mode();
if (!_newNodeId && (mode.id === 'draw-line' || mode.id === 'draw-area')) {
var node = targets.find(function(target) {
return target instanceof osmEntity && target.type === 'node';
});
_newNodeId = node && node.id;
}
targets = targets.filter(function(datum) {
if (datum instanceof osmEntity) {
// If drawing a way, don't hover on a node that was just placed. #3974
return datum.id !== _newNodeId &&
(datum.type !== 'node' || !_ignoreVertex || allowsVertex(datum)) &&
modeAllowsHover(datum);
}
return true;
});
var selector = '';
for (var i in targets) {
var datum = targets[i];
// What are we hovering over?
if (datum.__fbid__) { // hovering a RapiD feature
selector += ', .data' + datum.__fbid__;
} else if (datum.__featurehash__) { // hovering custom data
selector += ', .data' + datum.__featurehash__;
} else if (datum instanceof QAItem) {
selector += ', .' + datum.service + '.itemId-' + datum.id;
} else if (datum instanceof osmNote) {
selector += ', .note-' + datum.id;
} else if (datum instanceof osmEntity) {
selector += ', .' + datum.id;
if (datum.type === 'relation') {
for (var j in datum.members) {
selector += ', .' + datum.members[j].id;
}
}
}
}
var suppressed = _altDisables && d3_event && d3_event.altKey;
if (selector.trim().length) {
// remove the first comma
selector = selector.slice(1);
_selection.selectAll(selector)
.classed(suppressed ? 'hover-suppressed' : 'hover', true);
}
dispatch.call('hover', this, !suppressed && targets);
}