65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
var _ = require('underscore');
|
|
var $ = require('jquery');
|
|
var Backbone = require('backbone');
|
|
var CoreView = require('backbone/core-view');
|
|
|
|
/*
|
|
* Dropdown overlay to disable all interactions between elements
|
|
* beneath the dropdown
|
|
*/
|
|
module.exports = CoreView.extend({
|
|
|
|
className: 'CDB-Box-modalOverlay',
|
|
|
|
events: {
|
|
'click': '_onOverlayClicked'
|
|
},
|
|
|
|
initialize: function (opts) {
|
|
this.container = opts && opts.container;
|
|
this.onClickAction = opts && opts.onClickAction;
|
|
|
|
this.model = new Backbone.Model({
|
|
visible: _.isUndefined(opts && opts.visible) ? false : opts.visible
|
|
});
|
|
|
|
this._initBinds();
|
|
this.render();
|
|
},
|
|
|
|
_initBinds: function () {
|
|
this.listenTo(this.model, 'change:visible', this._onVisibilityChange);
|
|
},
|
|
|
|
render: function () {
|
|
(this.container || $(document.body)).append(this.$el);
|
|
this.$el.toggle(this.isVisible());
|
|
return this;
|
|
},
|
|
|
|
_onOverlayClicked: function () {
|
|
this.onClickAction && this.onClickAction();
|
|
this.hide();
|
|
},
|
|
|
|
show: function () {
|
|
this.model.set('visible', true);
|
|
},
|
|
|
|
hide: function () {
|
|
this.model.set('visible', false);
|
|
},
|
|
|
|
toggle: function () {
|
|
this.model.set('visible', !this.model.get('visible'));
|
|
},
|
|
|
|
isVisible: function () {
|
|
return this.model.get('visible');
|
|
},
|
|
|
|
_onVisibilityChange: function () {
|
|
this.$el.toggle(this.isVisible());
|
|
}
|
|
});
|