-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Fix some css issues with :hover and rewrite max-device-width #1431
Fix some css issues with :hover and rewrite max-device-width #1431
Conversation
…e hover pseudoclasses
…ng populated if there were no hover selectors on the stylesheet - not committing the test, but modifying the existing 'add a hover class to a previously processed css string' as follows shows the problem: --- a/packages/rrweb-snapshot/test/rebuild.test.ts +++ b/packages/rrweb-snapshot/test/rebuild.test.ts @@ -151,6 +185,7 @@ describe('rebuild', function () { path.resolve(__dirname, './css/benchmark.css'), 'utf8', ); + cssText = cssText.replace(/:hover/g, ''); const start = process.hrtime(); addHoverClass(cssText, cache);
… looks out at the browser viewport whereas we need it to look at the replayer iframe viewport
…or lists. I believe these were failing in a previous version of rrweb as I had some local patches that no longer seem to be needed to handle these cases
…n just :hover. I believe this function is only exported for the purposes of use in the tests
🦋 Changeset detectedLatest commit: 681342f The changes in this PR will be included in the next version bump. This PR includes changesets to release 8 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch @eoghanmurray! Found a little typing improvement for you, but apart from that this is looking ready for release!
ul li.multiline | ||
b:hover | ||
img, | ||
ul li.specified c:hover img { | ||
color: white | ||
}`; | ||
expect(adaptCssForReplay(cssText, cache)).toEqual( | ||
`ul li.specified a:hover img, ul li.specified a.\\:hover img, | ||
ul li.multiline | ||
b:hover | ||
img, ul li.multiline | ||
b.\\:hover | ||
img, | ||
ul li.specified c:hover img, ul li.specified c.\\:hover img { | ||
color: white | ||
}`, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you can add whitespace here to make the tests a little less messy, unless I'm missing something it should be fine.
ul li.multiline | |
b:hover | |
img, | |
ul li.specified c:hover img { | |
color: white | |
}`; | |
expect(adaptCssForReplay(cssText, cache)).toEqual( | |
`ul li.specified a:hover img, ul li.specified a.\\:hover img, | |
ul li.multiline | |
b:hover | |
img, ul li.multiline | |
b.\\:hover | |
img, | |
ul li.specified c:hover img, ul li.specified c.\\:hover img { | |
color: white | |
}`, | |
ul li.multiline | |
b:hover | |
img, | |
ul li.specified c:hover img { | |
color: white | |
}`; | |
expect(adaptCssForReplay(cssText, cache)).toEqual( | |
`ul li.specified a:hover img, ul li.specified a.\\:hover img, | |
ul li.multiline | |
b:hover | |
img, ul li.multiline | |
b.\\:hover | |
img, | |
ul li.specified c:hover img, ul li.specified c.\\:hover img { | |
color: white | |
}`, |
…o#1431) * We weren't recursing into media queries (or @supports etc.) to rewrite hover pseudoclasses * The early return meant that the stylesWithHoverClass cache wasn't being populated if there were no hover selectors on the stylesheet - not committing the test, but modifying the existing 'add a hover class to a previously processed css string' as follows shows the problem: --- a/packages/rrweb-snapshot/test/rebuild.test.ts +++ b/packages/rrweb-snapshot/test/rebuild.test.ts @@ -151,6 +185,7 @@ describe('rebuild', function () { path.resolve(__dirname, './css/benchmark.css'), 'utf8', ); + cssText = cssText.replace(/:hover/g, ''); const start = process.hrtime(); addHoverClass(cssText, cache); * Replace `min-device-width` and similar with `min-width` as the former looks out at the browser viewport whereas we need it to look at the replayer iframe viewport * Add some tests to show how the hover replacement works against selector lists. I believe these were failing in a previous version of rrweb as I had some local patches that no longer seem to be needed to handle these cases * Update name of function to reflect that 'addHoverClass' does more than just :hover. I believe this function is only exported for the purposes of use in the tests * Apply formatting changes * Create rotten-spies-enjoy.md * Apply formatting changes * Add correct typing on `getSelectors` * Refactor CSS interfaces to include optional rules * Change `rules` to be non optional --------- Co-authored-by: eoghanmurray <eoghanmurray@users.noreply.github.com> Co-authored-by: Justin Halsall <Juice10@users.noreply.github.com>
…rweb-io#1431)" This reverts commit a7c33f2.
…rweb-io#1431)" This reverts commit a7c33f2.
…rweb-io#1431)" This reverts commit a7c33f2.
:hover
pseudoclassesmin-device-width
and similar withmin-width
as the former looks out at the browser viewport whereas we need it to look at the replayer iframe viewport