From fd394151fd9e7b85b1eaf2c5280b242168d583c8 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 3 Feb 2016 21:56:18 -0700 Subject: [PATCH] Replace goog.object.clear() with ol.object.clear() --- src/ol/events.js | 6 +-- src/ol/geom/geometrycollection.js | 4 +- src/ol/geom/simplegeometry.js | 4 +- src/ol/interaction/selectinteraction.js | 8 ++-- src/ol/layer/layergroup.js | 7 ++- src/ol/object.js | 47 +------------------- src/ol/objectutil.js | 55 ++++++++++++++++++++++++ src/ol/structs/priorityqueue.js | 4 +- src/ol/webgl/context.js | 8 ++-- test/spec/ol/object.test.js | 41 ------------------ test/spec/ol/objectutil.test.js | 57 +++++++++++++++++++++++++ 11 files changed, 134 insertions(+), 107 deletions(-) create mode 100644 src/ol/objectutil.js create mode 100644 test/spec/ol/objectutil.test.js diff --git a/src/ol/events.js b/src/ol/events.js index c10975e29f..c07373bd30 100644 --- a/src/ol/events.js +++ b/src/ol/events.js @@ -2,7 +2,7 @@ goog.provide('ol.events'); goog.provide('ol.events.EventType'); goog.provide('ol.events.KeyCode'); -goog.require('goog.object'); +goog.require('ol.object'); /** @@ -188,7 +188,7 @@ ol.events.removeListeners_ = function(target, type) { if (listeners) { for (var i = 0, ii = listeners.length; i < ii; ++i) { target.removeEventListener(type, listeners[i].boundListener); - goog.object.clear(listeners[i]) + ol.object.clear(listeners[i]) } listeners.length = 0; var listenerMap = target[ol.events.LISTENER_MAP_PROP_]; @@ -318,7 +318,7 @@ ol.events.unlistenByKey = function(key) { ol.events.removeListeners_(key.target, key.type); } } - goog.object.clear(key); + ol.object.clear(key); } }; diff --git a/src/ol/geom/geometrycollection.js b/src/ol/geom/geometrycollection.js index 02063c551b..4dca505004 100644 --- a/src/ol/geom/geometrycollection.js +++ b/src/ol/geom/geometrycollection.js @@ -2,10 +2,10 @@ goog.provide('ol.geom.GeometryCollection'); goog.require('ol.events'); goog.require('ol.events.EventType'); -goog.require('goog.object'); goog.require('ol.extent'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryType'); +goog.require('ol.object'); /** @@ -160,7 +160,7 @@ ol.geom.GeometryCollection.prototype.getGeometriesArray = function() { */ ol.geom.GeometryCollection.prototype.getSimplifiedGeometry = function(squaredTolerance) { if (this.simplifiedGeometryRevision != this.getRevision()) { - goog.object.clear(this.simplifiedGeometryCache); + ol.object.clear(this.simplifiedGeometryCache); this.simplifiedGeometryMaxMinSquaredTolerance = 0; this.simplifiedGeometryRevision = this.getRevision(); } diff --git a/src/ol/geom/simplegeometry.js b/src/ol/geom/simplegeometry.js index af14789c47..66f3fe6f9e 100644 --- a/src/ol/geom/simplegeometry.js +++ b/src/ol/geom/simplegeometry.js @@ -2,11 +2,11 @@ goog.provide('ol.geom.SimpleGeometry'); goog.require('goog.asserts'); goog.require('goog.functions'); -goog.require('goog.object'); goog.require('ol.extent'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.flat.transform'); +goog.require('ol.object'); /** @@ -146,7 +146,7 @@ ol.geom.SimpleGeometry.prototype.getLayout = function() { */ ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = function(squaredTolerance) { if (this.simplifiedGeometryRevision != this.getRevision()) { - goog.object.clear(this.simplifiedGeometryCache); + ol.object.clear(this.simplifiedGeometryCache); this.simplifiedGeometryMaxMinSquaredTolerance = 0; this.simplifiedGeometryRevision = this.getRevision(); } diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js index 47247ce55b..d1bda17fb0 100644 --- a/src/ol/interaction/selectinteraction.js +++ b/src/ol/interaction/selectinteraction.js @@ -4,17 +4,17 @@ goog.provide('ol.interaction.SelectEventType'); goog.provide('ol.interaction.SelectFilterFunction'); goog.require('goog.asserts'); -goog.require('ol.events'); -goog.require('ol.events.Event'); goog.require('goog.functions'); -goog.require('goog.object'); goog.require('ol.CollectionEventType'); goog.require('ol.Feature'); goog.require('ol.array'); +goog.require('ol.events'); +goog.require('ol.events.Event'); goog.require('ol.events.condition'); goog.require('ol.geom.GeometryType'); goog.require('ol.interaction.Interaction'); goog.require('ol.layer.Vector'); +goog.require('ol.object'); goog.require('ol.source.Vector'); @@ -305,7 +305,7 @@ ol.interaction.Select.handleEvent = function(mapBrowserEvent) { features.extend(selected); // Modify object this.featureLayerAssociation_ if (selected.length === 0) { - goog.object.clear(this.featureLayerAssociation_); + ol.object.clear(this.featureLayerAssociation_); } else { if (deselected.length > 0) { deselected.forEach(function(feature) { diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index deaff7a9b1..3307a0ae82 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -1,14 +1,13 @@ goog.provide('ol.layer.Group'); goog.require('goog.asserts'); -goog.require('goog.object'); -goog.require('ol.events'); -goog.require('ol.events.EventType'); goog.require('ol.Collection'); goog.require('ol.CollectionEvent'); goog.require('ol.CollectionEventType'); goog.require('ol.Object'); goog.require('ol.ObjectEventType'); +goog.require('ol.events'); +goog.require('ol.events.EventType'); goog.require('ol.extent'); goog.require('ol.layer.Base'); goog.require('ol.object'); @@ -107,7 +106,7 @@ ol.layer.Group.prototype.handleLayersChanged_ = function(event) { for (var id in this.listenerKeys_) { this.listenerKeys_[id].forEach(ol.events.unlistenByKey); } - goog.object.clear(this.listenerKeys_); + ol.object.clear(this.listenerKeys_); var layersArray = layers.getArray(); var i, ii, layer; diff --git a/src/ol/object.js b/src/ol/object.js index 04b85f9a84..ab2ac546ac 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -1,54 +1,11 @@ goog.provide('ol.Object'); goog.provide('ol.ObjectEvent'); goog.provide('ol.ObjectEventType'); -goog.provide('ol.object'); +goog.require('ol.Observable'); goog.require('ol.events'); goog.require('ol.events.Event'); -goog.require('ol.Observable'); - - -/** - * Polyfill for Object.assign(). Assigns enumerable and own properties from - * one or more source objects to a target object. - * - * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - * @param {!Object} target The target object. - * @param {...Object} var_sources The source object(s). - * @return {!Object} The modified target object. - */ -ol.object.assign = (typeof Object.assign === 'function') ? Object.assign : function(target, var_sources) { - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - for (var i = 1, ii = arguments.length; i < ii; ++i) { - var source = arguments[i]; - if (source !== undefined && source !== null) { - for (var key in source) { - if (source.hasOwnProperty(key)) { - output[key] = source[key]; - } - } - } - } - return output; -}; - - -/** - * Determine if an object has any properties. - * @param {Object} object The object to check. - * @return {boolean} The object is empty. - */ -ol.object.isEmpty = function(object) { - var property; - for (property in object) { - return false; - } - return !property; -}; +goog.require('ol.object'); /** diff --git a/src/ol/objectutil.js b/src/ol/objectutil.js new file mode 100644 index 0000000000..abb3633eb3 --- /dev/null +++ b/src/ol/objectutil.js @@ -0,0 +1,55 @@ +goog.provide('ol.object'); + + +/** + * Polyfill for Object.assign(). Assigns enumerable and own properties from + * one or more source objects to a target object. + * + * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + * @param {!Object} target The target object. + * @param {...Object} var_sources The source object(s). + * @return {!Object} The modified target object. + */ +ol.object.assign = (typeof Object.assign === 'function') ? Object.assign : function(target, var_sources) { + if (target === undefined || target === null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + var output = Object(target); + for (var i = 1, ii = arguments.length; i < ii; ++i) { + var source = arguments[i]; + if (source !== undefined && source !== null) { + for (var key in source) { + if (source.hasOwnProperty(key)) { + output[key] = source[key]; + } + } + } + } + return output; +}; + + +/** + * Removes all properties from an object. + * @param {Object} object The object to clear. + */ +ol.object.clear = function(object) { + for (var property in object) { + delete object[property]; + } +}; + + +/** + * Determine if an object has any properties. + * @param {Object} object The object to check. + * @return {boolean} The object is empty. + */ +ol.object.isEmpty = function(object) { + var property; + for (property in object) { + return false; + } + return !property; +}; diff --git a/src/ol/structs/priorityqueue.js b/src/ol/structs/priorityqueue.js index ce370b985d..d2c7702c26 100644 --- a/src/ol/structs/priorityqueue.js +++ b/src/ol/structs/priorityqueue.js @@ -1,7 +1,7 @@ goog.provide('ol.structs.PriorityQueue'); goog.require('goog.asserts'); -goog.require('goog.object'); +goog.require('ol.object'); /** @@ -88,7 +88,7 @@ ol.structs.PriorityQueue.prototype.assertValid = function() { ol.structs.PriorityQueue.prototype.clear = function() { this.elements_.length = 0; this.priorities_.length = 0; - goog.object.clear(this.queuedElements_); + ol.object.clear(this.queuedElements_); }; diff --git a/src/ol/webgl/context.js b/src/ol/webgl/context.js index dda073019d..dd91964e6b 100644 --- a/src/ol/webgl/context.js +++ b/src/ol/webgl/context.js @@ -2,10 +2,10 @@ goog.provide('ol.webgl.Context'); goog.require('goog.asserts'); goog.require('goog.log'); -goog.require('goog.object'); goog.require('ol'); goog.require('ol.array'); goog.require('ol.events'); +goog.require('ol.object'); goog.require('ol.webgl.Buffer'); goog.require('ol.webgl.WebGLContextEventType'); @@ -282,9 +282,9 @@ ol.webgl.Context.prototype.getProgram = function( * FIXME empy description for jsdoc */ ol.webgl.Context.prototype.handleWebGLContextLost = function() { - goog.object.clear(this.bufferCache_); - goog.object.clear(this.shaderCache_); - goog.object.clear(this.programCache_); + ol.object.clear(this.bufferCache_); + ol.object.clear(this.shaderCache_); + ol.object.clear(this.programCache_); this.currentProgram_ = null; this.hitDetectionFramebuffer_ = null; this.hitDetectionTexture_ = null; diff --git a/test/spec/ol/object.test.js b/test/spec/ol/object.test.js index 69f9b3dd27..acbf2f9040 100644 --- a/test/spec/ol/object.test.js +++ b/test/spec/ol/object.test.js @@ -238,48 +238,7 @@ describe('ol.Object', function() { }); -describe('ol.object.assign()', function() { - - it('is an alias for Object.assign() where available', function() { - if (typeof Object.assign === 'function') { - expect(ol.object.assign).to.be(Object.assign); - } - }); - - it('assigns properties from a source object to a target object', function() { - - var source = { - sourceProp1: 'sourceValue1', - sourceProp2: 'sourceValue2' - }; - - var target = { - sourceProp1: 'overridden', - targetProp1: 'targetValue1' - }; - - var assigned = ol.object.assign(target, source); - expect(assigned).to.be(target); - expect(assigned.sourceProp1).to.be('sourceValue1'); - expect(assigned.sourceProp2).to.be('sourceValue2'); - expect(assigned.targetProp1).to.be('targetValue1'); - - }); - -}); - -describe('ol.object.isEmpty()', function() { - - it('checks if an object has any properties', function() { - expect(ol.object.isEmpty({})).to.be(true); - expect(ol.object.isEmpty(null)).to.be(true); - expect(ol.object.isEmpty({foo: 'bar'})).to.be(false); - expect(ol.object.isEmpty({foo: false})).to.be(false); - }); - -}); goog.require('ol.Object'); goog.require('ol.ObjectEventType'); goog.require('ol.events'); -goog.require('ol.object'); diff --git a/test/spec/ol/objectutil.test.js b/test/spec/ol/objectutil.test.js new file mode 100644 index 0000000000..5435648b54 --- /dev/null +++ b/test/spec/ol/objectutil.test.js @@ -0,0 +1,57 @@ +goog.provide('ol.test.object'); + +describe('ol.object.assign()', function() { + + it('is an alias for Object.assign() where available', function() { + if (typeof Object.assign === 'function') { + expect(ol.object.assign).to.be(Object.assign); + } + }); + + it('assigns properties from a source object to a target object', function() { + + var source = { + sourceProp1: 'sourceValue1', + sourceProp2: 'sourceValue2' + }; + + var target = { + sourceProp1: 'overridden', + targetProp1: 'targetValue1' + }; + + var assigned = ol.object.assign(target, source); + expect(assigned).to.be(target); + expect(assigned.sourceProp1).to.be('sourceValue1'); + expect(assigned.sourceProp2).to.be('sourceValue2'); + expect(assigned.targetProp1).to.be('targetValue1'); + + }); + +}); + +describe('ol.object.clear()', function() { + + it('removes all properties from an object', function() { + var clear = ol.object.clear; + var isEmpty = ol.object.isEmpty; + expect(isEmpty(clear({foo: 'bar'}))).to.be(true); + expect(isEmpty(clear({foo: 'bar', num: 42}))).to.be(true); + expect(isEmpty(clear({}))).to.be(true); + expect(isEmpty(clear(null))).to.be(true); + }); + +}); + +describe('ol.object.isEmpty()', function() { + + it('checks if an object has any properties', function() { + expect(ol.object.isEmpty({})).to.be(true); + expect(ol.object.isEmpty(null)).to.be(true); + expect(ol.object.isEmpty({foo: 'bar'})).to.be(false); + expect(ol.object.isEmpty({foo: false})).to.be(false); + }); + +}); + +goog.require('ol.object');