function getDefaultResults()

in modules/ui/preset_browser.js [268:364]


    function getDefaultResults() {

        var graph = context.graph();

        var superGroups = groupManager.groupsWithNearby;
        var scoredGroups = {};
        var scoredPresets = {};

        context.presets().getRecents().slice(0, 15).forEach(function(item, index) {
            var score = (15 - index) / 15;

            var id = item.preset.id;
            if (!scoredPresets[id]) {
                scoredPresets[id] = {
                    preset: item.preset,
                    score: score
                };
            }
        });

        var queryExtent = context.map().extent();
        var nearbyEntities = context.history().tree().intersects(queryExtent, graph);
        for (var i in nearbyEntities) {
            var entity = nearbyEntities[i];
            // ignore boring features
            if (!entity.hasInterestingTags()) continue;

            var geom = entity.geometry(graph);

            // evaluate preset
            var preset = context.presets().match(entity, graph);
            if (preset.searchable !== false && // don't recommend unsearchables
                !preset.isFallback() && // don't recommend generics
                !preset.suggestion) { // don't recommend brand suggestions again
                if (!scoredPresets[preset.id]) {
                    scoredPresets[preset.id] = {
                        preset: preset,
                        score: 0
                    };
                }
                scoredPresets[preset.id].score += 1;
            }

            // evaluate groups
            for (var j in superGroups) {
                var group = superGroups[j];
                if (group.matchesTags(entity.tags, geom)) {
                    var nearbyGroupID = group.nearby;
                    if (!scoredGroups[nearbyGroupID]) {
                        scoredGroups[nearbyGroupID] = {
                            group: groupManager.group(nearbyGroupID),
                            score: 0
                        };
                    }
                    var entityScore;
                    if (geom === 'area') {
                        // significantly prefer area features that dominate the viewport
                        // (e.g. editing within a park or school grounds)
                        var containedPercent = queryExtent.percentContainedIn(entity.extent(graph));
                        entityScore = Math.max(1, containedPercent * 10);
                    } else {
                        entityScore = 1;
                    }
                    scoredGroups[nearbyGroupID].score += entityScore;
                }
            }
        }

        Object.values(scoredGroups).forEach(function(scoredGroupItem) {
            scoredGroupItem.group.scoredPresets().forEach(function(groupScoredPreset) {
                var combinedScore = groupScoredPreset.score * scoredGroupItem.score;
                if (!scoredPresets[groupScoredPreset.preset.id]) {
                    scoredPresets[groupScoredPreset.preset.id] = {
                        preset: groupScoredPreset.preset,
                        score: combinedScore
                    };
                } else {
                    scoredPresets[groupScoredPreset.preset.id].score += combinedScore;
                }
            });
        });

        return Object.values(scoredPresets).sort(function(item1, item2) {
            return item2.score - item1.score;
        }).map(function(item) {
            return item.preset ? item.preset : item;
        }).filter(function(d) {
            var preset = d.preset || d;
            // skip non-visible
            if (preset.addable && !preset.addable()) return false;

            // skip presets not valid in this country
            if (_countryCode && preset.countryCodes && preset.countryCodes.indexOf(_countryCode) === -1) return false;

            return preset.defaultAddGeometry(context, shownGeometry);
        }).slice(0, 50);
    }