@print-one/grapesjs
Version:
Free and Open Source Web Builder Framework
87 lines (73 loc) • 2.56 kB
text/typescript
import { $ } from '../../common';
import { CommandObject } from './CommandAbstract';
export default {
run(editor, sender) {
this.sender = sender;
if (!this.$cnt) {
const config = editor.getConfig();
const { Panels, DeviceManager, SelectorManager, StyleManager } = editor;
const trgEvCnt = 'change:appendContent';
const $cnt = $('<div></div>');
const $cntInner = $('<div></div>');
const $cntSlm = $('<div></div>');
const $cntSm = $('<div></div>');
this.$cnt = $cnt;
this.$cntInner = $cntInner;
$cntInner.append($cntSlm);
$cntInner.append($cntSm);
$cnt.append($cntInner);
// Device Manager
if (DeviceManager && config.showDevices) {
const devicePanel = Panels.addPanel({ id: 'devices-c' });
const dvEl = DeviceManager.render();
devicePanel.set('appendContent', dvEl).trigger(trgEvCnt);
}
// Selector Manager container
const slmConfig = SelectorManager.getConfig();
if (slmConfig.custom) {
SelectorManager.__trgCustom({ container: $cntSlm.get(0) });
} else if (!slmConfig.appendTo) {
$cntSlm.append(SelectorManager.render([]));
}
// Style Manager
this.sm = StyleManager;
const smConfig = StyleManager.getConfig();
const pfx = smConfig.stylePrefix;
this.$header = $(`<div class="${pfx}header">${editor.t('styleManager.empty')}</div>`);
$cnt.append(this.$header);
if (smConfig.custom) {
StyleManager.__trgCustom({ container: $cntSm.get(0) });
} else if (!smConfig.appendTo) {
$cntSm.append(StyleManager.render());
}
// Create panel if not exists
const pnCnt = 'views-container';
const pnl = Panels.getPanel(pnCnt) || Panels.addPanel({ id: pnCnt });
// Add all containers to the panel
pnl.set('appendContent', $cnt).trigger(trgEvCnt);
// Toggle Style Manager on target selection
const em = editor.getModel();
this.listenTo(em, StyleManager.events.target, this.toggleSm);
}
this.toggleSm();
},
/**
* Toggle Style Manager visibility
* @private
*/
toggleSm() {
const { sender, sm, $cntInner, $header } = this;
if ((sender && sender.get && !sender.get('active')) || !sm) return;
if (sm.getSelected()) {
$cntInner?.show();
$header?.hide();
} else {
$cntInner?.hide();
$header?.show();
}
},
stop() {
this.$cntInner?.hide();
this.$header?.hide();
},
} as CommandObject<{}, { [k: string]: any }>;