Skip to content

Conversation

Ingramz
Copy link
Contributor

@Ingramz Ingramz commented Oct 2, 2025

Issues

N/A

Description

This pull request removes jQuery from the browser extension content script in favor of native document.querySelectorAll.

Demo

N/A

How Has This Been Tested?

Working from a Windows environment, I was unable to build the browser extension successfully.

Manually tested the Firefox extension built by the CI in this pull request and the selectors appear to be all selecting just fine.

Checklist

  • I have performed a self-review of my own code
  • I have added tests to cover my changes

@Ingramz Ingramz marked this pull request as draft October 2, 2025 16:46
@Ingramz
Copy link
Contributor Author

Ingramz commented Oct 2, 2025

Drafting this for now, realized :visible is being used which is jq only selector.

@Ingramz Ingramz changed the title fix(chrome-ext): drop jquery dependency refactor(chrome-ext): drop jquery dependency Oct 2, 2025
@Ingramz Ingramz marked this pull request as ready for review October 2, 2025 17:31
@Ingramz
Copy link
Contributor Author

Ingramz commented Oct 2, 2025

I believe the changes should be now ready to review. Currently writing this message with the Firefox extension enabled and it is working just fine. I also verified with a debugger that the query selectors trigger appropriately.

if (this.getAttribute('data-enable-grammarly') == 'false' || this.disabled || this.readOnly) {
document.querySelectorAll<HTMLTextAreaElement>('textarea').forEach((element) => {
if (
!isVisible(element) ||
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might still be incorrect.

<textarea> that is below the fold on a static page will be skipped over if it will not appear in the viewport within the first second.

A more compatible replacement could be https://youmightnotneedjquery.com/#is_visible

@elijah-potter
Copy link
Collaborator

For the most part, this looks good to me. The visibility check might be technically different, but I think it's close enough that it won't cause a problem.

For posterity, could you fully explain your reasoning for removing JQuery?

@Ingramz
Copy link
Contributor Author

Ingramz commented Oct 4, 2025

For the most part, this looks good to me. The visibility check might be technically different, but I think it's close enough that it won't cause a problem.

Easy way to see it for yourself is if you have a plain html file with enough <br> before <textarea> that it gets rendered outside your viewport on page load. On websites with more interactivity this gets masked as MutationObserver will most likely fire due to textarea having some focus listener to change its appearance or the page having a scroll listener, which causes the scan to trigger again.

The replacement I linked turns out to be lifted from actual jQuery source, so one should not be discouraged from using it if the current isVisible check turns out to be problematic in practical use. Having two different isVisible checks in a single file however may get confusing, but that's a different problem.

For posterity, could you fully explain your reasoning for removing JQuery?

To me it feels just the wrong tool for the job in this particular instance. It's a pretty big library (~30% of shipped JS) for doing 4 selectors that gets loaded on every page load. The problem isn't that it is necessarily jQuery, it's just that it's massively underutilized. Using it more however does not make it a better tool as modern web has alternatives in vanilla JS to most of the common jQuery patterns.

My main concern is how this ties to how it's used in the extension. As it is part of content script, then my understanding is that every time a new tab is opened or a page is loaded, this will incur loading another instance of jQuery into memory. As it is right now, this overhead can be easily avoided, leading to a better browsing experience - either pages loading/becoming responsive faster, making battery last longer or being able to keep open more tabs at a time. I do admit, the gains from this may turn out to be insignificant, but they are gains nonetheless.

Copy link
Collaborator

@elijah-potter elijah-potter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I absolutely agree with all of your points. I think this PR is in a good enough state to be merged. I'll monitor for any issues before running a release.

@elijah-potter
Copy link
Collaborator

Thanks for helping out!

@elijah-potter elijah-potter added this pull request to the merge queue Oct 6, 2025
Merged via the queue into Automattic:master with commit b4b46ff Oct 6, 2025
23 of 24 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 10, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [Automattic/harper/harper-ls](https://github.com/Automattic/harper) | minor | `v0.65.0` -> `v0.67.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>Automattic/harper (Automattic/harper/harper-ls)</summary>

### [`v0.67.0`](https://github.com/Automattic/harper/releases/tag/v0.67.0)

[Compare Source](Automattic/harper@v0.66.0...v0.67.0)

#### What's Changed

- feat(core): Add support for Python docstrings by [@&#8203;rushter](https://github.com/rushter) in [#&#8203;2038](Automattic/harper#2038)
- feat(web): revise landing page by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2046](Automattic/harper#2046)
- fix(web): remove faq link by [@&#8203;mcecode](https://github.com/mcecode) in [#&#8203;2047](Automattic/harper#2047)
- fix(obsidian): properly manage dictionary by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2050](Automattic/harper#2050)
- fix(web): will now work on Hacker News by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2053](Automattic/harper#2053)
- docs: remove or update remaining faq page links by [@&#8203;mcecode](https://github.com/mcecode) in [#&#8203;2061](Automattic/harper#2061)
- build(deps): bump ordered-float from 5.0.0 to 5.1.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2059](Automattic/harper#2059)
- refactor(chrome-ext): drop jquery dependency by [@&#8203;Ingramz](https://github.com/Ingramz) in [#&#8203;2052](Automattic/harper#2052)
- fix(wasm): remove overlaps in the proper order by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2062](Automattic/harper#2062)
- fix(chrome-plugin): errors saving rule state in Firefox by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2064](Automattic/harper#2064)
- fix(chrome-ext): disable on comboboxes by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2063](Automattic/harper#2063)
- More irregular verbs for 'have went' linter by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;1973](Automattic/harper#1973)

#### New Contributors

- [@&#8203;rushter](https://github.com/rushter) made their first contribution in [#&#8203;2038](Automattic/harper#2038)
- [@&#8203;Ingramz](https://github.com/Ingramz) made their first contribution in [#&#8203;2052](Automattic/harper#2052)

**Full Changelog**: <Automattic/harper@v0.66.0...v0.67.0>

### [`v0.66.0`](https://github.com/Automattic/harper/releases/tag/v0.66.0)

[Compare Source](Automattic/harper@v0.65.0...v0.66.0)

#### What's Changed

- fix: format of checkboxes was broken in feature request template by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;1992](Automattic/harper#1992)
- fix: org-mode add list item parsing with tab normalization by [@&#8203;eloycoto](https://github.com/eloycoto) in [#&#8203;1989](Automattic/harper#1989)
- feat(chrome-ext): use new CSS Highlights API where possible by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;1970](Automattic/harper#1970)
- feat: add ink support by [@&#8203;FreddieGilbraith](https://github.com/FreddieGilbraith) in [#&#8203;1894](Automattic/harper#1894)
- feat:besides the point→beside the point, don't can→can't by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;2021](Automattic/harper#2021)
- Add more phrasal verb exceptions by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;2002](Automattic/harper#2002)
- feat(core): create initial `MissingTo` rule by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;1990](Automattic/harper#1990)
- fix(core): address problems with prepositional phrases by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2022](Automattic/harper#2022)
- build(deps): bump tree-sitter from 0.25.9 to 0.25.10 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2029](Automattic/harper#2029)
- Criteria phenomena by [@&#8203;TomasoAlbinoni](https://github.com/TomasoAlbinoni) in [#&#8203;2028](Automattic/harper#2028)
- build(deps): bump serde from 1.0.226 to 1.0.228 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2032](Automattic/harper#2032)
- build(deps): bump thiserror from 2.0.16 to 2.0.17 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2030](Automattic/harper#2030)
- chore: missing words, annotations by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;1999](Automattic/harper#1999)
- feat(core): create tagged linting function by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;1998](Automattic/harper#1998)
- build(deps): bump indexmap from 2.11.1 to 2.11.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2031](Automattic/harper#2031)
- fix: nominal wants issue [#&#8203;2010](Automattic/harper#2010) by [@&#8203;hippietrail](https://github.com/hippietrail) in [#&#8203;2034](Automattic/harper#2034)
- fix(ci): reduce redundancy in CI by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2037](Automattic/harper#2037)
- feat(core): use a better quote-pairing algorithm by [@&#8203;elijah-potter](https://github.com/elijah-potter) in [#&#8203;2036](Automattic/harper#2036)

#### New Contributors

- [@&#8203;FreddieGilbraith](https://github.com/FreddieGilbraith) made their first contribution in [#&#8203;1894](Automattic/harper#1894)
- [@&#8203;TomasoAlbinoni](https://github.com/TomasoAlbinoni) made their first contribution in [#&#8203;2028](Automattic/harper#2028)

**Full Changelog**: <Automattic/harper@v0.65.0...v0.66.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzIuNSIsInVwZGF0ZWRJblZlciI6IjQxLjEzNS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants