Standardize custom pseudo object #2073

Closed
gibson042 opened this Issue Feb 7, 2015 · 4 comments

Projects

None yet

2 participants

@gibson042
Member

cc @timmywil @scottgonzalez

The Sizzle pseudos object is exposed on jQuery.expr as three distinct properties:

  • jQuery.expr.pseudos
  • jQuery.expr.filters
  • jQuery.expr[":"]

Sizzle defines the first two, and jQuery defines the third.

None of them appear in the current jQuery documentation, though Sizzle documents the object as pseudos (and separately documents the related setFilters), and I'm sure we have published instructions on how to define a custom pseudo at least once, which would necessarily reference one of them. We also have internal uses in at least two libraries:

  • core
    • defines jQuery.expr[":"] from jQuery.expr.pseudos
    • defines :hidden, :visible, and :animated by extending jQuery.expr.filters
    • calls jQuery.expr.filters.hidden in the :visible pseudo
  • UI
    • defines :data, :focusable, :tabbable, and widget pseudos by extending $.expr[ ":" ]
    • replaces the :animated filter at $.expr.filters.animated
    • calls $.expr.filters.visible and $.expr.filters.hidden

So now that this issue affects three source repositories and jquery/api.jquery.com, here's the crux of it: can we standardize on one internally and deprecate the others? All things considered, my vote would be on filters.

@timmywil
Member
timmywil commented Feb 8, 2015

I actually would like to keep them all. [":"] is probably the most prevalent in user code and needs to stay regardless. filters has been there a long time, but it wasn't used as much. And pseudos is NWMatchers' name for filters, so it's a more intuitive name to some.

Regardless, I'd like to continue recommending the use of the .createPseudo() method for creating custom selectors, making the choice of one property somewhat moot – except for setFilter. jQuery UI already uses it where available.

@gibson042
Member

I actually would like to keep them all.

In the sense of not moving to deprecated, or of not standardizing?

[":"] is probably the most prevalent in user code and needs to stay regardless.

But still exceedingly rare from (among other things) its lack of documentation, and with a fix that couldn't be simpler. At any rate, though, I propose deprecation not because I think we can remove them anytime soon, but to promote consistency.

filters has been there a long time, but it wasn't used as much.

That would depend on your measurement criteria... it's probably the most used by execution count from jQuery UI alone. And to the extent that any such special-case functionality can be used "much", I bet updating api.jquery.com would address the educational gap.

And pseudos is NWMatchers' name for filters, so it's a more intuitive name to some.

Then it appears NWMatcher has moved on, at least from an API perspective (which is what I'm addressing). However, even if it hadn't, maintaining surface area in jQuery core to support transitioning from an independent selector engine seems... overaccommodating.

Regardless, I'd like to continue recommending the use of the .createPseudo() method for creating custom selectors, making the choice of one property somewhat moot – except for setFilter.

Not at all; the result of createPseudo still has to be assigned to an object property. e.g.: data: $.expr.createPseudo…

@timmywil
Member
timmywil commented Feb 8, 2015

That would depend on your measurement criteria... it's probably the most used by execution count from jQuery UI alone. And to the extent that any such special-case functionality can be used "much", I bet updating api.jquery.com would address the educational gap.

I think we're on different wavelengths here. In terms of defining custom pseudos, you said jQuery UI mostly used [":"] and only used .filters once. Still, I was referring to user code in general and I just remember seeing [":"] much more often. Maybe my memory is off.

Not at all; the result of createPseudo still has to be assigned to an object property. e.g.: data: $.expr.createPseudo…

Totally true. Brain fart. However, the main point there was createPseudo isn't in jQuery's documentation either.

I'm all for documenting custom pseudo creation in jQuery (and I'm fine picking a property and sticking with it), but I still don't see the value behind deprecating the other properties. To me, deprecation voices the intention of removal whether we say it does or not. If we use the same property in all of our documentation, that seems like enough.

@timmywil
Member
timmywil commented Feb 1, 2016

Per meeting, decided on "pseudos".

@timmywil timmywil removed the Needs review label Feb 1, 2016
@timmywil timmywil added this to the 3.0.0 milestone Feb 1, 2016
@timmywil timmywil self-assigned this Feb 1, 2016
@gibson042 gibson042 referenced this issue in jquery/jquery-migrate Feb 8, 2016
Closed

Standardize custom pseudo object #146

@timmywil timmywil pushed a commit to timmywil/jquery that referenced this issue Mar 3, 2016
Timmy Willison Selector: filters -> pseudos
Fixes gh-2073
3150850
@timmywil timmywil pushed a commit that closed this issue Mar 7, 2016
Timmy Willison Selector: filters -> pseudos
Fixes gh-2073
Close gh-2969
0402963
@timmywil timmywil closed this in 0402963 Mar 7, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment