Browse Source

Extend also nested properties in Style Manager

pull/36/head
Artur Arseniev 10 years ago
parent
commit
c2756335dd
  1. 49
      src/demo.js
  2. 12
      src/style_manager/model/Property.js
  3. 21
      src/style_manager/model/Sector.js
  4. 4
      src/style_manager/view/PropertyCompositeView.js
  5. 26
      test/specs/style_manager/model/Models.js

49
src/demo.js

@ -92,21 +92,39 @@ require(['config/require-config'], function() {
open: false, open: false,
buildProps: ['transition', 'perspective', 'transform'], buildProps: ['transition', 'perspective', 'transform'],
},{ },{
name: 'Dimension', name: 'Dimension',
open: false, open: false,
properties:[{ buildProps: ['margin'],
name : 'Center block', properties:[{
property : 'margin', name: 'Marginnnn',
type : 'select', property: 'margin',
defaults : '0', type: 'composite',
list : [{ properties:[{
value : '0', name: 'Top',
name : 'Normal', property: 'margin-top',
},{ },{
value : '0 auto', name: 'Right',
name : 'Center', property: 'margin-right',
}], },{
}], name: 'Bottom',
property: 'margin-bottom',
},{
name: 'Left',
property: 'margin-left',
},],
}/*{
name : 'Center blocksss',
property : 'margins',
type : 'select',
defaults : '0',
list : [{
value : '0',
name : 'Normal',
},{
value : '0 auto',
name : 'Center',
}],
}*/],
},{ },{
name: 'Flex', name: 'Flex',
open: false, open: false,
@ -287,4 +305,3 @@ require(['config/require-config'], function() {
}); });
}); });

12
src/style_manager/model/Property.js

@ -1,5 +1,5 @@
define(['backbone', './Layers'], define(['backbone', './Layers', 'require'],
function(Backbone, Layers) { function(Backbone, Layers, require) {
return Backbone.Model.extend({ return Backbone.Model.extend({
@ -26,10 +26,16 @@ define(['backbone', './Layers'],
var type = this.get('type'); var type = this.get('type');
var name = this.get('name'); var name = this.get('name');
var prop = this.get('property'); var prop = this.get('property');
var props = this.get('properties');
if(!name) if(!name)
this.set('name', prop.charAt(0).toUpperCase() + prop.slice(1).replace(/-/g,' ')); this.set('name', prop.charAt(0).toUpperCase() + prop.slice(1).replace(/-/g,' '));
if(props.length){
var Properties = require('./Properties');
this.set('properties', new Properties(props));
}
switch(type){ switch(type){
case 'stack': case 'stack':
this.set('layers', new Layers()); this.set('layers', new Layers());
@ -59,4 +65,4 @@ define(['backbone', './Layers'],
}, },
}); });
}); });

21
src/style_manager/model/Sector.js

@ -28,13 +28,16 @@ define(['backbone', './Properties', './PropertyFactory'],
/** /**
* Extend properties * Extend properties
* @param {Array<Object>} props Start properties * @param {Array<Object>} props Start properties
* @param {Array<Object>} moProps Model props
* @param {Boolean} ex Returns the same amount of passed model props
* @return {Array<Object>} Final props * @return {Array<Object>} Final props
* @private * @private
*/ */
extendProperties: function(props){ extendProperties: function(props, moProps, ex){
var pLen = props.length; var pLen = props.length;
var mProps = this.get('properties'); var mProps = moProps || this.get('properties');
var ext = this.get('extendBuilded'); var ext = this.get('extendBuilded');
var isolated = [];
for (var i = 0, len = mProps.length; i < len; i++){ for (var i = 0, len = mProps.length; i < len; i++){
var mProp = mProps[i]; var mProp = mProps[i];
@ -43,17 +46,25 @@ define(['backbone', './Properties', './PropertyFactory'],
for(var j = 0; j < pLen; j++){ for(var j = 0; j < pLen; j++){
var prop = props[j]; var prop = props[j];
if(mProp.property == prop.property){ if(mProp.property == prop.property){
// Check for nested properties
var mPProps = mProp.properties;
if(mPProps && mPProps.length){
mProp.properties = this.extendProperties(prop.properties, mPProps, 1);
}
props[j] = ext ? _.extend(prop, mProp) : mProp; props[j] = ext ? _.extend(prop, mProp) : mProp;
isolated[j] = props[j];
found = 1; found = 1;
continue; continue;
} }
} }
if(!found) if(!found){
props.push(mProp); props.push(mProp);
isolated.push(mProp);
}
} }
return props; return ex ? isolated : props;
}, },
/** /**
@ -78,4 +89,4 @@ define(['backbone', './Properties', './PropertyFactory'],
}, },
}); });
}); });

4
src/style_manager/view/PropertyCompositeView.js

@ -33,9 +33,7 @@ define(['backbone','./PropertyView', 'text!./../templates/propertyComposite.html
this.$input = $('<input>', {value: 0, type: 'hidden' }); this.$input = $('<input>', {value: 0, type: 'hidden' });
if(!this.props){ if(!this.props){
var Properties = require('./../model/Properties'); this.props = this.model.get('properties');
this.props = new Properties(props);
this.model.set('properties', this.props);
} }
if(!this.$props){ if(!this.$props){

26
test/specs/style_manager/model/Models.js

@ -88,6 +88,30 @@ define([path + 'Sector',
prop0.get('defaults').should.equal(''); prop0.get('defaults').should.equal('');
}); });
it('Extend composed properties', function() {
obj = new Sector({
buildProps: ['margin', 'float'],
properties: [{
property: 'margin',
properties:[{
name: 'Top',
property: 'margin-top',
},{
property: 'margin-right',
}]
}]
});
var sectProps = obj.get('properties');
sectProps.length.should.equal(2);
var prop0 = obj.get('properties').at(0);
var propProps = prop0.get('properties');
propProps.length.should.equal(2);
var propTop = propProps.at(0);
propTop.get('name').should.equal('Top');
propTop.get('type').should.equal('integer');
});
}); });
describe('Sectors', function() { describe('Sectors', function() {
@ -802,4 +826,4 @@ define([path + 'Sector',
} }
}; };
}); });

Loading…
Cancel
Save