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.
87 lines (73 loc) • 2.24 kB
JavaScript
/**
* Developer: Stepan Burguchev
* Date: 12/3/2014
* Copyright: 2009-2016 Comindware®
* All Rights Reserved
* Published under the MIT license
*/
import { Handlebars } from 'lib';
import template from '../../reference/templates/referenceButton.hbs';
const classes = {
ARROW_BUTTON: 'input_dropdown'
};
export default Marionette.ItemView.extend({
initialize(options) {
this.reqres = options.reqres;
},
template: Handlebars.compile(template),
templateHelpers() {
const value = this.model.get('value');
return {
hasValue: Boolean(value),
valueUrl: value ? this.options.createValueUrl(value) : false,
text: this.options.getDisplayText(value),
showEditButton: this.options.showEditButton && Boolean(value)
};
},
ui: {
text: '.js-text',
clearButton: '.js-clear-button',
editButton: '.js-edit-button'
},
events: {
'click @ui.clearButton': '__clear',
'click @ui.editButton': '__edit',
click: '__click'
},
__clear() {
this.reqres.request('value:clear');
return false;
},
__edit() {
if (this.reqres.request('value:edit', this.model.get('value'))) {
return false;
}
return null;
},
modelEvents: {
'change:value': 'render',
'change:enabled': 'updateView',
'change:readonly': 'updateView'
},
__click(e) {
if (e.target.tagName === 'A') {
return;
}
this.reqres.request('panel:open');
},
updateView() {
if (this.model.get('enabled') && !this.model.get('readonly')) {
this.$el.addClass(classes.ARROW_BUTTON);
this.ui.clearButton.show();
} else if (this.model.get('readonly')) {
this.$el.removeClass(classes.ARROW_BUTTON);
this.ui.clearButton.hide();
} else if (!this.model.get('enabled')) {
this.$el.addClass(classes.ARROW_BUTTON);
this.ui.clearButton.hide();
}
},
onRender() {
this.updateView();
}
});