Browse Source

Avoid useless changes. Closes #3189

ui-module
Artur Arseniev 6 years ago
parent
commit
b174014a97
  1. 20
      src/css_composer/index.js
  2. 8
      src/editor/model/Editor.js
  3. 5
      src/style_manager/index.js

20
src/css_composer/index.js

@ -113,14 +113,14 @@ export default () => {
um && um.add(rules); um && um.add(rules);
em.stopListening(rules, ev, this.handleChange); em.stopListening(rules, ev, this.handleChange);
em.listenTo(rules, ev, this.handleChange); em.listenTo(rules, ev, this.handleChange);
rules.each(rule => this.handleChange(rule, { avoidStore: 1 })); rules.each(rule => this.handleChange(rule, null, { avoidStore: 1 }));
}, },
/** /**
* Handle rule changes * Handle rule changes
* @private * @private
*/ */
handleChange(model, opts = {}) { handleChange(model, val, opts = {}) {
const ev = 'change:style'; const ev = 'change:style';
const um = em.get('UndoManager'); const um = em.get('UndoManager');
um && um.add(model); um && um.add(model);
@ -183,7 +183,8 @@ export default () => {
* @param {Array<Selector>} selectors Array of selectors * @param {Array<Selector>} selectors Array of selectors
* @param {String} state Css rule state * @param {String} state Css rule state
* @param {String} width For which device this style is oriented * @param {String} width For which device this style is oriented
* @param {Object} opts Other options for the rule * @param {Object} props Other props for the rule
* @param {Object} opts Options for the add of new rule
* @return {Model} * @return {Model}
* @example * @example
* var sm = editor.SelectorManager; * var sm = editor.SelectorManager;
@ -195,7 +196,7 @@ export default () => {
* color: '#fff', * color: '#fff',
* }); * });
* */ * */
add(selectors, state, width, opts = {}) { add(selectors, state, width, opts = {}, addOpts = {}) {
var s = state || ''; var s = state || '';
var w = width || ''; var w = width || '';
var opt = { ...opts }; var opt = { ...opts };
@ -211,8 +212,8 @@ export default () => {
opt.mediaText = w; opt.mediaText = w;
opt.selectors = []; opt.selectors = [];
rule = new CssRule(opt, c); rule = new CssRule(opt, c);
rule.get('selectors').add(selectors); rule.get('selectors').add(selectors, addOpts);
rules.add(rule); rules.add(rule, addOpts);
return rule; return rule;
} }
}, },
@ -406,12 +407,13 @@ export default () => {
* // #myid:hover { color: blue } * // #myid:hover { color: blue }
*/ */
setIdRule(name, style = {}, opts = {}) { setIdRule(name, style = {}, opts = {}) {
const { addOpts = {} } = opts;
const state = opts.state || ''; const state = opts.state || '';
const media = opts.mediaText || em.getCurrentMedia(); const media = opts.mediaText || em.getCurrentMedia();
const sm = em.get('SelectorManager'); const sm = em.get('SelectorManager');
const selector = sm.add({ name, type: Selector.TYPE_ID }); const selector = sm.add({ name, type: Selector.TYPE_ID }, addOpts);
const rule = this.add(selector, state, media); const rule = this.add(selector, state, media, {}, addOpts);
rule.setStyle(style, opts); rule.setStyle(style, { ...opts, ...addOpts });
return rule; return rule;
}, },

8
src/editor/model/Editor.js

@ -247,15 +247,13 @@ export default Backbone.Model.extend({
* */ * */
handleUpdates(model, val, opt = {}) { handleUpdates(model, val, opt = {}) {
// Component has been added temporarily - do not update storage or record changes // Component has been added temporarily - do not update storage or record changes
if (opt.temporary) { if (opt.temporary || opt.noCount || opt.avoidStore) {
return; return;
} }
timedInterval && clearInterval(timedInterval); timedInterval && clearTimeout(timedInterval);
timedInterval = setTimeout(() => { timedInterval = setTimeout(() => {
if (!opt.avoidStore) { this.set('changesCount', this.get('changesCount') + 1, opt);
this.set('changesCount', this.get('changesCount') + 1, opt);
}
}, 0); }, 0);
}, },

5
src/style_manager/index.js

@ -279,7 +279,8 @@ export default () => {
const valid = classes.getStyleable(); const valid = classes.getStyleable();
const hasClasses = valid.length; const hasClasses = valid.length;
const useClasses = !smConf.componentFirst || options.useClasses; const useClasses = !smConf.componentFirst || options.useClasses;
const opts = { state }; const addOpts = { noCount: 1 };
const opts = { state, addOpts };
let rule; let rule;
// I stop undo manager here as after adding the CSSRule (generally after // I stop undo manager here as after adding the CSSRule (generally after
@ -293,7 +294,7 @@ export default () => {
rule = cssC.get(valid, state, deviceW); rule = cssC.get(valid, state, deviceW);
if (!rule && !skipAdd) { if (!rule && !skipAdd) {
rule = cssC.add(valid, state, deviceW); rule = cssC.add(valid, state, deviceW, {}, addOpts);
} }
} else if (config.avoidInlineStyle) { } else if (config.avoidInlineStyle) {
rule = cssC.getIdRule(id, opts); rule = cssC.getIdRule(id, opts);

Loading…
Cancel
Save