From b51cfd5d84bac9046f3b1831ad49fac8cfe0faba Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 11 Oct 2013 16:31:54 -0700 Subject: [PATCH] Fix adding localized value before name (#1797) --- js/id/ui/preset/localized.js | 24 ++++++++++++++---------- test/spec/ui/preset/localized.js | 18 +++++++++++++++++- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/js/id/ui/preset/localized.js b/js/id/ui/preset/localized.js index 9b737418e..708c3360a 100644 --- a/js/id/ui/preset/localized.js +++ b/js/id/ui/preset/localized.js @@ -55,26 +55,30 @@ iD.ui.preset.localized = function(field, context) { function key(lang) { return field.key + ':' + lang; } function changeLang(d) { - var value = d3.select(this).value(), + var lang = d3.select(this).value(), t = {}, language = _.find(iD.data.wikipedia, function(d) { - return d[0].toLowerCase() === value.toLowerCase() || - d[1].toLowerCase() === value.toLowerCase(); + return d[0].toLowerCase() === lang.toLowerCase() || + d[1].toLowerCase() === lang.toLowerCase(); }); - if (language) value = language[2]; + if (language) lang = language[2]; - if (d.lang && d.lang !== value) { + if (d.lang && d.lang !== lang) { t[key(d.lang)] = undefined; } - if (value && d.value) { - t[key(value)] = d.value; - } else if (value && wikiTitles && wikiTitles[d.lang]) { - t[key(value)] = wikiTitles[d.lang]; + var value = d3.select(this.parentNode) + .selectAll('.localized-value') + .value(); + + if (lang && value) { + t[key(lang)] = value; + } else if (lang && wikiTitles && wikiTitles[d.lang]) { + t[key(lang)] = wikiTitles[d.lang]; } - d.lang = value; + d.lang = lang; event.change(t); } diff --git a/test/spec/ui/preset/localized.js b/test/spec/ui/preset/localized.js index 0bbee9afc..040adc414 100644 --- a/test/spec/ui/preset/localized.js +++ b/test/spec/ui/preset/localized.js @@ -42,7 +42,7 @@ describe('iD.ui.preset.localized', function() { happen.once(selection.selectAll('.localized-value').node(), {type: 'blur'}); }); - it("creates a tag when the language and value are both set", function() { + it("creates a tag after setting language then value", function() { var localized = iD.ui.preset.localized(field, {}); selection.call(localized); happen.click(selection.selectAll('.localized-add').node()); @@ -58,6 +58,22 @@ describe('iD.ui.preset.localized', function() { happen.once(selection.selectAll('.localized-value').node(), {type: 'change'}); }); + it("creates a tag after setting value then language", function() { + var localized = iD.ui.preset.localized(field, {}); + selection.call(localized); + happen.click(selection.selectAll('.localized-add').node()); + + selection.selectAll('.localized-value').value('Value'); + happen.once(selection.selectAll('.localized-value').node(), {type: 'change'}); + + localized.on('change', function(tags) { + expect(tags).to.eql({'name:de': 'Value'}); + }); + + selection.selectAll('.localized-lang').value('Deutsch'); + happen.once(selection.selectAll('.localized-lang').node(), {type: 'change'}); + }); + it("changes an existing language", function() { var localized = iD.ui.preset.localized(field, {}); selection.call(localized);