Add name autocomplete

This commit is contained in:
Aaron Lidman
2013-10-31 16:36:29 -07:00
parent 19c0da82b1
commit 5a119f6eed
2 changed files with 36 additions and 3 deletions
+4 -2
View File
@@ -17,7 +17,8 @@ iD.data = {
path + 'data/feature-icons.json',
path + 'data/operations-sprite.json',
path + 'data/locales.json',
path + 'dist/locales/en.json'
path + 'dist/locales/en.json',
path + 'data/name-suggestions.json'
], d3.json, function (err, data) {
iD.data = {
@@ -35,7 +36,8 @@ iD.data = {
featureIcons: data[9],
operations: data[10],
locales: data[11],
en: data[12]
en: data[12],
suggestions: data[13]
};
callback();
+32 -1
View File
@@ -1,4 +1,4 @@
iD.ui.preset.localized = function(field) {
iD.ui.preset.localized = function(field, context) {
var event = d3.dispatch('change'),
wikipedia = iD.wikipedia(),
@@ -18,6 +18,8 @@ iD.ui.preset.localized = function(field) {
.on('blur', change)
.on('change', change);
input.call(d3.combobox().fetcher(suggestNames));
var translateButton = selection.selectAll('.localized-add')
.data([0]);
@@ -89,6 +91,35 @@ iD.ui.preset.localized = function(field) {
event.change(t);
}
function suggestNames(value, callback) {
var suggest = [],
s9s = iD.data.suggestions;
if (value && value.length > 2) {
var selected = context.selectedIDs(),
entity = context.entity(selected),
preset = context.presets().match(entity, context.graph());
preset = preset.id.split('/', 2);
var k = preset[0],
v = preset[1];
if (s9s[k] && s9s[k][v]) {
for (var sugg in s9s[k][v]) {
var dist = iD.util.editDistance(value, sugg.substring(0, value.length));
if (dist < 5) {
suggest.push({
title: sugg,
value: sugg,
dist: dist
});
}
}
}
suggest.sort(function(a, b) {
return a.dist - b.dist;
});
}
callback(suggest);
}
function fetcher(value, cb) {
var v = value.toLowerCase();