Update store.addFirstPartyLinks
Reordered scripts in manifest.json to avoid race conditions
Add event queue in capture to process requests in order
Make reading/writing to storage async
Remove local clone of storage 'this._websites'
Still using a `this._websites` local copy. Literally just swapped out localStorage for IndexedDB. I had originally tried getting rid of `this._websites`, but this made almost every method async, and there were numerous update errors in `store.addFirstPartyLink`.
A clone of the existing Lightbeam UI, made with CSS Grid and Flexbox. Still need to fix multi-svg buttons in graph controls area.
Simplified button classes and class naming more generally (no more BEM).
Removed all uses of absolute positioning in favor of CSS Grid and Flexbox.
Added @todos for future PRs.
Removed anti-pattern classes 'col-X' and 'row-x'.
Used ::before pseudoelement for placing icons before text labels on buttons and links.
Added global variables using CSS custom properties and the :root selector.
Makes data capture agnostic of storage object/method.
Changed 'captureData.js' to 'capture.js'.
Modified structure of 'capture.js' to an object with methods, rather than a wrapper function.
First party requests now only fire on tab update, rather than every request and filter out non-visible and about:* tabs.
Note: The filter() method is used with tabs.query() instead of a match pattern or regular expression to check if Lightbeam is already open. This is because Mozilla match patterns do not support any URLs with schemes other than: "http", "https", "file", "ftp", "app". This webext has a scheme of "moz-extension". It also doesn't support regular expressions in place of match patterns.