mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 13:38:26 +02:00
Preserve existing Wikipedia language (fixes #1868)
This commit is contained in:
@@ -2,7 +2,6 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
|
||||
var event = d3.dispatch('change'),
|
||||
wikipedia = iD.wikipedia(),
|
||||
language = iD.data.wikipedia[0],
|
||||
link, entity, lang, title;
|
||||
|
||||
function i(selection) {
|
||||
@@ -26,7 +25,7 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
if (!value) value = context.entity(entity.id).tags.name || '';
|
||||
var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
|
||||
|
||||
searchfn(language && language[2], value, function(query, data) {
|
||||
searchfn(language()[2], value, function(query, data) {
|
||||
cb(data.map(function(d) {
|
||||
return { value: d };
|
||||
}));
|
||||
@@ -38,7 +37,8 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
|
||||
lang.enter().append('input')
|
||||
.attr('type', 'text')
|
||||
.attr('class', 'wiki-lang');
|
||||
.attr('class', 'wiki-lang')
|
||||
.value('English');
|
||||
|
||||
lang
|
||||
.on('blur', changeLang)
|
||||
@@ -68,18 +68,17 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
.attr('class', 'icon out-link');
|
||||
}
|
||||
|
||||
function changeLang() {
|
||||
function language() {
|
||||
var value = lang.value().toLowerCase();
|
||||
language = _.find(iD.data.wikipedia, function(d) {
|
||||
return _.find(iD.data.wikipedia, function(d) {
|
||||
return d[0].toLowerCase() === value ||
|
||||
d[1].toLowerCase() === value ||
|
||||
d[2].toLowerCase() === value;
|
||||
}) || iD.data.wikipedia[0];
|
||||
}
|
||||
|
||||
if (value !== language[0]) {
|
||||
lang.value(language[1]);
|
||||
}
|
||||
|
||||
function changeLang() {
|
||||
lang.value(language()[1]);
|
||||
change();
|
||||
}
|
||||
|
||||
@@ -97,13 +96,12 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
// 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);
|
||||
language = newlanguage;
|
||||
lang.value(language[0]);
|
||||
lang.value(newlanguage[0]);
|
||||
}
|
||||
|
||||
t[field.key] = value ? language[2] + ':' + value : undefined;
|
||||
t[field.key] = value ? language()[2] + ':' + value : undefined;
|
||||
event.change(t);
|
||||
link.attr('href', 'http://' + language[2] + '.wikipedia.org/wiki/' + (value || ''));
|
||||
link.attr('href', 'http://' + language()[2] + '.wikipedia.org/wiki/' + (value || ''));
|
||||
}
|
||||
|
||||
i.tags = function(tags) {
|
||||
@@ -121,9 +119,7 @@ iD.ui.preset.wikipedia = function(field, context) {
|
||||
|
||||
// unrecognized value format
|
||||
} else {
|
||||
lang.value('English');
|
||||
title.value(tags[field.key] || '');
|
||||
language = iD.data.wikipedia[0];
|
||||
link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + tags[field.key]);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
|
||||
<script src='../js/id/id.js'></script>
|
||||
<script src='../js/id/util.js'></script>
|
||||
|
||||
<script src='../js/id/services/taginfo.js'></script>
|
||||
<script src='../js/id/services/wikipedia.js'></script>
|
||||
|
||||
<script src='../data/data_dev.js'></script>
|
||||
|
||||
@@ -103,6 +105,7 @@
|
||||
<script src='../js/id/ui/preset/input.js'></script>
|
||||
<script src='../js/id/ui/preset/check.js'></script>
|
||||
<script src='../js/id/ui/preset/combo.js'></script>
|
||||
<script src='../js/id/ui/preset/wikipedia.js'></script>
|
||||
|
||||
<script src='../js/id/actions.js'></script>
|
||||
<script src='../js/id/actions/add_member.js'></script>
|
||||
@@ -258,6 +261,7 @@
|
||||
<script src="spec/ui/cmd.js"></script>
|
||||
|
||||
<script src="spec/ui/preset/access.js"></script>
|
||||
<script src="spec/ui/preset/wikipedia.js"></script>
|
||||
|
||||
<script src="spec/geo.js"></script>
|
||||
<script src="spec/taginfo.js"></script>
|
||||
|
||||
@@ -82,6 +82,9 @@
|
||||
<script src="spec/ui/confirm.js"></script>
|
||||
<script src="spec/ui/cmd.js"></script>
|
||||
|
||||
<script src="spec/ui/preset/access.js"></script>
|
||||
<script src="spec/ui/preset/wikipedia.js"></script>
|
||||
|
||||
<script src="spec/geo.js"></script>
|
||||
<script src="spec/taginfo.js"></script>
|
||||
<script src="spec/util.js"></script>
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
describe('iD.ui.preset.wikipedia', function() {
|
||||
var selection, field;
|
||||
|
||||
beforeEach(function() {
|
||||
selection = d3.select(document.createElement('div'));
|
||||
field = iD().presets().field('wikipedia');
|
||||
});
|
||||
|
||||
it('recognizes lang:title format', function() {
|
||||
var wikipedia = iD.ui.preset.wikipedia(field, {});
|
||||
selection.call(wikipedia);
|
||||
wikipedia.tags({wikipedia: 'en:Title'});
|
||||
expect(selection.selectAll('.wiki-lang').value()).to.equal('English');
|
||||
expect(selection.selectAll('.wiki-title').value()).to.equal('Title');
|
||||
expect(selection.selectAll('.wiki-link').attr('href')).to.equal('http://en.wikipedia.org/wiki/Title');
|
||||
});
|
||||
|
||||
it('sets a new value', function() {
|
||||
var wikipedia = iD.ui.preset.wikipedia(field, {});
|
||||
selection.call(wikipedia);
|
||||
|
||||
wikipedia.on('change', function(tags) {
|
||||
expect(tags).to.eql({wikipedia: undefined});
|
||||
});
|
||||
|
||||
selection.selectAll('.wiki-lang').value('Deutsch');
|
||||
happen.once(selection.selectAll('.wiki-lang').node(), {type: 'change'});
|
||||
|
||||
wikipedia.on('change', function(tags) {
|
||||
expect(tags).to.eql({wikipedia: 'de:Title'});
|
||||
});
|
||||
|
||||
selection.selectAll('.wiki-title').value('Title');
|
||||
happen.once(selection.selectAll('.wiki-title').node(), {type: 'change'});
|
||||
});
|
||||
|
||||
it('preserves existing language', function() {
|
||||
selection.call(iD.ui.preset.wikipedia(field, {}));
|
||||
selection.selectAll('.wiki-lang').value('Deutsch');
|
||||
|
||||
var wikipedia = iD.ui.preset.wikipedia(field, {});
|
||||
selection.call(wikipedia);
|
||||
wikipedia.tags({});
|
||||
|
||||
expect(selection.selectAll('.wiki-lang').value()).to.equal('Deutsch');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user