From 4a0ae617370aaef5125d73bcd8380ae2a440510c Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 11 Jul 2023 15:31:11 +0400 Subject: [PATCH] Ignore current `state` and `device` for component related styles. Fixes #5213 --- src/css_composer/index.ts | 18 +++++++++++++----- src/dom_components/model/Component.ts | 4 ++-- src/dom_components/view/ComponentView.ts | 14 ++++++++++---- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/css_composer/index.ts b/src/css_composer/index.ts index 6146474b4..8dbdfe5c5 100644 --- a/src/css_composer/index.ts +++ b/src/css_composer/index.ts @@ -60,6 +60,14 @@ interface SetRuleOptions extends RuleOptions { addStyles?: boolean; } +/** @private */ +export interface GetSetRuleOptions { + state?: string; + mediaText?: string; + addOpts?: ObjectAny; + current?: boolean; +} + type CssRuleStyle = Required['style']; export default class CssComposer extends ItemManagerModule { @@ -385,7 +393,7 @@ export default class CssComposer extends ItemManagerModule { return str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); }; -const avoidInline = (em: EditorModel) => !!em?.getConfig().avoidInlineStyle; +export const avoidInline = (em: EditorModel) => !!em?.getConfig().avoidInlineStyle; export const eventDrag = 'component:drag'; export const keySymbols = '__symbols'; @@ -603,7 +603,7 @@ export default class Component extends StyleableModel { const state = em.get('state'); const cc = em.Css; const propOrig = this.getStyle(opts); - this.rule = cc.setIdRule(this.getId(), prop, { ...opts, state }); + this.rule = cc.setIdRule(this.getId(), prop, { state, ...opts }); const diff = shallowDiff(propOrig, prop); this.set('style', '', { silent: true }); keys(diff).forEach(pr => this.trigger(`change:style:${pr}`)); diff --git a/src/dom_components/view/ComponentView.ts b/src/dom_components/view/ComponentView.ts index eb89d5761..9d87d5c34 100644 --- a/src/dom_components/view/ComponentView.ts +++ b/src/dom_components/view/ComponentView.ts @@ -1,5 +1,5 @@ import { isEmpty, each, keys, result } from 'underscore'; -import Component from '../model/Component'; +import Component, { avoidInline } from '../model/Component'; import Components from '../model/Components'; import ComponentsView from './ComponentsView'; import Selectors from '../../selector_manager/model/Selectors'; @@ -10,6 +10,7 @@ import { ComponentOptions } from '../model/types'; import EditorModel from '../../editor/model/Editor'; import { DomComponentsConfig } from '../config/config'; import Editor from '../../editor'; +import { GetSetRuleOptions } from '../../css_composer'; type ClbObj = ReturnType; @@ -89,6 +90,10 @@ Component> { !modelOpt.temporary && this.init(this._clbObj()); } + get __cmpStyleOpts(): GetSetRuleOptions { + return { state: '', mediaText: '' }; + } + __isDraggable() { const { model, config } = this; const { draggable } = model.attributes; @@ -276,9 +281,10 @@ Component> { updateStyle(m?: any, v?: any, opts: ObjectAny = {}) { const { model, em } = this; - if (em && em.getConfig().avoidInlineStyle && !opts.inline) { - const style = model.getStyle(); - !isEmpty(style) && model.setStyle(style); + if (avoidInline(em) && !opts.inline) { + const styleOpts = this.__cmpStyleOpts; + const style = model.getStyle(styleOpts); + !isEmpty(style) && model.setStyle(style, styleOpts); } else { this.setAttribute('style', model.styleToString(opts)); }