Skip to content
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

Convert builtin block Sass variables into CSS variables #35306

Closed
Tracked by #34827
farhan opened this issue Aug 13, 2024 · 10 comments · Fixed by #35385 or #35480
Closed
Tracked by #34827

Convert builtin block Sass variables into CSS variables #35306

farhan opened this issue Aug 13, 2024 · 10 comments · Fixed by #35385 or #35480
Assignees

Comments

@farhan
Copy link
Contributor

farhan commented Aug 13, 2024

In this story we have to convert builtin block Sass variables into CSS variables.

For each builtin block modify its Sass to use the CSS variable instead of the Sass variable.

Tip: Start with one block and merge the PR. That way, if it breaks on edX.org or in Tutor, we know sooner than later

Relevan ticket: #35173

Tasks

No tasks being tracked yet.
@farhan
Copy link
Contributor Author

farhan commented Sep 13, 2024

The implementation PR of this ticket has been reverted because of the issue identified by 2U team.
Issue was notified on the slack channel in thread

Here is the revert PR with details of issue experienced.

@farhan
Copy link
Contributor Author

farhan commented Sep 13, 2024

Debugging status:
I have tutor based Open edX setup on my machine with Indigo theme. It's working fine on it and reflecting well on the browser (Chrome).

Here are the screenshots:
Screenshot 2024-09-13 at 5 11 40 PM
Screenshot 2024-09-13 at 5 10 51 PM

It might be the theme issue or compilation issue.
I need more details and help to trouble shoot it, which theme are we using it on 2U site and how are we compiling it.
Sandbox of edx.org will be great.

@kdmccormick
cc: @nsprenkle

@kdmccormick
Copy link
Member

@farhan Did you see this comment? Can you check the compiled CSS to see if that issue is present or not? Also, are you using tutor-dev or tutor-local?

I wonder if this has to do with a difference between Paver and its replacement npm run build. As far as I know 2U has not migrated off of Paver yet (#34467)

@farhan
Copy link
Contributor Author

farhan commented Sep 13, 2024

@kdmccormick Yes, I’ve seen it, but the issue is not present on my setup. I’m using tutor-dev. Here’s the relevant portion of the compiled CSS, above screen shots are based on this CSS:

      /* line 273, /openedx/edx-platform/xmodule/assets/video/_display.scss */
      .xmodule_display.xmodule_VideoBlock .video .video-wrapper .closed-captions.is-visible {
        max-height: calc((var(--baseline) * 3));
        border-radius: calc((var(--baseline) / 5));
        padding: 8px calc((var(--baseline) / 2)) 8px calc((var(--baseline) * 1.5));
        background: rgba(0, 0, 0, 0.75);
        color: var(--yellow); }
        /* line 280, /openedx/edx-platform/xmodule/assets/video/_display.scss */
        .xmodule_display.xmodule_VideoBlock .video .video-wrapper .closed-captions.is-visible::before {
          position: absolute;
          display: inline-block;
          top: 50%;
          left: var(--baseline);
          margin-top: -0.6em;
          font-family: 'FontAwesome';
          content: "\f142";
          color: var(--white);
          opacity: 0.5; 
}

I wonder if this has to do with a difference between Paver and its replacement npm run build. As far as I know 2U has not migrated off of Paver yet (#34467)

This might be contributing to the issue.

@kdmccormick
Copy link
Member

I wonder if this has to do with a difference between Paver and its replacement npm run build. As far as I know 2U has not migrated off of Paver yet

On second thought, disregard this. The remaining Paver asset commands are just a thin wrapper around the npm commands. It shouldn't make a difference.

@kdmccormick
Copy link
Member

@nsprenkle @farhan I was able to reproduce this. It only happens we pass output_style=SASS_STYLE_COMPRESSED to the Sass compiler, which we only do for production builds. It seems that the Sass compressor shipped with our 2015 version of libsass-python turns white into #fff. This isn't suprising, given that the conversion saves one character, and CSS variables weren't commonly supported until at least 2017...

One can see the bug in action using tutor-indigo:

cd path/to/your/edx-platform
git switch farhan/xblock-sass-to-css
tutor mounts add .
tutor plugins enable indigo
tutor images build openedx
tutor local run lms cat /openedx/staticfiles/indigo/css/VideoBlockDisplay.css | grep -- '--#fff'

I think there is an easy workaround, though. In _builtin-block-variables.scss, we just need to rename the --white variable, as well as any other CSS named color which the Sass compressor might mangle. We could just do something simple like --white-1: $white, --gray-1: $grey, etc. As long as we leave the underlying Sass variable name the same, this shouldn't be an issue for backwards compatibility.

@farhan farhan linked a pull request Sep 16, 2024 that will close this issue
@farhan farhan linked a pull request Sep 16, 2024 that will close this issue
@farhan
Copy link
Contributor Author

farhan commented Sep 16, 2024

@kdmccormick You have spotted the right reason

I have reproduced it on my setup changing following lines and then run npm run compile-sass:

        # output_style: int = SASS_STYLE_NESTED if use_dev_settings else SASS_STYLE_COMPRESSED
        output_style: int = SASS_STYLE_COMPRESSED

I think there is an easy workaround, though. In _builtin-block-variables.scss, we just need to rename the --white variable, as well as any other CSS named color which the Sass compressor might mangle. We could just do something simple like --white-1: $white, --gray-1: $grey, etc. As long as we leave the underlying Sass variable name the same, this shouldn't be an issue for backwards compatibility.

Solution is doable but perhaps not the easiest one.

@kdmccormick @nsprenkle Please skim through this PR

What about do all the following steps in one PR per Block.

  1. Convert Sass variable into css variables
  2. Compile css and copy the relevant block css into xmodule/assets directory
  3. Use css rather than sass as implemented here in this above shared PR
  4. Remove the sass files of the block from xmodule/assets directory

@kdmccormick
Copy link
Member

@farhan oh, good idea, let's do that! Kindly start with VideoBlock so that we can be sure that the fix works as expected.

That PR is a great start. When you make the VideoBlock PR, can you rebuild the CSS without line-number comments, since we won't need those comments once the Sass is gone? In compile_sass.py, you can just temporarily hard-code in the SOURCE_COMMENTS_NONE option.

@farhan
Copy link
Contributor Author

farhan commented Sep 23, 2024

Further communication of this story will continue on following story, as we are implementing it per block. Block PR's will be attached as PR's in the tasks list.
#35300

@farhan
Copy link
Contributor Author

farhan commented Oct 1, 2024

Going to close this story as further progress/implementation could be followed on
#35300

@farhan farhan closed this as completed Oct 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ✅ Done
2 participants