* Remove unused ignoreSelectors
* Remove unused isMouseButtonPressed
* Update getWritingMode to use the immediate element if possible
* Move static functions to DocumentUtil
* Fix documentation
* Use getAttribute instead of dataset, in case SVG node APIs are unusual
* Use pointer-events instead of fill
* Use elementFromPoint instead of elementsFromPoint
* Move TextSourceRange static functions to DocumentUtil
getWritingMode is also simplified
* Update Google Docs range to be empty to match other range sources
* Rename imposterContainer to imposterElement
* Add static creation functions
* Add static creation function
* Remove unused collapse function
* Don't select imposter elements
* Refactor setEndOffset
* Adjust argument order for setEndOffset
* Update TextSourceRange constructor
* Remove unused isConnected
* Cache rects
* Fix test
* Remove unused getRect
* Revert "Fix test"
* Remove cachedRect
* Use the source element rect to handle scroll differences
* Writing mode update
* Remove _cachedRects update
This shouldn't be necessary as the imposter is usually detached
almost immediately after scanning, giving no time for the window
to be resized or scrolled.
* Make all methods static
The two non-static methods are kept for temporary compatibility
* Use this instead of class name now that functions are static
* Update test
* Don't instantiate DocumentUtil
* Remove temporary non-static methods
* Remove unused global declaration
* Update settings controller to consistently initialize
* Allow profile index to be reset if an error occurs
* Update message handler to be async
* Fix error when deleting the current profile
* Add support for an idle timeout when downloading audio
* Update eslint rules
* Pass idleTimeout to the downloader from DisplayAnki
* Add anki.downloadTimeout setting
* Update tests
* Assign _audioDownloadIdleTimeout using settings
* Show info about cancelled downloads
* Handle Firefox bug
* Improve audio errors
* Refactor
* Move functions to RequestBuilder
* Do not change selection if user selected text manually
* Remove capture argument for selectionchange listener
It is not applicable
* Make a note of user selection when Yomichan is enabled
User might have some text selected on a page prior to enabling Yomichan
via the toolbar icon; let it stay intact.
* Extract selection change by user listener into a method