From 7fb047a7ba033a29f6dd1e4198e340831a7cabd1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 9 Oct 2013 16:03:17 -0700 Subject: [PATCH] Cleanup; set correct language for pasted wikipedia links --- js/id/ui/preset/wikipedia.js | 34 +++++++++++++------------------- test/spec/ui/preset/wikipedia.js | 11 +++++++++++ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/js/id/ui/preset/wikipedia.js b/js/id/ui/preset/wikipedia.js index 0236a384a..361425cf2 100644 --- a/js/id/ui/preset/wikipedia.js +++ b/js/id/ui/preset/wikipedia.js @@ -83,44 +83,38 @@ iD.ui.preset.wikipedia = function(field, context) { } function change() { - var t = {}; + var value = title.value(), + m = value.match(/http:\/\/([a-z]+)\.wikipedia\.org\/wiki\/(.+)/), + l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }); - var value = title.value(); - - var m = value.match('http://([a-z]+)\\.wikipedia.org/wiki/(.*)'), - newlanguage = m && m[1] && m[2] && _.find(iD.data.wikipedia, function(d) { - return m[1] === d[2]; - }); - - if (newlanguage) { + if (l) { // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization value = m[2].replace(/_/g, ' '); value = value.slice(0, 1).toUpperCase() + value.slice(1); - lang.value(newlanguage[0]); + lang.value(l[1]); + title.value(value); } + var t = {}; t[field.key] = value ? language()[2] + ':' + value : undefined; event.change(t); - link.attr('href', 'http://' + language()[2] + '.wikipedia.org/wiki/' + (value || '')); } i.tags = function(tags) { - var m = tags[field.key] ? tags[field.key].match(/([^:]+):(.+)/) : null; - - var language = m && m[1] && m[2] && _.find(iD.data.wikipedia, function(d) { - return m[1] === d[2]; - }); + var value = tags[field.key] || '', + m = value.match(/([^:]+):(.+)/), + l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }); // value in correct format - if (language) { - lang.value(language[1]); + if (l) { + lang.value(l[1]); title.value(m[2]); link.attr('href', 'http://' + m[1] + '.wikipedia.org/wiki/' + m[2]); // unrecognized value format } else { - title.value(tags[field.key] || ''); - link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + tags[field.key]); + title.value(value); + link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + value); } }; diff --git a/test/spec/ui/preset/wikipedia.js b/test/spec/ui/preset/wikipedia.js index 6deea675b..aabb4594b 100644 --- a/test/spec/ui/preset/wikipedia.js +++ b/test/spec/ui/preset/wikipedia.js @@ -34,6 +34,17 @@ describe('iD.ui.preset.wikipedia', function() { happen.once(selection.selectAll('.wiki-title').node(), {type: 'change'}); }); + it('recognizes pasted URLs', function() { + var wikipedia = iD.ui.preset.wikipedia(field, {}); + selection.call(wikipedia); + + selection.selectAll('.wiki-title').value('http://de.wikipedia.org/wiki/Title'); + happen.once(selection.selectAll('.wiki-title').node(), {type: 'change'}); + + expect(selection.selectAll('.wiki-lang').value()).to.equal('Deutsch'); + expect(selection.selectAll('.wiki-title').value()).to.equal('Title'); + }); + it('preserves existing language', function() { selection.call(iD.ui.preset.wikipedia(field, {})); selection.selectAll('.wiki-lang').value('Deutsch');