From 4b88c0a32fe2911e6aac1fd317e2802e88e6e662 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 3 Oct 2017 01:16:53 +0200 Subject: [PATCH] Add the possibility to get layers from detached properties --- src/style_manager/model/Layers.js | 34 +++++++++++++++ src/style_manager/view/PropertyStackView.js | 43 ++----------------- .../style_manager/view/PropertyStackView.js | 1 + 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/style_manager/model/Layers.js b/src/style_manager/model/Layers.js index e9455d9bf..f8f90fba9 100644 --- a/src/style_manager/model/Layers.js +++ b/src/style_manager/model/Layers.js @@ -42,6 +42,40 @@ module.exports = Backbone.Collection.extend({ return layers; }, + /** + * Get layers from a style object (for detached properties), eg: + * sub-propname1: sub-propvalue11, sub-propvalue12, sub-propvalue13, ... + * sub-propname2: sub-propvalue21, sub-propvalue22, sub-propvalue23, ... + * sub-propname3: sub-propvalue31, sub-propvalue32, sub-propvalue33, ... + * @param {Object} styleObj + * @return {Array} + * @private + */ + getLayersFromStyle(styleObj) { + const layers = []; + + this.properties.each(propModel => { + const style = styleObj[propModel.get('property')]; + const values = style ? style.split(', ') : []; + values.forEach((value, i) => { + value = value.trim(); + const layer = layers[i]; + const propertyObj = Object.assign({}, propModel.attributes, {value}); + + if (layer) { + layer.properties.push(propertyObj); + } else { + layers[i] = { + properties: [propertyObj] + }; + } + }); + }); + + return layers; + }, + + active(index) { this.each(layer => layer.set('active', 0)); const layer = this.at(index); diff --git a/src/style_manager/view/PropertyStackView.js b/src/style_manager/view/PropertyStackView.js index 393e7b991..797b80cf7 100644 --- a/src/style_manager/view/PropertyStackView.js +++ b/src/style_manager/view/PropertyStackView.js @@ -249,56 +249,21 @@ module.exports = PropertyCompositeView.extend({ fieldEl.appendChild(layers); }, - /** - * Returns array suitable for layers from target style - * Only for detached stacks - * @return {Array} - */ - getLayersFromTarget() { - const layers = []; - const model = this.model; - const target = this.getTarget(); - const trgStyle = target ? target.getStyle() : {}; - - // For detached, I have to fetch values from all sub properties - model.get('properties').each(propModel => { - let propertyObj = propModel.attributes; - const property = propModel.get('property'); - const style = trgStyle[property]; - const values = style ? style.split(', ') : []; - values.forEach((value, i) => { - value = value.trim(); - const layer = layers[i]; - propertyObj = Object.assign({}, propertyObj, {value}); - - if (layer) { - layer.properties.push(propertyObj); - } else { - layers[i] = { - properties: [propertyObj] - }; - } - }); - }); - - return layers; - }, - /** * Refresh layers * */ refreshLayers() { let layersObj = []; - let layerValues = []; - var fieldName = 'value'; const model = this.model; const layers = this.getLayers(); const detached = model.get('detached'); // With detached layers values will be assigned to their properties if (detached) { - fieldName = 'values'; - layerValues = this.getLayersFromTarget(); + const target = this.getTarget(); + const style = target ? target.getStyle() : {}; + layersObj = layers.getLayersFromStyle(style); + console.log(layersObj); } else { let value = this.getTargetValue(); value = value == model.getDefaultValue() ? '' : value; diff --git a/test/specs/style_manager/view/PropertyStackView.js b/test/specs/style_manager/view/PropertyStackView.js index 2b20878f7..7dccc172a 100644 --- a/test/specs/style_manager/view/PropertyStackView.js +++ b/test/specs/style_manager/view/PropertyStackView.js @@ -303,6 +303,7 @@ module.exports = { subprop2: 'C', subprop3: 'Y', }]; + // replaced with Layers.getLayersFromStyle expect(view.getLayersFromTarget()).toEqual(result); });