From 4720a84d38c23de9c007a1e4d0f1c53611d47c4a Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Mar 2013 16:22:10 -0700 Subject: [PATCH] No-op a null tag merge Reduces unnecessary node churn in Connect action. --- js/id/core/entity.js | 12 +++++++----- test/spec/core/entity.js | 12 +++++++++--- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/js/id/core/entity.js b/js/id/core/entity.js index b0ed5b0f0..0aaa36907 100644 --- a/js/id/core/entity.js +++ b/js/id/core/entity.js @@ -68,17 +68,19 @@ iD.Entity.prototype = { }, mergeTags: function(tags) { - var merged = _.clone(this.tags); + var merged = _.clone(this.tags), changed = false; for (var k in tags) { var t1 = merged[k], t2 = tags[k]; - if (t1 && t1 !== t2) { - merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); - } else { + if (!t1) { + changed = true; merged[k] = t2; + } else if (t1 !== t2) { + changed = true; + merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); } } - return this.update({tags: merged}); + return changed ? this.update({tags: merged}) : this; }, intersects: function(extent, resolver) { diff --git a/test/spec/core/entity.js b/test/spec/core/entity.js index 2cc3cce05..b1ea3d308 100644 --- a/test/spec/core/entity.js +++ b/test/spec/core/entity.js @@ -64,9 +64,15 @@ describe('iD.Entity', function () { }); describe("#mergeTags", function () { - it("returns a new Entity", function () { - var a = iD.Entity(), - b = a.mergeTags({}); + it("returns self if unchanged", function () { + var a = iD.Entity({tags: {a: 'a'}}), + b = a.mergeTags({a: 'a'}); + expect(a).to.equal(b); + }); + + it("returns a new Entity if changed", function () { + var a = iD.Entity({tags: {a: 'a'}}), + b = a.mergeTags({a: 'b'}); expect(b instanceof iD.Entity).to.be.true; expect(a).not.to.equal(b); });