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

Added ADR #3 re: jQuery #2106

Merged
merged 2 commits into from
Aug 18, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions docs/adr/0003-remove-jquery-dependency.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Remove jQuery and jQuery UI dependencies

📆 **Updated**: Aug 17, 2022

🙋🏽‍♀️ **Status** Proposed

## ℹ️ Context

- The current use of jQuery 1.7.1 is a low vulnerability (XSS)
- The version is old and new changes are a bit of a pain (e.g. need to read old API docs)
- The version can be upgraded but that takes effort (same as above, APIs have changed)
- It's currently responsible for 80%+ (LOC) in `site.js`
- We don't support legacy browsers, such as IE, anymore

## 🤔 Decision

Remove jQuery and jQuery UI dependencies. We will be using vanilla JavaScript, rather than immediately switching to another framework, to keep the performance overhead to a minimum.

## 🎬 Consequences

- Remove XSS vulnerability
- Lighter pages
- We can take advantage of everything the web platform had to offer without a layer of a polyfill-style library

## Process

We need to move each jQuery/jQueryUI piece one at a time and once we're done, delete the jQ\* code. A list of features we currently use (possibly incomplete):

- dialogs
- tabs
- dragging and resizing
- viewport offsets
- sizing elements
- getting OS scrollbar width
- displaying local time
- tooltips
- scroll handling and animation
- editting test labels via async requests (`$.ajax`)
- sortable tables (Request Details) which is implementation #3 in addition to a new DIY one and one from Google JS APIs

As prep work, move all jQ* dependencies out of `site.js` so it's easier to tell application callsites vs internal dependencies. Some of the jQ* code is not minified so it's not immediately obvious if this is application code.

Copy link
Contributor

Choose a reason for hiding this comment

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

Is the full list of dependencies just dialogs and tabs right now?

Copy link
Contributor

Choose a reason for hiding this comment

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

I think there's some stuff in www/site.js
I saw a $.ajax

Copy link
Contributor

Choose a reason for hiding this comment

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

Here's a list of what I see in there:

  • drag and resizing (not sure where this is used)
  • viewport offsets
  • getting OS scrollbar width
  • displaying local time
  • tooltips
  • scroll handling
  • editting test labels

## 📝 Changelog

- 07/07/2022 Proposed
- 08/17/2022 Comments addressed