Libraries Support for Units
The MVP for the Content Libraries Overhaul enables course authors to create and manage course components (text, video and problems) independently of the course outline, and to reuse components in as many courses as they wish, with the ability to sync updates centrally.
The next phase expands Library support to units, subsections and sections.
This expansion will enable Libraries to support the full range of use cases identified in initial product discovery phases. Most importantly, it will enable course authors to create units, subsections and sections - in other words, full learning sequences - independently of the course outline, and reuse these learning sequences freely.
Quick Read - What’s in Teak?
Library support for units:
Units can be created in Libraries
Units are searchable and discoverable in Libraries
Units can be reused in courses
Units in courses can be synced with Library updates
Library support for subsections and sections
Subsections and sections can be viewed as read-only content in Libraries
Subsections and sections are searchable and discoverable in Libraries (feasible?)
Library support for import
Full courses can be imported into Libraries and content can be disaggregated at the unit, subsection or section level
Content can be imported into Libraries from external sources, starting with Common Cartridge conversion support
Content from third party sources can be synced so updates carry through into the Libraries (feasible?)
Functional Requirements
Similar to the Libraries MVP, this phase of work includes user stories that bridge workflows in both Libraries and in courses, more specifically the Course Outline page.
Functional requirements: Library Side
Units function as independent, bounded entities in Libraries
Libraries support units (defined as a pre-determined sequence of components) as independent, bounded entities. In other words, the sequence of components – the unit – is treated as a singular object.
Units are considered a “content type” in the filter
Units exhibit many of the same behavior patterns in Libraries as do Components:
Creating and Editing Units
Units can be created from scratch in the +New workflow. When a new Unit is created, components can be added, rearranged or removed to the Unit.
Units can be edited, meaning components within them can be added, rearranged or removed
There are 3 pathways for adding components to a unit from within the unit editor
New components can be created
Existing components can be added
Components copied in the clipboard
Components must have some visual reference to the unit where it’s being edited, and all the units where it’s being referenced.
Expected behavior of Components in relation to Units
We assume valuable reusable potential for all components in a Library, whether they exist as standalone entities or as part of units. Thus, all components in a Library can/could exist as both a standalone component and / or as part of a unit or many units.
When a component is created within the context of a unit, it does not automatically populate in the Library as a standalone component, but authors are prompted at the time of creation or edit whether they want the component to be added to the Component Tab.
If a Component is added to the Component tab, it remains synced to the unit(s) where it is referenced
Components can be copied from a unit and pasted into the Library as a standalone component, or into a collection.
If a Component is pasted elsewhere in the Library, it remains synced to the unit(s) where it is referenced
When a Component is reused as an existing component in a Unit, it maintains its reference to the original component.
When authors edit a component that is referenced in a unit, they are prompted to choose whether they are editing within that usage or as a new block.
If they choose as a new block, the reference is broken.
If they choose to edit within that usage, all changes are synced across all references and standalone instances of that component within the library.
Presentation of Units in the Library UI
Each unit in a Library has a tile representation with a title and description
Units populate among the components and collections on the library home
Units turn up in search results and can be sorted and filtered
There is a Unit Tab, which is a filter on unit as a content type
Each unit has a sidebar, with
Previews that display which components are contained within the unit
Publish status
Tags
Usage details
Version history
Unit behaviors
Units can be published. Once published, units are available for reuse.
Publishing can happen at the Unit level. When a unit is published, all components within it are published. If a component in a unit also exists independently of a unit, it will also be published.
Quick publish concept for reused components: If a component is published, it will auto-publish in any unit where it is referenced, unless there has been an override of that component in a unit, in which case authors will be prompted manually to accept the changes.
When a Unit has been published, it is available for reuse in a library. If some individual components in a unit are published but not all components, the unit is not available for reuse yet.
Units can be tagged
Units can be copied
Units can be pasted
Units can be added to, and removed from, collections
Collections can contain a mix of both components and units
Subsection and Section support
Subsections and sections can be imported into Libraries (see import requirements below)
Subsections and sections are read only, to start. They cannot be edited, nor created from scratch in libraries.
Each subsection/section in a Library has a tile representation with a title and description
Subsections/sections populate among the components and collections on the library home
Subsections/sections turn up in search results and can be sorted and filtered
There is a Subsection tab and a Section tab, which is a filter on each respective as a content type
Functional requirements: Course Side
Units can be reused in Courses
Units can be reused via the Course Outline page in a course
Library search can be accessed from within the course so authors can find which units they want
Library units can be synced/updated from the Course Outline page
Units can be updated in a library and synced at the course level
Users receive notifications about content updates made in a library
Users can review and accept/deny content updates
Accept the updates and override any local edits that may have been made to the unit
Accept the updates while keeping any local edits that may have been made to the unit
Deny the updates
A refresh of the library will update the course, but will not affect unmanaged content (unless its parent is removed).
Units can be edited locally
Course authors can add content, in the course, to library-managed content items. For example, a course author can add an LTI component to a unit that is contained in a subsection that is managed by a library.
Locally, components within a unit can be rearranged into different orders (parity with current experience with units in courses.)
Import requirements
Import from Open edX Course to Open edX Library
Units can be copied from a course and pasted into a library
Full courses can be imported into a Library. Authors can decide at the time of import what level they want to disaggregate the content in the library - unit level or component level.
Subsections and sections will be read-only, to start
On import, content get added as published components, but there is no sync to the original course, the content in the library does not reference the course, it becomes the defacto source of truth version
Import from external source to Open edX Library
Libraries will support ingestion of content from third-party sources, starting with Common Cartridge.
When content is ingested into a Library from a non-native source (not natively authored on an Open edX platform), there may be a need to maintain a reference/connection between the original source and the Library versions, such that if the original source is updated, the Library versions can be synced.
FEASIBILITY QUESTION: What capabilities does Studio have to maintain references/connections between non-natively authored content and the Library versions of that same content?
There is no expectation that Library versions of content authored non-natively and used in a course would maintain a sync between the original source content and the course versions.
UX/UI Needs
Library-side
Libraries must support a creation workflow for creating new units, subsections and sections
Libraries must support an editing workflow/editor environment for units, subsections and sections
In-context sidebars must be expanded such that each unit, subsection and section has a sidebar.
Needs discovery: Are previews necessary? Even possible?
Library Home must contain one tab each for units, subsections and sections, where users see a filtered view by content type
All of the searching, sorts and filters that apply to components must be extended to units, subsections and sections.
Course-side
Course outline page must be redesigned to include the ability for authors to access a library from within a course, search for content, choose a unit, subsection or section, and pull it into a course
Needs discovery: How will authors choose where in the course outline to place the library content? What would it take to make the “reuse content” workflow a persistent option from the course outline page?
Library sync page must be updated to include any content syncs from re-used units, subsections and sections
Content blocks from Libraries must contain fine-grained editing/modification capabilities, so that authors can add content to a re-used section while retaining the sync on the original content
Out of scope
Unit page additions. For now, authors will not be able to add library content to the horizontal course nav bar from the Unit page. Instead, all library content at the unit level and above will be added from the Course Outline page.
Implementation Contingencies
Open Questions
I’m not too familiar with the plans of this feature. If my questions are off-topic or already answered, feel free to remove them.
When the course author is editing a section or a subsection, how/can the UI display the context of the unit being edited? Current implementations replace the entire browser window with the editor, obscuring information about the section and subsection. See this comment for more details.
A common workflow for larger courses is for multiple authors and editors to collaborate in another tool (e.g. Google docs) and then copy and paste the content into the editor. Can this be supported, and streamlined?
Can we establish minimum performance expectations for opening content for editing? These should be based on real-world legacy content.