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

:has() selector discussion #5797

Closed
3 tasks
fregante opened this issue Jul 7, 2022 · 23 comments
Closed
3 tasks

:has() selector discussion #5797

fregante opened this issue Jul 7, 2022 · 23 comments
Assignees
Labels
enhancement help wanted meta Related to Refined GitHub itself

Comments

@fregante
Copy link
Member

fregante commented Jul 7, 2022

Feel free to leave a comment (or more) if you think of any features that can be rewritten or enhanced using the has selector.

Live examples:

But also, maybe:

  • hiding tabs that have a zero (the number is often in an attribute as well, so it can be targeted)
  • hiding events from the newsfeed
  • showing our “update branch” button if the native button doesn’t exist, dynamically, without events! We append the link and just use body:has(native button) .our-button {hide} 🤯

I swear this selector is a game changer for extensions. The only thing it can’t do is alert us of such events (maybe 😏 via empty animationend on these elements + JS listener)

@fregante fregante added enhancement meta Related to Refined GitHub itself under discussion labels Jul 7, 2022
@fregante

This comment was marked as outdated.

@fregante
Copy link
Member Author

It is August 30th.

All new features and "restored features" can use :has()

Firefox will follow at some point. Tracking issues:

@jerone
Copy link
Contributor

jerone commented Sep 6, 2022

Please wait until Firefox has full support for has.
There are already 3 features that use has in CSS.
One of which I wanted to propose, only to found out it already exists, but just doesn't work on Firefox.

@fregante
Copy link
Member Author

fregante commented Sep 6, 2022

We're not going to retroactively break features, so it's ok. As mentioned, new features and bugfixes can already use the new selector. Firefox will get them whenever it becomes ready.

The features you mentioned simply would not exist without :has(), in fact one of them was years old and I implemented it as soon as the selector was available in Safari, in 15 minutes of my time. We're not going to write JS code for new features that are 3 lines of CSS, only for it to be obsolete in 3 months. I hope that makes sense.

@fregante
Copy link
Member Author

fregante commented Sep 8, 2022

Possible new selector usage:

@FloEdelmann
Copy link
Member

@jerone By the way, you can opt-in to Firefox's preliminary implementation by enabling the layout.css.has-selector.enabled rule in about:config (see https://caniuse.com/css-has), which seems to work fine for these three RGH features.

@jtagcat
Copy link
Contributor

jtagcat commented Dec 4, 2022

Note: layout.css.has-selector.enabled also requires a restart.

unhide-reactions-on-mobile (#6182) now also uses :has.

@pradyunsg
Copy link

Hmm... Firefox doesn't seem to have moved any closer on this in the last 6 months; based on the activity on the tracking issue and hide-own-stars' fix is not compatible with Firefox's experiemental implementation.

Is there a suggested workaround for Firefox users, since currently, we're getting a degraded experience (even after enabling the experimental flag)?

@fregante
Copy link
Member Author

Unfortunately not. GitHub has also been making changes to their DOM making it increasingly difficult to target elements reliably, which means I have no choice but use has()

@fregante
Copy link
Member Author

Screenshot 2

Which probably means 12 more months of no "has"

@jtagcat

This comment was marked as resolved.

@nitzcard

This comment was marked as duplicate.

@fregante
Copy link
Member Author

fregante commented Sep 20, 2023

Upstream bug closed! Coming to Firefox 119 on October 2024 24th

We can start fixing all the TODOs (but they won't be merged until that date)

@jerone

This comment was marked as resolved.

@FloEdelmann

This comment was marked as resolved.

@fregante
Copy link
Member Author

fregante commented Nov 1, 2023

New issue to track:

Apparently on hold until at least Firefox v121, December 19th. It's strange because it already passes the web interop tests 10x faster than Chrome, even.

Anyway presumably this already works well if you enable the layout.css.has-selector.enabled, so if you're here you can already enjoy the latest features. 🚀

See you in 2024 guys

@marvinhagemeister

This comment was marked as off-topic.

@fregante

This comment was marked as resolved.

@marvinhagemeister

This comment was marked as off-topic.

@fregante

This comment was marked as resolved.

@ChaseKnowlden
Copy link

ChaseKnowlden commented Dec 18, 2023

Firefox 121 is released! @fregante

https://archive.mozilla.org/pub/firefox/releases/121.0/

@fregante
Copy link
Member Author

We'll likely still wait a few weeks before releasing a release that breaks Firefox <120.

On January 17 2023 @fregante wrote:

Which probably means 12 more months of no "has"

It turned out just about right 😃

@fregante
Copy link
Member Author

fregante commented Jun 5, 2024

Can be closed. I cleaned up past polyfills and some TODOs. Due to performance issues, :has() cannot be used on large elements. This is quite unfortunate because of the benefits that moving logic to the CSS for extensions and userstyles would bring.

@fregante fregante closed this as completed Jun 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement help wanted meta Related to Refined GitHub itself
Development

Successfully merging a pull request may close this issue.

8 participants