Studio support for cohorted courseware
TNL-652
This commit is contained in:
@@ -1,5 +1,23 @@
|
||||
/**
|
||||
* This is a base modal implementation that provides common utilities.
|
||||
*
|
||||
* A modal implementation should override the following methods:
|
||||
*
|
||||
* getTitle():
|
||||
* returns the title for the modal.
|
||||
* getHTMLContent():
|
||||
* returns the HTML content to be shown inside the modal.
|
||||
*
|
||||
* A modal implementation should also provide the following options:
|
||||
*
|
||||
* modalName: A string identifying the modal.
|
||||
* modalType: A string identifying the type of the modal.
|
||||
* modalSize: A string, either 'sm', 'med', or 'lg' indicating the
|
||||
* size of the modal.
|
||||
* viewSpecificClasses: A string of CSS classes to be attached to
|
||||
* the modal window.
|
||||
* addSaveButton: A boolean indicating whether to include a save
|
||||
* button on the modal.
|
||||
*/
|
||||
define(["jquery", "underscore", "gettext", "js/views/baseview"],
|
||||
function($, _, gettext, BaseView) {
|
||||
@@ -41,7 +59,7 @@ define(["jquery", "underscore", "gettext", "js/views/baseview"],
|
||||
name: this.options.modalName,
|
||||
type: this.options.modalType,
|
||||
size: this.options.modalSize,
|
||||
title: this.options.title,
|
||||
title: this.getTitle(),
|
||||
viewSpecificClasses: this.options.viewSpecificClasses
|
||||
}));
|
||||
this.addActionButtons();
|
||||
@@ -49,6 +67,10 @@ define(["jquery", "underscore", "gettext", "js/views/baseview"],
|
||||
this.parentElement.append(this.$el);
|
||||
},
|
||||
|
||||
getTitle: function() {
|
||||
return this.options.title;
|
||||
},
|
||||
|
||||
renderContents: function() {
|
||||
var contentHtml = this.getContentHtml();
|
||||
this.$('.modal-content').html(contentHtml);
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/views/utils/view_utils",
|
||||
"js/models/xblock_info", "js/views/xblock_editor"],
|
||||
function($, _, gettext, BaseModal, ViewUtils, XBlockInfo, XBlockEditorView) {
|
||||
"strict mode";
|
||||
|
||||
var EditXBlockModal = BaseModal.extend({
|
||||
events : {
|
||||
"click .action-save": "save",
|
||||
@@ -15,7 +17,10 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
options: $.extend({}, BaseModal.prototype.options, {
|
||||
modalName: 'edit-xblock',
|
||||
addSaveButton: true,
|
||||
viewSpecificClasses: 'modal-editor confirm'
|
||||
view: 'studio_view',
|
||||
viewSpecificClasses: 'modal-editor confirm',
|
||||
// Translators: "title" is the name of the current component being edited.
|
||||
titleFormat: gettext("Editing: %(title)s")
|
||||
}),
|
||||
|
||||
initialize: function() {
|
||||
@@ -56,7 +61,8 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
displayXBlock: function() {
|
||||
this.editorView = new XBlockEditorView({
|
||||
el: this.$('.xblock-editor'),
|
||||
model: this.xblockInfo
|
||||
model: this.xblockInfo,
|
||||
view: this.options.view
|
||||
});
|
||||
this.editorView.render({
|
||||
success: _.bind(this.onDisplayXBlock, this)
|
||||
@@ -66,7 +72,7 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
onDisplayXBlock: function() {
|
||||
var editorView = this.editorView,
|
||||
title = this.getTitle(),
|
||||
readOnlyView = (this.editOptions && this.editOptions.readOnlyView) || !editorView.xblock.save;
|
||||
readOnlyView = (this.editOptions && this.editOptions.readOnlyView) || !this.canSave();
|
||||
|
||||
// Notify the runtime that the modal has been shown
|
||||
editorView.notifyRuntime('modal-shown', this);
|
||||
@@ -99,6 +105,10 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
this.resize();
|
||||
},
|
||||
|
||||
canSave: function() {
|
||||
return this.editorView.xblock.save || this.editorView.xblock.collectFieldData;
|
||||
},
|
||||
|
||||
disableSave: function() {
|
||||
var saveButton = this.getActionButton('save'),
|
||||
cancelButton = this.getActionButton('cancel');
|
||||
@@ -112,7 +122,7 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
if (!displayName) {
|
||||
displayName = gettext('Component');
|
||||
}
|
||||
return interpolate(gettext("Editing: %(title)s"), { title: displayName }, true);
|
||||
return interpolate(this.options.titleFormat, { title: displayName }, true);
|
||||
},
|
||||
|
||||
addDefaultModes: function() {
|
||||
@@ -147,7 +157,7 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal", "js/vie
|
||||
var self = this,
|
||||
editorView = this.editorView,
|
||||
xblockInfo = this.xblockInfo,
|
||||
data = editorView.getXModuleData();
|
||||
data = editorView.getXBlockFieldData();
|
||||
event.preventDefault();
|
||||
if (data) {
|
||||
ViewUtils.runOperationShowingMessage(gettext('Saving'),
|
||||
|
||||
Reference in New Issue
Block a user