From b9ebcfb7c35f89c605a013e35057566119773cc0 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 14 Sep 2017 13:50:00 +0200 Subject: [PATCH] Fix issues with composite types due to valueOnIndex --- src/style_manager/model/Properties.js | 8 ------- src/style_manager/model/Property.js | 16 +++++++++++++ .../view/PropertyCompositeView.js | 24 +++++++++++-------- src/style_manager/view/PropertyView.js | 1 + 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/style_manager/model/Properties.js b/src/style_manager/model/Properties.js index f30c28359..64b12fa2d 100644 --- a/src/style_manager/model/Properties.js +++ b/src/style_manager/model/Properties.js @@ -1,11 +1,3 @@ -/* -var Backbone = require('backbone'); -var Property = require('./Property'); - -module.exports = Backbone.Collection.extend({ - model: Property, -}); -*/ import TypeableCollection from 'domain_abstract/model/TypeableCollection'; const Property = require('./Property'); diff --git a/src/style_manager/model/Property.js b/src/style_manager/model/Property.js index 7826f4020..9624e5f6d 100644 --- a/src/style_manager/model/Property.js +++ b/src/style_manager/model/Property.js @@ -67,6 +67,22 @@ module.exports = Backbone.Model.extend({ return result; }, + /** + * Parse a raw value, generally fetched from the target, for this property + * @param {string} value + * @return {string} + */ + parseValue(value) { + if (!this.get('functionName')) { + return value; + } + + let valueStr = value + ''; + let start = valueStr.indexOf('(') + 1; + let end = valueStr.lastIndexOf(')'); + return valueStr.substring(start, end); + }, + /** * Get the default value * @return {string} diff --git a/src/style_manager/view/PropertyCompositeView.js b/src/style_manager/view/PropertyCompositeView.js index 744c25ab2..6f9b644ce 100644 --- a/src/style_manager/view/PropertyCompositeView.js +++ b/src/style_manager/view/PropertyCompositeView.js @@ -98,17 +98,21 @@ module.exports = PropertyView.extend({ * @return {string} * */ valueOnIndex(index, view) { - var result = null; - var a = this.getComponentValue().split(' '); - if(a.length && a[index]){ - result = a[index]; - if(view && view.model && view.model.get('functionName')){ - var v = this.fetchFromFunction(result); - if(v) - result = v; - } + let value; + const model = view.model; + const targetValue = this.getTargetValue({ignoreDefault: 1}); + + // If the target value of the composite is not empty I'll fetch + // the corresponding value from the requested index, otherwise try + // to get the value of the sub-property + if (targetValue) { + const values = targetValue.split(' '); + value = model.parseValue(values[index]); + } else { + value = view.getTargetValue({ignoreCustomValue: 1}); } - return result; + + return value; }, }); diff --git a/src/style_manager/view/PropertyView.js b/src/style_manager/view/PropertyView.js index 96326a1e7..18bf8c680 100644 --- a/src/style_manager/view/PropertyView.js +++ b/src/style_manager/view/PropertyView.js @@ -274,6 +274,7 @@ module.exports = Backbone.View.extend({ } result = target.getStyle()[model.get('property')]; + result = model.parseValue(result); if (!result && !opts.ignoreDefault) { result = this.getDefaultValue();