diff --git a/index.html b/index.html index dff77e08d..a1fd74225 100644 --- a/index.html +++ b/index.html @@ -38,6 +38,7 @@ + diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 564731658..7b7ffff54 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -12,11 +12,7 @@ iD.ui.preset = function(context) { field.input = iD.ui.preset[field.type](field, context) .on('change', event.change); - if (field.type === 'address' || - field.type === 'wikipedia' || - field.type === 'maxspeed') { - field.input.entity(entity); - } + if (field.input.entity) field.input.entity(entity); field.keys = field.keys || [field.key]; diff --git a/js/id/ui/preset/localized.js b/js/id/ui/preset/localized.js index 398bfc149..b43b0fbf1 100644 --- a/js/id/ui/preset/localized.js +++ b/js/id/ui/preset/localized.js @@ -2,7 +2,8 @@ iD.ui.preset.localized = function(field, context) { var event = d3.dispatch('change'), wikipedia = iD.wikipedia(), - input, localizedInputs, wikiTitles; + input, localizedInputs, wikiTitles, + entity; function i(selection) { input = selection.selectAll('.localized-main') @@ -18,7 +19,12 @@ iD.ui.preset.localized = function(field, context) { .on('blur', change) .on('change', change); - input.call(d3.combobox().fetcher(suggestNames)); + if (field.id === 'name') { + var preset = context.presets().match(entity, context.graph()); + input.call(d3.combobox().fetcher( + iD.util.SuggestNames(preset, iD.data.suggestions) + )); + } var translateButton = selection.selectAll('.localized-add') .data([0]); @@ -91,36 +97,6 @@ iD.ui.preset.localized = function(field, context) { event.change(t); } - function suggestNames(value, callback) { - var suggest = [], - allSuggs = iD.data.suggestions; - if (value && value.length > 2) { - var preset = context.presets().match( - context.entity(context.selectedIDs()), - context.graph()); - preset = preset.id.split('/', 2); - var k = preset[0], - v = preset[1]; - if (allSuggs[k] && allSuggs[k][v]) { - for (var sugg in allSuggs[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; - }); - } - suggest = suggest.slice(0,3); - callback(suggest); - } - function fetcher(value, cb) { var v = value.toLowerCase(); @@ -248,5 +224,9 @@ iD.ui.preset.localized = function(field, context) { input.node().focus(); }; + i.entity = function(_) { + entity = _; + }; + return d3.rebind(i, event, 'on'); }; diff --git a/js/id/util/suggest_names.js b/js/id/util/suggest_names.js new file mode 100644 index 000000000..79040c003 --- /dev/null +++ b/js/id/util/suggest_names.js @@ -0,0 +1,28 @@ +iD.util.SuggestNames = function(preset, suggestions) { + preset = preset.id.split('/', 2); + var k = preset[0], + v = preset[1]; + + return function(value, callback) { + var result = []; + if (value && value.length > 2) { + if (suggestions[k] && suggestions[k][v]) { + for (var sugg in suggestions[k][v]) { + var dist = iD.util.editDistance(value, sugg.substring(0, value.length)); + if (dist < 3) { + result.push({ + title: sugg, + value: sugg, + dist: dist + }); + } + } + } + result.sort(function(a, b) { + return a.dist - b.dist; + }); + } + result = result.slice(0,3); + callback(result); + }; +};