Only debounce taginfo for taglist autocompletion

This commit is contained in:
Ansis Brammanis
2013-02-26 12:39:35 -05:00
parent 9681ebd252
commit a32858caa5
3 changed files with 20 additions and 9 deletions

View File

@@ -32,7 +32,7 @@ iD.taginfo = function() {
}
function clean(parameters) {
return _.omit(parameters, 'geometry');
return _.omit(parameters, 'geometry', 'debounce');
}
function shorten(parameters) {
@@ -65,18 +65,23 @@ iD.taginfo = function() {
var debounced = _.debounce(d3.json, 100, true);
function request(url, callback) {
function request(url, debounce, callback) {
if (cache[url]) {
callback(null, cache[url]);
} else if (debounce) {
debounced(url, done);
} else {
debounced(url, function(err, data) {
if (!err) cache[url] = data;
callback(err, data);
});
d3.json(url, done);
}
function done(err, data) {
if (!err) cache[url] = data;
callback(err, data);
}
}
taginfo.keys = function(parameters, callback) {
var debounce = parameters.debounce;
parameters = clean(shorten(setSort(setFilter(parameters))));
request(endpoint + 'keys/all?' +
iD.util.qsString(_.extend({
@@ -84,13 +89,14 @@ iD.taginfo = function() {
sortname: 'count_all',
sortorder: 'desc',
page: 1
}, parameters)), function(err, d) {
}, parameters)), debounce, function(err, d) {
if (err) return callback(err);
callback(null, d.data.filter(popularKeys(parameters)).map(valKey));
});
};
taginfo.values = function(parameters, callback) {
var debounce = parameters.debounce;
parameters = clean(shorten(setSort(setFilter(parameters))));
request(endpoint + 'key/values?' +
iD.util.qsString(_.extend({
@@ -98,16 +104,17 @@ iD.taginfo = function() {
sortname: 'count_all',
sortorder: 'desc',
page: 1
}, parameters)), function(err, d) {
}, parameters)), debounce, function(err, d) {
if (err) return callback(err);
callback(null, d.data.filter(popularValues()).map(valKeyDescription), parameters);
});
};
taginfo.docs = function(parameters, callback) {
var debounce = parameters.debounce;
parameters = clean(setSort(parameters));
request(endpoint + 'tag/wiki_pages?' +
iD.util.qsString(parameters), callback);
iD.util.qsString(parameters), debounce, callback);
};
taginfo.endpoint = function(_) {

View File

@@ -217,6 +217,7 @@ iD.ui.Taglist = function() {
key.call(d3.combobox()
.fetcher(function(_, __, callback) {
taginfo.keys({
debounce: true,
geometry: geometry,
query: keyinput.property('value')
}, function(err, data) {
@@ -228,6 +229,7 @@ iD.ui.Taglist = function() {
value.call(d3.combobox()
.fetcher(function(_, __, callback) {
taginfo.values({
debounce: true,
key: keyinput.property('value'),
geometry: geometry,
query: valueinput.property('value')

View File

@@ -233,6 +233,8 @@ d3.combobox = function() {
input.node().focus();
update('');
if (!container) return;
var entries = container.selectAll('a'),
height = container.node().scrollHeight / entries[0].length,
w = d3.select(window);