Move remaining XML stuff to Connection

This commit is contained in:
John Firebaugh
2013-01-26 21:34:13 -05:00
parent 76c108fc92
commit de7fad5803
9 changed files with 64 additions and 83 deletions
-1
View File
@@ -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 \
-4
View File
@@ -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
View File
@@ -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({
-2
View File
@@ -1,2 +0,0 @@
iD.format = {};
-55
View File
@@ -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;
})
}
}));
}
};
-6
View File
@@ -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>
-2
View File
@@ -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>
+9
View File
@@ -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>');
});
});
});
-11
View File
@@ -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>');
});
});
});