Models are extraneous for something as temporary as a notifaction -- this change moves all the configuration into the views, and removes the models entirely.
86 lines
2.7 KiB
JavaScript
86 lines
2.7 KiB
JavaScript
CMS.Views.SectionShow = Backbone.View.extend({
|
|
template: _.template('<span data-tooltip="<%= gettext("Edit this section\'s name") %>" class="section-name-span"><%= name %></span>'),
|
|
render: function() {
|
|
var attrs = {
|
|
name: this.model.escape('name')
|
|
};
|
|
this.$el.html(this.template(attrs));
|
|
this.delegateEvents();
|
|
return this;
|
|
},
|
|
events: {
|
|
"click": "switchToEditView"
|
|
},
|
|
switchToEditView: function() {
|
|
if(!this.editView) {
|
|
this.editView = new CMS.Views.SectionEdit({
|
|
model: this.model, el: this.el, showView: this});
|
|
}
|
|
this.undelegateEvents();
|
|
this.editView.render();
|
|
}
|
|
});
|
|
|
|
CMS.Views.SectionEdit = Backbone.View.extend({
|
|
render: function() {
|
|
var attrs = {
|
|
name: this.model.escape('name')
|
|
};
|
|
this.$el.html(this.template(attrs));
|
|
this.delegateEvents();
|
|
return this;
|
|
},
|
|
initialize: function() {
|
|
this.template = _.template($("#section-name-edit-tpl").text());
|
|
this.listenTo(this.model, "invalid", this.showInvalidMessage);
|
|
this.render();
|
|
},
|
|
events: {
|
|
"click .save-button": "saveName",
|
|
"submit": "saveName",
|
|
"click .cancel-button": "switchToShowView"
|
|
},
|
|
saveName: function(e) {
|
|
if (e) { e.preventDefault(); }
|
|
var name = this.$("input[type=text]").val();
|
|
var that = this;
|
|
this.model.save("name", name, {
|
|
success: function() {
|
|
analytics.track('Edited Section Name', {
|
|
'course': course_location_analytics,
|
|
'display_name': that.model.get('name'),
|
|
'id': that.model.get('id')
|
|
});
|
|
that.switchToShowView();
|
|
}
|
|
});
|
|
},
|
|
switchToShowView: function() {
|
|
if(!this.showView) {
|
|
this.showView = new CMS.Views.SectionShow({
|
|
model: this.model, el: this.el, editView: this});
|
|
}
|
|
this.undelegateEvents();
|
|
this.stopListening();
|
|
this.showView.render();
|
|
},
|
|
showInvalidMessage: function(model, error, options) {
|
|
model.set("name", model.previous("name"));
|
|
var that = this;
|
|
var prompt = new CMS.Views.Prompt.Error({
|
|
title: gettext("Your change could not be saved"),
|
|
message: error,
|
|
actions: {
|
|
primary: {
|
|
text: gettext("Return and resolve this issue"),
|
|
click: function(view) {
|
|
view.hide();
|
|
that.$("input[type=text]").focus();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
prompt.show();
|
|
}
|
|
});
|