From d7d2b3353dc5a4f7039d3d9776f6f388ab0ba74f Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 12 Feb 2014 13:01:23 +0100 Subject: [PATCH] Add ol.xml.makeObjectPropertyPusher --- src/ol/xml.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/ol/xml.js b/src/ol/xml.js index 89d0042ed3..be03cdda9a 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -410,6 +410,36 @@ ol.xml.makeReplacer = function(valueReader, opt_this) { }; +/** + * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader. + * @param {string=} opt_property Property. + * @param {T=} opt_this The object to use as `this` in `valueReader`. + * @return {ol.xml.Parser} Parser. + * @template T + */ +ol.xml.makeObjectPropertyPusher = + function(valueReader, opt_property, opt_this) { + goog.asserts.assert(goog.isDef(valueReader)); + return ( + /** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + */ + function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if (goog.isDef(value)) { + var object = /** @type {Object} */ + (objectStack[objectStack.length - 1]); + var property = goog.isDef(opt_property) ? + opt_property : node.localName; + goog.asserts.assert(goog.isObject(object)); + var array = goog.object.setIfUndefined(object, property, []); + array.push(value); + } + }); +}; + + /** * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader. * @param {string=} opt_property Property.