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.
125 lines
3.1 KiB
125 lines
3.1 KiB
var Backbone = require('backbone');
|
|
var LayerView = require('./LayerView');
|
|
|
|
module.exports = Backbone.View.extend({
|
|
|
|
initialize(o) {
|
|
this.config = o.config || {};
|
|
this.stackModel = o.stackModel;
|
|
this.preview = o.preview;
|
|
this.pfx = this.config.stylePrefix || '';
|
|
this.ppfx = this.config.pStylePrefix || '';
|
|
this.propsConfig = o.propsConfig;
|
|
let pfx = this.pfx;
|
|
let ppfx = this.ppfx;
|
|
let collection = this.collection;
|
|
this.className = `${pfx}layers ${ppfx}field`;
|
|
this.listenTo(collection, 'add', this.addTo);
|
|
this.listenTo(collection, 'deselectAll', this.deselectAll );
|
|
this.listenTo(collection, 'reset', this.render);
|
|
|
|
var em = this.config.em || '';
|
|
var utils = em ? em.get('Utils') : '';
|
|
|
|
this.sorter = utils ? new utils.Sorter({
|
|
container: this.el,
|
|
ignoreViewChildren: 1,
|
|
containerSel: `.${pfx}layers`,
|
|
itemSel: `.${pfx}layer`,
|
|
pfx: this.config.pStylePrefix,
|
|
}) : '';
|
|
|
|
// For the Sorter
|
|
collection.view = this;
|
|
this.$el.data('model', collection);
|
|
this.$el.data('collection', collection);
|
|
},
|
|
|
|
/**
|
|
* Add to collection
|
|
* @param Object Model
|
|
*
|
|
* @return Object
|
|
* */
|
|
addTo(model) {
|
|
var i = this.collection.indexOf(model);
|
|
this.addToCollection(model, null, i);
|
|
},
|
|
|
|
/**
|
|
* Add new object to collection
|
|
* @param Object Model
|
|
* @param Object Fragment collection
|
|
* @param {number} index Index of append
|
|
*
|
|
* @return Object Object created
|
|
* */
|
|
addToCollection(model, fragmentEl, index) {
|
|
var fragment = fragmentEl || null;
|
|
const stackModel = this.stackModel;
|
|
const config = this.config;
|
|
const sorter = this.sorter;
|
|
const propsConfig = this.propsConfig;
|
|
|
|
if(typeof this.preview !== 'undefined'){
|
|
model.set('preview', this.preview);
|
|
}
|
|
|
|
var view = new LayerView({
|
|
model,
|
|
config,
|
|
sorter,
|
|
stackModel,
|
|
propsConfig
|
|
});
|
|
var rendered = view.render().el;
|
|
|
|
if (fragment) {
|
|
fragment.appendChild(rendered);
|
|
} else {
|
|
if(typeof index != 'undefined'){
|
|
var method = 'before';
|
|
// If the added model is the last of collection
|
|
// need to change the logic of append
|
|
if(this.$el.children().length == index){
|
|
index--;
|
|
method = 'after';
|
|
}
|
|
// In case the added is new in the collection index will be -1
|
|
if(index < 0){
|
|
this.$el.append(rendered);
|
|
}else
|
|
this.$el.children().eq(index)[method](rendered);
|
|
}else
|
|
this.$el.append(rendered);
|
|
}
|
|
|
|
return rendered;
|
|
},
|
|
|
|
/**
|
|
* Deselect all
|
|
*
|
|
* @return void
|
|
* */
|
|
deselectAll() {
|
|
this.$el.find('.'+ this.pfx +'layer').removeClass(this.pfx + 'active');
|
|
},
|
|
|
|
render() {
|
|
var fragment = document.createDocumentFragment();
|
|
this.$el.empty();
|
|
|
|
this.collection.each(function(model){
|
|
this.addToCollection(model, fragment);
|
|
},this);
|
|
|
|
this.$el.append(fragment);
|
|
this.$el.attr('class', this.className);
|
|
|
|
if(this.sorter)
|
|
this.sorter.plh = null;
|
|
|
|
return this;
|
|
}
|
|
});
|
|
|