|
|
@ -86,6 +86,7 @@ import Component from '../dom_components/model/Component'; |
|
|
import { ItemManagerModule } from '../abstract/Module'; |
|
|
import { ItemManagerModule } from '../abstract/Module'; |
|
|
import { StyleModuleParam } from '../style_manager'; |
|
|
import { StyleModuleParam } from '../style_manager'; |
|
|
import StyleableModel from '../domain_abstract/model/StyleableModel'; |
|
|
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'; |
|
|
export type SelectorEvent = 'selector:add' | 'selector:remove' | 'selector:update' | 'selector:state' | 'selector'; |
|
|
|
|
|
|
|
|
@ -422,7 +423,6 @@ export default class SelectorManager extends ItemManagerModule<SelectorManagerCo |
|
|
*/ |
|
|
*/ |
|
|
addSelected(props: SelectorStringObject) { |
|
|
addSelected(props: SelectorStringObject) { |
|
|
const added = this.add(props); |
|
|
const added = this.add(props); |
|
|
// TODO: target should be the one from StyleManager
|
|
|
|
|
|
this.em.getSelectedAll().forEach(target => { |
|
|
this.em.getSelectedAll().forEach(target => { |
|
|
target.getSelectors().add(added); |
|
|
target.getSelectors().add(added); |
|
|
}); |
|
|
}); |
|
|
@ -441,6 +441,34 @@ export default class SelectorManager extends ItemManagerModule<SelectorManagerCo |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
duplicateSelected(selector: Selector, opts: { suffix?: string } = {}) { |
|
|
|
|
|
const { em } = this; |
|
|
|
|
|
const commonSelectors = this.getSelected(); |
|
|
|
|
|
if (commonSelectors.indexOf(selector) < 0) return; |
|
|
|
|
|
|
|
|
|
|
|
const state = this.getState(); |
|
|
|
|
|
const media = em.getCurrentMedia(); |
|
|
|
|
|
const rule = em.Css.get(commonSelectors, state, media); |
|
|
|
|
|
const styleToApply = rule?.getStyle(); |
|
|
|
|
|
|
|
|
|
|
|
em.getSelectedAll().forEach(component => { |
|
|
|
|
|
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. |
|
|
* Get the array of currently selected targets. |
|
|
* @returns {Array<[Component]|[CssRule]>} |
|
|
* @returns {Array<[Component]|[CssRule]>} |
|
|
|