Browse Source

Search alternative style target

pull/2620/head
Artur Arseniev 7 years ago
parent
commit
fa39e616ba
  1. 41
      package-lock.json
  2. 10
      src/style_manager/index.js
  3. 38
      src/style_manager/view/PropertyStackView.js
  4. 53
      src/style_manager/view/PropertyView.js

41
package-lock.json

@ -9935,8 +9935,7 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@ -9957,14 +9956,12 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@ -9979,20 +9976,17 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@ -10109,8 +10103,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -10122,7 +10115,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -10137,7 +10129,6 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@ -10145,14 +10136,12 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@ -10171,7 +10160,6 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@ -10252,8 +10240,7 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -10265,7 +10252,6 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@ -10351,8 +10337,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@ -10388,7 +10373,6 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -10408,7 +10392,6 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@ -10452,14 +10435,12 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
} }
} }
}, },

10
src/style_manager/index.js

@ -256,8 +256,9 @@ export default () => {
* @param {Model} model * @param {Model} model
* @return {Model} * @return {Model}
*/ */
getModelToStyle(model) { getModelToStyle(model, options = {}) {
const em = c.em; const em = c.em;
const { skipAdd } = options;
const classes = model.get('classes'); const classes = model.get('classes');
const id = model.getId(); const id = model.getId();
@ -270,6 +271,7 @@ export default () => {
const state = !config.devicePreviewMode ? em.get('state') : ''; const state = !config.devicePreviewMode ? em.get('state') : '';
const valid = classes.getStyleable(); const valid = classes.getStyleable();
const hasClasses = valid.length; const hasClasses = valid.length;
const useClasses = !smConf.componentFirst || options.useClasses;
const opts = { state }; const opts = { state };
let rule; let rule;
@ -279,16 +281,16 @@ export default () => {
// #268 // #268
um.stop(); um.stop();
if (hasClasses && !smConf.componentFirst) { if (hasClasses && useClasses) {
const deviceW = em.getCurrentMedia(); const deviceW = em.getCurrentMedia();
rule = cssC.get(valid, state, deviceW); rule = cssC.get(valid, state, deviceW);
if (!rule) { if (!rule && !skipAdd) {
rule = cssC.add(valid, state, deviceW); rule = cssC.add(valid, state, deviceW);
} }
} else if (config.avoidInlineStyle) { } else if (config.avoidInlineStyle) {
rule = cssC.getIdRule(id, opts); rule = cssC.getIdRule(id, opts);
!rule && (rule = cssC.setIdRule(id, {}, opts)); !rule && !skipAdd && (rule = cssC.setIdRule(id, {}, opts));
if (model.is('wrapper')) rule.set('wrapper', 1); if (model.is('wrapper')) rule.set('wrapper', 1);
} }

38
src/style_manager/view/PropertyStackView.js

@ -1,4 +1,4 @@
import { isUndefined } from 'underscore'; import { isUndefined, keys } from 'underscore';
import PropertyCompositeView from './PropertyCompositeView'; import PropertyCompositeView from './PropertyCompositeView';
import LayersView from './LayersView'; import LayersView from './LayersView';
@ -33,6 +33,8 @@ export default PropertyCompositeView.extend({
if (!this.model.get('detached')) { if (!this.model.get('detached')) {
PropertyCompositeView.prototype.targetUpdated.apply(this, args); PropertyCompositeView.prototype.targetUpdated.apply(this, args);
} else { } else {
const { status } = this._getTargetData();
this.setStatus(status);
this.checkVisibility(); this.checkVisibility();
} }
@ -108,15 +110,30 @@ export default PropertyCompositeView.extend({
* */ * */
refreshLayers() { refreshLayers() {
let layersObj = []; let layersObj = [];
const model = this.model; const { model, em } = this;
const layers = this.getLayers(); const layers = this.getLayers();
const detached = model.get('detached'); const detached = model.get('detached');
const target = this.getTarget(); const target = this.getTarget();
let style, valueComput, targetAlt;
// With detached layers values will be assigned to their properties // With detached layers values will be assigned to their properties
if (detached) { if (detached) {
const style = target ? target.getStyle() : {}; const selected = em.getSelected();
layersObj = layers.getLayersFromStyle(style); style = target ? target.getStyle() : 0;
valueComput = this.getComputedValue();
// If the style object is empty but the target has a computed value,
// that means the style might exist in some other place
if ((!style || !keys(style).length) && valueComput && selected) {
// The target is a component but the style is in class rules
targetAlt = em.get('StyleManager').getModelToStyle(selected, {
skipAdd: 1,
useClasses: 1
});
style = targetAlt !== selected ? targetAlt.getStyle() : 0;
}
layersObj = layers.getLayersFromStyle(style || {});
} else { } else {
let value = this.getTargetValue({ ignoreDefault: 1 }); let value = this.getTargetValue({ ignoreDefault: 1 });
@ -127,6 +144,19 @@ export default PropertyCompositeView.extend({
} }
const toAdd = model.getLayersFromTarget(target) || layersObj; const toAdd = model.getLayersFromTarget(target) || layersObj;
// const prop = this.model.get('property');
// if (['background', 'box-shadow'].indexOf(prop) >= 0) {
// console.log('PROP', prop, {
// style,
// toAdd,
// layersObj,
// targetAlt,
// valueTrg: this.getTargetValue({ ignoreDefault: 1 }),
// valueComput: this.getComputedValue(),
// });
// }
layers.reset(); layers.reset();
layers.add(toAdd); layers.add(toAdd);
model.set({ stackIndex: null }, { silent: true }); model.set({ stackIndex: null }, { silent: true });

53
src/style_manager/view/PropertyView.js

@ -213,25 +213,13 @@ export default Backbone.View.extend({
em && em.trigger('styleManager:update:target', this.getTarget()); em && em.trigger('styleManager:update:target', this.getTarget());
}), }),
/** _getTargetData() {
* Fired when the target is changed const { model, config } = this;
* */ const targetValue = this.getTargetValue({ ignoreDefault: 1 });
targetUpdated(mod, val, opts = {}) { const defaultValue = model.getDefaultValue();
this.emitUpdateTarget(); const computedValue = this.getComputedValue();
if (!this.checkVisibility()) {
return;
}
const config = this.config;
const em = config.em;
const { model } = this;
const property = model.get('property');
let value = ''; let value = '';
let status = ''; let status = '';
let targetValue = this.getTargetValue({ ignoreDefault: 1 });
let defaultValue = model.getDefaultValue();
let computedValue = this.getComputedValue();
if (targetValue) { if (targetValue) {
value = targetValue; value = targetValue;
@ -254,16 +242,39 @@ export default Backbone.View.extend({
status = ''; status = '';
} }
return {
value,
status,
targetValue,
defaultValue,
computedValue
};
},
/**
* Fired when the target is changed
* */
targetUpdated(mod, val, opts = {}) {
this.emitUpdateTarget();
if (!this.checkVisibility()) {
return;
}
const config = this.config;
const em = config.em;
const { model } = this;
const property = model.get('property');
const { status, value, ...targetData } = this._getTargetData();
this.setStatus(status); this.setStatus(status);
model.setValue(value, 0, { fromTarget: 1, ...opts }); model.setValue(value, 0, { fromTarget: 1, ...opts });
if (em) { if (em) {
const data = { const data = {
status, status,
targetValue, value,
defaultValue, ...targetData
computedValue,
value
}; };
em.trigger('styleManager:change', this, property, value, data); em.trigger('styleManager:change', this, property, value, data);
em.trigger(`styleManager:change:${property}`, this, value, data); em.trigger(`styleManager:change:${property}`, this, value, data);

Loading…
Cancel
Save