Merge pull request #14737 from open-craft/mit-capa-hide-correct
MIT CAPA improvements: Add show_correctness field
This commit is contained in:
@@ -1163,6 +1163,7 @@ def create_xblock_info(xblock, data=None, metadata=None, include_ancestor_info=F
|
||||
'explanatory_message': explanatory_message,
|
||||
'group_access': xblock.group_access,
|
||||
'user_partitions': user_partitions,
|
||||
'show_correctness': xblock.show_correctness,
|
||||
})
|
||||
|
||||
if xblock.category == 'sequential':
|
||||
|
||||
@@ -54,6 +54,7 @@ class CourseMetadata(object):
|
||||
'exam_review_rules',
|
||||
'hide_after_due',
|
||||
'self_paced',
|
||||
'show_correctness',
|
||||
'chrome',
|
||||
'default_tab',
|
||||
]
|
||||
|
||||
@@ -4,12 +4,12 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
function($, AjaxHelpers, ViewUtils, CourseOutlinePage, XBlockOutlineInfo, DateUtils,
|
||||
EditHelpers, TemplateHelpers, Course) {
|
||||
describe('CourseOutlinePage', function() {
|
||||
var createCourseOutlinePage, displayNameInput, model, outlinePage, requests,
|
||||
getItemsOfType, getItemHeaders, verifyItemsExpanded, expandItemsAndVerifyState,
|
||||
collapseItemsAndVerifyState, selectBasicSettings, selectAdvancedSettings, createMockCourseJSON,
|
||||
createMockSectionJSON, createMockSubsectionJSON, verifyTypePublishable, mockCourseJSON,
|
||||
mockEmptyCourseJSON, mockSingleSectionCourseJSON, createMockVerticalJSON, createMockIndexJSON,
|
||||
mockCourseEntranceExamJSON, mockOutlinePage = readFixtures('mock/mock-course-outline-page.underscore'),
|
||||
var createCourseOutlinePage, displayNameInput, model, outlinePage, requests, getItemsOfType, getItemHeaders,
|
||||
verifyItemsExpanded, expandItemsAndVerifyState, collapseItemsAndVerifyState, selectBasicSettings,
|
||||
selectVisibilitySettings, selectAdvancedSettings, createMockCourseJSON, createMockSectionJSON,
|
||||
createMockSubsectionJSON, verifyTypePublishable, mockCourseJSON, mockEmptyCourseJSON,
|
||||
mockSingleSectionCourseJSON, createMockVerticalJSON, createMockIndexJSON, mockCourseEntranceExamJSON,
|
||||
mockOutlinePage = readFixtures('mock/mock-course-outline-page.underscore'),
|
||||
mockRerunNotification = readFixtures('mock/mock-course-rerun-notification.underscore');
|
||||
|
||||
createMockCourseJSON = function(options, children) {
|
||||
@@ -71,6 +71,7 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
prereqs: [],
|
||||
prereq: '',
|
||||
prereq_min_score: '',
|
||||
show_correctness: 'always',
|
||||
child_info: {
|
||||
category: 'vertical',
|
||||
display_name: 'Unit',
|
||||
@@ -140,6 +141,10 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
this.$(".modal-section .settings-tab-button[data-tab='basic']").click();
|
||||
};
|
||||
|
||||
selectVisibilitySettings = function() {
|
||||
this.$(".modal-section .settings-tab-button[data-tab='visibility']").click();
|
||||
};
|
||||
|
||||
selectAdvancedSettings = function() {
|
||||
this.$(".modal-section .settings-tab-button[data-tab='advanced']").click();
|
||||
};
|
||||
@@ -238,7 +243,7 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
'basic-modal', 'course-outline-modal', 'release-date-editor',
|
||||
'due-date-editor', 'grading-editor', 'publish-editor',
|
||||
'staff-lock-editor', 'content-visibility-editor', 'settings-modal-tabs',
|
||||
'timed-examination-preference-editor', 'access-editor'
|
||||
'timed-examination-preference-editor', 'access-editor', 'show-correctness-editor'
|
||||
]);
|
||||
appendSetFixtures(mockOutlinePage);
|
||||
mockCourseJSON = createMockCourseJSON({}, [
|
||||
@@ -604,8 +609,8 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
expect($('due_date')).not.toExist();
|
||||
expect($('grading_format')).not.toExist();
|
||||
|
||||
// Staff lock controls are always visible on the advanced tab
|
||||
selectAdvancedSettings();
|
||||
// Staff lock controls are always visible on the visibility tab
|
||||
selectVisibilitySettings();
|
||||
expect($('#staff_lock')).toExist();
|
||||
selectBasicSettings();
|
||||
$('.wrapper-modal-window .action-save').click();
|
||||
@@ -678,7 +683,8 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
describe('Subsection', function() {
|
||||
var getDisplayNameWrapper, setEditModalValues, setContentVisibility, mockServerValuesJson,
|
||||
selectDisableSpecialExams, selectTimedExam, selectProctoredExam, selectPracticeExam,
|
||||
selectPrerequisite, selectLastPrerequisiteSubsection, checkOptionFieldVisibility;
|
||||
selectPrerequisite, selectLastPrerequisiteSubsection, checkOptionFieldVisibility,
|
||||
defaultModalSettings, getMockNoPrereqOrExamsCourseJSON, expectShowCorrectness;
|
||||
|
||||
getDisplayNameWrapper = function() {
|
||||
return getItemHeaders('subsection').find('.wrapper-xblock-field');
|
||||
@@ -732,6 +738,38 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
expect($('.field-exam-review-rules').is(':visible')).toBe(review_rules);
|
||||
};
|
||||
|
||||
expectShowCorrectness = function(showCorrectness) {
|
||||
expect($('input[name=show-correctness][value=' + showCorrectness + ']').is(':checked')).toBe(true);
|
||||
};
|
||||
|
||||
getMockNoPrereqOrExamsCourseJSON = function() {
|
||||
var mockVerticalJSON = createMockVerticalJSON({}, []);
|
||||
var mockSubsectionJSON = createMockSubsectionJSON({}, [mockVerticalJSON]);
|
||||
delete mockSubsectionJSON.is_prereq;
|
||||
delete mockSubsectionJSON.prereqs;
|
||||
delete mockSubsectionJSON.prereq;
|
||||
delete mockSubsectionJSON.prereq_min_score;
|
||||
return createMockCourseJSON({
|
||||
enable_proctored_exams: false,
|
||||
enable_timed_exams: false
|
||||
}, [
|
||||
createMockSectionJSON({}, [mockSubsectionJSON])
|
||||
]);
|
||||
};
|
||||
|
||||
defaultModalSettings = {
|
||||
graderType: 'notgraded',
|
||||
isPrereq: false,
|
||||
metadata: {
|
||||
due: null,
|
||||
is_practice_exam: false,
|
||||
is_time_limited: false,
|
||||
exam_review_rules: '',
|
||||
is_proctored_enabled: false,
|
||||
default_time_limit_minutes: null
|
||||
}
|
||||
};
|
||||
|
||||
// Contains hard-coded dates because dates are presented in different formats.
|
||||
mockServerValuesJson = createMockSectionJSON({
|
||||
release_date: 'Jan 01, 2970 at 05:00 UTC'
|
||||
@@ -746,6 +784,7 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
has_explicit_staff_lock: true,
|
||||
staff_only_message: true,
|
||||
is_prereq: false,
|
||||
show_correctness: 'never',
|
||||
'is_time_limited': true,
|
||||
'is_practice_exam': false,
|
||||
'is_proctored_exam': false,
|
||||
@@ -821,36 +860,45 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
expandItemsAndVerifyState('subsection');
|
||||
});
|
||||
|
||||
it('can show basic settings', function() {
|
||||
it('subsection can show basic settings', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
selectBasicSettings();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="basic"]')).toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="visibility"]')).not.toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).not.toHaveClass('active');
|
||||
});
|
||||
|
||||
it('can show advanced settings', function() {
|
||||
it('subsection can show visibility settings', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
selectVisibilitySettings();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="basic"]')).not.toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="visibility"]')).toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).not.toHaveClass('active');
|
||||
});
|
||||
|
||||
it('subsection can show advanced settings', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
selectAdvancedSettings();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="basic"]')).not.toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="visibility"]')).not.toHaveClass('active');
|
||||
expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).toHaveClass('active');
|
||||
});
|
||||
|
||||
it('does not show settings tab headers if there is only one tab to show', function() {
|
||||
var mockVerticalJSON = createMockVerticalJSON({}, []);
|
||||
var mockSubsectionJSON = createMockSubsectionJSON({}, [mockVerticalJSON]);
|
||||
delete mockSubsectionJSON.is_prereq;
|
||||
delete mockSubsectionJSON.prereqs;
|
||||
delete mockSubsectionJSON.prereq;
|
||||
delete mockSubsectionJSON.prereq_min_score;
|
||||
var mockCourseJSON = createMockCourseJSON({
|
||||
enable_proctored_exams: false,
|
||||
enable_timed_exams: false
|
||||
}, [
|
||||
createMockSectionJSON({}, [mockSubsectionJSON])
|
||||
]);
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
it('subsection does not show advanced settings tab if no special exams or prerequisites', function() {
|
||||
var mockNoPrereqCourseJSON = getMockNoPrereqOrExamsCourseJSON();
|
||||
createCourseOutlinePage(this, mockNoPrereqCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="basic"]')).toExist();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="visibility"]')).toExist();
|
||||
expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).not.toExist();
|
||||
});
|
||||
|
||||
it('unit does not show settings tab headers if there is only one tab to show', function() {
|
||||
var mockNoPrereqCourseJSON = getMockNoPrereqOrExamsCourseJSON();
|
||||
createCourseOutlinePage(this, mockNoPrereqCourseJSON, false);
|
||||
outlinePage.$('.outline-unit .configure-button').click();
|
||||
expect($('.settings-tabs-header').length).toBe(0);
|
||||
});
|
||||
@@ -869,6 +917,7 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
expect($('.grading-due-date').length).toBe(0);
|
||||
expect($('.edit-settings-grading').length).toBe(1);
|
||||
expect($('.edit-content-visibility').length).toBe(1);
|
||||
expect($('.edit-show-correctness').length).toBe(1);
|
||||
});
|
||||
|
||||
it('can select valid time', function() {
|
||||
@@ -894,6 +943,14 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
}
|
||||
});
|
||||
|
||||
it('can be saved', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
$('.wrapper-modal-window .action-save').click();
|
||||
AjaxHelpers.expectJsonRequest(requests, 'POST', '/xblock/mock-subsection', defaultModalSettings);
|
||||
expect(requests[0].requestHeaders['X-HTTP-Method-Override']).toBe('PATCH');
|
||||
});
|
||||
|
||||
it('can be edited', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
@@ -948,15 +1005,17 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
expect($('input.no_special_exam').is(':checked')).toBe(false);
|
||||
expect($('input.practice_exam').is(':checked')).toBe(false);
|
||||
expect($('.field-time-limit input').val()).toBe('02:30');
|
||||
expectShowCorrectness('never');
|
||||
});
|
||||
|
||||
it('can hide time limit and hide after due fields when the None radio box is selected', function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
setEditModalValues('7/9/2014', '7/10/2014', 'Lab');
|
||||
selectVisibilitySettings();
|
||||
setContentVisibility('staff_only');
|
||||
selectAdvancedSettings();
|
||||
selectDisableSpecialExams();
|
||||
setContentVisibility('staff_only');
|
||||
|
||||
// all additional options should be hidden
|
||||
expect($('.exam-options').is(':hidden')).toBe(true);
|
||||
@@ -966,9 +1025,10 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
setEditModalValues('7/9/2014', '7/10/2014', 'Lab');
|
||||
selectVisibilitySettings();
|
||||
setContentVisibility('staff_only');
|
||||
selectAdvancedSettings();
|
||||
selectPracticeExam('00:30');
|
||||
setContentVisibility('staff_only');
|
||||
|
||||
// time limit should be visible, review rules should be hidden
|
||||
checkOptionFieldVisibility(true, false);
|
||||
@@ -993,9 +1053,10 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
setEditModalValues('7/9/2014', '7/10/2014', 'Lab');
|
||||
selectVisibilitySettings();
|
||||
setContentVisibility('staff_only');
|
||||
selectAdvancedSettings();
|
||||
selectProctoredExam('00:30');
|
||||
setContentVisibility('staff_only');
|
||||
|
||||
// time limit and review rules should be visible
|
||||
checkOptionFieldVisibility(true, true);
|
||||
@@ -1007,9 +1068,10 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
setEditModalValues('7/9/2014', '7/10/2014', 'Lab');
|
||||
selectVisibilitySettings();
|
||||
setContentVisibility('staff_only');
|
||||
selectAdvancedSettings();
|
||||
selectProctoredExam('abcd');
|
||||
setContentVisibility('staff_only');
|
||||
|
||||
// time limit field should be visible and have the correct value
|
||||
expect($('.field-time-limit').is(':visible')).toBe(true);
|
||||
@@ -1414,6 +1476,57 @@ define(['jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/j
|
||||
);
|
||||
});
|
||||
|
||||
describe('Show correctness setting set as expected.', function() {
|
||||
var setShowCorrectness;
|
||||
|
||||
setShowCorrectness = function(showCorrectness) {
|
||||
$('input[name=show-correctness][value=' + showCorrectness + ']').click();
|
||||
};
|
||||
|
||||
describe('Show correctness set by subsection metadata.', function() {
|
||||
$.each(['always', 'never', 'past_due'], function(index, showCorrectness) {
|
||||
it('show_correctness="' + showCorrectness + '"', function() {
|
||||
var mockCourseJSONCorrectness = createMockCourseJSON({}, [
|
||||
createMockSectionJSON({}, [
|
||||
createMockSubsectionJSON({show_correctness: showCorrectness}, [])
|
||||
])
|
||||
]);
|
||||
createCourseOutlinePage(this, mockCourseJSONCorrectness, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
selectVisibilitySettings();
|
||||
expectShowCorrectness(showCorrectness);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Show correctness editor works as expected.', function() {
|
||||
beforeEach(function() {
|
||||
createCourseOutlinePage(this, mockCourseJSON, false);
|
||||
outlinePage.$('.outline-subsection .configure-button').click();
|
||||
selectVisibilitySettings();
|
||||
});
|
||||
|
||||
it('show_correctness="always" (default, unchanged metadata)', function() {
|
||||
setShowCorrectness('always');
|
||||
$('.wrapper-modal-window .action-save').click();
|
||||
AjaxHelpers.expectJsonRequest(requests, 'POST', '/xblock/mock-subsection',
|
||||
defaultModalSettings);
|
||||
});
|
||||
|
||||
$.each(['never', 'past_due'], function(index, showCorrectness) {
|
||||
it('show_correctness="' + showCorrectness + '" updates settings, republishes', function() {
|
||||
var expectedSettings = $.extend(true, {}, defaultModalSettings, {publish: 'republish'});
|
||||
expectedSettings.metadata.show_correctness = showCorrectness;
|
||||
|
||||
setShowCorrectness(showCorrectness);
|
||||
$('.wrapper-modal-window .action-save').click();
|
||||
AjaxHelpers.expectJsonRequest(requests, 'POST', '/xblock/mock-subsection',
|
||||
expectedSettings);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
verifyTypePublishable('subsection', function(options) {
|
||||
return createMockCourseJSON({}, [
|
||||
createMockSectionJSON({}, [
|
||||
|
||||
@@ -15,7 +15,7 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview',
|
||||
'use strict';
|
||||
var CourseOutlineXBlockModal, SettingsXBlockModal, PublishXBlockModal, AbstractEditor, BaseDateEditor,
|
||||
ReleaseDateEditor, DueDateEditor, GradingEditor, PublishEditor, AbstractVisibilityEditor, StaffLockEditor,
|
||||
ContentVisibilityEditor, TimedExaminationPreferenceEditor, AccessEditor;
|
||||
ContentVisibilityEditor, TimedExaminationPreferenceEditor, AccessEditor, ShowCorrectnessEditor;
|
||||
|
||||
CourseOutlineXBlockModal = BaseModal.extend({
|
||||
events: _.extend({}, BaseModal.prototype.events, {
|
||||
@@ -714,7 +714,51 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview',
|
||||
AbstractVisibilityEditor.prototype.getContext.call(this),
|
||||
{
|
||||
hide_after_due: this.modelVisibility() === 'hide_after_due',
|
||||
self_paced: this.model.get('self_paced') === true
|
||||
self_paced: course.get('self_paced') === true
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
ShowCorrectnessEditor = AbstractEditor.extend({
|
||||
templateName: 'show-correctness-editor',
|
||||
className: 'edit-show-correctness',
|
||||
|
||||
afterRender: function() {
|
||||
AbstractEditor.prototype.afterRender.call(this);
|
||||
this.setValue(this.model.get('show_correctness') || 'always');
|
||||
},
|
||||
|
||||
setValue: function(value) {
|
||||
this.$('input[name=show-correctness][value=' + value + ']').prop('checked', true);
|
||||
},
|
||||
|
||||
currentValue: function() {
|
||||
return this.$('input[name=show-correctness]:checked').val();
|
||||
},
|
||||
|
||||
hasChanges: function() {
|
||||
return this.model.get('show_correctness') !== this.currentValue();
|
||||
},
|
||||
|
||||
getRequestData: function() {
|
||||
if (this.hasChanges()) {
|
||||
return {
|
||||
publish: 'republish',
|
||||
metadata: {
|
||||
show_correctness: this.currentValue()
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
getContext: function() {
|
||||
return $.extend(
|
||||
{},
|
||||
AbstractEditor.prototype.getContext.call(this),
|
||||
{
|
||||
self_paced: course.get('self_paced') === true
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -732,6 +776,11 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview',
|
||||
getEditModal: function(xblockInfo, options) {
|
||||
var tabs = [];
|
||||
var editors = [];
|
||||
var advancedTab = {
|
||||
name: 'advanced',
|
||||
displayName: gettext('Advanced'),
|
||||
editors: []
|
||||
};
|
||||
if (xblockInfo.isVertical()) {
|
||||
editors = [StaffLockEditor];
|
||||
} else {
|
||||
@@ -742,8 +791,8 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview',
|
||||
editors: []
|
||||
},
|
||||
{
|
||||
name: 'advanced',
|
||||
displayName: gettext('Advanced'),
|
||||
name: 'visibility',
|
||||
displayName: gettext('Visibility'),
|
||||
editors: []
|
||||
}
|
||||
];
|
||||
@@ -752,14 +801,19 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview',
|
||||
tabs[1].editors = [StaffLockEditor];
|
||||
} else if (xblockInfo.isSequential()) {
|
||||
tabs[0].editors = [ReleaseDateEditor, GradingEditor, DueDateEditor];
|
||||
tabs[1].editors = [ContentVisibilityEditor];
|
||||
tabs[1].editors = [ContentVisibilityEditor, ShowCorrectnessEditor];
|
||||
|
||||
if (options.enable_proctored_exams || options.enable_timed_exams) {
|
||||
tabs[1].editors.push(TimedExaminationPreferenceEditor);
|
||||
advancedTab.editors.push(TimedExaminationPreferenceEditor);
|
||||
}
|
||||
|
||||
if (typeof(xblockInfo.get('is_prereq')) !== 'undefined') {
|
||||
tabs[1].editors.push(AccessEditor);
|
||||
advancedTab.editors.push(AccessEditor);
|
||||
}
|
||||
|
||||
// Show the Advanced tab iff it has editors to display
|
||||
if (advancedTab.editors.length > 0) {
|
||||
tabs.push(advancedTab);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -585,8 +585,11 @@
|
||||
}
|
||||
.list-fields {
|
||||
.field-message {
|
||||
@extend %t-copy-sub2;
|
||||
color: $gray-d1;
|
||||
font-size: ($baseline/2);
|
||||
}
|
||||
label {
|
||||
@extend %t-title7;
|
||||
}
|
||||
.field {
|
||||
display: inline-block;
|
||||
@@ -595,7 +598,6 @@
|
||||
margin-bottom: ($baseline/4);
|
||||
|
||||
label {
|
||||
@extend %t-copy-sub1;
|
||||
@extend %t-strong;
|
||||
@include transition(color $tmg-f3 ease-in-out 0s);
|
||||
margin: 0 0 ($baseline/4) 0;
|
||||
|
||||
@@ -26,7 +26,7 @@ from openedx.core.djangolib.markup import HTML, Text
|
||||
|
||||
<%block name="header_extras">
|
||||
<link rel="stylesheet" type="text/css" href="${static.url('js/vendor/timepicker/jquery.timepicker.css')}" />
|
||||
% for template_name in ['course-outline', 'xblock-string-field-editor', 'basic-modal', 'modal-button', 'course-outline-modal', 'due-date-editor', 'release-date-editor', 'grading-editor', 'publish-editor', 'staff-lock-editor', 'content-visibility-editor', 'verification-access-editor', 'timed-examination-preference-editor', 'access-editor', 'settings-modal-tabs']:
|
||||
% for template_name in ['course-outline', 'xblock-string-field-editor', 'basic-modal', 'modal-button', 'course-outline-modal', 'due-date-editor', 'release-date-editor', 'grading-editor', 'publish-editor', 'staff-lock-editor', 'content-visibility-editor', 'verification-access-editor', 'timed-examination-preference-editor', 'access-editor', 'settings-modal-tabs', 'show-correctness-editor']:
|
||||
<script type="text/template" id="${template_name}-tpl">
|
||||
<%static:include path="js/${template_name}.underscore" />
|
||||
</script>
|
||||
|
||||
34
cms/templates/js/show-correctness-editor.underscore
Normal file
34
cms/templates/js/show-correctness-editor.underscore
Normal file
@@ -0,0 +1,34 @@
|
||||
<form>
|
||||
<h3 class="modal-section-title" id="show_correctness_label"><%- gettext('Assessment Results Visibility') %></h3>
|
||||
<div class="modal-section-content show-correctness">
|
||||
<div role="group" class="list-fields" aria-labelledby="show_correctness_label">
|
||||
<label class="label">
|
||||
<input class="input input-radio" name="show-correctness" type="radio" value="always" aria-describedby="always_show_correctness_description" />
|
||||
<%- gettext('Always show assessment results') %>
|
||||
</label>
|
||||
<p class='field-message' id='always_show_correctness_description'>
|
||||
<%- gettext('When learners submit an answer to an assessment, they immediately see whether the answer is correct or incorrect, and the score received.') %>
|
||||
</p>
|
||||
<label class="label">
|
||||
<input class="input input-radio" name="show-correctness" type="radio" value="never" aria-describedby="never_show_correctness_description" />
|
||||
<%- gettext('Never show assessment results') %>
|
||||
</label>
|
||||
<p class='field-message' id='never_show_correctness_description'>
|
||||
<%- gettext('Learners never see whether their answers to assessments are correct or incorrect, nor the score received.') %>
|
||||
</p>
|
||||
<label class="label">
|
||||
<input class="input input-radio" name="show-correctness" type="radio" value="past_due" aria-describedby="show_correctness_past_due_description" />
|
||||
<%- gettext('Show assessment results when subsection is past due') %>
|
||||
</label>
|
||||
<p class='field-message' id='show_correctness_past_due_description'>
|
||||
<% if (self_paced) { %>
|
||||
<%- gettext('Learners do not see whether their answers to assessments were correct or incorrect, nor the score received, until after the course end date has passed.') %>
|
||||
<%- gettext('If the course does not have an end date, learners always see their scores when they submit answers to assessments.') %>
|
||||
<% } else { %>
|
||||
<%- gettext('Learners do not see whether their answers to assessments were correct or incorrect, nor the score received, until after the due date for the subsection has passed.') %>
|
||||
<%- gettext('If the subsection does not have a due date, learners always see their scores when they submit answers to assessments.') %>
|
||||
<% } %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
Reference in New Issue
Block a user