Browse Source

Add style emitter in StyleManager

pull/1518/head
Artur Arseniev 8 years ago
parent
commit
4145cbc403
  1. 4
      src/domain_abstract/model/Styleable.js
  2. 2
      src/editor/model/Editor.js
  3. 57
      src/selector_manager/view/ClassTagsView.js
  4. 4
      src/style_manager/index.js
  5. 4
      test/specs/selector_manager/e2e/ClassManager.js
  6. 7
      test/specs/selector_manager/view/ClassTagsView.js

4
src/domain_abstract/model/Styleable.js

@ -99,5 +99,9 @@ export default {
} }
return result.join(''); return result.join('');
},
getSelectors() {
return this.get('selectors') || this.get('classes');
} }
}; };

2
src/editor/model/Editor.js

@ -8,12 +8,12 @@ const deps = [
require('storage_manager'), require('storage_manager'),
require('device_manager'), require('device_manager'),
require('parser'), require('parser'),
require('style_manager'),
require('selector_manager'), require('selector_manager'),
require('modal_dialog'), require('modal_dialog'),
require('code_manager'), require('code_manager'),
require('panels'), require('panels'),
require('rich_text_editor'), require('rich_text_editor'),
require('style_manager'),
require('asset_manager'), require('asset_manager'),
require('css_composer'), require('css_composer'),
require('trait_manager'), require('trait_manager'),

57
src/selector_manager/view/ClassTagsView.js

@ -1,9 +1,9 @@
import _ from 'underscore'; import { template } from 'underscore';
import Backbone from 'backbone'; import Backbone from 'backbone';
var ClassTagView = require('./ClassTagView'); var ClassTagView = require('./ClassTagView');
module.exports = Backbone.View.extend({ module.exports = Backbone.View.extend({
template: _.template(` template: template(`
<div id="<%= pfx %>up"> <div id="<%= pfx %>up">
<div id="<%= pfx %>label"><%= label %></div> <div id="<%= pfx %>label"><%= label %></div>
<div id="<%= pfx %>status-c"> <div id="<%= pfx %>status-c">
@ -52,6 +52,7 @@ module.exports = Backbone.View.extend({
this.target = this.config.em; this.target = this.config.em;
this.em = this.target; this.em = this.target;
//this.listenTo(this.getStyleEmitter(), 'update', this.componentChanged);
this.listenTo(this.target, 'component:toggled', this.componentChanged); this.listenTo(this.target, 'component:toggled', this.componentChanged);
this.listenTo(this.target, 'component:update:classes', this.updateSelector); this.listenTo(this.target, 'component:update:classes', this.updateSelector);
@ -62,6 +63,13 @@ module.exports = Backbone.View.extend({
this.delegateEvents(); this.delegateEvents();
}, },
getStyleEmitter() {
const { em } = this;
const sm = em && em.get('StyleManager');
const emitter = sm && sm.getEmitter();
return emitter || {};
},
/** /**
* Triggered when a tag is removed from collection * Triggered when a tag is removed from collection
* @param {Object} model Removed model * @param {Object} model Removed model
@ -134,19 +142,27 @@ module.exports = Backbone.View.extend({
* @private * @private
*/ */
componentChanged(e) { componentChanged(e) {
this.compTarget = this.target.getSelected(); console.log('componentChanged');
this.compTarget = this.getTarget();
const target = this.compTarget; const target = this.compTarget;
let validSelectors = []; let validSelectors = [];
if (target) { if (target) {
this.getStates().val(target.get('state')); const state = target.get('state');
validSelectors = target.get('classes').getValid(); state && this.getStates().val(state);
const selectors = target.getSelectors();
validSelectors = selectors.getValid();
} }
this.collection.reset(validSelectors); this.collection.reset(validSelectors);
this.updateStateVis(); this.updateStateVis();
}, },
getTarget() {
const targetStyle = this.getStyleEmitter().model;
return this.target.getSelected();
},
/** /**
* Update states visibility. Hides states in case there is no tags * Update states visibility. Hides states in case there is no tags
* inside collection * inside collection
@ -155,10 +171,8 @@ module.exports = Backbone.View.extend({
updateStateVis() { updateStateVis() {
const em = this.em; const em = this.em;
const avoidInline = em && em.getConfig('avoidInlineStyle'); const avoidInline = em && em.getConfig('avoidInlineStyle');
const display = this.collection.length || avoidInline ? 'block' : 'none';
if (this.collection.length || avoidInline) this.getStatesC().css('display', display);
this.getStatesC().css('display', 'block');
else this.getStatesC().css('display', 'none');
this.updateSelector(); this.updateSelector();
}, },
@ -168,20 +182,21 @@ module.exports = Backbone.View.extend({
* @private * @private
*/ */
updateSelector() { updateSelector() {
const selected = this.target.getSelected(); const { pfx, collection, el } = this;
const selected = this.getTarget();
this.compTarget = selected; this.compTarget = selected;
if (!selected || !selected.get) return;
if (!selected || !selected.get) {
return;
}
const state = selected.get('state'); const state = selected.get('state');
const coll = this.collection; const coll = collection;
let result = coll.getFullString(coll.getStyleable()); let result = coll.getFullString(coll.getStyleable());
result = result || `#${selected.getId()}`; result =
result ||
selected.get('selectorsAdd') ||
(selected.getId ? `#${selected.getId()}` : '');
result += state ? `:${state}` : ''; result += state ? `:${state}` : '';
const el = this.el.querySelector('#' + this.pfx + 'sel'); const elSel = el.querySelector(`#${pfx}sel`);
el && (el.innerHTML = result); elSel && (elSel.innerHTML = result);
}, },
/** /**
@ -211,13 +226,11 @@ module.exports = Backbone.View.extend({
if (target) { if (target) {
const sm = target.get('SelectorManager'); const sm = target.get('SelectorManager');
var model = sm.add({ label }); const model = sm.add({ label });
if (component) { if (component) {
var compCls = component.get('classes'); const compCls = component.getSelectors();
var lenB = compCls.length;
compCls.add(model); compCls.add(model);
var lenA = compCls.length;
this.collection.add(model); this.collection.add(model);
this.updateStateVis(); this.updateStateVis();
} }

4
src/style_manager/index.js

@ -374,6 +374,10 @@ module.exports = () => {
return SectView.setTarget(target, opts); return SectView.setTarget(target, opts);
}, },
getEmitter() {
return SectView.propTarget;
},
/** /**
* Render sectors and properties * Render sectors and properties
* @return {HTMLElement} * @return {HTMLElement}

4
test/specs/selector_manager/e2e/ClassManager.js

@ -86,10 +86,10 @@ module.exports = {
gjs.editor.setSelected(model); gjs.editor.setSelected(model);
tagEl.addNewTag('test'); tagEl.addNewTag('test');
tagEl.addNewTag('test'); tagEl.addNewTag('test');
expect(model.get('classes').length).toEqual(1); expect(model.getSelectors().length).toEqual(1);
expect( expect(
model model
.get('classes') .getSelectors()
.at(0) .at(0)
.get('name') .get('name')
).toEqual('test'); ).toEqual('test');

7
test/specs/selector_manager/view/ClassTagsView.js

@ -1,5 +1,6 @@
const ClassTagsView = require('selector_manager/view/ClassTagsView'); const ClassTagsView = require('selector_manager/view/ClassTagsView');
const Selectors = require('selector_manager/model/Selectors'); const Selectors = require('selector_manager/model/Selectors');
const Component = require('dom_components/model/Component');
const Editor = require('editor/model/Editor'); const Editor = require('editor/model/Editor');
module.exports = { module.exports = {
@ -43,11 +44,7 @@ module.exports = {
} }
}; };
testContext.compTargetStub = { testContext.compTargetStub = new Component();
get() {
return { add() {} };
}
};
fixtures.innerHTML = ''; fixtures.innerHTML = '';
fixture.empty().appendTo(fixtures); fixture.empty().appendTo(fixtures);

Loading…
Cancel
Save