comindware.ui
Version:
Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.
74 lines (62 loc) • 1.93 kB
JavaScript
/**
* Developer: Stepan Burguchev
* Date: 2/27/2017
* Copyright: 2009-2017 Stepan Burguchev®
* All Rights Reserved
* Published under the MIT license
*/
import { Handlebars } from 'lib';
import { helpers } from 'utils';
import template from './horizontalLayout.hbs';
import LayoutBehavior from '../behaviors/LayoutBehavior';
const classes = {
CLASS_NAME: 'layout__horizontal-layout',
ITEM: 'layout__horizontal-layout-list-item',
HIDDEN: 'layout__hidden'
};
export default Marionette.LayoutView.extend({
initialize(options) {
helpers.ensureOption(options, 'columns');
this.columns = options.columns;
},
template: Handlebars.compile(template),
className: classes.CLASS_NAME,
behaviors: {
LayoutBehavior: {
behaviorClass: LayoutBehavior
}
},
ui: {
list: '.js-list'
},
onShow() {
this.__rowsCtx = [];
this.options.columns.forEach(view => {
view.on('change:visible', this.__handleChangeVisibility.bind(this));
const $regionEl = $('<div></div>').addClass(classes.ITEM);
this.ui.list.append($regionEl);
const region = this.addRegion(_.uniqueId('horizontalLayoutItem'), {
el: $regionEl
});
this.__rowsCtx.push({
view,
$regionEl,
region
});
region.show(view);
});
this.__updateState();
},
update() {
this.columns.forEach(view => {
if (view.update) {
view.update();
}
});
this.__updateState();
},
__handleChangeVisibility(view, visible) {
const ctx = this.__rowsCtx.find(x => x.view === view);
ctx.$regionEl.toggleClass(classes.HIDDEN, !visible);
}
});