From b6ca7ed701c1ed5725bdccc5e82f08220762fc5f Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 28 Feb 2023 14:32:59 +0400 Subject: [PATCH] Add duplicateSelected --- src/css_composer/index.ts | 7 ++++- src/domain_abstract/model/StyleableModel.ts | 4 +-- src/selector_manager/index.ts | 30 ++++++++++++++++++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/css_composer/index.ts b/src/css_composer/index.ts index 45a76a798..97227cf0d 100644 --- a/src/css_composer/index.ts +++ b/src/css_composer/index.ts @@ -167,7 +167,12 @@ export default class CssComposer extends ItemManagerModule) { + get( + selectors: any, + state?: string, + width?: string, + ruleProps?: Omit + ): CssRule | undefined { let slc = selectors; if (isString(selectors)) { const sm = this.em.Selectors; diff --git a/src/domain_abstract/model/StyleableModel.ts b/src/domain_abstract/model/StyleableModel.ts index 89a5cf7ef..d1cd509dc 100644 --- a/src/domain_abstract/model/StyleableModel.ts +++ b/src/domain_abstract/model/StyleableModel.ts @@ -1,7 +1,7 @@ import { isString, isArray, keys } from 'underscore'; import { shallowDiff } from '../../utils/mixins'; import ParserHtml from '../../parser/model/ParserHtml'; -import { Model, ObjectAny, ObjectHash } from '../../common'; +import { Model, ObjectAny, ObjectHash, ObjectStrings } from '../../common'; import Selectors from '../../selector_manager/model/Selectors'; const parserHtml = ParserHtml(); @@ -30,7 +30,7 @@ export default class StyleableModel extends Model * Get style object * @return {Object} */ - getStyle(prop?: string | ObjectAny) { + getStyle(prop?: string | ObjectAny): ObjectStrings { const style = this.get('style') || {}; const result: ObjectAny = { ...style }; return prop && isString(prop) ? result[prop] : result; diff --git a/src/selector_manager/index.ts b/src/selector_manager/index.ts index a7cada6e8..4f5072c3b 100644 --- a/src/selector_manager/index.ts +++ b/src/selector_manager/index.ts @@ -86,6 +86,7 @@ import Component from '../dom_components/model/Component'; import { ItemManagerModule } from '../abstract/Module'; import { StyleModuleParam } from '../style_manager'; import StyleableModel from '../domain_abstract/model/StyleableModel'; +import CssRule from '../css_composer/model/CssRule'; export type SelectorEvent = 'selector:add' | 'selector:remove' | 'selector:update' | 'selector:state' | 'selector'; @@ -422,7 +423,6 @@ export default class SelectorManager extends ItemManagerModule { target.getSelectors().add(added); }); @@ -441,6 +441,34 @@ export default class SelectorManager extends ItemManagerModule { + const selectors = component.getSelectors(); + if (selectors.includes(selector)) { + const suffix = opts.suffix || ' copy'; + const label = selector.getLabel(); + const newSelector = this.addSelector(`${label}${suffix}`); + const at = selectors.indexOf(selector); + selectors.remove(selector); + selectors.add(newSelector, { at }); + } + }); + + if (styleToApply) { + const newRule = em.Css.add(this.getSelected(), state, media); + newRule.setStyle(styleToApply); + } + } + /** * Get the array of currently selected targets. * @returns {Array<[Component]|[CssRule]>}