diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index 9ab5f1164d..60defed4ec 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -130,6 +130,7 @@ class CourseDetailsViewTest(CourseTestCase, MilestonesTestCaseMixin): self.alter_field(url, details, 'enrollment_end', datetime.datetime(2012, 11, 15, 1, 30, tzinfo=UTC)) self.alter_field(url, details, 'short_description', "Short Description") + self.alter_field(url, details, 'about_sidebar_html', "About Sidebar HTML") self.alter_field(url, details, 'overview', "Overview") self.alter_field(url, details, 'intro_video', "intro_video") self.alter_field(url, details, 'effort', "effort") @@ -148,6 +149,9 @@ class CourseDetailsViewTest(CourseTestCase, MilestonesTestCaseMixin): self.assertEqual( details['short_description'], encoded['short_description'], context + " short_description not ==" ) + self.assertEqual( + details['about_sidebar_html'], encoded['about_sidebar_html'], context + " about_sidebar_html not ==" + ) self.assertEqual(details['overview'], encoded['overview'], context + " overviews not ==") self.assertEqual(details['intro_video'], encoded.get('intro_video', None), context + " intro_video not ==") self.assertEqual(details['effort'], encoded['effort'], context + " efforts not ==") @@ -270,6 +274,7 @@ class CourseDetailsViewTest(CourseTestCase, MilestonesTestCaseMixin): self.assertContains(response, "Introducing Your Course") self.assertContains(response, "Course Card Image") self.assertContains(response, "Course Short Description") + self.assertNotContains(response, "Course About Sidebar HTML") self.assertNotContains(response, "Course Title") self.assertNotContains(response, "Course Subtitle") self.assertNotContains(response, "Course Duration") @@ -425,6 +430,7 @@ class CourseDetailsViewTest(CourseTestCase, MilestonesTestCaseMixin): self.assertContains(response, "Course Duration") self.assertContains(response, "Course Description") self.assertContains(response, "Course Short Description") + self.assertNotContains(response, "Course About Sidebar HTML") self.assertContains(response, "Course Overview") self.assertContains(response, "Course Introduction Video") self.assertContains(response, "Requirements") diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index 354efd8fb9..d88375b65a 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -25,6 +25,8 @@ from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.locator import BlockUsageLocator from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.waffle_utils import WaffleSwitchNamespace +from openedx.features.course_experience.waffle import waffle as course_experience_waffle +from openedx.features.course_experience.waffle import ENABLE_COURSE_ABOUT_SIDEBAR_HTML from six import text_type from contentstore.course_group_config import ( @@ -1050,6 +1052,7 @@ def settings_handler(request, course_key_string): 'EDITABLE_SHORT_DESCRIPTION', settings.FEATURES.get('EDITABLE_SHORT_DESCRIPTION', True) ) + sidebar_html_enabled = course_experience_waffle().is_enabled(ENABLE_COURSE_ABOUT_SIDEBAR_HTML) # self_paced_enabled = SelfPacedConfiguration.current().enabled settings_context = { @@ -1062,6 +1065,7 @@ def settings_handler(request, course_key_string): 'details_url': reverse_course_url('settings_handler', course_key), 'about_page_editable': about_page_editable, 'short_description_editable': short_description_editable, + 'sidebar_html_enabled': sidebar_html_enabled, 'upload_asset_url': upload_asset_url, 'course_handler_url': reverse_course_url('course_handler', course_key), 'language_options': settings.ALL_LANGUAGES, diff --git a/cms/static/js/views/settings/main.js b/cms/static/js/views/settings/main.js index 966e3a035c..358d6cbb08 100644 --- a/cms/static/js/views/settings/main.js +++ b/cms/static/js/views/settings/main.js @@ -16,6 +16,7 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui' 'change select': 'updateModel', 'click .remove-course-introduction-video': 'removeVideo', 'focus #course-overview': 'codeMirrorize', + 'focus #course-about-sidebar-html': 'codeMirrorize', 'mouseover .timezone': 'updateTime', // would love to move to a general superclass, but event hashes don't inherit in backbone :-( 'focus :input': 'inputFocus', @@ -97,6 +98,10 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui' this.$el.find('#' + this.fieldToSelectorMap.description).val(this.model.get('description')); this.$el.find('#' + this.fieldToSelectorMap.short_description).val(this.model.get('short_description')); + this.$el.find('#' + this.fieldToSelectorMap.about_sidebar_html).val( + this.model.get('about_sidebar_html') + ); + this.codeMirrorize(null, $('#course-about-sidebar-html')[0]); this.$el.find('.current-course-introduction-video iframe').attr('src', this.model.videosourceSample()); this.$el.find('#' + this.fieldToSelectorMap.intro_video).val(this.model.get('intro_video') || ''); @@ -163,6 +168,7 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui' subtitle: 'course-subtitle', duration: 'course-duration', description: 'course-description', + about_sidebar_html: 'course-about-sidebar-html', short_description: 'course-short-description', intro_video: 'course-introduction-video', effort: 'course-effort', @@ -363,7 +369,7 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui' } }); cmTextArea = this.codeMirrors[thisTarget.id].getInputField(); - cmTextArea.setAttribute('id', 'course-overview-cm-textarea'); + cmTextArea.setAttribute('id', thisTarget.id + '-cm-textarea'); } }, diff --git a/cms/static/sass/views/_settings.scss b/cms/static/sass/views/_settings.scss index 3a93ac2146..759e68c47a 100644 --- a/cms/static/sass/views/_settings.scss +++ b/cms/static/sass/views/_settings.scss @@ -507,8 +507,10 @@ } // specific fields - overview - #field-course-overview { - #course-overview { + #field-course-overview, + #field-course-about-sidebar-html { + #course-overview, + #course-about-sidebar-html { height: ($baseline*20); } diff --git a/cms/templates/settings.html b/cms/templates/settings.html index 57db1ceb5a..4d8445b52a 100644 --- a/cms/templates/settings.html +++ b/cms/templates/settings.html @@ -366,6 +366,18 @@ CMS.URL.UPLOAD_ASSET = '${upload_asset_url | n, js_escaped_string}' a_link_end=HTML("") )} + % if sidebar_html_enabled: +