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