From 82dc4baff620d98c4ecb21e4dcd002a65e629046 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 7 Nov 2013 12:38:44 +0100 Subject: [PATCH] Add scope and type checking to ol.reader.GeoJSON --- src/ol/reader/geojson/geojson.js | 51 +++++++++++++++++++------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/ol/reader/geojson/geojson.js b/src/ol/reader/geojson/geojson.js index 26b8bf20a8..0bfe22a3ad 100644 --- a/src/ol/reader/geojson/geojson.js +++ b/src/ol/reader/geojson/geojson.js @@ -54,13 +54,16 @@ ol.reader.GeoJSON.readPolygonGeometry_ = function(geometry) { /** - * @param {GeoJSONFeature} feature Feature. - * @param {function(ol.Feature): *} callback Callback. + * @param {GeoJSONObject} object Object. + * @param {function(this: S, ol.Feature): T} callback Callback. + * @param {S=} opt_obj Scope. * @private - * @return {*} Callback result. + * @return {T} Callback result. + * @template S,T */ -ol.reader.GeoJSON.readFeature_ = function(feature, callback) { - goog.asserts.assert(feature.type == 'Feature'); +ol.reader.GeoJSON.readFeature_ = function(object, callback, opt_obj) { + goog.asserts.assert(object.type == 'Feature'); + var feature = /** @type {GeoJSONFeature} */ (object); var geometryReader = ol.reader.GeoJSON.GEOMETRY_READERS_[feature.geometry.type]; goog.asserts.assert(goog.isDef(geometryReader)); @@ -69,23 +72,25 @@ ol.reader.GeoJSON.readFeature_ = function(feature, callback) { if (goog.isDef(feature.properties)) { f.setValues(feature.properties); } - return callback(f); + return callback.call(opt_obj, f); }; /** - * @param {GeoJSONFeatureCollection} featureCollection Feature collection. - * @param {function(ol.Feature): *} callback Callback. + * @param {GeoJSONObject} object Object. + * @param {function(this: S, ol.Feature): T} callback Callback. + * @param {S=} opt_obj Scope. * @private - * @return {*} Callback result. + * @return {T|undefined} Callback result. + * @template S,T */ -ol.reader.GeoJSON.readFeatureCollection_ = - function(featureCollection, callback) { - goog.asserts.assert(featureCollection.type == 'FeatureCollection'); +ol.reader.GeoJSON.readFeatureCollection_ = function(object, callback, opt_obj) { + goog.asserts.assert(object.type == 'FeatureCollection'); + var featureCollection = /** @type {GeoJSONFeatureCollection} */ (object); var features = featureCollection.features; var i, ii; for (i = 0, ii = features.length; i < ii; ++i) { - var result = ol.reader.GeoJSON.readFeature_(features[i], callback); + var result = ol.reader.GeoJSON.readFeature_(features[i], callback, opt_obj); if (result) { return result; } @@ -96,22 +101,26 @@ ol.reader.GeoJSON.readFeatureCollection_ = /** * @param {GeoJSONObject} object Object. - * @param {function(ol.Feature): *} callback Callback. - * @return {*} Callback result. + * @param {function(this: S, ol.Feature): T} callback Callback. + * @param {S=} opt_obj Scope. + * @return {T} Callback result. + * @template S,T */ -ol.reader.GeoJSON.readObject = function(object, callback) { +ol.reader.GeoJSON.readObject = function(object, callback, opt_obj) { var objectReader = ol.reader.GeoJSON.OBJECT_READERS_[object.type]; goog.asserts.assert(goog.isDef(objectReader)); - return objectReader(object, callback); + return objectReader(object, callback, opt_obj); }; /** * @param {string} string String. - * @param {function(ol.Feature): *} callback Callback. - * @return {*} Callback result. + * @param {function(ol.Feature): T} callback Callback. + * @param {S=} opt_obj Scope. + * @return {T} Callback result. + * @template S,T */ -ol.reader.GeoJSON.readString = function(string, callback) { +ol.reader.GeoJSON.readString = function(string, callback, opt_obj) { var object = goog.json.parse(string); return ol.reader.GeoJSON.readObject( /** @type {GeoJSONObject} */ (object), callback); @@ -133,7 +142,7 @@ ol.reader.GeoJSON.GEOMETRY_READERS_ = { /** * @const * @private - * @type {Object.} + * @type {Object.} */ ol.reader.GeoJSON.OBJECT_READERS_ = { 'Feature': ol.reader.GeoJSON.readFeature_,