Commit b98c8911 by Peter Fogg

Course pacing template changes.

Instructor-led is changed to instructor-paced. Adds a label to the
course outline page to show the course pacing.

ECOM-2794
ECOM-2800
parent 59af66c6
...@@ -101,17 +101,17 @@ var DetailsView = ValidatingView.extend({ ...@@ -101,17 +101,17 @@ var DetailsView = ValidatingView.extend({
this.$('#' + this.fieldToSelectorMap['entrance_exam_minimum_score_pct']).val(this.model.get('entrance_exam_minimum_score_pct')); this.$('#' + this.fieldToSelectorMap['entrance_exam_minimum_score_pct']).val(this.model.get('entrance_exam_minimum_score_pct'));
var selfPacedButton = this.$('#course-pace-self-paced'), var selfPacedButton = this.$('#course-pace-self-paced'),
instructorLedButton = this.$('#course-pace-instructor-led'), instructorPacedButton = this.$('#course-pace-instructor-paced'),
paceToggleTip = this.$('#course-pace-toggle-tip'); paceToggleTip = this.$('#course-pace-toggle-tip');
(this.model.get('self_paced') ? selfPacedButton : instructorLedButton).attr('checked', true); (this.model.get('self_paced') ? selfPacedButton : instructorPacedButton).attr('checked', true);
if (this.model.canTogglePace()) { if (this.model.canTogglePace()) {
selfPacedButton.removeAttr('disabled'); selfPacedButton.removeAttr('disabled');
instructorLedButton.removeAttr('disabled'); instructorPacedButton.removeAttr('disabled');
paceToggleTip.text(''); paceToggleTip.text('');
} }
else { else {
selfPacedButton.attr('disabled', true); selfPacedButton.attr('disabled', true);
instructorLedButton.attr('disabled', true); instructorPacedButton.attr('disabled', true);
paceToggleTip.text(gettext('Course pacing cannot be changed once a course has started.')); paceToggleTip.text(gettext('Course pacing cannot be changed once a course has started.'));
} }
...@@ -254,7 +254,7 @@ var DetailsView = ValidatingView.extend({ ...@@ -254,7 +254,7 @@ var DetailsView = ValidatingView.extend({
break; break;
case 'course-pace-self-paced': case 'course-pace-self-paced':
// Fallthrough to handle both radio buttons // Fallthrough to handle both radio buttons
case 'course-pace-instructor-led': case 'course-pace-instructor-paced':
this.model.set('self_paced', JSON.parse(event.currentTarget.value)); this.model.set('self_paced', JSON.parse(event.currentTarget.value));
break; break;
default: // Everything else is handled by datepickers and CodeMirror. default: // Everything else is handled by datepickers and CodeMirror.
......
...@@ -178,25 +178,37 @@ ...@@ -178,25 +178,37 @@
.course-status { .course-status {
margin-bottom: $baseline; margin-bottom: $baseline;
.status-release { .status-release,
.status-pacing {
@extend %t-copy-base; @extend %t-copy-base;
display: inline-block; display: inline-block;
color: $color-copy-base; color: $color-copy-base;
// STATE: hover
&:hover {
.status-actions {
opacity: 1.0;
}
}
} }
.status-release-label, .status-release-label,
.status-release-value, .status-release-value,
.status-pacing-label,
.status-pacing-value,
.status-actions { .status-actions {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
margin-bottom: 0; margin-bottom: 0;
} }
.status-release-label { .status-release-label,
.status-pacing-label {
margin-right: ($baseline/4); margin-right: ($baseline/4);
} }
.status-release-value { .status-release-value,
.status-pacing-value {
@extend %t-strong; @extend %t-strong;
} }
...@@ -206,14 +218,6 @@ ...@@ -206,14 +218,6 @@
margin-left: ($baseline/4); margin-left: ($baseline/4);
opacity: 0.0; opacity: 0.0;
} }
// STATE: hover
&:hover {
.status-actions {
opacity: 1.0;
}
}
} }
// outline // outline
......
...@@ -1044,7 +1044,7 @@ ...@@ -1044,7 +1044,7 @@
.group-settings.pacing { .group-settings.pacing {
.list-input { .list-input {
margin-top: $baseline/2; margin-top: $baseline/2;
background-color: $gray-l4; background-color: $gray-l6;
border-radius: 3px; border-radius: 3px;
padding: ($baseline/2); padding: ($baseline/2);
} }
......
...@@ -7,6 +7,7 @@ from util.date_utils import get_default_time_display ...@@ -7,6 +7,7 @@ from util.date_utils import get_default_time_display
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from contentstore.utils import reverse_usage_url from contentstore.utils import reverse_usage_url
from microsite_configuration import microsite from microsite_configuration import microsite
from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration
%> %>
<%block name="title">${_("Course Outline")}</%block> <%block name="title">${_("Course Outline")}</%block>
<%block name="bodyclass">is-signedin course view-outline</%block> <%block name="bodyclass">is-signedin course view-outline</%block>
...@@ -161,6 +162,16 @@ from microsite_configuration import microsite ...@@ -161,6 +162,16 @@ from microsite_configuration import microsite
</li> </li>
</ul> </ul>
</div> </div>
% if SelfPacedConfiguration.current().enabled:
<div class="status-pacing">
<h2 class=status-pacing-label>${_("Course Pacing:")}</h2>
% if context_course.self_paced:
<p class="status-pacing-value">${_("Self-Paced")}</p>
% else:
<p class="status-pacing-value">${_("Instructor-Paced")}</p>
% endif
</div>
% endif
</div> </div>
<div class="wrapper-dnd"> <div class="wrapper-dnd">
......
...@@ -425,9 +425,9 @@ CMS.URL.UPLOAD_ASSET = '${upload_asset_url}'; ...@@ -425,9 +425,9 @@ CMS.URL.UPLOAD_ASSET = '${upload_asset_url}';
<ol class="list-input"> <ol class="list-input">
<li class="field"> <li class="field">
<input type="radio" class="field-radio" name="self-paced" id="course-pace-instructor-led" value="false"/> <input type="radio" class="field-radio" name="self-paced" id="course-pace-instructor-paced" value="false"/>
<label class="course-pace-label" for="course-pace-instructor-led">Instructor-Led</label> <label class="course-pace-label" for="course-pace-instructor-paced">Instructor-Paced</label>
<span class="tip">${_("Instructor-led courses progress at the pace that the course author sets. You can configure release dates for course content and due dates for assignments.")}</span> <span class="tip">${_("Instructor-paced courses progress at the pace that the course author sets. You can configure release dates for course content and due dates for assignments.")}</span>
</li> </li>
<li class="field"> <li class="field">
<input type="radio" class="field-radio" name="self-paced" id="course-pace-self-paced" value="true"/> <input type="radio" class="field-radio" name="self-paced" id="course-pace-self-paced" value="true"/>
......
...@@ -151,7 +151,7 @@ class SettingsPage(CoursePage): ...@@ -151,7 +151,7 @@ class SettingsPage(CoursePage):
@course_pacing.setter @course_pacing.setter
def course_pacing(self, pacing): def course_pacing(self, pacing):
""" """
Sets the course to either self-paced or instructor-led by checking Sets the course to either self-paced or instructor-paced by checking
the appropriate radio button. the appropriate radio button.
""" """
self.wait_for_element_presence(self.checked_pacing_css, 'course pacing controls present') self.wait_for_element_presence(self.checked_pacing_css, 'course pacing controls present')
......
...@@ -209,11 +209,11 @@ class CoursePacingTest(StudioSettingsDetailsTest): ...@@ -209,11 +209,11 @@ class CoursePacingTest(StudioSettingsDetailsTest):
# Set the course start date to tomorrow in order to allow setting pacing # Set the course start date to tomorrow in order to allow setting pacing
self.course_fixture.add_course_details({'start_date': datetime.now() + timedelta(days=1)}) self.course_fixture.add_course_details({'start_date': datetime.now() + timedelta(days=1)})
def test_default_instructor_led(self): def test_default_instructor_paced(self):
""" """
Test that the 'instructor led' button is checked by default. Test that the 'instructor paced' button is checked by default.
""" """
self.assertEqual(self.settings_detail.course_pacing, 'Instructor-Led') self.assertEqual(self.settings_detail.course_pacing, 'Instructor-Paced')
def test_self_paced(self): def test_self_paced(self):
""" """
......
...@@ -126,7 +126,7 @@ class SelfPacedCourseInfoTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest ...@@ -126,7 +126,7 @@ class SelfPacedCourseInfoTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest
def setUp(self): def setUp(self):
super(SelfPacedCourseInfoTestCase, self).setUp() super(SelfPacedCourseInfoTestCase, self).setUp()
self.instructor_led_course = CourseFactory.create(self_paced=False) self.instructor_paced_course = CourseFactory.create(self_paced=False)
self.self_paced_course = CourseFactory.create(self_paced=True) self.self_paced_course = CourseFactory.create(self_paced=True)
self.setup_user() self.setup_user()
...@@ -141,8 +141,8 @@ class SelfPacedCourseInfoTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest ...@@ -141,8 +141,8 @@ class SelfPacedCourseInfoTestCase(LoginEnrollmentTestCase, SharedModuleStoreTest
resp = self.client.get(url) resp = self.client.get(url)
self.assertEqual(resp.status_code, 200) self.assertEqual(resp.status_code, 200)
def test_num_queries_instructor_led(self): def test_num_queries_instructor_paced(self):
self.fetch_course_info_with_queries(self.instructor_led_course, 14, 4) self.fetch_course_info_with_queries(self.instructor_paced_course, 14, 4)
def test_num_queries_self_paced(self): def test_num_queries_self_paced(self):
self.fetch_course_info_with_queries(self.self_paced_course, 14, 4) self.fetch_course_info_with_queries(self.self_paced_course, 14, 4)
...@@ -42,9 +42,9 @@ class SelfPacedDateOverrideTest(ModuleStoreTestCase): ...@@ -42,9 +42,9 @@ class SelfPacedDateOverrideTest(ModuleStoreTestCase):
inject_field_overrides((course, section), course, UserFactory.create()) inject_field_overrides((course, section), course, UserFactory.create())
return (course, section) return (course, section)
def test_instructor_led(self): def test_instructor_paced(self):
__, il_section = self.setup_course("Instructor Led Course", False) __, ip_section = self.setup_course("Instructor Paced Course", False)
self.assertEqual(self.due_date, il_section.due) self.assertEqual(self.due_date, ip_section.due)
def test_self_paced(self): def test_self_paced(self):
__, sp_section = self.setup_course("Self-Paced Course", True) __, sp_section = self.setup_course("Self-Paced Course", True)
......
...@@ -822,7 +822,7 @@ class ProgressPageTests(ModuleStoreTestCase): ...@@ -822,7 +822,7 @@ class ProgressPageTests(ModuleStoreTestCase):
) )
@ddt.unpack @ddt.unpack
def test_query_counts(self, (sql_calls, mongo_calls, self_paced), self_paced_enabled): def test_query_counts(self, (sql_calls, mongo_calls, self_paced), self_paced_enabled):
"""Test that query counts remain the same for self-paced and instructor-led courses.""" """Test that query counts remain the same for self-paced and instructor-paced courses."""
SelfPacedConfiguration(enabled=self_paced_enabled).save() SelfPacedConfiguration(enabled=self_paced_enabled).save()
self.setup_course(self_paced=self_paced) self.setup_course(self_paced=self_paced)
with self.assertNumQueries(sql_calls), check_mongo_calls(mongo_calls): with self.assertNumQueries(sql_calls), check_mongo_calls(mongo_calls):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment