(function (_super) {
/**
* Vertical rows
* @class
* @augments hui.ui.Component
* @param {Object} options
*/
hui.ui.StyleEditor = function(options) {
_super.call(this, options);
this.value = null;
this.components = options.components;
this.queryEditors = [];
this._attach();
};
hui.ui.StyleEditor.create = function(options) {
options = options || {};
var element = hui.build('div.hui_styleeditor',{html:'<div class="hui_styleeditor_list"></div>'});
options.element = element;
return new hui.ui.StyleEditor(options);
};
hui.ui.StyleEditor.prototype = {
nodes : {
list : '.hui_styleeditor_list'
},
_attach : function() {
var self = this;
hui.on(this.element, 'click', function(e) {
e = hui.event(e);
var query = e.findByClass('hui_styleeditor_query');
if (query) {
self.editQuery(parseInt(query.getAttribute('data-index'), 10));
}
});
var button = hui.ui.Button.create({text:'Add', small:true});
this.element.appendChild(button.element);
button.listen({$click:this.add.bind(this)});
},
editQuery : function(index) {
var query = this.value.queries[index];
win = this.queryEditors[index];
if (win) {
win.show();
return;
}
win = hui.ui.Window.create({
title : this._getQueryDescription(query),
width: 400,
padding: 10
});
this.queryEditors[index] = win;
var self = this;
var overflow = hui.ui.Overflow.create({height: 400});
win.add(overflow);
hui.each(this.components,function(component) {
var form = hui.ui.Form.create();
form.buildGroup({above:false},[{
type : 'DropDown', label: 'Display:', options : {key:'display', value:'', items:[
{value:'',text:'Unchanged'}, {value:'block',text:'Block'}, {value:'flex',text:'Flex'}
]}
},{
type : 'DropDown', label: 'Flex direction:', options : {key:'flex-direction', value:'', items:[
{value:'',text:'Unchanged'},
{value:'row',text:'Row'},{value:'row-reverse',text:'Row reverse'},{value:'Column',text:'column'},{value:'column-reverse',text:'Column reverse'},
{value:'inherit',text:'Inherit'}, {value:'initial',text:'Initial'}, {value:'unset',text:'Unset'}, {value:'revert',text:'Revert'}
]}
},{
type : 'StyleLength', label: 'Width:', options : {key:'width', value:''}
},{
type : 'ColorInput', label: 'Text color:', options : {key:'color', value:''}
},{
type : 'StyleLength', label: 'Max width:', options : {key:'max-width', value:''}
},{
type : 'StyleLength', label: 'Min width:', options : {key:'min-width', value:''}
}]);
overflow.add(hui.build('div',{text:component.description, style: 'text-transform: uppercase; font-size: 12px;'}));
form.setValues(self._getComponentValues(query, component));
overflow.add(form);
var values = {};
form.listen({
$valuesChanged : function(values) {
var rules = self._getRulesFor({query:index, component:component.name});
hui.log(component.name, values, rules);
hui.each(rules,function(rule) {
if (values[rule.name]!==undefined) {
rule.value = values[rule.name];
values[rule.name] = undefined;
}
});
hui.each(values,function(key,value) {
// TODO We filter out unnamed (could be text filed inside color or other stuff)
if (key.indexOf('unnamed')!==0 && !hui.isBlank(value)) {
rules.push({name:key, value:value});
}
});
self.fireValueChange();
}
});
});
win.show();
},
_getComponentValues : function(query,component) {
var values = {};
if (query.components) {
var found = query.components.find(function(other) {
return other.name == component.name;
});
if (found) {
found.rules.forEach(function(rule) {
values[rule.name] = rule.value;
});
}
}
return values;
},
add : function() {
this.value.queries.push({components:[]});
this.draw();
},
setValue : function(value) {
this.value = value;
this.draw();
},
_getRulesFor : function(params) {
var query = this.value.queries[params.query];
var comps = query.components;
for (var i = 0; i < comps.length; i++) {
if (comps[i].name == params.component) {
if (!comps[i].rules) {
comps[i].rules = [];
}
return comps[i].rules;
}
}
var rules = [];
query.components.push({name:params.component, rules:rules});
return rules;
},
draw : function() {
this.nodes.list.innerHTML = '';
if (this.value && this.value.queries) {
for (var i = 0; i < this.value.queries.length; i++) {
var query = this.value.queries[i];
hui.build('div.hui_styleeditor_query',{text:this._getQueryDescription(query), parent: this.nodes.list, 'data-index':i});
}
}
},
_getQueryDescription : function(query) {
var text = [];
var props = ['max-width','min-width','max-height','min-height'];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (query[prop]) {
text.push(prop + ': ' + query[prop]);
}
}
if (!text.length) {
text.push('Anything');
}
return text.join(', ');
},
$$childSizeChanged : function() {
},
$$layout : function() {
}
};
hui.extend(hui.ui.StyleEditor, _super);
})(hui.ui.Component);