Filter by Language:
Designation for course language(s) in Studio
allows for filtering of courses based on their language in the sidebar
Reuses active filter view UI/IA from find courses page on edx.org
view for clearing individual or all filters, as with edx.org filtering
Use native checkboxes for courseware license options
In Studio settings editor for video module, don't show license if feature-flagged off
Don't let Scope.contents fields leak to Studio editor
JS gettext() must all be on the same line for i18n
Add docstrings for bok-choy tests
Remove LicenseMixin from HTMLDescriptor
Responding to UX review feedback
Add aria-pressed attribute
Use https links instead of protocol-relative links for links to creativecommons.org
Remove license from course outline page in Studio
This allows course authors to choose between two difference licenses for their
course content: All Rights Reserved, or Creative Commons. In the backend, XBlocks
that wish to allow custom licenses need only inherit from LicenseMixin, which
adds a `license` field as a string.
License information is displayed in the Studio editor view, and just below the
rendered XBlock in the LMS. In addition, if the course block itself has a custom
license set, this license will display just below the main body of the page
on courseware pages.
This entire feature is gated behind the LICENSING feature flag.
This commit adds validation for course advanced settings. Currently when course
administrators make invalid changes in the Settings/Advanced Settings tab,
they're not notified through a new modal window of the list of invalid settings
changes.
* Extending CourseMetadata
- Previously, we only had update_from_json method in CourseMetadata.py,
and it was only validating one field every POST request.
- Now we have validate_and_update_from_json method that encapsulates the
functionality of update_from_json into a validation call
- To avoid discrepancy of validation standards between modules, validation
uses the from_json method implemented to each field in xblock.
* Different Response in advanced settings ajax requests
- After receiving a POST ajax request, course.py calls
validate_and_update_from_json, and sends a json object of either:
1) valid course metadata model
2) error objects
* Error Messages shown in validation-error-modal
- error objects passed through ajax are shown in a separate modal.
Authors can upload an image (or choose an existing one) from the
settings page, using the in-context uploader from PDF
textbooks. Includes tests for backwards compatibility with XML courses
-- they used a magic filename (images/course_image.jpg) which is
mapped to a location in the Mongo contentstore.
Still needs some UX work, though the backend plumbing is there.
The changeTime event isn't fired when the user types in the field, but
only when clicking on the time in the dropdown. I'd consider this a
timepicker bug, but for now we can just listen to the user typing in
the field and update the value (and thus validate) like we do with
other field types.
Rather than asynchronously saving when a setting is updated, we now
prompt the user to confirm their changes and only persist the data if
they hit the save button. Lettuce tests are updated to expect this
behavior and some new ones are added.
Previously the "saved" view was never hidden, even after more data was
edited. So if one field was saved successfully and then another was
not, we would find ourselves in the unfortunate situation of seeing
both views at once, leading to much confusion.