mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 05:30:35 +02:00
Move remaining XML stuff to Connection
This commit is contained in:
@@ -39,7 +39,6 @@ all: \
|
||||
js/id/modes.js \
|
||||
js/id/modes/*.js \
|
||||
js/id/controller/*.js \
|
||||
js/id/format/*.js \
|
||||
js/id/graph/*.js \
|
||||
js/id/renderer/*.js \
|
||||
js/id/svg.js \
|
||||
|
||||
@@ -108,10 +108,6 @@
|
||||
|
||||
<script src='js/id/controller/controller.js'></script>
|
||||
|
||||
<script src='js/id/format/format.js'></script>
|
||||
<script src='js/id/format/geojson.js'></script>
|
||||
<script src='js/id/format/xml.js'></script>
|
||||
|
||||
<script src='js/id/graph/entity.js'></script>
|
||||
<script src='js/id/graph/graph.js'></script>
|
||||
<script src='js/id/graph/history.js'></script>
|
||||
|
||||
+55
-2
@@ -182,12 +182,65 @@ iD.Connection = function() {
|
||||
return oauth.authenticated();
|
||||
}
|
||||
|
||||
// Generate Changeset XML. Returns a string.
|
||||
connection.changesetXML = function(tags) {
|
||||
return (new XMLSerializer()).serializeToString(
|
||||
JXON.unbuild({
|
||||
osm: {
|
||||
changeset: {
|
||||
tag: _.map(tags, function(value, key) {
|
||||
return { '@k': key, '@v': value };
|
||||
}),
|
||||
'@version': 0.3,
|
||||
'@generator': 'iD'
|
||||
}
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
// Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
|
||||
// XML. Returns a string.
|
||||
connection.osmChangeXML = function(userid, changeset_id, changes) {
|
||||
function nest(x) {
|
||||
var groups = {};
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
var tagName = Object.keys(x[i])[0];
|
||||
if (!groups[tagName]) groups[tagName] = [];
|
||||
groups[tagName].push(x[i][tagName]);
|
||||
}
|
||||
var order = ['node', 'way', 'relation'];
|
||||
var ordered = {};
|
||||
order.forEach(function(o) {
|
||||
if (groups[o]) ordered[o] = groups[o];
|
||||
});
|
||||
return ordered;
|
||||
}
|
||||
|
||||
function rep(entity) {
|
||||
return entity.asJXON(changeset_id);
|
||||
}
|
||||
|
||||
return (new XMLSerializer()).serializeToString(JXON.unbuild({
|
||||
osmChange: {
|
||||
'@version': 0.3,
|
||||
'@generator': 'iD',
|
||||
'create': nest(changes.created.map(rep)),
|
||||
'modify': changes.modified.map(rep),
|
||||
'delete': changes.deleted.map(function(x) {
|
||||
x = rep(x);
|
||||
x['@if-unused'] = true;
|
||||
return x;
|
||||
})
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
connection.putChangeset = function(changes, comment, imagery_used, callback) {
|
||||
oauth.xhr({
|
||||
method: 'PUT',
|
||||
path: '/api/0.6/changeset/create',
|
||||
options: { header: { 'Content-Type': 'text/xml' } },
|
||||
content: iD.format.XML.changeset({
|
||||
content: connection.changesetXML({
|
||||
imagery_used: imagery_used.join(';'),
|
||||
comment: comment,
|
||||
created_by: 'iD ' + (version || '')
|
||||
@@ -198,7 +251,7 @@ iD.Connection = function() {
|
||||
method: 'POST',
|
||||
path: '/api/0.6/changeset/' + changeset_id + '/upload',
|
||||
options: { header: { 'Content-Type': 'text/xml' } },
|
||||
content: iD.format.XML.osmChange(user.id, changeset_id, changes)
|
||||
content: connection.osmChangeXML(user.id, changeset_id, changes)
|
||||
}, function (err) {
|
||||
if (err) return callback(err);
|
||||
oauth.xhr({
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
iD.format = {};
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
iD.format.XML = {
|
||||
// Generate Changeset XML. Returns a string.
|
||||
changeset: function(tags) {
|
||||
return (new XMLSerializer()).serializeToString(
|
||||
JXON.unbuild({
|
||||
osm: {
|
||||
changeset: {
|
||||
tag: _.map(tags, function(value, key) {
|
||||
return { '@k': key, '@v': value };
|
||||
}),
|
||||
'@version': 0.3,
|
||||
'@generator': 'iD'
|
||||
}
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
// Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
|
||||
// XML. Returns a string.
|
||||
osmChange: function(userid, changeset_id, changes) {
|
||||
function nest(x) {
|
||||
var groups = {};
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
var tagName = Object.keys(x[i])[0];
|
||||
if (!groups[tagName]) groups[tagName] = [];
|
||||
groups[tagName].push(x[i][tagName]);
|
||||
}
|
||||
var order = ['node', 'way', 'relation'];
|
||||
var ordered = {};
|
||||
order.forEach(function(o) {
|
||||
if (groups[o]) ordered[o] = groups[o];
|
||||
});
|
||||
return ordered;
|
||||
}
|
||||
|
||||
function rep(entity) {
|
||||
return entity.asJXON(changeset_id);
|
||||
}
|
||||
|
||||
return (new XMLSerializer()).serializeToString(JXON.unbuild({
|
||||
osmChange: {
|
||||
'@version': 0.3,
|
||||
'@generator': 'iD',
|
||||
// TODO: copy elements first
|
||||
create: nest(changes.created.map(rep)),
|
||||
modify: changes.modified.map(rep),
|
||||
'delete': changes.deleted.map(function(x) {
|
||||
x = rep(x);
|
||||
x['@if-unused'] = true;
|
||||
return x;
|
||||
})
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
@@ -102,9 +102,6 @@
|
||||
|
||||
<script src='../js/id/controller/controller.js'></script>
|
||||
|
||||
<script src='../js/id/format/format.js'></script>
|
||||
<script src='../js/id/format/xml.js'></script>
|
||||
|
||||
<script src='../js/id/graph/entity.js'></script>
|
||||
<script src='../js/id/graph/graph.js'></script>
|
||||
<script src='../js/id/graph/history.js'></script>
|
||||
@@ -142,9 +139,6 @@
|
||||
|
||||
<script src="spec/behavior/hover.js"></script>
|
||||
|
||||
<script src="spec/format/geojson.js"></script>
|
||||
<script src="spec/format/xml.js"></script>
|
||||
|
||||
<script src="spec/geo/extent.js"></script>
|
||||
|
||||
<script src="spec/graph/graph.js"></script>
|
||||
|
||||
@@ -47,8 +47,6 @@
|
||||
|
||||
<script src="spec/behavior/hover.js"></script>
|
||||
|
||||
<script src="spec/format/xml.js"></script>
|
||||
|
||||
<script src="spec/geo/extent.js"></script>
|
||||
|
||||
<script src="spec/graph/graph.js"></script>
|
||||
|
||||
@@ -50,4 +50,13 @@ describe('iD.Connection', function() {
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('#osmChangeXML', function() {
|
||||
it('converts change data to XML', function() {
|
||||
var node = iD.Node({ id: 'n-1', type: 'node', loc: [-77, 38] }),
|
||||
way = iD.Way({ id: 'w-1', type: 'way', nodes: [] }),
|
||||
xml = c.osmChangeXML('jfire', '1234', {created: [node], modified: [way], deleted: []});
|
||||
expect(xml).to.eql('<osmChange version="0.3" generator="iD"><create><node id="-1" lon="-77" lat="38" version="0" changeset="1234"/></create><modify><way id="-1" version="0" changeset="1234"/></modify></osmChange>');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
describe('iD.format.XML', function() {
|
||||
var node = iD.Node({ id: 'n-1', type: 'node', loc: [-77, 38] }),
|
||||
way = iD.Way({ id: 'w-1', type: 'way', nodes: [] });
|
||||
|
||||
describe('#osmChange', function() {
|
||||
it('converts change data to XML', function() {
|
||||
var jxon = iD.format.XML.osmChange('jfire', '1234', {created: [node], modified: [way], deleted: []});
|
||||
expect(jxon).to.eql('<osmChange version="0.3" generator="iD"><create><node id="-1" lon="-77" lat="38" version="0" changeset="1234"/></create><modify><way id="-1" version="0" changeset="1234"/></modify></osmChange>');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user