mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.0 KiB
78 lines
2.0 KiB
import { View } from '../../common';
|
|
import html from '../../utils/html';
|
|
import PropertiesView from './PropertiesView';
|
|
|
|
export default class SectorView extends View {
|
|
template({ pfx, label }) {
|
|
const icons = this.em?.getConfig().icons;
|
|
const iconCaret = icons?.caret || '';
|
|
const clsPfx = `${pfx}sector-`;
|
|
|
|
return html`
|
|
<div class="${clsPfx}title" data-sector-title>
|
|
<div class="${clsPfx}caret">$${iconCaret}</div>
|
|
<div class="${clsPfx}label">${label}</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
events() {
|
|
return {
|
|
'click [data-sector-title]': 'toggle',
|
|
};
|
|
}
|
|
|
|
initialize(o) {
|
|
const config = o.config || {};
|
|
const { model } = this;
|
|
const { em } = config;
|
|
this.config = config;
|
|
this.em = em;
|
|
this.pfx = config.stylePrefix || '';
|
|
this.listenTo(model, 'destroy remove', this.remove);
|
|
this.listenTo(model, 'change:open', this.updateOpen);
|
|
this.listenTo(model, 'change:visible', this.updateVisibility);
|
|
}
|
|
|
|
updateOpen() {
|
|
const { $el, model, pfx } = this;
|
|
const isOpen = model.isOpen();
|
|
$el[isOpen ? 'addClass' : 'removeClass'](`${pfx}open`);
|
|
this.getPropertiesEl().style.display = isOpen ? '' : 'none';
|
|
}
|
|
|
|
updateVisibility() {
|
|
this.el.style.display = this.model.isVisible() ? '' : 'none';
|
|
}
|
|
|
|
getPropertiesEl() {
|
|
const { $el, pfx } = this;
|
|
return $el.find(`.${pfx}properties`).get(0);
|
|
}
|
|
|
|
toggle() {
|
|
const { model } = this;
|
|
model.setOpen(!model.get('open'));
|
|
}
|
|
|
|
renderProperties() {
|
|
const { model, config } = this;
|
|
const objs = model.get('properties');
|
|
|
|
if (objs) {
|
|
const view = new PropertiesView({ collection: objs, config });
|
|
this.$el.append(view.render().el);
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { pfx, model, $el } = this;
|
|
const id = model.getId();
|
|
const label = model.getName();
|
|
$el.html(this.template({ pfx, label }));
|
|
this.renderProperties();
|
|
$el.attr('class', `${pfx}sector ${pfx}sector__${id} no-select`);
|
|
this.updateOpen();
|
|
return this;
|
|
}
|
|
}
|
|
|