-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove special XModule asset handling #31624
Comments
FYI @Agrendalath , in case it helps with your discovery, I've updated this issue with what I've learned about xmodule_assets so far. |
@andrey-canon could you leave a comment here so that GitHub will allow me to assign this issue to you? |
no problem |
From #32018:
I agree, although I think moving to react will be a longer-term challenge. In the shorter term, I am hoping that we could do the XModule SCSS compilation without involving any Python code. On my branch, I have written a Bash script that compiles the LMS & CMS SCSS without invoking Python. Do you think we could do something similar for XModule SCSS? |
@kdmccormick with this implemetation I think if you add the xmodule paths ( "common/static/xmodule/modules/scss" and "common/static/xmodule/descriptors/scss") to yours includes that will be enough |
Yes, I think that will let us compile the XModule SCSS into CSS without Python 👍🏻 However, we will still need |
This moves scss imports to a specific file where that is required instead of having a common XModule import list. This is part of openedx#31624
This moves XModule scss imports to the specific files where they are required instead of having a common XModule scss import list. This is part of #31624
This basically changes how the xmodule static files are generated and consumed in order to separate the Xblock styles from general style files. Addressing the issue openedx#31624
The `xmodule_assets` command copies SCSS files from xmodule/css to common/static/xmodule/{modules|descriptors}/scss. It renames the files to the format: _{INDEX}-{HASH}.scss where an XModule's first SCSS resource will have INDEX==0, the next will have INDEX==1, ...and that's it because no XModule has more than two SCSS resources. The output looks like this: common/static/xmodule/descriptors/scss: _000-808fcbb4c5109c5156ae3c0c9729c8be.scss _000-9bdcda00f046f78be79aca7791e1d4fb.scss _000-d41921b4c5d45188759ef3d04fd9a78a.scss _001-901b985e5ea2dea2a89cce747cf4307d.scss _001-a10fc3e0fd6aca63426a89e75fe69c31.scss common/static/xmodule/modules/scss: _000-1ad2f05db822d3176affd203d70319c0.scss _000-1dc4276d3849a14ea538286e97740c14.scss _000-29baf1ef1af89b1051362f51124abd01.scss _000-6bf8c2340b013d835b25df13e03b8d33.scss _000-8b6bb50b058d34efefa40107307a32c6.scss _000-958d6ef6baa09be94bccaf488861c8e5.scss _000-a3c2cdf2141d24a76be9afa56f237c29.scss _000-b80300e1a5f290f6a850e35874068427.scss _001-482ebc752ab6e41946651ceb0f3e7f55.scss These indexes serve no purpose. Reading the comments and git-blame in xmodule/static_content.py, one can glean that the indexes might have been intended to enforce dependency relationships between the assets, but this is unnecessary, because the ordering of the copied SCSS is *already preserved* by the order which they're included into the `{BLOCK_NAME}{Studio|Preivew}.{HASH}.scss` SCSS entrypoint files. I have to assume that this is an unnecessary relic from the time when the XModule system was more heavily utilized, rather than just a legacy corner of the XBlock framework as it is today. So, we remove the indexes, which lets us simplify the logic of xmodule/static_content.py. This is a minor refactoring, but it'll make it easier for the next steps on our way to deleting xmodule/static_content.py entirely. The new output looks like this: common/static/xmodule/descriptors/scss: _808fcbb4c5109c5156ae3c0c9729c8be.scss _901b985e5ea2dea2a89cce747cf4307d.scss _9bdcda00f046f78be79aca7791e1d4fb.scss _a10fc3e0fd6aca63426a89e75fe69c31.scss _d41921b4c5d45188759ef3d04fd9a78a.scss common/static/xmodule/modules/scss: _1ad2f05db822d3176affd203d70319c0.scss _1dc4276d3849a14ea538286e97740c14.scss _29baf1ef1af89b1051362f51124abd01.scss _482ebc752ab6e41946651ceb0f3e7f55.scss _6bf8c2340b013d835b25df13e03b8d33.scss _8b6bb50b058d34efefa40107307a32c6.scss _958d6ef6baa09be94bccaf488861c8e5.scss _a3c2cdf2141d24a76be9afa56f237c29.scss _b80300e1a5f290f6a850e35874068427.scss Part of: openedx#31624
This is done! Follow-up work: #32692 |
Tasks and PRs
Background
This issue helps towards several different initiatives:
edx-platform serves pure [1] XBlocks assets by implementing the standard Django Storage and Finder classes, which tells Django to looks for static assets within the resources_dir of all installed XBlock packages. Importantly, this finder filters out all py, pyc, and scss files. That is because none of those files should be served directly to the browser.
Some pure XBlocks, such as ORA2, use SCSS. That is fine, but it means ORA2 must compile that SCSS in CSS as part of the package publishing process. That way, when ORA2 is installed into edx-platform, the generated CSS is ready to be served without any further processing.
XModule-style [1] XBlocks, on the other hand, are treated differently. Several of these blocks have SCSS, but the SCSS is not compiled into CSS files in the XBlock resource_dirs. Instead, the SCSS is copied to common/lib/xmodule, using the xmodule_assets script defined here and declared here. Once copied, the SCSS is included into other LMS and CMS SCSS files; thus, the styles for these XBlocks are co-mingled with the styles for LMS and CMS.
We would like to get rid of the xmodule_assets script for a couple of reasons:
For additional background on xmodule_assets, see the openedx-assets xmodule section of OpenCraft's discovery doc.
[1] By "XModule-style XBlocks", I mean: a set of older XBlock types declared in the ./xmodule/ directory of edx-platform, which rely on the xmodule_assets copying mechanims. The list is here. All other XBlocks types are considered "pure XBlocks".
Alternative
If we need an intermediate solution and/or if we think this issue is harder than it is worth, then we can instead do:
Follow-up work
After the critical work in this epic is complete, further cleanup work could be done in:
The text was updated successfully, but these errors were encountered: