...
There are a number of changes that are were needed to support the ability for a new feature to be implemented purely within its own Django app:
- Stevedore extension points should be provided for each of the common UX changes that need to be made
- See: How to add a new plugin entry point to edX platform
- Note: see the Audit below for a comprehensive list
- The first such extension point has been implemented:
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-2242 - https://github.com/edx/edx-platform/pull/8015
- This allows any Django app to provide new tabs for a course
- See Adding a new course tab for details
- Some important first extension points are as follows:
- "Feature flag"
- Note: this will be a ConfigurationModel derivative (which includes a built-in
enabled
column) - We recommend this over using a Django settings feature flag
- It would be useful to allow all associated extensions to obey the feature flag automatically
- Note: this will be a ConfigurationModel derivative (which includes a built-in
- URLs for new UI and REST APIs
- Instructor Dashboard components/tabs
XBlocks should be extended to provide more capabilitiesCourse-scoped fields for configuration settings - "Feature flag"
- The Web Fragments library provides support for building view fragments in Django
- The edX platform has now started to use web fragments to support building course tabs
- OEP-12: Pluggable User Interfaces goes into more details
- XBlocks should be extended to provide more capabilities
- Course-scoped fields for configuration settings
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-1804
- Ability to add an xblock as a course tab
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-2319
- Studio editing tabs for xblocks
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-850 Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-851
- Admin views for both Studio and LMS
- Need built-in support for RequireJS or AMD compliant dependency management
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key PLAT-481
- Course-scoped fields for configuration settings
- The Django asset pipeline needs to be improvedHave the improved
Status colour Green title DONE - Have the pipeline pick up assets from all installed Django apps (to support CDNs, minification etc)
- A spike was done to prove the approach: PR 7610: Django extension spike
- The work was completed as part of the Teams epic:
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-2242
- RequireJS Optimizer support should be added to the LMS
- An order must be established for visual aspects such as tabs. Today the order is implicit in the hard-coded list.
- If in doubt, sort the items alphabetically by name
- How can page-level plug-ins render the correct page
- For example, how does a new tab render the correct header and footer for the page that it renders?
- The simplest solution is to document the boilerplate that each plug-in type is required to include
- Miki suggests that maybe we should use inheritance to our benefit here, where the superclass renders the boilerplate
- Eventually we might want to use a mechanism more like XBlock so that a plug-in only owns a block and not the entire page
- Of course, supporting XBlocks themselves should also be supported
- A possible challenge with this is that it is subverting the Django framework
- It needs to be decided how mobile can benefit from these plug-ins
- If they provide new UI as URLs then they won't just drop in to mobile
- XBlocks will just appear, but only by using a web view to render the HTML
- React, a JavaScript library from Facebook, might help with native rendering of HTML
Jira Legacy server JIRA (openedx.atlassian.net) serverId 13fd1930-5608-3aac-a5dd-21b934d3a4b4 key TNL-1322 - See also RequireJS in the LMS
TNL-1322 - See also RequireJS in the LMS
- Have the pipeline pick up assets from all installed Django apps (to support CDNs, minification etc)
Status | ||||
---|---|---|---|---|
|
There are further complications if we want to move the Django app out to its own repo:
- How do we write integration tests?How do assets get into the Django pipeline?
- How can SASS build upon the base SASS from edx-platform?
...