mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-19 23:14:47 +02:00
Add some utility methods to Relation
This commit is contained in:
@@ -18,6 +18,26 @@ iD.Relation = iD.Entity.extend({
|
||||
return 'relation';
|
||||
},
|
||||
|
||||
// Return the first member with the given role. A copy of the member object
|
||||
// is returned, extended with an 'index' property whose value is the member index.
|
||||
memberByRole: function(role) {
|
||||
for (var i = 0; i < this.members.length; i++) {
|
||||
if (this.members[i].role === role) {
|
||||
return _.extend({}, this.members[i], {index: i});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Return the first member with the given id. A copy of the member object
|
||||
// is returned, extended with an 'index' property whose value is the member index.
|
||||
memberById: function(id) {
|
||||
for (var i = 0; i < this.members.length; i++) {
|
||||
if (this.members[i].id === id) {
|
||||
return _.extend({}, this.members[i], {index: i});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
|
||||
// where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
|
||||
//
|
||||
|
||||
@@ -19,7 +19,7 @@ iD.svg.MemberClasses = function(graph) {
|
||||
|
||||
relations.forEach(function (relation) {
|
||||
classes += ' member-type-' + relation.tags.type;
|
||||
classes += ' member-role-' + _.find(relation.members, function (member) { return member.id == d.id; }).role;
|
||||
classes += ' member-role-' + relation.memberById(d.id).role;
|
||||
});
|
||||
|
||||
classes = classes.trim();
|
||||
|
||||
@@ -55,6 +55,40 @@ describe('iD.Relation', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe("#geometry", function () {
|
||||
it("returns 'relation'", function () {
|
||||
expect(iD.Relation().geometry()).to.equal('relation');
|
||||
});
|
||||
});
|
||||
|
||||
describe("#memberByRole", function () {
|
||||
it("returns the first member with the given role", function () {
|
||||
var r = iD.Relation({members: [
|
||||
{id: 'a', role: 'inner'},
|
||||
{id: 'b', role: 'outer'},
|
||||
{id: 'c', role: 'outer'}]});
|
||||
expect(r.memberByRole('outer')).to.eql({id: 'b', role: 'outer', index: 1});
|
||||
});
|
||||
|
||||
it("returns undefined if no members have the given role", function () {
|
||||
expect(iD.Relation().memberByRole('outer')).to.be.undefined;
|
||||
});
|
||||
});
|
||||
|
||||
describe("#memberById", function () {
|
||||
it("returns the first member with the given id", function () {
|
||||
var r = iD.Relation({members: [
|
||||
{id: 'a', role: 'outer'},
|
||||
{id: 'b', role: 'outer'},
|
||||
{id: 'b', role: 'inner'}]});
|
||||
expect(r.memberById('b')).to.eql({id: 'b', role: 'outer', index: 1});
|
||||
});
|
||||
|
||||
it("returns undefined if no members have the given role", function () {
|
||||
expect(iD.Relation().memberById('b')).to.be.undefined;
|
||||
});
|
||||
});
|
||||
|
||||
describe("#multipolygon", function () {
|
||||
specify("single polygon consisting of a single way", function () {
|
||||
var a = iD.Node(),
|
||||
|
||||
Reference in New Issue
Block a user