Create osmChangeset object, inherit from osmEntity

This commit is contained in:
Bryan Housel
2017-03-11 00:41:15 -05:00
parent e0157f48ac
commit f783fe4942
5 changed files with 86 additions and 2 deletions

53
modules/osm/changeset.js Normal file
View File

@@ -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 {};
}
});

View File

@@ -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]];
};

View File

@@ -1,3 +1,4 @@
export { osmChangeset } from './changeset';
export { osmEntity } from './entity';
export { osmNode } from './node';
export { osmRelation } from './relation';

View File

@@ -81,6 +81,7 @@
<script src='spec/modes/add_point.js'></script>
<script src='spec/osm/changeset.js'></script>
<script src='spec/osm/entity.js'></script>
<script src='spec/osm/intersection.js'></script>
<script src='spec/osm/multipolygon.js'></script>

View File

@@ -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'
}
}
});
});
});
});