diff --git a/modules/osm/changeset.js b/modules/osm/changeset.js new file mode 100644 index 000000000..b2ed36f11 --- /dev/null +++ b/modules/osm/changeset.js @@ -0,0 +1,53 @@ +import _ from 'lodash'; +import { osmEntity } from './entity'; +import { geoExtent } from '../geo'; + + +export function osmChangeset() { + if (!(this instanceof osmChangeset)) { + return (new osmChangeset()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } +} + + +osmEntity.changeset = osmChangeset; + +osmChangeset.prototype = Object.create(osmEntity.prototype); + +_.extend(osmChangeset.prototype, { + + type: 'changeset', + + + extent: function() { + return new geoExtent(); + }, + + + geometry: function() { + return 'changeset'; + }, + + + asJXON: function() { + return { + osm: { + changeset: { + tag: _.map(this.tags, function(value, key) { + return { '@k': key, '@v': value }; + }), + '@version': 0.6, + '@generator': 'iD' + } + } + }; + }, + + + asGeoJSON: function() { + return {}; + } + +}); diff --git a/modules/osm/entity.js b/modules/osm/entity.js index 1c17c3731..652652155 100644 --- a/modules/osm/entity.js +++ b/modules/osm/entity.js @@ -26,7 +26,7 @@ osmEntity.id = function(type) { osmEntity.id.next = { - node: -1, way: -1, relation: -1 + changeset: -1, node: -1, way: -1, relation: -1 }; @@ -41,7 +41,7 @@ osmEntity.id.toOSM = function(id) { osmEntity.id.type = function(id) { - return { 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]]; + return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]]; }; diff --git a/modules/osm/index.js b/modules/osm/index.js index 38bc88520..528f679ef 100644 --- a/modules/osm/index.js +++ b/modules/osm/index.js @@ -1,3 +1,4 @@ +export { osmChangeset } from './changeset'; export { osmEntity } from './entity'; export { osmNode } from './node'; export { osmRelation } from './relation'; diff --git a/test/index.html b/test/index.html index f36f8fd68..ad42a95b7 100644 --- a/test/index.html +++ b/test/index.html @@ -81,6 +81,7 @@ + diff --git a/test/spec/osm/changeset.js b/test/spec/osm/changeset.js new file mode 100644 index 000000000..566704218 --- /dev/null +++ b/test/spec/osm/changeset.js @@ -0,0 +1,29 @@ +describe('iD.osmChangeset', function () { + it('returns a changeset', function () { + expect(iD.osmChangeset()).to.be.an.instanceOf(iD.osmChangeset); + expect(iD.osmChangeset().type).to.equal('changeset'); + }); + + it('defaults tags to an empty object', function () { + expect(iD.osmChangeset().tags).to.eql({}); + }); + + it('sets tags as specified', function () { + expect(iD.osmChangeset({tags: {foo: 'bar'}}).tags).to.eql({foo: 'bar'}); + }); + + describe('#asJXON', function () { + it('converts a node to jxon', function() { + var node = iD.osmChangeset({tags: {'comment': 'hello'}}); + expect(node.asJXON()).to.eql({ + osm: { + changeset: { + tag: [{ '@k': 'comment', '@v': 'hello' }], + '@version': 0.6, + '@generator': 'iD' + } + } + }); + }); + }); +});