Add SuggestNames util

This commit is contained in:
Aaron Lidman
2013-11-01 16:52:37 -07:00
parent 872cec6720
commit 43aeaae67e
4 changed files with 42 additions and 37 deletions

View File

@@ -38,6 +38,7 @@
<script src='js/id/util.js'></script>
<script src='js/id/util/session_mutex.js'></script>
<script src='js/id/util/suggest_names.js'></script>
<script src='js/id/services/taginfo.js'></script>
<script src='js/id/services/wikipedia.js'></script>

View File

@@ -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];

View File

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

View File

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