function updateHover()

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);
        }