From 804a5233889ebfdd53b4af8517dd404cecc57e91 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Mon, 21 Jul 2014 19:03:13 -0400 Subject: [PATCH] handle async loading of strings from taginfo --- js/id/ui/preset/combo.js | 62 +++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/js/id/ui/preset/combo.js b/js/id/ui/preset/combo.js index 6941b1ece..12195a6c4 100644 --- a/js/id/ui/preset/combo.js +++ b/js/id/ui/preset/combo.js @@ -5,20 +5,6 @@ iD.ui.preset.typeCombo = function(field) { strings = {}, input; - if (optstrings) { - _.each(optstrings, function(v, k) { - strings[k] = field.t('options.' + k, { 'default': v }); - }); - } else { - iD.taginfo().values({key: field.key}, function(err, data) { - if (!err) { - _.each(_.pluck(data, 'value'), function(k) { - strings[k] = k.replace(/_+/g, ' '); - }); - } - }); - } - function combo(selection) { var combobox = d3.combobox(); @@ -37,22 +23,40 @@ iD.ui.preset.typeCombo = function(field) { .on('change', change) .on('blur', change) .each(function() { - var keys = _.keys(strings), - strs = [], - placeholders; - - combobox.data(keys.map(function(k) { - var s = strings[k], - o = {}; - o.title = o.value = s; - if (s.length < 20) { strs.push(s); } - return o; - })); - - placeholders = strs.length ? strs : keys; - input.attr('placeholder', field.placeholder() || - (placeholders.slice(0, 3).join(', ') + '...')); + if (optstrings) { + _.each(optstrings, function(v, k) { + strings[k] = field.t('options.' + k, { 'default': v }); + }); + stringsLoaded(); + } else { + iD.taginfo().values({key: field.key}, function(err, data) { + if (!err) { + _.each(_.pluck(data, 'value'), function(k) { + strings[k] = k.replace(/_+/g, ' '); + }); + stringsLoaded(); + } + }); + } }); + + function stringsLoaded() { + var keys = _.keys(strings), + strs = [], + placeholders; + + combobox.data(keys.map(function(k) { + var s = strings[k], + o = {}; + o.title = o.value = s; + if (s.length < 20) { strs.push(s); } + return o; + })); + + placeholders = strs.length ? strs : keys; + input.attr('placeholder', field.placeholder() || + (placeholders.slice(0, 3).join(', ') + '...')); + } } function change() {