Files
edx-platform/cms/static/js/views/feedback.js
David Baumgold cd2f67afa4 Clone the attributes object
So that modifications don't affect the model
2013-05-22 15:55:49 -04:00

64 lines
1.9 KiB
JavaScript

CMS.Views.SystemFeedback = Backbone.View.extend({
initialize: function() {
this.setElement($("#page-"+this.type));
this.listenTo(this.model, 'change', this.render);
return this.render();
},
template: _.template($("#system-feedback-tpl").text()),
render: function() {
var attrs = $.extend({}, this.model.attributes);
if(attrs.type) {
attrs.modelType = attrs.type;
delete attrs.type;
}
attrs.viewType = this.type;
this.$el.html(this.template(attrs));
return this;
},
events: {
"click .action-close": "hide",
"click .action-primary": "primaryClick",
"click .action-secondary": "secondaryClick"
},
hide: function() {
this.model.hide();
},
primaryClick: function() {
var primary = this.model.get("actions").primary;
if(primary.click) {
primary.click(this.model);
}
},
secondaryClick: function(e) {
var secondaryList = this.model.get("actions").secondary;
if(!secondaryList) {
return;
}
// which secondary action was clicked?
var i = _.indexOf(this.$(".action-secondary"), e.target);
var secondary = this.model.get("actions").secondary[i];
if(secondary.click) {
secondary.click(this.model);
}
}
});
CMS.Views.Alert = CMS.Views.SystemFeedback.extend({
type: "alert"
});
CMS.Views.Notification = CMS.Views.SystemFeedback.extend({
type: "notification"
});
CMS.Views.Prompt = CMS.Views.SystemFeedback.extend({
type: "prompt",
render: function() {
if(this.model.get('shown')) {
$body.addClass('prompt-is-shown');
} else {
$body.removeClass('prompt-is-shown');
}
// super() in Javascript has awkward syntax :(
return CMS.Views.SystemFeedback.prototype.render.apply(this, arguments);
}
});