mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
Add SuggestNames util
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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];
|
||||
|
||||
|
||||
@@ -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');
|
||||
};
|
||||
|
||||
28
js/id/util/suggest_names.js
Normal file
28
js/id/util/suggest_names.js
Normal 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);
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user