132 lines
3.7 KiB
JavaScript
132 lines
3.7 KiB
JavaScript
var $, $1, Dialog, DialogView, Widget, _, dialog_template, p,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
_ = require("underscore");
|
|
|
|
$ = require("jquery");
|
|
|
|
$1 = require("bootstrap/modal");
|
|
|
|
p = require("../../core/properties");
|
|
|
|
dialog_template = require("./dialog_template");
|
|
|
|
Widget = require("./widget");
|
|
|
|
DialogView = (function(superClass) {
|
|
extend(DialogView, superClass);
|
|
|
|
function DialogView() {
|
|
this.change_content = bind(this.change_content, this);
|
|
this.change_visibility = bind(this.change_visibility, this);
|
|
this.onHide = bind(this.onHide, this);
|
|
return DialogView.__super__.constructor.apply(this, arguments);
|
|
}
|
|
|
|
DialogView.prototype.initialize = function(options) {
|
|
DialogView.__super__.initialize.call(this, options);
|
|
this.render();
|
|
this.render_content();
|
|
this.render_buttons();
|
|
this.listenTo(this.model, 'destroy', this.remove);
|
|
this.listenTo(this.model, 'change:visible', this.change_visibility);
|
|
return this.listenTo(this.model, 'change:content', this.change_content);
|
|
};
|
|
|
|
DialogView.prototype.render_content = function() {
|
|
var content;
|
|
if (this.content_view != null) {
|
|
this.content_view.remove();
|
|
}
|
|
content = this.mget('content');
|
|
if (content != null) {
|
|
if (typeof content === 'object') {
|
|
this.content_view = new content.default_view({
|
|
model: content
|
|
});
|
|
this.$el.find('.bk-dialog-content').empty();
|
|
this.$el.find('.bk-dialog-content').append(this.content_view.$el);
|
|
} else {
|
|
this.$el.find('.bk-dialog-content').empty();
|
|
this.$el.find('.bk-dialog-content').text(content);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
DialogView.prototype.render_buttons = function() {
|
|
var buttons_box;
|
|
if (this.buttons_box_view != null) {
|
|
this.buttons_box_view.remove();
|
|
}
|
|
buttons_box = this.mget('buttons_box');
|
|
if (buttons_box != null) {
|
|
this.buttons_box_view = new buttons_box.default_view({
|
|
model: buttons_box
|
|
});
|
|
this.$el.find('.bk-dialog-buttons_box').empty();
|
|
this.$el.find('.bk-dialog-buttons_box').append(this.buttons_box_view.$el);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
DialogView.prototype.render = function() {
|
|
DialogView.__super__.render.call(this);
|
|
this.$modal = $(dialog_template(this.model.attributes));
|
|
this.$modal.modal({
|
|
show: this.mget("visible")
|
|
});
|
|
this.$modal.on('hidden.bk-bs.modal', this.onHide);
|
|
this.$el.html(this.$modal);
|
|
return this;
|
|
};
|
|
|
|
DialogView.prototype.onHide = function(event) {
|
|
return this.mset("visible", false, {
|
|
silent: true
|
|
});
|
|
};
|
|
|
|
DialogView.prototype.change_visibility = function() {
|
|
return this.$modal.modal(this.mget("visible") ? "show" : "hide");
|
|
};
|
|
|
|
DialogView.prototype.change_content = function() {
|
|
return this.render_content();
|
|
};
|
|
|
|
return DialogView;
|
|
|
|
})(Widget.View);
|
|
|
|
Dialog = (function(superClass) {
|
|
extend(Dialog, superClass);
|
|
|
|
function Dialog() {
|
|
return Dialog.__super__.constructor.apply(this, arguments);
|
|
}
|
|
|
|
Dialog.prototype.type = "Dialog";
|
|
|
|
Dialog.prototype.default_view = DialogView;
|
|
|
|
Dialog.define({
|
|
visible: [p.Bool, false],
|
|
closable: [p.Bool, true],
|
|
title: [p.String, ""],
|
|
content: [p.String, ""],
|
|
buttons: [p.Array, []],
|
|
buttons_box: [p.Instance]
|
|
});
|
|
|
|
return Dialog;
|
|
|
|
})(Widget.Model);
|
|
|
|
module.exports = {
|
|
Model: Dialog,
|
|
View: DialogView
|
|
};
|