From a32858caa59ea298d1f8fba390634293a51e3ca3 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Tue, 26 Feb 2013 12:39:35 -0500 Subject: [PATCH] Only debounce taginfo for taglist autocompletion --- js/id/services/taginfo.js | 25 ++++++++++++++++--------- js/id/ui/taglist.js | 2 ++ js/lib/d3.combobox.js | 2 ++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/js/id/services/taginfo.js b/js/id/services/taginfo.js index 1db8b8877..74e5dc311 100644 --- a/js/id/services/taginfo.js +++ b/js/id/services/taginfo.js @@ -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(_) { diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index 946866254..00ef1e596 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -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') diff --git a/js/lib/d3.combobox.js b/js/lib/d3.combobox.js index 7cdda51cd..1e2ae0a28 100644 --- a/js/lib/d3.combobox.js +++ b/js/lib/d3.combobox.js @@ -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);