diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js index 8da0c15e8d..d583bbfca8 100644 --- a/src/ol/control/attributioncontrol.js +++ b/src/ol/control/attributioncontrol.js @@ -5,14 +5,13 @@ goog.provide('ol.control.Attribution'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.classlist'); -goog.require('ol.events'); -goog.require('ol.events.EventType'); -goog.require('goog.object'); goog.require('goog.style'); goog.require('ol'); goog.require('ol.Attribution'); goog.require('ol.control.Control'); goog.require('ol.css'); +goog.require('ol.events'); +goog.require('ol.events.EventType'); goog.require('ol.object'); goog.require('ol.source.Tile'); @@ -268,14 +267,14 @@ ol.control.Attribution.prototype.updateElement_ = function(frameState) { } var renderVisible = - !goog.object.isEmpty(this.attributionElementRenderedVisible_) || - !goog.object.isEmpty(frameState.logos); + !ol.object.isEmpty(this.attributionElementRenderedVisible_) || + !ol.object.isEmpty(frameState.logos); if (this.renderedVisible_ != renderVisible) { goog.style.setElementShown(this.element, renderVisible); this.renderedVisible_ = renderVisible; } if (renderVisible && - goog.object.isEmpty(this.attributionElementRenderedVisible_)) { + ol.object.isEmpty(this.attributionElementRenderedVisible_)) { goog.dom.classlist.add(this.element, 'ol-logo-only'); } else { goog.dom.classlist.remove(this.element, 'ol-logo-only'); @@ -322,7 +321,7 @@ ol.control.Attribution.prototype.insertLogos_ = function(frameState) { } } - goog.style.setElementShown(this.logoLi_, !goog.object.isEmpty(logos)); + goog.style.setElementShown(this.logoLi_, !ol.object.isEmpty(logos)); }; diff --git a/src/ol/format/esrijsonformat.js b/src/ol/format/esrijsonformat.js index 670f062d22..ccc57cbf6c 100644 --- a/src/ol/format/esrijsonformat.js +++ b/src/ol/format/esrijsonformat.js @@ -1,9 +1,8 @@ goog.provide('ol.format.EsriJSON'); goog.require('goog.asserts'); -goog.require('goog.object'); -goog.require('ol.array'); goog.require('ol.Feature'); +goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.format.Feature'); goog.require('ol.format.JSONFeature'); @@ -652,7 +651,7 @@ ol.format.EsriJSON.prototype.writeFeatureObject = function( } var properties = feature.getProperties(); delete properties[feature.getGeometryName()]; - if (!goog.object.isEmpty(properties)) { + if (!ol.object.isEmpty(properties)) { object['attributes'] = properties; } else { object['attributes'] = {}; diff --git a/src/ol/format/geojsonformat.js b/src/ol/format/geojsonformat.js index a92cb63c69..3c09b3e1cb 100644 --- a/src/ol/format/geojsonformat.js +++ b/src/ol/format/geojsonformat.js @@ -4,7 +4,6 @@ goog.provide('ol.format.GeoJSON'); goog.require('goog.asserts'); -goog.require('goog.object'); goog.require('ol.Feature'); goog.require('ol.format.Feature'); goog.require('ol.format.JSONFeature'); @@ -15,6 +14,7 @@ goog.require('ol.geom.MultiPoint'); goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); +goog.require('ol.object'); goog.require('ol.proj'); @@ -541,7 +541,7 @@ ol.format.GeoJSON.prototype.writeFeatureObject = function( } var properties = feature.getProperties(); delete properties[feature.getGeometryName()]; - if (!goog.object.isEmpty(properties)) { + if (!ol.object.isEmpty(properties)) { object.properties = properties; } else { object.properties = null; diff --git a/src/ol/format/kmlformat.js b/src/ol/format/kmlformat.js index c9fdd07651..79af2fa670 100644 --- a/src/ol/format/kmlformat.js +++ b/src/ol/format/kmlformat.js @@ -30,6 +30,7 @@ goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); goog.require('ol.math'); +goog.require('ol.object'); goog.require('ol.proj'); goog.require('ol.style.Fill'); goog.require('ol.style.Icon'); @@ -331,7 +332,7 @@ ol.format.KML.createNameStyleFunction_ = function(foundStyle, name) { textAlign = 'left'; } } - if (!goog.object.isEmpty(foundStyle.getText())) { + if (!ol.object.isEmpty(foundStyle.getText())) { textStyle = /** @type {ol.style.Text} */ (goog.object.clone(foundStyle.getText())); textStyle.setText(name); diff --git a/src/ol/format/osmxmlformat.js b/src/ol/format/osmxmlformat.js index d4a351e1ae..b5c9a4c619 100644 --- a/src/ol/format/osmxmlformat.js +++ b/src/ol/format/osmxmlformat.js @@ -3,7 +3,6 @@ goog.provide('ol.format.OSMXML'); goog.require('goog.asserts'); goog.require('goog.dom.NodeType'); -goog.require('goog.object'); goog.require('ol.array'); goog.require('ol.Feature'); goog.require('ol.format.Feature'); @@ -12,6 +11,7 @@ goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); +goog.require('ol.object'); goog.require('ol.proj'); goog.require('ol.xml'); @@ -74,7 +74,7 @@ ol.format.OSMXML.readNode_ = function(node, objectStack) { var values = ol.xml.pushParseAndPop({ tags: {} }, ol.format.OSMXML.NODE_PARSERS_, node, objectStack); - if (!goog.object.isEmpty(values.tags)) { + if (!ol.object.isEmpty(values.tags)) { var geometry = new ol.geom.Point(coordinates); ol.format.Feature.transformWithOptions(geometry, false, options); var feature = new ol.Feature(geometry); diff --git a/src/ol/image.js b/src/ol/image.js index 36d1036e03..845bd9a572 100644 --- a/src/ol/image.js +++ b/src/ol/image.js @@ -1,12 +1,12 @@ goog.provide('ol.Image'); goog.require('goog.asserts'); -goog.require('ol.events'); -goog.require('ol.events.EventType'); -goog.require('goog.object'); goog.require('ol.ImageBase'); goog.require('ol.ImageState'); +goog.require('ol.events'); +goog.require('ol.events.EventType'); goog.require('ol.extent'); +goog.require('ol.object'); /** @@ -81,7 +81,7 @@ ol.Image.prototype.getImage = function(opt_context) { var key = goog.getUid(opt_context); if (key in this.imageByContext_) { return this.imageByContext_[key]; - } else if (goog.object.isEmpty(this.imageByContext_)) { + } else if (ol.object.isEmpty(this.imageByContext_)) { image = this.image_; } else { image = /** @type {Image} */ (this.image_.cloneNode(false)); diff --git a/src/ol/imagetile.js b/src/ol/imagetile.js index c92037f553..03c8042a93 100644 --- a/src/ol/imagetile.js +++ b/src/ol/imagetile.js @@ -1,13 +1,13 @@ goog.provide('ol.ImageTile'); goog.require('goog.asserts'); -goog.require('ol.events'); -goog.require('ol.events.EventType'); -goog.require('goog.object'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); goog.require('ol.TileLoadFunctionType'); goog.require('ol.TileState'); +goog.require('ol.events'); +goog.require('ol.events.EventType'); +goog.require('ol.object'); /** @@ -87,7 +87,7 @@ ol.ImageTile.prototype.getImage = function(opt_context) { var key = goog.getUid(opt_context); if (key in this.imageByContext_) { return this.imageByContext_[key]; - } else if (goog.object.isEmpty(this.imageByContext_)) { + } else if (ol.object.isEmpty(this.imageByContext_)) { image = this.image_; } else { image = /** @type {Image} */ (this.image_.cloneNode(false)); diff --git a/src/ol/object.js b/src/ol/object.js index b0abb8c402..04b85f9a84 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -37,6 +37,20 @@ ol.object.assign = (typeof Object.assign === 'function') ? Object.assign : funct }; +/** + * 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; +}; + + /** * @enum {string} */ diff --git a/src/ol/proj/proj.js b/src/ol/proj/proj.js index e4f0d13ce2..1c49ded408 100644 --- a/src/ol/proj/proj.js +++ b/src/ol/proj/proj.js @@ -5,11 +5,11 @@ goog.provide('ol.proj.ProjectionLike'); goog.provide('ol.proj.Units'); goog.require('goog.asserts'); -goog.require('goog.object'); goog.require('ol'); goog.require('ol.Extent'); goog.require('ol.TransformFunction'); goog.require('ol.extent'); +goog.require('ol.object'); goog.require('ol.sphere.NORMAL'); @@ -630,7 +630,7 @@ ol.proj.removeTransform = function(source, destination) { 'destinationCode should be in transforms of sourceCode'); var transform = transforms[sourceCode][destinationCode]; delete transforms[sourceCode][destinationCode]; - if (goog.object.isEmpty(transforms[sourceCode])) { + if (ol.object.isEmpty(transforms[sourceCode])) { delete transforms[sourceCode]; } return transform; diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index 5bd011f948..6b014add32 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -9,7 +9,6 @@ goog.provide('ol.render.canvas.ReplayGroup'); goog.provide('ol.render.canvas.TextReplay'); goog.require('goog.asserts'); -goog.require('goog.object'); goog.require('goog.vec.Mat4'); goog.require('ol'); goog.require('ol.array'); @@ -20,6 +19,7 @@ goog.require('ol.extent.Relationship'); goog.require('ol.geom.flat.simplify'); goog.require('ol.geom.flat.transform'); goog.require('ol.has'); +goog.require('ol.object'); goog.require('ol.render.IReplayGroup'); goog.require('ol.render.VectorContext'); goog.require('ol.render.canvas'); @@ -249,7 +249,7 @@ ol.render.canvas.Replay.prototype.replay_ = function( goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_, 'pixelCoordinates should be the same as this.pixelCoordinates_'); } - var skipFeatures = !goog.object.isEmpty(skippedFeaturesHash); + var skipFeatures = !ol.object.isEmpty(skippedFeaturesHash); var i = 0; // instruction index var ii = instructions.length; // end of instructions var d = 0; // data index @@ -1981,7 +1981,7 @@ ol.render.canvas.ReplayGroup.prototype.getReplay = function(zIndex, replayType) * @inheritDoc */ ol.render.canvas.ReplayGroup.prototype.isEmpty = function() { - return goog.object.isEmpty(this.replaysByZIndex_); + return ol.object.isEmpty(this.replaysByZIndex_); }; diff --git a/src/ol/render/webgl/webglreplay.js b/src/ol/render/webgl/webglreplay.js index fcccf2e457..dcad3e245f 100644 --- a/src/ol/render/webgl/webglreplay.js +++ b/src/ol/render/webgl/webglreplay.js @@ -3,9 +3,9 @@ goog.provide('ol.render.webgl.ReplayGroup'); goog.require('goog.asserts'); goog.require('goog.functions'); -goog.require('goog.object'); goog.require('goog.vec.Mat4'); goog.require('ol.extent'); +goog.require('ol.object'); goog.require('ol.render.IReplayGroup'); goog.require('ol.render.VectorContext'); goog.require('ol.render.webgl.imagereplay.shader.Default'); @@ -620,7 +620,7 @@ ol.render.webgl.ImageReplay.prototype.drawReplay_ = function(gl, context, skippe goog.webgl.UNSIGNED_INT : goog.webgl.UNSIGNED_SHORT; var elementSize = context.hasOESElementIndexUint ? 4 : 2; - if (!goog.object.isEmpty(skippedFeaturesHash)) { + if (!ol.object.isEmpty(skippedFeaturesHash)) { this.drawReplaySkipping_( gl, skippedFeaturesHash, textures, groupIndices, elementType, elementSize); @@ -996,7 +996,7 @@ ol.render.webgl.ReplayGroup.prototype.getReplay = function(zIndex, replayType) { * @inheritDoc */ ol.render.webgl.ReplayGroup.prototype.isEmpty = function() { - return goog.object.isEmpty(this.replays_); + return ol.object.isEmpty(this.replays_); }; diff --git a/src/ol/reproj/tile.js b/src/ol/reproj/tile.js index 730ba6b007..75331bf6f5 100644 --- a/src/ol/reproj/tile.js +++ b/src/ol/reproj/tile.js @@ -2,14 +2,14 @@ goog.provide('ol.reproj.Tile'); goog.provide('ol.reproj.TileFunctionType'); goog.require('goog.asserts'); -goog.require('ol.events'); -goog.require('ol.events.EventType'); goog.require('goog.math'); -goog.require('goog.object'); goog.require('ol.Tile'); goog.require('ol.TileState'); +goog.require('ol.events'); +goog.require('ol.events.EventType'); goog.require('ol.extent'); goog.require('ol.math'); +goog.require('ol.object'); goog.require('ol.proj'); goog.require('ol.reproj'); goog.require('ol.reproj.Triangulation'); @@ -226,7 +226,7 @@ ol.reproj.Tile.prototype.getImage = function(opt_context) { var key = goog.getUid(opt_context); if (key in this.canvasByContext_) { return this.canvasByContext_[key]; - } else if (goog.object.isEmpty(this.canvasByContext_)) { + } else if (ol.object.isEmpty(this.canvasByContext_)) { image = this.canvas_; } else { image = /** @type {HTMLCanvasElement} */ (this.canvas_.cloneNode(false)); diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js index fd0bfd3602..449e3ae4cc 100644 --- a/src/ol/source/vectorsource.js +++ b/src/ol/source/vectorsource.js @@ -22,6 +22,7 @@ goog.require('ol.events.EventType'); goog.require('ol.extent'); goog.require('ol.featureloader'); goog.require('ol.loadingstrategy'); +goog.require('ol.object'); goog.require('ol.proj'); goog.require('ol.source.Source'); goog.require('ol.source.State'); @@ -392,11 +393,11 @@ ol.source.Vector.prototype.clear = function(opt_fast) { if (this.featuresCollection_) { this.featuresCollection_.clear(); } - goog.asserts.assert(goog.object.isEmpty(this.featureChangeKeys_), + goog.asserts.assert(ol.object.isEmpty(this.featureChangeKeys_), 'featureChangeKeys is an empty object now'); - goog.asserts.assert(goog.object.isEmpty(this.idIndex_), + goog.asserts.assert(ol.object.isEmpty(this.idIndex_), 'idIndex is an empty object now'); - goog.asserts.assert(goog.object.isEmpty(this.undefIdIndex_), + goog.asserts.assert(ol.object.isEmpty(this.undefIdIndex_), 'undefIdIndex is an empty object now'); if (this.featuresRtree_) { @@ -550,7 +551,7 @@ ol.source.Vector.prototype.getFeatures = function() { features = this.featuresCollection_.getArray(); } else if (this.featuresRtree_) { features = this.featuresRtree_.getAll(); - if (!goog.object.isEmpty(this.nullGeometryFeatures_)) { + if (!ol.object.isEmpty(this.nullGeometryFeatures_)) { ol.array.extend( features, goog.object.getValues(this.nullGeometryFeatures_)); } @@ -753,7 +754,7 @@ ol.source.Vector.prototype.hasFeature = function(feature) { */ ol.source.Vector.prototype.isEmpty = function() { return this.featuresRtree_.isEmpty() && - goog.object.isEmpty(this.nullGeometryFeatures_); + ol.object.isEmpty(this.nullGeometryFeatures_); }; diff --git a/src/ol/structs/lrucache.js b/src/ol/structs/lrucache.js index 780c525da7..9cdcf49bda 100644 --- a/src/ol/structs/lrucache.js +++ b/src/ol/structs/lrucache.js @@ -1,7 +1,7 @@ goog.provide('ol.structs.LRUCache'); goog.require('goog.asserts'); -goog.require('goog.object'); +goog.require('ol.object'); /** @@ -46,7 +46,7 @@ ol.structs.LRUCache = function() { */ ol.structs.LRUCache.prototype.assertValid = function() { if (this.count_ === 0) { - goog.asserts.assert(goog.object.isEmpty(this.entries_), + goog.asserts.assert(ol.object.isEmpty(this.entries_), 'entries must be an empty object (count = 0)'); goog.asserts.assert(!this.oldest_, 'oldest must be null (count = 0)'); diff --git a/src/ol/structs/rbush.js b/src/ol/structs/rbush.js index e1b2e59dc9..2d77e5f3de 100644 --- a/src/ol/structs/rbush.js +++ b/src/ol/structs/rbush.js @@ -1,9 +1,9 @@ goog.provide('ol.structs.RBush'); goog.require('goog.asserts'); -goog.require('goog.object'); goog.require('ol.ext.rbush'); goog.require('ol.extent'); +goog.require('ol.object'); /** @@ -234,7 +234,7 @@ ol.structs.RBush.prototype.forEach_ = function(values, callback, opt_this) { * @return {boolean} Is empty. */ ol.structs.RBush.prototype.isEmpty = function() { - return goog.object.isEmpty(this.items_); + return ol.object.isEmpty(this.items_); }; diff --git a/test/spec/ol/feature.test.js b/test/spec/ol/feature.test.js index 9369e41696..6612064cf8 100644 --- a/test/spec/ol/feature.test.js +++ b/test/spec/ol/feature.test.js @@ -81,7 +81,7 @@ describe('ol.Feature', function() { it('is empty by default', function() { var feature = new ol.Feature(); var properties = feature.getProperties(); - expect(goog.object.isEmpty(properties)).to.be(true); + expect(ol.object.isEmpty(properties)).to.be(true); }); }); @@ -462,8 +462,7 @@ describe('ol.Feature.createStyleFunction()', function() { }); -goog.require('ol.events'); -goog.require('goog.object'); goog.require('ol.Feature'); goog.require('ol.geom.Point'); +goog.require('ol.object'); goog.require('ol.style.Style'); diff --git a/test/spec/ol/object.test.js b/test/spec/ol/object.test.js index 5d22b167a9..69f9b3dd27 100644 --- a/test/spec/ol/object.test.js +++ b/test/spec/ol/object.test.js @@ -268,6 +268,17 @@ describe('ol.object.assign()', function() { }); +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');